Generated banner for Webgl 3d Object
Generated logo for Webgl 3d Object

Webgl 3d Object

Meng ToCommunityCreated by Meng To

  • Skill
  • Tool integration
  • Software development
  • MIT
  • Medium risk

From the author

Create a real 3D WebGL object with geometric mesh depth, physically based material, directional and ambient lighting, perspective camera, subtle rotation, and floating motion. Use when a page needs a faceted 3D hero object or product-like visual with real lighting instead of CSS transform tricks.
— the description by Meng To

AutoGineer summary

Written by AutoGineer from the skill’s own files, not by the author

This skill provides a structured approach to integrating 3D WebGL objects into web interfaces using Three.js. It focuses on creating geometric meshes with physically based rendering (PBR) materials, directional lighting, and subtle animation. The implementation includes a robust setup for handling canvas resizing, performance-conscious rendering, and proper memory management through object disposal.

What it does

  • Initializes a Three.js scene with a perspective camera and WebGL renderer.
  • Configures PBR materials using metalness, roughness, and emissive properties.
  • Sets up multi-point lighting including directional and ambient sources.
  • Implements subtle rotation and floating animations for 3D meshes.
  • Handles window resizing and cleanup of geometry, materials, and renderers.
  • Supports reduced motion preferences for accessibility.

When to use it

  • When a web page requires a 3D hero object or product visual.
  • When real geometric depth and lighting are preferred over CSS-based illusions.
  • When you need a faceted or custom mesh that responds to light sources.
  • When building feature blocks that benefit from subtle, continuous motion.

Advantages

  • Provides a clean, modular recipe for Three.js integration.
  • Includes built-in memory management to prevent leaks.
  • Ensures consistent rendering across different device pixel ratios.
  • Offers clear guidelines for material and lighting configurations.

Usage examples

“Create a metallic 3D hero object for my product page.”
The agent provides the Three.js initialization code with MeshStandardMaterial configured for a metallic look, including directional lighting and a shadow plane.
“How do I make my 3D object look like soft ceramic?”
The agent advises adjusting the material properties to low metalness (0.0-0.15) and moderate roughness (0.38-0.62) within the provided Three.js template.

Install

  1. Download the skill as a ZIP:

    https://mp-staging.autogineer.com/agent-skills/mengto/webgl-3d-object/download
  2. Unzip it into the cross-client skills folder of your project:

    mkdir -p .agents/skills && unzip webgl-3d-object.zip -d .agents/skills

Documentation by Meng To

WebGL 3D Object

Use When

  • A hero, feature block, or product moment needs one strong 3D object.

  • The visual should show real geometry, lighting, highlights, and edges.

  • A faceted mesh should float or rotate subtly inside a web layout.

  • CSS transforms, SVG illusions, or flat gradients are not enough.

Rules

  1. Use real 3D geometry: IcosahedronGeometry, DodecahedronGeometry, BoxGeometry, custom BufferGeometry, or a glTF mesh.

  2. Use a perspective camera so the object has depth and scale.

  3. Use PBR material: MeshStandardMaterial or MeshPhysicalMaterial.

  4. Tune metalness, roughness, and emissive to match the brand mood.

  5. Light the object with at least one directional light plus ambient or hemisphere fill.

  6. Animate transforms only: subtle rotation, bobbing, or parallax.

  7. Handle resize and dispose geometry/material/renderer on teardown.

HTML And CSS

<div class="webgl-object-shell">
  <canvas class="webgl-object-canvas" data-webgl-3d-object></canvas>
</div>
.webgl-object-shell {
  position: relative;
  width: min(100%, 720px);
  aspect-ratio: 1 / 1;
}

.webgl-object-canvas {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  display: block;
}

Three.js Object Recipe

import * as THREE from "three";

function initWebGL3DObject(canvas, options = {}) {
  if (!canvas) return () => {};

  const renderer = new THREE.WebGLRenderer({
    canvas,
    antialias: true,
    alpha: true,
  });
  renderer.setClearColor(0x000000, 0);
  renderer.setPixelRatio(Math.min(window.devicePixelRatio || 1, options.maxDpr || 1.75));
  renderer.outputColorSpace = THREE.SRGBColorSpace;
  renderer.toneMapping = THREE.ACESFilmicToneMapping;
  renderer.toneMappingExposure = options.exposure || 1.05;
  renderer.shadowMap.enabled = true;
  renderer.shadowMap.type = THREE.PCFSoftShadowMap;

  const scene = new THREE.Scene();
  const camera = new THREE.PerspectiveCamera(38, 1, 0.1, 100);
  camera.position.set(0, 0.15, 5.2);

  const geometry = new THREE.IcosahedronGeometry(options.radius || 1.35, options.detail || 1);
  const material = new THREE.MeshStandardMaterial({
    color: options.color || 0x8aa4ff,
    metalness: options.metalness ?? 0.48,
    roughness: options.roughness ?? 0.34,
    emissive: options.emissive || 0x101833,
    emissiveIntensity: options.emissiveIntensity ?? 0.22,
    flatShading: true,
  });

  const object = new THREE.Mesh(geometry, material);
  object.castShadow = true;
  object.receiveShadow = true;
  scene.add(object);

  const ambient = new THREE.AmbientLight(0xffffff, 0.38);
  scene.add(ambient);

  const key = new THREE.DirectionalLight(0xffffff, 2.15);
  key.position.set(3.4, 4.2, 4.8);
  key.castShadow = true;
  key.shadow.mapSize.set(1024, 1024);
  scene.add(key);

  const rim = new THREE.DirectionalLight(options.rimColor || 0x7dd3fc, 0.82);
  rim.position.set(-4.2, 1.2, -2.8);
  scene.add(rim);

  const shadowPlane = new THREE.Mesh(
    new THREE.PlaneGeometry(5.2, 5.2),
    new THREE.ShadowMaterial({ opacity: 0.18 })
  );
  shadowPlane.position.set(0, -1.65, 0);
  shadowPlane.rotation.x = -Math.PI / 2;
  shadowPlane.receiveShadow = true;
  scene.add(shadowPlane);

  const reduceMotion = window.matchMedia("(prefers-reduced-motion: reduce)").matches;
  let rafId = 0;

  function resize() {
    const width = Math.max(1, canvas.clientWidth);
    const height = Math.max(1, canvas.clientHeight);
    renderer.setPixelRatio(Math.min(window.devicePixelRatio || 1, options.maxDpr || 1.75));
    renderer.setSize(width, height, false);
    camera.aspect = width / height;
    camera.updateProjectionMatrix();
  }

  function render(time = 0) {
    const t = time * 0.001;
    object.rotation.x = -0.16 + Math.sin(t * 0.45) * 0.06;
    object.rotation.y = t * 0.28;
    object.rotation.z = Math.sin(t * 0.32) * 0.08;
    object.position.y = reduceMotion ? 0 : Math.sin(t * 0.8) * 0.08;

    renderer.render(scene, camera);
    if (!reduceMotion) rafId = requestAnimationFrame(render);
  }

  function handleResize() {
    cancelAnimationFrame(rafId);
    resize();
    render();
  }

  resize();
  render();
  window.addEventListener("resize", handleResize);

  return () => {
    cancelAnimationFrame(rafId);
    window.removeEventListener("resize", handleResize);
    geometry.dispose();
    material.dispose();
    shadowPlane.geometry.dispose();
    shadowPlane.material.dispose();
    renderer.dispose();
  };
}

const cleanupObject = initWebGL3DObject(
  document.querySelector("[data-webgl-3d-object]"),
  {
    color: 0x8aa4ff,
    rimColor: 0x7dd3fc,
    metalness: 0.48,
    roughness: 0.34,
    emissive: 0x101833,
  }
);

Material Defaults

  • Premium metal: metalness: 0.45-0.7, roughness: 0.25-0.45.

  • Soft ceramic: metalness: 0.0-0.15, roughness: 0.38-0.62.

  • Glow-tinted tech object: low emissive with emissiveIntensity: 0.12-0.35.

  • Faceted object: set flatShading: true; smooth product object: set it to false.

Lighting Defaults

  • Key light: directional, high front-side angle, strongest source.

  • Ambient fill: low intensity so shadows stay visible.

  • Rim light: brand-tinted or cool light from behind to reveal edges.

  • Shadows: enable only when the object needs grounded depth; keep map size moderate.

Motion Defaults

  • Rotation: slow, continuous, and secondary to the page content.

  • Floating: 0.04 to 0.12 units on Y.

  • Reduced motion: render a still frame or only allow direct interaction.

  • Avoid camera movement unless the object is the main interaction.

Avoid

  • CSS 3D transforms pretending to be WebGL.

  • Unlit materials when the ask is real lighting and depth.

  • Flat planes with gradients instead of actual geometry.

  • Strong bloom or particles that hide the form.

  • High DPR, huge shadow maps, or too many lights on mobile.

  • Letting the object compete with foreground copy or CTAs.

Quick Checks

  • The object has visible form, edges, highlights, and shadows.

  • The material uses metalness, roughness, and optional emissive.

  • Directional and ambient lights are both present.

  • The camera is perspective, not orthographic by accident.

  • Resize does not stretch the object.

  • Geometry, material, event listeners, RAF, and renderer are cleaned up.

Files

demo/index.html

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <meta name="neuform-sandboxed-demo" content="1">
  <meta http-equiv="Content-Security-Policy" content="default-src 'none'; connect-src 'self'; frame-src 'self'; script-src 'unsafe-inline'; style-src 'unsafe-inline'; base-uri 'none'; form-action 'none'; object-src 'none'">
  <title>Sandboxed Neuform demo</title>
  <style>
    html, body, iframe { width: 100%; height: 100%; margin: 0; border: 0; }
    body { overflow: hidden; background: #0b0b0b; }
    iframe { display: block; background: white; }
    .error { box-sizing: border-box; min-height: 100%; padding: 32px; color: #fff; font: 16px/1.5 system-ui, sans-serif; }
  </style>
</head>
<body>
  <iframe id="neuform-demo" title="Sandboxed Neuform design demo" sandbox="allow-scripts" referrerpolicy="no-referrer"></iframe>
  <script>
    const encodedHtml = "PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImVzIiBjbGFzcz0ic2Nyb2xsLXNtb290aCI+CjxoZWFkPgo8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVNlY3VyaXR5LVBvbGljeSIgY29udGVudD0iZGVmYXVsdC1zcmMgJ25vbmUnOyBiYXNlLXVyaSAnbm9uZSc7IGNvbm5lY3Qtc3JjICdub25lJzsgZm9udC1zcmMgZGF0YTogaHR0cHM6Ly9mb250cy5nc3RhdGljLmNvbTsgZm9ybS1hY3Rpb24gJ25vbmUnOyBmcmFtZS1zcmMgJ25vbmUnOyBpbWctc3JjIGJsb2I6OyBtZWRpYS1zcmMgYmxvYjo7IG5hdmlnYXRlLXRvICdub25lJzsgb2JqZWN0LXNyYyAnbm9uZSc7IHNjcmlwdC1zcmMgJ3Vuc2FmZS1pbmxpbmUnIF9fTkVVRk9STV9SVU5USU1FX1NPVVJDRVNfXzsgc3R5bGUtc3JjICd1bnNhZmUtaW5saW5lJyBodHRwczovL2FwaS5mb250c2hhcmUuY29tIGh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb207IHdvcmtlci1zcmMgJ25vbmUnIj4KPHNjcmlwdCBkYXRhLW5ldWZvcm0tYXNzZXQtYm9vdHN0cmFwPgooKCkgPT4gewogIGxldCByZWNlaXZlZCA9IGZhbHNlOwogIGNvbnN0IG9iamVjdFVybHMgPSBbXTsKICBjb25zdCByZXBsYWNlQWxsID0gKHZhbHVlLCByZXBsYWNlbWVudHMpID0+IHsKICAgIGxldCBuZXh0ID0gU3RyaW5nKHZhbHVlIHx8ICIiKTsKICAgIGZvciAoY29uc3QgW2ZpbGUsIG9iamVjdFVybF0gb2YgcmVwbGFjZW1lbnRzKSBuZXh0ID0gbmV4dC5zcGxpdChmaWxlKS5qb2luKG9iamVjdFVybCk7CiAgICByZXR1cm4gbmV4dDsKICB9OwogIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIiwgKGV2ZW50KSA9PiB7CiAgICBpZiAocmVjZWl2ZWQgfHwgZXZlbnQuc291cmNlICE9PSBwYXJlbnQgfHwgZXZlbnQuZGF0YT8udHlwZSAhPT0gIm5ldWZvcm0tYXNzZXRzLXYxIikgcmV0dXJuOwogICAgcmVjZWl2ZWQgPSB0cnVlOwogICAgY29uc3QgcmVwbGFjZW1lbnRzID0gW107CiAgICBmb3IgKGNvbnN0IGFzc2V0IG9mIGV2ZW50LmRhdGEuYXNzZXRzIHx8IFtdKSB7CiAgICAgIGlmICghYXNzZXQgfHwgdHlwZW9mIGFzc2V0LmZpbGUgIT09ICJzdHJpbmciIHx8IHR5cGVvZiBhc3NldC5iYXNlNjQgIT09ICJzdHJpbmciKSBjb250aW51ZTsKICAgICAgY29uc3QgYmluYXJ5ID0gYXRvYihhc3NldC5iYXNlNjQpOwogICAgICBjb25zdCBieXRlcyA9IFVpbnQ4QXJyYXkuZnJvbShiaW5hcnksIChjaGFyYWN0ZXIpID0+IGNoYXJhY3Rlci5jaGFyQ29kZUF0KDApKTsKICAgICAgY29uc3Qgb2JqZWN0VXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbYnl0ZXNdLCB7IHR5cGU6IGFzc2V0LmNvbnRlbnRUeXBlIHx8ICJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iIH0pKTsKICAgICAgb2JqZWN0VXJscy5wdXNoKG9iamVjdFVybCk7CiAgICAgIHJlcGxhY2VtZW50cy5wdXNoKFthc3NldC5maWxlLCBvYmplY3RVcmxdKTsKICAgIH0KICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIqIikpIHsKICAgICAgZm9yIChjb25zdCBuYW1lIG9mIFsic3JjIiwgInBvc3RlciIsICJzcmNzZXQiLCAic3R5bGUiXSkgewogICAgICAgIGNvbnN0IHZhbHVlID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUobmFtZSk7CiAgICAgICAgaWYgKHZhbHVlKSBlbGVtZW50LnNldEF0dHJpYnV0ZShuYW1lLCByZXBsYWNlQWxsKHZhbHVlLCByZXBsYWNlbWVudHMpKTsKICAgICAgfQogICAgfQogICAgZm9yIChjb25zdCBzdHlsZSBvZiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCJzdHlsZSIpKSB7CiAgICAgIHN0eWxlLnRleHRDb250ZW50ID0gcmVwbGFjZUFsbChzdHlsZS50ZXh0Q29udGVudCwgcmVwbGFjZW1lbnRzKTsKICAgIH0KICB9KTsKICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicGFnZWhpZGUiLCAoKSA9PiB7CiAgICBmb3IgKGNvbnN0IG9iamVjdFVybCBvZiBvYmplY3RVcmxzKSBVUkwucmV2b2tlT2JqZWN0VVJMKG9iamVjdFVybCk7CiAgfSwgeyBvbmNlOiB0cnVlIH0pOwp9KSgpOwo8L3NjcmlwdD4KCjxtZXRhIGNoYXJzZXQ9IlVURi04Ij4KICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MS4wIj4KICAgIDx0aXRsZT5QdWxzb0FwcHMgfCBUdSBhcHAgbGlzdGEgZW4gNSBkw61hcy48L3RpdGxlPgogICAgCiAgICA8IS0tIEZvbnRzIC0tPgogICAgPHN0eWxlPgogICAgICAgIEBpbXBvcnQgdXJsKCdodHRwczovL2FwaS5mb250c2hhcmUuY29tL3YyL2Nzcz9mW109c2F0b3NoaUA3MDAsNTAwLDQwMCwzMDAmZltdPWVyb2RlQDQwMCZkaXNwbGF5PXN3YXAnKTsKICAgIDwvc3R5bGU+CgogICAgPCEtLSBUYWlsd2luZCBDU1MgLS0+CiAgICA8c2NyaXB0IHNyYz0iLi4vLi4vLi4vLi4vYXNzZXRzL3J1bnRpbWUvcnVudGltZS1jY2M4ODk0YjM0MTgtcnVudGltZS5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0PgogICAgICAgIHRhaWx3aW5kLmNvbmZpZyA9IHsKICAgICAgICAgICAgdGhlbWU6IHsKICAgICAgICAgICAgICAgIGV4dGVuZDogewogICAgICAgICAgICAgICAgICAgIGNvbG9yczogewogICAgICAgICAgICAgICAgICAgICAgICBicmFuZDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JhbmdlOiAnI0ZGNDgwMCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBibGFjazogJyMwMDAwMDAnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmd2hpdGU6ICcjRjVGMkVDJwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBmb250RmFtaWx5OiB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNhbnM6IFsnU2F0b3NoaScsICdzYW5zLXNlcmlmJ10sCiAgICAgICAgICAgICAgICAgICAgICAgIHNlcmlmOiBbJ0Vyb2RlJywgJ3NlcmlmJ10sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBib3hTaGFkb3c6IHsKICAgICAgICAgICAgICAgICAgICAgICAgJ2JydXRhbCc6ICc4cHggOHB4IDBweCAwcHggcmdiYSgwLDAsMCwxKScsCiAgICAgICAgICAgICAgICAgICAgICAgICdicnV0YWwtc20nOiAnNHB4IDRweCAwcHggMHB4IHJnYmEoMCwwLDAsMSknLAogICAgICAgICAgICAgICAgICAgICAgICAnYnJ1dGFsLWhvdmVyJzogJzEycHggMTJweCAwcHggMHB4IHJnYmEoMCwwLDAsMSknLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICdzbmFwJzogJ2N1YmljLWJlemllcigwLjE3NSwgMC44ODUsIDAuMzIsIDEuMjc1KScKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICA8L3NjcmlwdD4KCiAgICA8IS0tIFNjcmlwdHMgLS0+CiAgICA8c2NyaXB0IHNyYz0iLi4vLi4vLi4vLi4vYXNzZXRzL3J1bnRpbWUvcnVudGltZS0xNjNlYmQwODdjZmMtaWNvbmlmeS1pY29uLW1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iLi4vLi4vLi4vLi4vYXNzZXRzL3J1bnRpbWUvcnVudGltZS0wMjcwNTFlZmZhNDctZ3NhcC1taW4uanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9Ii4uLy4uLy4uLy4uL2Fzc2V0cy9ydW50aW1lL3J1bnRpbWUtNjg5Y2E4ZGRhNDRjLXNjcm9sbHRyaWdnZXItbWluLmpzIj48L3NjcmlwdD4KCiAgICA8c3R5bGU+CiAgICAgICAgYm9keSB7CiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNGNUYyRUM7CiAgICAgICAgICAgIGNvbG9yOiAjMDAwMDAwOwogICAgICAgICAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICAgICAgICAgIGZvbnQtc2l6ZTogMXJlbTsgLyogQmFzZSBmYWxsYmFjayAqLwogICAgICAgIH0KCiAgICAgICAgLyogVXRpbGl0aWVzICovCiAgICAgICAgLmJvcmRlci1icnV0YWwgeyBib3JkZXI6IDNweCBzb2xpZCAjMDAwOyB9CiAgICAgICAgLmJvcmRlci1icnV0YWwtYiB7IGJvcmRlci1ib3R0b206IDNweCBzb2xpZCAjMDAwOyB9CiAgICAgICAgLmJvcmRlci1icnV0YWwtdCB7IGJvcmRlci10b3A6IDNweCBzb2xpZCAjMDAwOyB9CiAgICAgICAgCiAgICAgICAgLmhvdmVyLXNuYXAgewogICAgICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMTAwbXMgY3ViaWMtYmV6aWVyKDAuMTc1LCAwLjg4NSwgMC4zMiwgMS4yNzUpOwogICAgICAgIH0KICAgICAgICAuaG92ZXItc25hcDpob3ZlciB7CiAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC00cHgsIC00cHgpOwogICAgICAgICAgICBib3gtc2hhZG93OiAxMnB4IDEycHggMHB4IDBweCByZ2JhKDAsMCwwLDEpOwogICAgICAgIH0KCiAgICAgICAgLyogTWFycXVlZSBBbmltYXRpb24gKi8KICAgICAgICAubWFycXVlZS1jb250YWluZXIgewogICAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgICB3aWR0aDogMjAwJTsKICAgICAgICAgICAgYW5pbWF0aW9uOiBtYXJxdWVlIDIwcyBsaW5lYXIgaW5maW5pdGU7CiAgICAgICAgfQogICAgICAgIEBrZXlmcmFtZXMgbWFycXVlZSB7CiAgICAgICAgICAgIDAlIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApOyB9CiAgICAgICAgICAgIDEwMCUgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7IH0KICAgICAgICB9CgogICAgICAgIC8qIFJvdGF0aW5nIEJhZGdlICovCiAgICAgICAgLnJvdGF0ZS1zbG93IHsKICAgICAgICAgICAgYW5pbWF0aW9uOiByb3RhdGUgMTJzIGxpbmVhciBpbmZpbml0ZTsKICAgICAgICB9CiAgICAgICAgQGtleWZyYW1lcyByb3RhdGUgewogICAgICAgICAgICAxMDAlIHsgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTsgfQogICAgICAgIH0KCiAgICAgICAgLyogR1NBUCBNYXNrIFJldmVhbCBTdHlsZXMgKi8KICAgICAgICAucmV2ZWFsLW1hc2sgewogICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7CiAgICAgICAgfQogICAgICAgIC5yZXZlYWwtdGV4dCB7CiAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDExMCUpOwogICAgICAgIH0KCiAgICAgICAgLyogQm9yZGVyIEdyYWRpZW50IFdyYXBwZXIgKi8KICAgICAgICAucHJlbWl1bS1ib3JkZXItd3JhcCB7CiAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgI0ZGNDgwMCwgI2ZmOGMwMCwgIzAwMDAwMCk7CiAgICAgICAgICAgIHBhZGRpbmc6IDNweDsKICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIH0KCiAgICAgICAgLyogQ3VzdG9tIHNjcm9sbGJhciAqLwogICAgICAgIDo6LXdlYmtpdC1zY3JvbGxiYXIgeyB3aWR0aDogMTJweDsgfQogICAgICAgIDo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sgeyBiYWNrZ3JvdW5kOiAjRjVGMkVDOyBib3JkZXItbGVmdDogM3B4IHNvbGlkICMwMDA7IH0KICAgICAgICA6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHsgYmFja2dyb3VuZDogI0ZGNDgwMDsgYm9yZGVyOiAzcHggc29saWQgIzAwMDsgfQoKICAgICAgICAvKiBUeXBvZ3JhcGh5IHNpemluZyBvdmVycmlkZXMgdXNpbmcgY2xhbXAgdG8gYXZvaWQgcHgvZW0gYnV0IG1haW50YWluIG1hc3NpdmUgc2NhbGUgKi8KICAgICAgICAudGV4dC1tYXNzaXZlIHsgZm9udC1zaXplOiBjbGFtcCgzcmVtLCAxMHZ3LCAxMXJlbSk7IGxpbmUtaGVpZ2h0OiAwLjg1OyB9CiAgICAgICAgLnRleHQtaHVnZSB7IGZvbnQtc2l6ZTogY2xhbXAoMi41cmVtLCA4dncsIDhyZW0pOyBsaW5lLWhlaWdodDogMC45OyB9CiAgICA8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5IGNsYXNzPSJmb250LXNhbnMgYW50aWFsaWFzZWQgc2VsZWN0aW9uOmJnLWJyYW5kLWJsYWNrIHNlbGVjdGlvbjp0ZXh0LWJyYW5kLW9yYW5nZSI+CgogICAgPCEtLSBOYXZpZ2F0aW9uIC0tPgogICAgPG5hdiBjbGFzcz0iZml4ZWQgdG9wLTAgdy1mdWxsIHotNTAgYmctYnJhbmQtb3JhbmdlIGJvcmRlci1icnV0YWwtYiBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gcHktNCBweC02IG1kOnB4LTEyIj4KICAgICAgICA8YSBocmVmPSIjIiBjbGFzcz0iZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTMgaG92ZXI6b3BhY2l0eS04MCB0cmFuc2l0aW9uLW9wYWNpdHkiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ3LTEwIGgtMTAgYmctd2hpdGUgYm9yZGVyLVszcHhdIGJvcmRlci1ibGFjayBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciI+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZm9udC1ib2xkIHRleHQteGwgbGVhZGluZy1ub25lIj5QPC9zcGFuPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImZvbnQtYm9sZCB0ZXh0LTJ4bCB0cmFja2luZy10aWdodGVyIHVwcGVyY2FzZSI+UHVsc29BcHBzPC9zcGFuPgogICAgICAgIDwvYT4KICAgICAgICAKICAgICAgICA8ZGl2IGNsYXNzPSJoaWRkZW4gbGc6ZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTggZm9udC1tZWRpdW0gdGV4dC1zbSB1cHBlcmNhc2UgdHJhY2tpbmctd2lkZSI+CiAgICAgICAgICAgIDxhIGhyZWY9IiNzZXJ2aWNpb3MiIGNsYXNzPSJob3Zlcjp1bmRlcmxpbmUgZGVjb3JhdGlvbi0yIHVuZGVybGluZS1vZmZzZXQtNCI+U2VydmljaW9zPC9hPgogICAgICAgICAgICA8YSBocmVmPSIjcHJvY2VzbyIgY2xhc3M9ImhvdmVyOnVuZGVybGluZSBkZWNvcmF0aW9uLTIgdW5kZXJsaW5lLW9mZnNldC00Ij5Qcm9jZXNvPC9hPgogICAgICAgICAgICA8YSBocmVmPSIjdHJhYmFqb3MiIGNsYXNzPSJob3Zlcjp1bmRlcmxpbmUgZGVjb3JhdGlvbi0yIHVuZGVybGluZS1vZmZzZXQtNCI+VHJhYmFqb3M8L2E+CiAgICAgICAgICAgIDxhIGhyZWY9IiNwcmVjaW9zIiBjbGFzcz0iaG92ZXI6dW5kZXJsaW5lIGRlY29yYXRpb24tMiB1bmRlcmxpbmUtb2Zmc2V0LTQiPlByZWNpb3M8L2E+CiAgICAgICAgICAgIDxhIGhyZWY9IiNmYXEiIGNsYXNzPSJob3Zlcjp1bmRlcmxpbmUgZGVjb3JhdGlvbi0yIHVuZGVybGluZS1vZmZzZXQtNCI+RkFRPC9hPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8YSBocmVmPSIjY29udGFjdG8iIGNsYXNzPSJoaWRkZW4gbWQ6ZmxleCBiZy1icmFuZC1ibGFjayB0ZXh0LXdoaXRlIHB4LTYgcHktMyBmb250LXNlbWlib2xkIHRleHQtc20gdXBwZXJjYXNlIGJvcmRlci1icnV0YWwgc2hhZG93LWJydXRhbC1zbSBob3Zlci1zbmFwIGl0ZW1zLWNlbnRlciBnYXAtMiI+CiAgICAgICAgICAgIEFnZW5kYSB0dSBkZW1vIDxpY29uaWZ5LWljb24gaWNvbj0ic29sYXI6YXJyb3ctcmlnaHQtbGluZWFyIiB3aWR0aD0iMjAiPjwvaWNvbmlmeS1pY29uPgogICAgICAgIDwvYT4KICAgICAgICAKICAgICAgICA8YnV0dG9uIGNsYXNzPSJsZzpoaWRkZW4gdGV4dC0zeGwgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIiPgogICAgICAgICAgICA8aWNvbmlmeS1pY29uIGljb249InNvbGFyOmhhbWJ1cmdlci1tZW51LWxpbmVhciI+PC9pY29uaWZ5LWljb24+CiAgICAgICAgPC9idXR0b24+CiAgICA8L25hdj4KCiAgICA8IS0tIEhlcm8gU2VjdGlvbiAtLT4KICAgIDxzZWN0aW9uIGNsYXNzPSJyZWxhdGl2ZSBtaW4taC1zY3JlZW4gYmctYnJhbmQtb3JhbmdlIHB0LTMyIHBiLTIwIHB4LTYgbWQ6cHgtMTIgZmxleCBmbGV4LWNvbCBqdXN0aWZ5LWNlbnRlciBvdmVyZmxvdy1oaWRkZW4iPgogICAgICAgIAogICAgICAgIDwhLS0gQmFja2dyb3VuZCBHZW9tZXRyaWMgRWxlbWVudHMgLS0+CiAgICAgICAgPHN2ZyBjbGFzcz0iYWJzb2x1dGUgcmlnaHQtWy0xMCVdIHRvcC1bMTAlXSB3LVs2MHZ3XSBoLVs4MHZoXSBvcGFjaXR5LTIwIHBvaW50ZXItZXZlbnRzLW5vbmUgei1bMl0iIHZpZXdCb3g9IjAgMCAxMDAgMTAwIiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJub25lIj4KICAgICAgICAgICAgPHBhdGggZD0iTTEwMCAwIEw1MCA1MCBMMTAwIDEwMCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiBzdHJva2Utd2lkdGg9IjE1IiAvPgogICAgICAgICAgICA8cGF0aCBkPSJNODAgMCBMMzAgNTAgTDgwIDEwMCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiBzdHJva2Utd2lkdGg9IjE1IiAvPgogICAgICAgIDwvc3ZnPgoKICAgICAgICA8ZGl2IGNsYXNzPSJtYXgtdy1bMTYwMHB4XSBteC1hdXRvIHctZnVsbCBncmlkIGdyaWQtY29scy0xIGxnOmdyaWQtY29scy0xMiBnYXAtMTIgaXRlbXMtY2VudGVyIHJlbGF0aXZlIHotMTAgcG9pbnRlci1ldmVudHMtbm9uZSI+CiAgICAgICAgICAgIAogICAgICAgICAgICA8IS0tIExlZnQgQ29weSAtLT4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGc6Y29sLXNwYW4tOCBmbGV4IGZsZXgtY29sIGl0ZW1zLXN0YXJ0IHBvaW50ZXItZXZlbnRzLWF1dG8iPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGdhcC0yIGJvcmRlci1icnV0YWwgYmctYnJhbmQtb2Zmd2hpdGUgcHgtNCBweS0xLjUgZm9udC1zZW1pYm9sZCB0ZXh0LXhzIHRyYWNraW5nLXdpZGVzdCB1cHBlcmNhc2Ugc2hhZG93LWJydXRhbC1zbSBtYi04Ij4KICAgICAgICAgICAgICAgICAgICDil4YgRXN0dWRpbyBkZSBkaXNlw7FvCiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgPGgxIGNsYXNzPSJ0ZXh0LW1hc3NpdmUgZm9udC1ib2xkIHRyYWNraW5nLXRpZ2h0ZXIgdXBwZXJjYXNlIG1iLTgiIGlkPSJoZXJvLXRpdGxlIj4KICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0icmV2ZWFsLW1hc2siPjxzcGFuIGNsYXNzPSJyZXZlYWwtdGV4dCI+VFUgQVBQIExJU1RBPC9zcGFuPjwvc3Bhbj48YnI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InJldmVhbC1tYXNrIj48c3BhbiBjbGFzcz0icmV2ZWFsLXRleHQiPkVOIDUgRMONQVMuPC9zcGFuPjwvc3Bhbj48YnI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InJldmVhbC1tYXNrIj48c3BhbiBjbGFzcz0icmV2ZWFsLXRleHQiPlNJTiBFWENVU0FTLjwvc3Bhbj48L3NwYW4+CiAgICAgICAgICAgICAgICA8L2gxPgogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICA8cCBjbGFzcz0idGV4dC1sZyBtZDp0ZXh0LXhsIGZvbnQtbWVkaXVtIG1heC13LWxnIG1iLTEwIGxlYWRpbmctcmVsYXhlZCBib3JkZXItbC00IGJvcmRlci1ibGFjayBwbC00Ij4KICAgICAgICAgICAgICAgICAgICBEaXNlw7FhbW9zIHkgZW50cmVnYW1vcyB0dSBhcGxpY2FjacOzbiBvIHNpdGlvIHdlYiBwYXJhIG5lZ29jaW9zIGVuIHVuYSBzZW1hbmEgaMOhYmlsLiBQcmVjaW8gY2VycmFkby4gRmVjaGEgY2VycmFkYS4gQ2VybyB2dWVsdGFzLgogICAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4IGZsZXgtd3JhcCBnYXAtNiBpdGVtcy1jZW50ZXIgdy1mdWxsIHNtOnctYXV0byI+CiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI3ByZWNpb3MiIGNsYXNzPSJiZy1icmFuZC1ibGFjayB0ZXh0LXdoaXRlIHB4LTggcHktNCBmb250LXNlbWlib2xkIHRleHQtYmFzZSB1cHBlcmNhc2UgYm9yZGVyLWJydXRhbCBzaGFkb3ctYnJ1dGFsIGhvdmVyLXNuYXAgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgdy1mdWxsIHNtOnctYXV0byBqdXN0aWZ5LWNlbnRlciI+CiAgICAgICAgICAgICAgICAgICAgICAgIENvdGl6YSBlbiAyIG1pbnV0b3MgPGljb25pZnktaWNvbiBpY29uPSJzb2xhcjphcnJvdy1yaWdodC1saW5lYXIiIHdpZHRoPSIyNCI+PC9pY29uaWZ5LWljb24+CiAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiN0cmFiYWpvcyIgY2xhc3M9ImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIGZvbnQtYm9sZCB0ZXh0LWJhc2UgdXBwZXJjYXNlIGhvdmVyOnVuZGVybGluZSBkZWNvcmF0aW9uLTIgdW5kZXJsaW5lLW9mZnNldC00Ij4KICAgICAgICAgICAgICAgICAgICAgICAgVmVyIHRyYWJham9zIDxpY29uaWZ5LWljb24gaWNvbj0ic29sYXI6YXJyb3ctcmlnaHQtZG93bi1saW5lYXIiIHdpZHRoPSIyNCI+PC9pY29uaWZ5LWljb24+CiAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPCEtLSBFbXB0eSBjb2x1bW4gdG8gcHJlc2VydmUgb3JpZ2luYWwgOC80IGdyaWQgbGF5b3V0IHN0cnVjdHVyZSAtLT4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iaGlkZGVuIGxnOmJsb2NrIGxnOmNvbC1zcGFuLTQiPjwvZGl2PgogICAgICAgIDwvZGl2PgoKICAgICAgICA8IS0tIFJvdGF0aW5nIFN0YW1wIChNb3ZlZCB0byB0aGUgcmlnaHQgdG8gYXZvaWQgb3ZlcmxhcHBpbmcgdGhlIGxlZnQgY29udGVudCkgLS0+CiAgICAgICAgPGRpdiBjbGFzcz0iYWJzb2x1dGUgYm90dG9tLTEyIHJpZ2h0LTYgbWQ6cmlnaHQtMTIgdy0zMiBoLTMyIG1kOnctNDAgbWQ6aC00MCB6LTIwIGhpZGRlbiBtZDpibG9jayI+CiAgICAgICAgICAgIDxzdmcgdmlld0JveD0iMCAwIDEwMCAxMDAiIGNsYXNzPSJ3LWZ1bGwgaC1mdWxsIHJvdGF0ZS1zbG93IG92ZXJmbG93LXZpc2libGUiPgogICAgICAgICAgICAgICAgPHBhdGggaWQ9ImNpcmNsZVBhdGgiIGQ9Ik0gNTAsIDUwIG0gLTQwLCAwIGEgNDAsNDAgMCAxLDEgODAsMCBhIDQwLDQwIDAgMSwxIC04MCwwIiBmaWxsPSJ0cmFuc3BhcmVudCIgLz4KICAgICAgICAgICAgICAgIDx0ZXh0IGNsYXNzPSJ0ZXh0LVsxMHB4XSBmb250LWJvbGQgdHJhY2tpbmctd2lkZXN0IHVwcGVyY2FzZSBmaWxsLWJyYW5kLWJsYWNrIj4KICAgICAgICAgICAgICAgICAgICA8dGV4dFBhdGggaHJlZj0iI2NpcmNsZVBhdGgiIHN0YXJ0T2Zmc2V0PSIwJSI+CiAgICAgICAgICAgICAgICAgICAgICAgIEVOVFJFR0EgR0FSQU5USVpBREEgwrcgNSBEw41BUyDCtyBFTlRSRUdBIEdBUkFOVElaQURBIMK3IDUgRMONQVMgwrcgCiAgICAgICAgICAgICAgICAgICAgPC90ZXh0UGF0aD4KICAgICAgICAgICAgICAgIDwvdGV4dD4KICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFic29sdXRlIGluc2V0LTAgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIiPgogICAgICAgICAgICAgICAgPGljb25pZnktaWNvbiBpY29uPSJzb2xhcjpzdGFyLWZhbGwtbWluaW1hbGlzdGljLWxpbmVhciIgY2xhc3M9InRleHQtM3hsIj48L2ljb25pZnktaWNvbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICA8L3NlY3Rpb24+CgogICAgPCEtLSBUcnVzdCBCYXIgTWFycXVlZSAtLT4KICAgIDxkaXYgY2xhc3M9ImJnLWJyYW5kLWJsYWNrIHRleHQtd2hpdGUgcHktNCBvdmVyZmxvdy1oaWRkZW4gYm9yZGVyLWJydXRhbC1iIGZsZXggcmVsYXRpdmUgei0yMCI+CiAgICAgICAgPGRpdiBjbGFzcz0ibWFycXVlZS1jb250YWluZXIgdGV4dC1zbSBtZDp0ZXh0LWJhc2UgZm9udC1zZW1pYm9sZCB0cmFja2luZy13aWRlc3QgdXBwZXJjYXNlIHdoaXRlc3BhY2Utbm93cmFwIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleC1zaHJpbmstMCB3LTEvMiBmbGV4IGp1c3RpZnktYXJvdW5kIGl0ZW1zLWNlbnRlciI+CiAgICAgICAgICAgICAgICA8c3Bhbj4rNDAgUHJveWVjdG9zIEVudHJlZ2Fkb3M8L3NwYW4+CiAgICAgICAgICAgICAgICA8c3Bhbj7Ctzwvc3Bhbj4KICAgICAgICAgICAgICAgIDxzcGFuPkVudHJlZ2EgZW4gNSBkw61hczwvc3Bhbj4KICAgICAgICAgICAgICAgIDxzcGFuPsK3PC9zcGFuPgogICAgICAgICAgICAgICAgPHNwYW4+UHJlY2lvIENlcnJhZG88L3NwYW4+CiAgICAgICAgICAgICAgICA8c3Bhbj7Ctzwvc3Bhbj4KICAgICAgICAgICAgICAgIDxzcGFuPlNpbiBMZXRyYSBDaGljYTwvc3Bhbj4KICAgICAgICAgICAgICAgIDxzcGFuPsK3PC9zcGFuPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleC1zaHJpbmstMCB3LTEvMiBmbGV4IGp1c3RpZnktYXJvdW5kIGl0ZW1zLWNlbnRlciI+CiAgICAgICAgICAgICAgICA8c3Bhbj4rNDAgUHJveWVjdG9zIEVudHJlZ2Fkb3M8L3NwYW4+CiAgICAgICAgICAgICAgICA8c3Bhbj7Ctzwvc3Bhbj4KICAgICAgICAgICAgICAgIDxzcGFuPkVudHJlZ2EgZW4gNSBkw61hczwvc3Bhbj4KICAgICAgICAgICAgICAgIDxzcGFuPsK3PC9zcGFuPgogICAgICAgICAgICAgICAgPHNwYW4+UHJlY2lvIENlcnJhZG88L3NwYW4+CiAgICAgICAgICAgICAgICA8c3Bhbj7Ctzwvc3Bhbj4KICAgICAgICAgICAgICAgIDxzcGFuPlNpbiBMZXRyYSBDaGljYTwvc3Bhbj4KICAgICAgICAgICAgICAgIDxzcGFuPsK3PC9zcGFuPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDwhLS0gU2VydmljaW9zIFNlY3Rpb24gLS0+CiAgICA8c2VjdGlvbiBpZD0ic2VydmljaW9zIiBjbGFzcz0icHktMjQgcHgtNiBtZDpweC0xMiBiZy1icmFuZC1vZmZ3aGl0ZSByZWxhdGl2ZSB6LTIwIj4KICAgICAgICA8ZGl2IGNsYXNzPSJtYXgtdy1bMTYwMHB4XSBteC1hdXRvIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCBmbGV4LWNvbCBtZDpmbGV4LXJvdyBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtZW5kIG1iLTE2IGdhcC04Ij4KICAgICAgICAgICAgICAgIDxoMiBjbGFzcz0idGV4dC1odWdlIGZvbnQtYm9sZCB0cmFja2luZy10aWdodGVyIHVwcGVyY2FzZSBzZWN0aW9uLXRpdGxlIj4KICAgICAgICAgICAgICAgICAgICBMbyBxdWUgPGJyPiBoYWNlbW9zLgogICAgICAgICAgICAgICAgPC9oMj4KICAgICAgICAgICAgICAgIDxpY29uaWZ5LWljb24gaWNvbj0ic29sYXI6YXJyb3ctcmlnaHQtZG93bi1saW5lYXIiIGNsYXNzPSJ0ZXh0LTd4bCB0ZXh0LWJyYW5kLW9yYW5nZSI+PC9pY29uaWZ5LWljb24+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPGRpdiBjbGFzcz0iZ3JpZCBncmlkLWNvbHMtMSBtZDpncmlkLWNvbHMtMyBnYXAtOCBtZDpnYXAtMTIgcmVsYXRpdmUiPgogICAgICAgICAgICAgICAgPCEtLSBIb3Jpem9udGFsIGNvbm5lY3RpbmcgbGluZSBmb3IgZGVza3RvcCAtLT4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImhpZGRlbiBtZDpibG9jayBhYnNvbHV0ZSB0b3AtWzQwJV0gbGVmdC0wIHctZnVsbCBoLVszcHhdIGJnLWJsYWNrIHotMCI+PC9kaXY+CgogICAgICAgICAgICAgICAgPCEtLSBDYXJkIDEgLS0+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJiZy13aGl0ZSBib3JkZXItYnJ1dGFsIHAtOCBzaGFkb3ctYnJ1dGFsIGZsZXggZmxleC1jb2wgcmVsYXRpdmUgei0xMCBtZDotdHJhbnNsYXRlLXktOCBncm91cCI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRleHQtNnhsIGZvbnQtYm9sZCB0ZXh0LWJyYW5kLW9yYW5nZSBtYi02IGZvbnQtc2VyaWYgYmxvY2siPjAxPC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz0idGV4dC0yeGwgZm9udC1ib2xkIHVwcGVyY2FzZSB0cmFja2luZy10aWdodCBtYi00IGdyb3VwLWhvdmVyOnRleHQtYnJhbmQtb3JhbmdlIHRyYW5zaXRpb24tY29sb3JzIj5BcGxpY2FjaW9uZXMgZGUgTmVnb2Npb3M8L2gzPgogICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJmb250LW1lZGl1bSB0ZXh0LWJhc2UgbWItOCBmbGV4LWdyb3ciPgogICAgICAgICAgICAgICAgICAgICAgICBEaXNlw7FvIHkgZGVzYXJyb2xsbyBkZSB0dSBhcGxpY2FjacOzbiB3ZWIgb3B0aW1pemFkYSBwYXJhIGF1dG9tYXRpemFyIHkgZXNjYWxhciB0dSBuZWdvY2lvLgogICAgICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9InNwYWNlLXktMiBtYi04IGZvbnQtbWVkaXVtIHRleHQtc20gb3BhY2l0eS04MCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIiPjxpY29uaWZ5LWljb24gaWNvbj0ic29sYXI6Y2hlY2stc3F1YXJlLWxpbmVhciI+PC9pY29uaWZ5LWljb24+IFVJL1VYIEludHVpdGl2bzwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIiPjxpY29uaWZ5LWljb24gaWNvbj0ic29sYXI6Y2hlY2stc3F1YXJlLWxpbmVhciI+PC9pY29uaWZ5LWljb24+IEJhc2UgZGUgZGF0b3M8L2xpPgogICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIj48aWNvbmlmeS1pY29uIGljb249InNvbGFyOmNoZWNrLXNxdWFyZS1saW5lYXIiPjwvaWNvbmlmeS1pY29uPiBQYW5lbCBkZSBBZG1pbmlzdHJhY2nDs248L2xpPgogICAgICAgICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2NvbnRhY3RvIiBjbGFzcz0iaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGdhcC0yIGZvbnQtYm9sZCB1cHBlcmNhc2UgdGV4dC1zbSBib3JkZXItYi0yIGJvcmRlci1ibGFjayBwYi0xIHNlbGYtc3RhcnQgaG92ZXI6dGV4dC1icmFuZC1vcmFuZ2UgaG92ZXI6Ym9yZGVyLWJyYW5kLW9yYW5nZSB0cmFuc2l0aW9uLWNvbG9ycyI+CiAgICAgICAgICAgICAgICAgICAgICAgIFNhYmVyIG3DoXMgPGljb25pZnktaWNvbiBpY29uPSJzb2xhcjphcnJvdy1yaWdodC1saW5lYXIiPjwvaWNvbmlmeS1pY29uPgogICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgIDwhLS0gQ2FyZCAyIC0tPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYmctd2hpdGUgYm9yZGVyLWJydXRhbCBwLTggc2hhZG93LWJydXRhbCBmbGV4IGZsZXgtY29sIHJlbGF0aXZlIHotMTAgbWQ6dHJhbnNsYXRlLXktOCBncm91cCI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRleHQtNnhsIGZvbnQtYm9sZCB0ZXh0LWJyYW5kLW9yYW5nZSBtYi02IGZvbnQtc2VyaWYgYmxvY2siPjAyPC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz0idGV4dC0yeGwgZm9udC1ib2xkIHVwcGVyY2FzZSB0cmFja2luZy10aWdodCBtYi00IGdyb3VwLWhvdmVyOnRleHQtYnJhbmQtb3JhbmdlIHRyYW5zaXRpb24tY29sb3JzIj5TaXRpbyBXZWIgcXVlIFZlbmRlPC9oMz4KICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iZm9udC1tZWRpdW0gdGV4dC1iYXNlIG1iLTggZmxleC1ncm93Ij4KICAgICAgICAgICAgICAgICAgICAgICAgTGFuZGluZyBwYWdlIG8gc2l0aW8gY29tcGxldG8gb3B0aW1pemFkbyBwYXJhIGNhcHRhciBjbGllbnRlcy4gTW9iaWxlLWZpcnN0LCByw6FwaWRvLCBjb24gYW5hbMOtdGljYS4KICAgICAgICAgICAgICAgICAgICA8L3A+CiAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJzcGFjZS15LTIgbWItOCBmb250LW1lZGl1bSB0ZXh0LXNtIG9wYWNpdHktODAiPgogICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIj48aWNvbmlmeS1pY29uIGljb249InNvbGFyOmNoZWNrLXNxdWFyZS1saW5lYXIiPjwvaWNvbmlmeS1pY29uPiBDYXJnYSB1bHRyYSByw6FwaWRhPC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiI+PGljb25pZnktaWNvbiBpY29uPSJzb2xhcjpjaGVjay1zcXVhcmUtbGluZWFyIj48L2ljb25pZnktaWNvbj4gU0VPIFTDqWNuaWNvPC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiI+PGljb25pZnktaWNvbiBpY29uPSJzb2xhcjpjaGVjay1zcXVhcmUtbGluZWFyIj48L2ljb25pZnktaWNvbj4gRm9ybXVsYXJpb3MgeSBDTVM8L2xpPgogICAgICAgICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2NvbnRhY3RvIiBjbGFzcz0iaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGdhcC0yIGZvbnQtYm9sZCB1cHBlcmNhc2UgdGV4dC1zbSBib3JkZXItYi0yIGJvcmRlci1ibGFjayBwYi0xIHNlbGYtc3RhcnQgaG92ZXI6dGV4dC1icmFuZC1vcmFuZ2UgaG92ZXI6Ym9yZGVyLWJyYW5kLW9yYW5nZSB0cmFuc2l0aW9uLWNvbG9ycyI+CiAgICAgICAgICAgICAgICAgICAgICAgIFNhYmVyIG3DoXMgPGljb25pZnktaWNvbiBpY29uPSJzb2xhcjphcnJvdy1yaWdodC1saW5lYXIiPjwvaWNvbmlmeS1pY29uPgogICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgIDwhLS0gQ2FyZCAzIC0tPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYmctd2hpdGUgYm9yZGVyLWJydXRhbCBwLTggc2hhZG93LWJydXRhbCBmbGV4IGZsZXgtY29sIHJlbGF0aXZlIHotMTAgZ3JvdXAiPgogICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXh0LTZ4bCBmb250LWJvbGQgdGV4dC1icmFuZC1vcmFuZ2UgbWItNiBmb250LXNlcmlmIGJsb2NrIj4wMzwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9InRleHQtMnhsIGZvbnQtYm9sZCB1cHBlcmNhc2UgdHJhY2tpbmctdGlnaHQgbWItNCBncm91cC1ob3Zlcjp0ZXh0LWJyYW5kLW9yYW5nZSB0cmFuc2l0aW9uLWNvbG9ycyI+UmVkaXNlw7FvIEV4cHJlc3M8L2gzPgogICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJmb250LW1lZGl1bSB0ZXh0LWJhc2UgbWItOCBmbGV4LWdyb3ciPgogICAgICAgICAgICAgICAgICAgICAgICDCv1lhIHRpZW5lcyBhbGdvIHF1ZSBubyBmdW5jaW9uYT8gTG8gYXJyZWdsYW1vcyB5IGxvIG1vZGVybml6YW1vcyBlbiA1IGTDrWFzLgogICAgICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9InNwYWNlLXktMiBtYi04IGZvbnQtbWVkaXVtIHRleHQtc20gb3BhY2l0eS04MCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIiPjxpY29uaWZ5LWljb24gaWNvbj0ic29sYXI6Y2hlY2stc3F1YXJlLWxpbmVhciI+PC9pY29uaWZ5LWljb24+IEF1ZGl0b3LDrWEgVVg8L2xpPgogICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIj48aWNvbmlmeS1pY29uIGljb249InNvbGFyOmNoZWNrLXNxdWFyZS1saW5lYXIiPjwvaWNvbmlmeS1pY29uPiBOdWV2byBzaXN0ZW1hIHZpc3VhbDwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIiPjxpY29uaWZ5LWljb24gaWNvbj0ic29sYXI6Y2hlY2stc3F1YXJlLWxpbmVhciI+PC9pY29uaWZ5LWljb24+IE9wdGltaXphY2nDs24gY8OzZGlnbzwvbGk+CiAgICAgICAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjY29udGFjdG8iIGNsYXNzPSJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgZm9udC1ib2xkIHVwcGVyY2FzZSB0ZXh0LXNtIGJvcmRlci1iLTIgYm9yZGVyLWJsYWNrIHBiLTEgc2VsZi1zdGFydCBob3Zlcjp0ZXh0LWJyYW5kLW9yYW5nZSBob3Zlcjpib3JkZXItYnJhbmQtb3JhbmdlIHRyYW5zaXRpb24tY29sb3JzIj4KICAgICAgICAgICAgICAgICAgICAgICAgU2FiZXIgbcOhcyA8aWNvbmlmeS1pY29uIGljb249InNvbGFyOmFycm93LXJpZ2h0LWxpbmVhciI+PC9pY29uaWZ5LWljb24+CiAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgPC9zZWN0aW9uPgoKICAgIDwhLS0gUHJvY2VzbyBTZWN0aW9uIC0tPgogICAgPHNlY3Rpb24gaWQ9InByb2Nlc28iIGNsYXNzPSJiZy1icmFuZC1vcmFuZ2UgcHktMjQgcHgtNiBib3JkZXItYnJ1dGFsLXkgcmVsYXRpdmUgb3ZlcmZsb3ctaGlkZGVuIHotMjAiPgogICAgICAgIDwhLS0gR2lhbnQgYmFja2dyb3VuZCB0ZXh0IC0tPgogICAgICAgIDxkaXYgY2xhc3M9ImFic29sdXRlIGluc2V0LTAgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgb3BhY2l0eS0xMCBwb2ludGVyLWV2ZW50cy1ub25lIHNlbGVjdC1ub25lIj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRleHQtWzMwdnddIGZvbnQtYm9sZCBsZWFkaW5nLW5vbmUgdXBwZXJjYXNlIHdoaXRlc3BhY2Utbm93cmFwIj41IETDrWFzPC9zcGFuPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJtYXgtdy1bMTYwMHB4XSBteC1hdXRvIHJlbGF0aXZlIHotMTAiPgogICAgICAgICAgICA8aDIgY2xhc3M9InRleHQtNXhsIG1kOnRleHQtN3hsIGZvbnQtYm9sZCB0cmFja2luZy10aWdodGVyIHVwcGVyY2FzZSBtYi0xNiB0ZXh0LWNlbnRlciI+CiAgICAgICAgICAgICAgICBFbCBSZWxvaiBDb3JyZS48YnI+TnVlc3RybyBQcm9jZXNvLgogICAgICAgICAgICA8L2gyPgoKICAgICAgICAgICAgPGRpdiBjbGFzcz0icmVsYXRpdmUiPgogICAgICAgICAgICAgICAgPCEtLSBEaWFnb25hbCBsaW5lIGNvbm5lY3Rpbmcgc3RlcHMgLS0+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhYnNvbHV0ZSB0b3AtMS8yIGxlZnQtMCB3LWZ1bGwgaC1bNHB4XSBiZy1ibGFjayAtdHJhbnNsYXRlLXktMS8yIHJvdGF0ZS1bLTVkZWddIG1kOnJvdGF0ZS1bLTJkZWddIG9wYWNpdHktMjAgcG9pbnRlci1ldmVudHMtbm9uZSI+PC9kaXY+CgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCBmbGV4LWNvbCBtZDpmbGV4LXJvdyBqdXN0aWZ5LWJldHdlZW4gZ2FwLTggbWQ6Z2FwLTQgbGc6Z2FwLTgiPgogICAgICAgICAgICAgICAgICAgIDwhLS0gU3RlcCAxIC0tPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJnLXdoaXRlIGJvcmRlci1icnV0YWwgcC02IHNoYWRvdy1icnV0YWwtc20gdy1mdWxsIG1kOnctMS81IG1kOnRyYW5zbGF0ZS15LTEyIHJvdGF0ZS0xIGhvdmVyOnJvdGF0ZS0wIHRyYW5zaXRpb24tdHJhbnNmb3JtIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9udC1ib2xkIHRleHQteGwgbWItMiB1cHBlcmNhc2UgYm9yZGVyLWItMiBib3JkZXItYmxhY2sgcGItMiI+MDEuIEx1bmVzPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJmb250LW1lZGl1bSB0ZXh0LXNtIj5CcmllZmluZyB5IGFsY2FuY2UgY2VycmFkby48L3A+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPCEtLSBTdGVwIDIgLS0+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYmctYnJhbmQtYmxhY2sgdGV4dC13aGl0ZSBib3JkZXItYnJ1dGFsIHAtNiBzaGFkb3ctYnJ1dGFsLXNtIHctZnVsbCBtZDp3LTEvNSBtZDp0cmFuc2xhdGUteS00IC1yb3RhdGUtMSBob3Zlcjpyb3RhdGUtMCB0cmFuc2l0aW9uLXRyYW5zZm9ybSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvbnQtYm9sZCB0ZXh0LXhsIG1iLTIgdXBwZXJjYXNlIGJvcmRlci1iLTIgYm9yZGVyLXdoaXRlIHBiLTIgdGV4dC1icmFuZC1vcmFuZ2UiPjAyLiBNYXJ0ZXM8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9ImZvbnQtbWVkaXVtIHRleHQtc20iPkRpc2XDsW8gVUkgYXByb2JhZG8gcG9yIHRpLjwvcD4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8IS0tIFN0ZXAgMyAtLT4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJiZy13aGl0ZSBib3JkZXItYnJ1dGFsIHAtNiBzaGFkb3ctYnJ1dGFsLXNtIHctZnVsbCBtZDp3LTEvNSBtZDotdHJhbnNsYXRlLXktNCByb3RhdGUtMiBob3Zlcjpyb3RhdGUtMCB0cmFuc2l0aW9uLXRyYW5zZm9ybSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvbnQtYm9sZCB0ZXh0LXhsIG1iLTIgdXBwZXJjYXNlIGJvcmRlci1iLTIgYm9yZGVyLWJsYWNrIHBiLTIiPjAzLiBNacOpcmNvbGVzPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJmb250LW1lZGl1bSB0ZXh0LXNtIj5EZXNhcnJvbGxvIGRlbCBjb3JlLjwvcD4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8IS0tIFN0ZXAgNCAtLT4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJiZy13aGl0ZSBib3JkZXItYnJ1dGFsIHAtNiBzaGFkb3ctYnJ1dGFsLXNtIHctZnVsbCBtZDp3LTEvNSBtZDotdHJhbnNsYXRlLXktMTIgLXJvdGF0ZS0yIGhvdmVyOnJvdGF0ZS0wIHRyYW5zaXRpb24tdHJhbnNmb3JtIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9udC1ib2xkIHRleHQteGwgbWItMiB1cHBlcmNhc2UgYm9yZGVyLWItMiBib3JkZXItYmxhY2sgcGItMiI+MDQuIEp1ZXZlczwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iZm9udC1tZWRpdW0gdGV4dC1zbSI+SW50ZWdyYWNpb25lcyB5IHRlc3RpbmcgUUEuPC9wPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwhLS0gU3RlcCA1IC0tPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJnLXdoaXRlIGJvcmRlci1icnV0YWwgcC02IHNoYWRvdy1icnV0YWwtc20gdy1mdWxsIG1kOnctMS81IG1kOi10cmFuc2xhdGUteS0yMCByb3RhdGUtMSBob3Zlcjpyb3RhdGUtMCB0cmFuc2l0aW9uLXRyYW5zZm9ybSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvbnQtYm9sZCB0ZXh0LXhsIG1iLTIgdXBwZXJjYXNlIGJvcmRlci1iLTIgYm9yZGVyLWJsYWNrIHBiLTIgdGV4dC1icmFuZC1vcmFuZ2UiPjA1LiBWaWVybmVzPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJmb250LW1lZGl1bSB0ZXh0LXNtIj5FbnRyZWdhIHkgcHVibGljYWNpw7NuLjwvcD4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgIDwvc2VjdGlvbj4KCiAgICA8IS0tIFRyYWJham9zIFNlY3Rpb24gLS0+CiAgICA8c2VjdGlvbiBpZD0idHJhYmFqb3MiIGNsYXNzPSJweS0yNCBweC02IG1kOnB4LTEyIGJnLWJyYW5kLWJsYWNrIHRleHQtd2hpdGUgei0yMCByZWxhdGl2ZSI+CiAgICAgICAgPGRpdiBjbGFzcz0ibWF4LXctWzE2MDBweF0gbXgtYXV0byI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggZmxleC1jb2wgbWQ6ZmxleC1yb3cganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLXN0YXJ0IG1iLTE2IGdhcC04Ij4KICAgICAgICAgICAgICAgIDxoMiBjbGFzcz0idGV4dC1odWdlIGZvbnQtYm9sZCB0cmFja2luZy10aWdodGVyIHVwcGVyY2FzZSBzZWN0aW9uLXRpdGxlIHRleHQtYnJhbmQtb2Zmd2hpdGUiPgogICAgICAgICAgICAgICAgICAgIFRyYWJham9zIDxicj4gUmVjaWVudGVzLgogICAgICAgICAgICAgICAgPC9oMj4KICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJ0ZXh0LWxnIG1heC13LXNtIGZvbnQtbWVkaXVtIHRleHQtZ3JheS0zMDAgYm9yZGVyLWwtMiBib3JkZXItYnJhbmQtb3JhbmdlIHBsLTQiPgogICAgICAgICAgICAgICAgICAgIENvbnN0cnVpbW9zIHByb2R1Y3RvcyByZWFsZXMgcGFyYSBuZWdvY2lvcyByZWFsZXMgcXVlIHF1ZXLDrWFuIGlyIHLDoXBpZG8uCiAgICAgICAgICAgICAgICA8L3A+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPGRpdiBjbGFzcz0iZ3JpZCBncmlkLWNvbHMtMSBtZDpncmlkLWNvbHMtMiBsZzpncmlkLWNvbHMtMyBnYXAtOCI+CiAgICAgICAgICAgICAgICA8IS0tIFByb2plY3QgMSAtLT4KICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJibG9jayBncm91cCI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icmVsYXRpdmUgYXNwZWN0LVs0LzNdIGJvcmRlci1icnV0YWwgYm9yZGVyLXdoaXRlIG92ZXJmbG93LWhpZGRlbiBtYi00Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImFzc2V0cy9wYWdlLTAxLTQ3MzQyNTlhLWJhZDctNDIyZi05ODFlLWNlMDFlNzkxODRmMi0xNjAwdy5qcGciIGFsdD0iUHJveWVjdG8gQXBwIiBjbGFzcz0ib2JqZWN0LWNvdmVyIHctZnVsbCBoLWZ1bGwgZ3JheXNjYWxlIGdyb3VwLWhvdmVyOmdyYXlzY2FsZS0wIGdyb3VwLWhvdmVyOnNjYWxlLTEwNSB0cmFuc2l0aW9uLWFsbCBkdXJhdGlvbi01MDAiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhYnNvbHV0ZSB0b3AtNCBsZWZ0LTQgYmctd2hpdGUgdGV4dC1ibGFjayBmb250LWJvbGQgdGV4dC14cyBweC0zIHB5LTEgdXBwZXJjYXNlIGJvcmRlci1icnV0YWwiPkFwcCBXZWI8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXIiPgogICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9InRleHQteGwgZm9udC1ib2xkIHVwcGVyY2FzZSI+RmludGVjaCBOZW88L2gzPgogICAgICAgICAgICAgICAgICAgICAgICA8aWNvbmlmeS1pY29uIGljb249InNvbGFyOmFycm93LXJpZ2h0LXVwLWxpbmVhciIgY2xhc3M9InRleHQtMnhsIGdyb3VwLWhvdmVyOnRleHQtYnJhbmQtb3JhbmdlIHRyYW5zaXRpb24tY29sb3JzIj48L2ljb25pZnktaWNvbj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvYT4KCiAgICAgICAgICAgICAgICA8IS0tIFByb2plY3QgMiAtLT4KICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJibG9jayBncm91cCBsZzotdHJhbnNsYXRlLXktMTIiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InJlbGF0aXZlIGFzcGVjdC1bNC8zXSBib3JkZXItYnJ1dGFsIGJvcmRlci13aGl0ZSBvdmVyZmxvdy1oaWRkZW4gbWItNCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJhc3NldHMvcGFnZS0wMi03MjQxNDJhYS00NGE2LTQ4ZDMtOWNmMy03NjFlMDBkMDViNzgtMTYwMHcuanBnIiBhbHQ9IlByb3llY3RvIFdlYiIgY2xhc3M9Im9iamVjdC1jb3ZlciB3LWZ1bGwgaC1mdWxsIGdyYXlzY2FsZSBncm91cC1ob3ZlcjpncmF5c2NhbGUtMCBncm91cC1ob3ZlcjpzY2FsZS0xMDUgdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tNTAwIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWJzb2x1dGUgdG9wLTQgbGVmdC00IGJnLXdoaXRlIHRleHQtYmxhY2sgZm9udC1ib2xkIHRleHQteHMgcHgtMyBweS0xIHVwcGVyY2FzZSBib3JkZXItYnJ1dGFsIj5XZWI8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXIiPgogICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9InRleHQteGwgZm9udC1ib2xkIHVwcGVyY2FzZSI+RXN0dWRpbyBBcms8L2gzPgogICAgICAgICAgICAgICAgICAgICAgICA8aWNvbmlmeS1pY29uIGljb249InNvbGFyOmFycm93LXJpZ2h0LXVwLWxpbmVhciIgY2xhc3M9InRleHQtMnhsIGdyb3VwLWhvdmVyOnRleHQtYnJhbmQtb3JhbmdlIHRyYW5zaXRpb24tY29sb3JzIj48L2ljb25pZnktaWNvbj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvYT4KCiAgICAgICAgICAgICAgICA8IS0tIFByb2plY3QgMyAtLT4KICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJibG9jayBncm91cCI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icmVsYXRpdmUgYXNwZWN0LVs0LzNdIGJvcmRlci1icnV0YWwgYm9yZGVyLXdoaXRlIG92ZXJmbG93LWhpZGRlbiBtYi00Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImFzc2V0cy9wYWdlLTAzLWZhNTE5MDJiLWMyYTQtNGMzMy1hOTZlLWE4ZjFlZjY3ZWRjNi0xNjAwdy5qcGciIGFsdD0iUHJveWVjdG8gUmVkaXNlw7FvIiBjbGFzcz0ib2JqZWN0LWNvdmVyIHctZnVsbCBoLWZ1bGwgZ3JheXNjYWxlIGdyb3VwLWhvdmVyOmdyYXlzY2FsZS0wIGdyb3VwLWhvdmVyOnNjYWxlLTEwNSB0cmFuc2l0aW9uLWFsbCBkdXJhdGlvbi01MDAiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhYnNvbHV0ZSB0b3AtNCBsZWZ0LTQgYmctd2hpdGUgdGV4dC1ibGFjayBmb250LWJvbGQgdGV4dC14cyBweC0zIHB5LTEgdXBwZXJjYXNlIGJvcmRlci1icnV0YWwiPlJlZGlzZcOxbzwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlciI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz0idGV4dC14bCBmb250LWJvbGQgdXBwZXJjYXNlIj5DbHViIE5vY3R1cm5vPC9oMz4KICAgICAgICAgICAgICAgICAgICAgICAgPGljb25pZnktaWNvbiBpY29uPSJzb2xhcjphcnJvdy1yaWdodC11cC1saW5lYXIiIGNsYXNzPSJ0ZXh0LTJ4bCBncm91cC1ob3Zlcjp0ZXh0LWJyYW5kLW9yYW5nZSB0cmFuc2l0aW9uLWNvbG9ycyI+PC9pY29uaWZ5LWljb24+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2E+CgogICAgICAgICAgICAgICAgIDwhLS0gUHJvamVjdCA0IC0tPgogICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJibG9jayBncm91cCBsZzp0cmFuc2xhdGUteS0xMiBoaWRkZW4gbWQ6YmxvY2siPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InJlbGF0aXZlIGFzcGVjdC1bNC8zXSBib3JkZXItYnJ1dGFsIGJvcmRlci13aGl0ZSBvdmVyZmxvdy1oaWRkZW4gbWItNCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJhc3NldHMvcGFnZS0wNC0wMDU2MDBlNS1mNmFiLTRlNTktYmM4Ni1lYWViMDI3OTdkZmEtMTYwMHcuanBnIiBhbHQ9IlByb3llY3RvIFdlYiIgY2xhc3M9Im9iamVjdC1jb3ZlciB3LWZ1bGwgaC1mdWxsIGdyYXlzY2FsZSBncm91cC1ob3ZlcjpncmF5c2NhbGUtMCBncm91cC1ob3ZlcjpzY2FsZS0xMDUgdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tNTAwIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWJzb2x1dGUgdG9wLTQgbGVmdC00IGJnLXdoaXRlIHRleHQtYmxhY2sgZm9udC1ib2xkIHRleHQteHMgcHgtMyBweS0xIHVwcGVyY2FzZSBib3JkZXItYnJ1dGFsIj5XZWI8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXIiPgogICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9InRleHQteGwgZm9udC1ib2xkIHVwcGVyY2FzZSI+VmlsbGEgUmVhbCBFc3RhdGU8L2gzPgogICAgICAgICAgICAgICAgICAgICAgICA8aWNvbmlmeS1pY29uIGljb249InNvbGFyOmFycm93LXJpZ2h0LXVwLWxpbmVhciIgY2xhc3M9InRleHQtMnhsIGdyb3VwLWhvdmVyOnRleHQtYnJhbmQtb3JhbmdlIHRyYW5zaXRpb24tY29sb3JzIj48L2ljb25pZnktaWNvbj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJtdC0yMCB0ZXh0LWNlbnRlciBsZzptdC0zMiI+CiAgICAgICAgICAgICAgICA8YSBocmVmPSIjIiBjbGFzcz0iaW5saW5lLWZsZXggYmctd2hpdGUgdGV4dC1ibGFjayBweC04IHB5LTQgZm9udC1zZW1pYm9sZCB0ZXh0LWJhc2UgdXBwZXJjYXNlIGJvcmRlci1icnV0YWwgc2hhZG93LVs2cHhfNnB4XzBweF8jRkY0ODAwXSBob3Zlcjp0cmFuc2xhdGUteC1bLTJweF0gaG92ZXI6dHJhbnNsYXRlLXktWy0ycHhdIGhvdmVyOnNoYWRvdy1bOHB4XzhweF8wcHhfI0ZGNDgwMF0gdHJhbnNpdGlvbi1hbGwgaXRlbXMtY2VudGVyIGdhcC0yIj4KICAgICAgICAgICAgICAgICAgICBWZXIgdG9kb3MgbG9zIGNhc29zIDxpY29uaWZ5LWljb24gaWNvbj0ic29sYXI6d2lkZ2V0LWFkZC1saW5lYXIiIHdpZHRoPSIyNCI+PC9pY29uaWZ5LWljb24+CiAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgPC9zZWN0aW9uPgoKICAgIDwhLS0gUHJlY2lvcyBTZWN0aW9uIC0tPgogICAgPHNlY3Rpb24gaWQ9InByZWNpb3MiIGNsYXNzPSJweS0yNCBweC02IG1kOnB4LTEyIGJnLWJyYW5kLW9mZndoaXRlIHotMjAgcmVsYXRpdmUiPgogICAgICAgIDxkaXYgY2xhc3M9Im1heC13LVsxNDAwcHhdIG14LWF1dG8iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0ZXh0LWNlbnRlciBtYi0xNiI+CiAgICAgICAgICAgICAgICA8aDIgY2xhc3M9InRleHQtNXhsIG1kOnRleHQtN3hsIGZvbnQtYm9sZCB0cmFja2luZy10aWdodGVyIHVwcGVyY2FzZSBtYi02Ij5QcmVjaW9zIENsYXJvcy48L2gyPgogICAgICAgICAgICAgICAgPHAgY2xhc3M9InRleHQteGwgZm9udC1tZWRpdW0gbWF4LXcteGwgbXgtYXV0byI+U2luIGVzdGltYWNpb25lcyBwb3IgaG9yYS4gU2FiZXMgbG8gcXVlIHBhZ2FzIHkgY3XDoW5kbyBsbyByZWNpYmVzIGRlc2RlIGVsIGTDrWEgY2Vyby48L3A+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPGRpdiBjbGFzcz0iZ3JpZCBncmlkLWNvbHMtMSBtZDpncmlkLWNvbHMtMyBnYXAtOCBpdGVtcy1jZW50ZXIiPgogICAgICAgICAgICAgICAgPCEtLSBQbGFuIFN0YXJ0ZXIgLS0+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJiZy13aGl0ZSBib3JkZXItYnJ1dGFsIHAtOCBmbGV4IGZsZXgtY29sIGgtWzkwJV0iPgogICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz0idGV4dC0yeGwgZm9udC1ib2xkIHVwcGVyY2FzZSBtYi0yIj5TdGFydGVyPC9oMz4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0ZXh0LTN4bCBtZDp0ZXh0LTR4bCBmb250LWJsYWNrIG1iLTYgYm9yZGVyLWItMiBib3JkZXItYmxhY2sgcGItNiI+MTUwJCA8c3BhbiBjbGFzcz0idGV4dC14bCB0ZXh0LWdyYXktNTAwIGZvbnQtYm9sZCI+QSBCQ1Y8L3NwYW4+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJzcGFjZS15LTQgbWItOCBmbGV4LWdyb3cgZm9udC1tZWRpdW0iPgogICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImZsZXggZ2FwLTMiPjxpY29uaWZ5LWljb24gaWNvbj0ic29sYXI6Y2hlY2stY2lyY2xlLWxpbmVhciIgY2xhc3M9InRleHQteGwgbXQtMC41IHNocmluay0wIj48L2ljb25pZnktaWNvbj4gTGFuZGluZyBwYWdlIDEgcMOhZ2luYTwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZmxleCBnYXAtMyI+PGljb25pZnktaWNvbiBpY29uPSJzb2xhcjpjaGVjay1jaXJjbGUtbGluZWFyIiBjbGFzcz0idGV4dC14bCBtdC0wLjUgc2hyaW5rLTAiPjwvaWNvbmlmeS1pY29uPiBFbnRyZWdhIGVuIDUgZMOtYXM8L2xpPgogICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImZsZXggZ2FwLTMiPjxpY29uaWZ5LWljb24gaWNvbj0ic29sYXI6Y2hlY2stY2lyY2xlLWxpbmVhciIgY2xhc3M9InRleHQteGwgbXQtMC41IHNocmluay0wIj48L2ljb25pZnktaWNvbj4gRGlzZcOxbyBSZXNwb25zaXZvPC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJmbGV4IGdhcC0zIj48aWNvbmlmeS1pY29uIGljb249InNvbGFyOmNoZWNrLWNpcmNsZS1saW5lYXIiIGNsYXNzPSJ0ZXh0LXhsIG10LTAuNSBzaHJpbmstMCI+PC9pY29uaWZ5LWljb24+IEZvcm11bGFyaW8gZGUgY29udGFjdG88L2xpPgogICAgICAgICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2NvbnRhY3RvIiBjbGFzcz0iYmxvY2sgdGV4dC1jZW50ZXIgdy1mdWxsIGJnLWJyYW5kLW9mZndoaXRlIHRleHQtYmxhY2sgYm9yZGVyLWJydXRhbCBweS0zIGZvbnQtYm9sZCB1cHBlcmNhc2UgdGV4dC1zbSBob3ZlcjpiZy1ibGFjayBob3Zlcjp0ZXh0LXdoaXRlIHRyYW5zaXRpb24tY29sb3JzIj4KICAgICAgICAgICAgICAgICAgICAgICAgRWxlZ2lyIHBsYW4KICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICA8IS0tIFBsYW4gUHVsc28gLS0+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwcmVtaXVtLWJvcmRlci13cmFwIHNoYWRvdy1icnV0YWwgei0xMCBtZDotbXgtNCBoLWZ1bGwgcmVsYXRpdmUiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFic29sdXRlIC10b3AtNCBsZWZ0LTEvMiAtdHJhbnNsYXRlLXgtMS8yIGJnLWJsYWNrIHRleHQtYnJhbmQtb3JhbmdlIGZvbnQtYm9sZCB0ZXh0LXhzIHB4LTQgcHktMSB1cHBlcmNhc2UgdHJhY2tpbmctd2lkZXN0IGJvcmRlci1icnV0YWwgYm9yZGVyLXdoaXRlIHotMjAgd2hpdGVzcGFjZS1ub3dyYXAiPgogICAgICAgICAgICAgICAgICAgICAgICBNw6FzIEVsZWdpZG8KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJiZy13aGl0ZSBwLTggYm9yZGVyLVsxcHhdIGJvcmRlci10cmFuc3BhcmVudCBoLWZ1bGwgZmxleCBmbGV4LWNvbCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz0idGV4dC0zeGwgZm9udC1ib2xkIHVwcGVyY2FzZSBtYi0yIHRleHQtYnJhbmQtb3JhbmdlIj5QdWxzbzwvaDM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRleHQtNHhsIG1kOnRleHQtNXhsIGZvbnQtYmxhY2sgbWItNiBib3JkZXItYi0yIGJvcmRlci1ibGFjayBwYi02Ij4yNTAkIDxzcGFuIGNsYXNzPSJ0ZXh0LTJ4bCB0ZXh0LWdyYXktNTAwIGZvbnQtYm9sZCI+QSBCQ1Y8L3NwYW4+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0ic3BhY2UteS00IG1iLTggZmxleC1ncm93IGZvbnQtbWVkaXVtIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZmxleCBnYXAtMyI+PGljb25pZnktaWNvbiBpY29uPSJzb2xhcjpjaGVjay1jaXJjbGUtbGluZWFyIiBjbGFzcz0idGV4dC14bCBtdC0wLjUgdGV4dC1icmFuZC1vcmFuZ2Ugc2hyaW5rLTAiPjwvaWNvbmlmeS1pY29uPiBBcGxpY2FjacOzbiB3ZWIgbyBzaXRpbyAoaGFzdGEgNSB2aWV3cyk8L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJmbGV4IGdhcC0zIj48aWNvbmlmeS1pY29uIGljb249InNvbGFyOmNoZWNrLWNpcmNsZS1saW5lYXIiIGNsYXNzPSJ0ZXh0LXhsIG10LTAuNSB0ZXh0LWJyYW5kLW9yYW5nZSBzaHJpbmstMCI+PC9pY29uaWZ5LWljb24+IEVudHJlZ2EgZW4gNSBkw61hcyBIw6FiaWxlczwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImZsZXggZ2FwLTMiPjxpY29uaWZ5LWljb24gaWNvbj0ic29sYXI6Y2hlY2stY2lyY2xlLWxpbmVhciIgY2xhc3M9InRleHQteGwgbXQtMC41IHRleHQtYnJhbmQtb3JhbmdlIHNocmluay0wIj48L2ljb25pZnktaWNvbj4gQ01TIG8gQmFzZSBkZSBkYXRvcyBiw6FzaWNhPC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZmxleCBnYXAtMyI+PGljb25pZnktaWNvbiBpY29uPSJzb2xhcjpjaGVjay1jaXJjbGUtbGluZWFyIiBjbGFzcz0idGV4dC14bCBtdC0wLjUgdGV4dC1icmFuZC1vcmFuZ2Ugc2hyaW5rLTAiPjwvaWNvbmlmeS1pY29uPiBJbnRlZ3JhY2nDs24gcGFzYXJlbGEgZGUgcGFnb3M8L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJmbGV4IGdhcC0zIj48aWNvbmlmeS1pY29uIGljb249InNvbGFyOmNoZWNrLWNpcmNsZS1saW5lYXIiIGNsYXNzPSJ0ZXh0LXhsIG10LTAuNSB0ZXh0LWJyYW5kLW9yYW5nZSBzaHJpbmstMCI+PC9pY29uaWZ5LWljb24+IDMwIGTDrWFzIGRlIHNvcG9ydGUgcG9zdC1sYW56YW1pZW50bzwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNjb250YWN0byIgY2xhc3M9ImJsb2NrIHRleHQtY2VudGVyIHctZnVsbCBiZy1icmFuZC1vcmFuZ2UgdGV4dC1ibGFjayBib3JkZXItYnJ1dGFsIHB5LTQgZm9udC1ib2xkIHVwcGVyY2FzZSB0ZXh0LWJhc2UgaG92ZXItc25hcCBzaGFkb3ctYnJ1dGFsLXNtIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVsZWdpciBwbGFuCiAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgIDwhLS0gUGxhbiBQcm8gLS0+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJiZy1icmFuZC1ibGFjayB0ZXh0LXdoaXRlIGJvcmRlci1icnV0YWwgcC04IGZsZXggZmxleC1jb2wgaC1bOTAlXSI+CiAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPSJ0ZXh0LTJ4bCBmb250LWJvbGQgdXBwZXJjYXNlIG1iLTIgdGV4dC1ncmF5LTMwMCI+UHJvPC9oMz4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0ZXh0LTN4bCBtZDp0ZXh0LTR4bCBmb250LWJsYWNrIG1iLTYgYm9yZGVyLWItMiBib3JkZXItd2hpdGUgcGItNiI+MzAwJCA8c3BhbiBjbGFzcz0idGV4dC14bCB0ZXh0LWdyYXktNDAwIGZvbnQtYm9sZCI+QSBCQ1Y8L3NwYW4+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJzcGFjZS15LTQgbWItOCBmbGV4LWdyb3cgZm9udC1tZWRpdW0gdGV4dC1ncmF5LTMwMCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZmxleCBnYXAtMyI+PGljb25pZnktaWNvbiBpY29uPSJzb2xhcjpjaGVjay1jaXJjbGUtbGluZWFyIiBjbGFzcz0idGV4dC14bCBtdC0wLjUgc2hyaW5rLTAiPjwvaWNvbmlmeS1pY29uPiBBcGxpY2FjacOzbiArIFNpdGlvIFdlYiBjb25lY3RhZGFzPC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJmbGV4IGdhcC0zIj48aWNvbmlmeS1pY29uIGljb249InNvbGFyOmNoZWNrLWNpcmNsZS1saW5lYXIiIGNsYXNzPSJ0ZXh0LXhsIG10LTAuNSBzaHJpbmstMCI+PC9pY29uaWZ5LWljb24+IEVudHJlZ2EgZW4gMTAgZMOtYXM8L2xpPgogICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImZsZXggZ2FwLTMiPjxpY29uaWZ5LWljb24gaWNvbj0ic29sYXI6Y2hlY2stY2lyY2xlLWxpbmVhciIgY2xhc3M9InRleHQteGwgbXQtMC41IHNocmluay0wIj48L2ljb25pZnktaWNvbj4gUGFuZWwgZGUgYWRtaW4gYXZhbnphZG88L2xpPgogICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImZsZXggZ2FwLTMiPjxpY29uaWZ5LWljb24gaWNvbj0ic29sYXI6Y2hlY2stY2lyY2xlLWxpbmVhciIgY2xhc3M9InRleHQteGwgbXQtMC41IHNocmluay0wIj48L2ljb25pZnktaWNvbj4gSW50ZWdyYWNpb25lcyBkZSB0ZXJjZXJvcyBjb21wbGVqYXM8L2xpPgogICAgICAgICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2NvbnRhY3RvIiBjbGFzcz0iYmxvY2sgdGV4dC1jZW50ZXIgdy1mdWxsIGJnLXRyYW5zcGFyZW50IHRleHQtd2hpdGUgYm9yZGVyLWJydXRhbCBib3JkZXItd2hpdGUgcHktMyBmb250LWJvbGQgdXBwZXJjYXNlIHRleHQtc20gaG92ZXI6Ymctd2hpdGUgaG92ZXI6dGV4dC1ibGFjayB0cmFuc2l0aW9uLWNvbG9ycyI+CiAgICAgICAgICAgICAgICAgICAgICAgIEVsZWdpciBwbGFuCiAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgPC9zZWN0aW9uPgoKICAgIDwhLS0gRkFRIFNlY3Rpb24gLS0+CiAgICA8c2VjdGlvbiBpZD0iZmFxIiBjbGFzcz0icHktMjQgcHgtNiBtZDpweC0xMiBiZy1icmFuZC1vZmZ3aGl0ZSB6LTIwIHJlbGF0aXZlIj4KICAgICAgICA8ZGl2IGNsYXNzPSJtYXgtdy1bODAwcHhdIG14LWF1dG8iPgogICAgICAgICAgICA8aDIgY2xhc3M9InRleHQtNXhsIG1kOnRleHQtN3hsIGZvbnQtYm9sZCB0cmFja2luZy10aWdodGVyIHVwcGVyY2FzZSBtYi0xNiB0ZXh0LWNlbnRlciI+CiAgICAgICAgICAgICAgICBQcmVndW50YXMuPGJyPlJlc3B1ZXN0YXMuCiAgICAgICAgICAgIDwvaDI+CgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzcGFjZS15LTQiPgogICAgICAgICAgICAgICAgPCEtLSBGQVEgSXRlbSAxIC0tPgogICAgICAgICAgICAgICAgPGRldGFpbHMgY2xhc3M9Imdyb3VwIGJnLXdoaXRlIGJvcmRlci1icnV0YWwgc2hhZG93LWJydXRhbC1zbSBbJl9zdW1tYXJ5Ojotd2Via2l0LWRldGFpbHMtbWFya2VyXTpoaWRkZW4iPgogICAgICAgICAgICAgICAgICAgIDxzdW1tYXJ5IGNsYXNzPSJmbGV4IGN1cnNvci1wb2ludGVyIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gcC02IGZvbnQtYm9sZCB0ZXh0LWxnIG1kOnRleHQteGwgdXBwZXJjYXNlIj4KICAgICAgICAgICAgICAgICAgICAgICAgwr9RdcOpIHBhc2Egc2kgbm8gZW50cmVnYW4gZW4gNSBkw61hcz8KICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRyYW5zaXRpb24gZHVyYXRpb24tMzAwIGdyb3VwLW9wZW46LXJvdGF0ZS0xODAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGljb25pZnktaWNvbiBpY29uPSJzb2xhcjphbHQtYXJyb3ctZG93bi1saW5lYXIiIGNsYXNzPSJ0ZXh0LTJ4bCI+PC9pY29uaWZ5LWljb24+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8L3N1bW1hcnk+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYm9yZGVyLXQtWzNweF0gYm9yZGVyLWJsYWNrIHAtNiBmb250LW1lZGl1bSB0ZXh0LWJhc2UgYmctYnJhbmQtb2Zmd2hpdGUiPgogICAgICAgICAgICAgICAgICAgICAgICBUZSBkZXZvbHZlbW9zIGVsIDUwJSBkZSB0dSBkaW5lcm8uIEFzw60gZGUgc2VndXJvcyBlc3RhbW9zIGRlIG51ZXN0cm8gcHJvY2Vzby4gTm8gcHJvbWV0ZW1vcyBsbyBxdWUgbm8gcG9kZW1vcyBjdW1wbGlyLgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kZXRhaWxzPgoKICAgICAgICAgICAgICAgIDwhLS0gRkFRIEl0ZW0gMiAtLT4KICAgICAgICAgICAgICAgIDxkZXRhaWxzIGNsYXNzPSJncm91cCBiZy13aGl0ZSBib3JkZXItYnJ1dGFsIHNoYWRvdy1icnV0YWwtc20gWyZfc3VtbWFyeTo6LXdlYmtpdC1kZXRhaWxzLW1hcmtlcl06aGlkZGVuIj4KICAgICAgICAgICAgICAgICAgICA8c3VtbWFyeSBjbGFzcz0iZmxleCBjdXJzb3ItcG9pbnRlciBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIHAtNiBmb250LWJvbGQgdGV4dC1sZyBtZDp0ZXh0LXhsIHVwcGVyY2FzZSI+CiAgICAgICAgICAgICAgICAgICAgICAgIMK/WSBzaSBuZWNlc2l0byBjYW1iaW9zIGRlc3B1w6lzPwogICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idHJhbnNpdGlvbiBkdXJhdGlvbi0zMDAgZ3JvdXAtb3Blbjotcm90YXRlLTE4MCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aWNvbmlmeS1pY29uIGljb249InNvbGFyOmFsdC1hcnJvdy1kb3duLWxpbmVhciIgY2xhc3M9InRleHQtMnhsIj48L2ljb25pZnktaWNvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDwvc3VtbWFyeT4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJib3JkZXItdC1bM3B4XSBib3JkZXItYmxhY2sgcC02IGZvbnQtbWVkaXVtIHRleHQtYmFzZSBiZy1icmFuZC1vZmZ3aGl0ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgIEVsIHBsYW4gUHVsc28gaW5jbHV5ZSAzMCBkw61hcyBkZSBzb3BvcnRlIHBhcmEgYnVncy4gU2kgbmVjZXNpdGFzIGZlYXR1cmVzIG51ZXZhcywgb2ZyZWNlbW9zIHBhcXVldGVzIGRlIG1hbnRlbmltaWVudG8gbWVuc3VhbCBhIHByZWNpbyBjZXJyYWRvLgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kZXRhaWxzPgoKICAgICAgICAgICAgICAgIDwhLS0gRkFRIEl0ZW0gMyAtLT4KICAgICAgICAgICAgICAgIDxkZXRhaWxzIGNsYXNzPSJncm91cCBiZy13aGl0ZSBib3JkZXItYnJ1dGFsIHNoYWRvdy1icnV0YWwtc20gWyZfc3VtbWFyeTo6LXdlYmtpdC1kZXRhaWxzLW1hcmtlcl06aGlkZGVuIj4KICAgICAgICAgICAgICAgICAgICA8c3VtbWFyeSBjbGFzcz0iZmxleCBjdXJzb3ItcG9pbnRlciBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIHAtNiBmb250LWJvbGQgdGV4dC1sZyBtZDp0ZXh0LXhsIHVwcGVyY2FzZSI+CiAgICAgICAgICAgICAgICAgICAgICAgIMK/Q8OzbW8gY29icmFuPwogICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idHJhbnNpdGlvbiBkdXJhdGlvbi0zMDAgZ3JvdXAtb3Blbjotcm90YXRlLTE4MCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aWNvbmlmeS1pY29uIGljb249InNvbGFyOmFsdC1hcnJvdy1kb3duLWxpbmVhciIgY2xhc3M9InRleHQtMnhsIj48L2ljb25pZnktaWNvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDwvc3VtbWFyeT4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJib3JkZXItdC1bM3B4XSBib3JkZXItYmxhY2sgcC02IGZvbnQtbWVkaXVtIHRleHQtYmFzZSBiZy1icmFuZC1vZmZ3aGl0ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDUwJSBwb3IgYWRlbGFudGFkbyBwYXJhIGJsb3F1ZWFyIGxhIHNlbWFuYSBkZSBkZXNhcnJvbGxvLCA1MCUgY29udHJhIGVudHJlZ2EgZGVsIHByb3llY3RvIGZ1bmNpb25hbmRvLgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kZXRhaWxzPgogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgPCEtLSBGQVEgSXRlbSA0IC0tPgogICAgICAgICAgICAgICAgIDxkZXRhaWxzIGNsYXNzPSJncm91cCBiZy13aGl0ZSBib3JkZXItYnJ1dGFsIHNoYWRvdy1icnV0YWwtc20gWyZfc3VtbWFyeTo6LXdlYmtpdC1kZXRhaWxzLW1hcmtlcl06aGlkZGVuIj4KICAgICAgICAgICAgICAgICAgICA8c3VtbWFyeSBjbGFzcz0iZmxleCBjdXJzb3ItcG9pbnRlciBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIHAtNiBmb250LWJvbGQgdGV4dC1sZyBtZDp0ZXh0LXhsIHVwcGVyY2FzZSI+CiAgICAgICAgICAgICAgICAgICAgICAgIMK/UXXDqSBuZWNlc2l0YW4gZGUgbcOtIHBhcmEgYXJyYW5jYXI/CiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0cmFuc2l0aW9uIGR1cmF0aW9uLTMwMCBncm91cC1vcGVuOi1yb3RhdGUtMTgwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpY29uaWZ5LWljb24gaWNvbj0ic29sYXI6YWx0LWFycm93LWRvd24tbGluZWFyIiBjbGFzcz0idGV4dC0yeGwiPjwvaWNvbmlmeS1pY29uPgogICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPC9zdW1tYXJ5PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJvcmRlci10LVszcHhdIGJvcmRlci1ibGFjayBwLTYgZm9udC1tZWRpdW0gdGV4dC1iYXNlIGJnLWJyYW5kLW9mZndoaXRlIj4KICAgICAgICAgICAgICAgICAgICAgICAgTGxlbmFyIHVuIGZvcm11bGFyaW8gZGV0YWxsYWRvIGNvbiB0dSBpZGVhLCBsb2dvcywgY29sb3JlcyBkZSBtYXJjYSB5IGVsIGNvbnRlbmlkbyAodGV4dG9zKSBiw6FzaWNvLiBOb3NvdHJvcyBwb25lbW9zIGVsIHJlc3RvLgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kZXRhaWxzPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgIDwvc2VjdGlvbj4KCiAgICA8IS0tIEZpbmFsIENUQSBTZWN0aW9uIC0tPgogICAgPHNlY3Rpb24gY2xhc3M9ImJnLWJyYW5kLWJsYWNrIHRleHQtd2hpdGUgcHktMzIgcHgtNiBtZDpweC0xMiBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0ZXh0LWNlbnRlciByZWxhdGl2ZSBib3JkZXItYnJ1dGFsLXkgei0yMCI+CiAgICAgICAgPGRpdiBjbGFzcz0iYWJzb2x1dGUgaW5zZXQtMCBiZy1bdXJsKCdhc3NldHMvcGFnZS0wNS01ZWUwYTM4YS1iNWQzLTQ1MzEtODc5My05OGJlZWQ0YWYxNjItMTYwMHcuanBnJyldIGJnLWNvdmVyIGJnLWNlbnRlciBvcGFjaXR5LTIwIG1peC1ibGVuZC1sdW1pbm9zaXR5Ij48L2Rpdj4KICAgICAgICAKICAgICAgICA8ZGl2IGNsYXNzPSJyZWxhdGl2ZSB6LTEwIG1heC13LTR4bCI+CiAgICAgICAgICAgIDxoMiBjbGFzcz0idGV4dC1odWdlIGZvbnQtYm9sZCB0cmFja2luZy10aWdodGVyIHVwcGVyY2FzZSBtYi04IGxlYWRpbmctWzAuODVdIj4KICAgICAgICAgICAgICAgIERFSkEgREUgPGJyPiBQT1NURVJHQVIgPGJyPiBUVSBQUk9ZRUNUTy4gPHNwYW4gY2xhc3M9InRleHQtYnJhbmQtb3JhbmdlIj7ihpI8L3NwYW4+CiAgICAgICAgICAgIDwvaDI+CiAgICAgICAgICAgIDxwIGNsYXNzPSJ0ZXh0LXhsIG1kOnRleHQtMnhsIGZvbnQtbWVkaXVtIG1heC13LTJ4bCBteC1hdXRvIG1iLTEyIHRleHQtZ3JheS0zMDAiPgogICAgICAgICAgICAgICAgQWdlbmRhIHVuYSBsbGFtYWRhIGRlIDE1IG1pbnV0b3MuIFRlIGRlY2ltb3Mgc2kgcG9kZW1vcyBlbnRyZWdhcnRlIGVuIDUgZMOtYXMg4oCUIG8gdGUgbWFuZGFtb3MgYSBvdHJvIGxhZG8uCiAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgPGEgaHJlZj0iI2NvbnRhY3RvIiBjbGFzcz0iaW5saW5lLWZsZXggYmctYnJhbmQtb3JhbmdlIHRleHQtYmxhY2sgcHgtMTAgcHktNSBmb250LWJvbGQgdGV4dC14bCBtZDp0ZXh0LTJ4bCB1cHBlcmNhc2UgYm9yZGVyLWJydXRhbCBib3JkZXItd2hpdGUgc2hhZG93LVs4cHhfOHB4XzBweF8jZmZmXSBob3Zlci1zbmFwIGl0ZW1zLWNlbnRlciBnYXAtMyI+CiAgICAgICAgICAgICAgICBBZ2VuZGEgdHUgZGVtbyBncmF0aXMgPGljb25pZnktaWNvbiBpY29uPSJzb2xhcjpjYWxlbmRhci1hZGQtbGluZWFyIj48L2ljb25pZnktaWNvbj4KICAgICAgICAgICAgPC9hPgogICAgICAgIDwvZGl2PgogICAgPC9zZWN0aW9uPgoKICAgIDwhLS0gRm9vdGVyIC0tPgogICAgPGZvb3RlciBjbGFzcz0iYmctYnJhbmQtYmxhY2sgdGV4dC13aGl0ZSBweS0xMiBweC02IG1kOnB4LTEyIGJvcmRlci10LTQgYm9yZGVyLWJyYW5kLW9yYW5nZSB6LTIwIHJlbGF0aXZlIj4KICAgICAgICA8ZGl2IGNsYXNzPSJtYXgtdy1bMTYwMHB4XSBteC1hdXRvIGdyaWQgZ3JpZC1jb2xzLTEgbWQ6Z3JpZC1jb2xzLTQgZ2FwLTEyIGl0ZW1zLXN0YXJ0Ij4KICAgICAgICAgICAgCiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1kOmNvbC1zcGFuLTEiPgogICAgICAgICAgICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9ImZsZXggaXRlbXMtY2VudGVyIGdhcC0zIG1iLTYiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InctMTAgaC0xMCBiZy13aGl0ZSBib3JkZXItWzNweF0gYm9yZGVyLXdoaXRlIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImZvbnQtYm9sZCB0ZXh0LXhsIHRleHQtYmxhY2sgbGVhZGluZy1ub25lIj5QPC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJmb250LWJvbGQgdGV4dC0yeGwgdHJhY2tpbmctdGlnaHRlciB1cHBlcmNhc2UiPlB1bHNvQXBwczwvc3Bhbj4KICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJmb250LW1lZGl1bSB0ZXh0LXNtIHRleHQtZ3JheS00MDAgbWF4LXcteHMiPgogICAgICAgICAgICAgICAgICAgIEVsIGVzdHVkaW8gcXVlIGNvbnZpZXJ0ZSBpZGVhcyBlbiBjw7NkaWdvIGZ1bmNpb25hbCBlbiB1bmEgc2VtYW5hIGjDoWJpbC4KICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJtZDpjb2wtc3Bhbi0xIGZsZXggZmxleC1jb2wgZ2FwLTMgZm9udC1zZW1pYm9sZCB0ZXh0LXNtIHVwcGVyY2FzZSI+CiAgICAgICAgICAgICAgICA8YSBocmVmPSIjc2VydmljaW9zIiBjbGFzcz0iaG92ZXI6dGV4dC1icmFuZC1vcmFuZ2UgdHJhbnNpdGlvbi1jb2xvcnMiPlNlcnZpY2lvczwvYT4KICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNwcm9jZXNvIiBjbGFzcz0iaG92ZXI6dGV4dC1icmFuZC1vcmFuZ2UgdHJhbnNpdGlvbi1jb2xvcnMiPlByb2Nlc288L2E+CiAgICAgICAgICAgICAgICA8YSBocmVmPSIjdHJhYmFqb3MiIGNsYXNzPSJob3Zlcjp0ZXh0LWJyYW5kLW9yYW5nZSB0cmFuc2l0aW9uLWNvbG9ycyI+VHJhYmFqb3M8L2E+CiAgICAgICAgICAgICAgICA8YSBocmVmPSIjcHJlY2lvcyIgY2xhc3M9ImhvdmVyOnRleHQtYnJhbmQtb3JhbmdlIHRyYW5zaXRpb24tY29sb3JzIj5QcmVjaW9zPC9hPgogICAgICAgICAgICAgICAgPGEgaHJlZj0iI2ZhcSIgY2xhc3M9ImhvdmVyOnRleHQtYnJhbmQtb3JhbmdlIHRyYW5zaXRpb24tY29sb3JzIj5GQVE8L2E+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPGRpdiBjbGFzcz0ibWQ6Y29sLXNwYW4tMSBmbGV4IGZsZXgtY29sIGdhcC0zIGZvbnQtc2VtaWJvbGQgdGV4dC1zbSB1cHBlcmNhc2UiPgogICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9pbnN0YWdyYW0uY29tL3B1bHNvLmFwcHMiIHRhcmdldD0iX2JsYW5rIiBjbGFzcz0iZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgaG92ZXI6dGV4dC1icmFuZC1vcmFuZ2UgdHJhbnNpdGlvbi1jb2xvcnMiPgogICAgICAgICAgICAgICAgICAgIDxpY29uaWZ5LWljb24gaWNvbj0ic29sYXI6c21hcnRwaG9uZS0yLWxpbmVhciIgY2xhc3M9InRleHQteGwiPjwvaWNvbmlmeS1pY29uPiBAcHVsc28uYXBwcwogICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOnB1bHNvYXBwc0BvdXRsb29rLmNvbSIgY2xhc3M9ImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIGhvdmVyOnRleHQtYnJhbmQtb3JhbmdlIHRyYW5zaXRpb24tY29sb3JzIj4KICAgICAgICAgICAgICAgICAgICA8aWNvbmlmeS1pY29uIGljb249InNvbGFyOmxldHRlci1saW5lYXIiIGNsYXNzPSJ0ZXh0LXhsIj48L2ljb25pZnktaWNvbj4gcHVsc29hcHBzQG91dGxvb2suY29tCiAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPGRpdiBjbGFzcz0ibWQ6Y29sLXNwYW4tMSBmbGV4IGp1c3RpZnktc3RhcnQgbWQ6anVzdGlmeS1lbmQiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idy0yNCBoLTI0IGJnLWJyYW5kLW9yYW5nZSBib3JkZXItYnJ1dGFsIGJvcmRlci13aGl0ZSBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBwLTIgdGV4dC1jZW50ZXIgcm90YXRlLTMiPgogICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJmb250LWJvbGQgdGV4dC1ibGFjayB1cHBlcmNhc2UgbGVhZGluZy1ub25lIHRleHQteHMiPkhlY2hvIGVuPC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJmb250LWJsYWNrIHRleHQtYmxhY2sgdGV4dC0zeGwgbGVhZGluZy1ub25lIGZvbnQtc2VyaWYgbXQtMSI+NTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZm9udC1ib2xkIHRleHQtYmxhY2sgdXBwZXJjYXNlIGxlYWRpbmctbm9uZSB0ZXh0LXhzIj5Ew61hczwvc3Bhbj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICAKICAgICAgICA8ZGl2IGNsYXNzPSJtYXgtdy1bMTYwMHB4XSBteC1hdXRvIG10LTEyIHB0LTYgYm9yZGVyLXQgYm9yZGVyLWdyYXktODAwIGZsZXggZmxleC1jb2wgbWQ6ZmxleC1yb3cganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlciB0ZXh0LXhzIGZvbnQtbWVkaXVtIHRleHQtZ3JheS01MDAgdXBwZXJjYXNlIHRyYWNraW5nLXdpZGVzdCI+CiAgICAgICAgICAgIDxwPsKpIDIwMjYgUHVsc29BcHBzLiBIZWNobyBlbiA1IGTDrWFzLCBvYnZpby48L3A+CiAgICAgICAgICAgIDxwIGNsYXNzPSJtdC0yIG1kOm10LTAiPkRpc2XDsWFkbyBzaW4gZXhjdXNhcy48L3A+CiAgICAgICAgPC9kaXY+CiAgICA8L2Zvb3Rlcj4KCiAgICA8IS0tIEZsb2F0aW5nIFdoYXRzQXBwIEJ1dHRvbiAtLT4KICAgIDxhIGhyZWY9Imh0dHBzOi8vd2EubWUvNTg0MjQ3NDUwNzA4IiB0YXJnZXQ9Il9ibGFuayIgY2xhc3M9ImZpeGVkIGJvdHRvbS02IHJpZ2h0LTYgei01MCBiZy1bIzI1RDM2Nl0gdGV4dC13aGl0ZSBib3JkZXItYnJ1dGFsIHNoYWRvdy1icnV0YWwgaG92ZXItc25hcCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB3LTE0IGgtMTQgbWQ6dy1hdXRvIG1kOmgtYXV0byBtZDpweC01IG1kOnB5LTMgZ2FwLTIiPgogICAgICAgIDxpY29uaWZ5LWljb24gaWNvbj0ibWRpOndoYXRzYXBwIiBjbGFzcz0idGV4dC00eGwgbWQ6dGV4dC0zeGwiPjwvaWNvbmlmeS1pY29uPgogICAgICAgIDxzcGFuIGNsYXNzPSJoaWRkZW4gbWQ6YmxvY2sgZm9udC1ib2xkIHVwcGVyY2FzZSB0ZXh0LXNtIHRyYWNraW5nLXdpZGUiPkNoYXRlYXI8L3NwYW4+CiAgICA8L2E+CgogICAgPCEtLSBHU0FQIEluaXRpYWxpemF0aW9uIC0tPgogICAgPHNjcmlwdD4KICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIiwgKGV2ZW50KSA9PiB7CiAgICAgICAgICAgIGdzYXAucmVnaXN0ZXJQbHVnaW4oU2Nyb2xsVHJpZ2dlcik7CgogICAgICAgICAgICAvLyAxLiBHU0FQIE1hc2tlZCBSZXZlYWwgZm9yIEhlcm8gSGVhZGxpbmUKICAgICAgICAgICAgY29uc3QgaGVyb1RleHRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnI2hlcm8tdGl0bGUgLnJldmVhbC10ZXh0Jyk7CiAgICAgICAgICAgIGdzYXAudG8oaGVyb1RleHRzLCB7CiAgICAgICAgICAgICAgICB5OiAiMCUiLAogICAgICAgICAgICAgICAgZHVyYXRpb246IDEuMiwKICAgICAgICAgICAgICAgIHN0YWdnZXI6IDAuMTUsCiAgICAgICAgICAgICAgICBlYXNlOiAicG93ZXI0Lm91dCIsCiAgICAgICAgICAgICAgICBkZWxheTogMC4yCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgLy8gUmV2ZWFsIGFuaW1hdGlvbnMgZm9yIHNlY3Rpb24gdGl0bGVzIG9uIHNjcm9sbAogICAgICAgICAgICBjb25zdCBzZWN0aW9uVGl0bGVzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnNlY3Rpb24tdGl0bGUnKTsKICAgICAgICAgICAgc2VjdGlvblRpdGxlcy5mb3JFYWNoKHRpdGxlID0+IHsKICAgICAgICAgICAgICAgIGdzYXAuZnJvbSh0aXRsZSwgewogICAgICAgICAgICAgICAgICAgIHNjcm9sbFRyaWdnZXI6IHsKICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcjogdGl0bGUsCiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0OiAidG9wIDg1JSIsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB5OiA1MCwKICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLAogICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uOiAwLjgsCiAgICAgICAgICAgICAgICAgICAgZWFzZTogInBvd2VyMy5vdXQiCiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfSk7CiAgICAgICAgfSk7CiAgICA8L3NjcmlwdD4KPC9ib2R5Pgo8L2h0bWw+Cg==";
    const assetFiles = ["assets/page-01-4734259a-bad7-422f-981e-ce01e79184f2-1600w.jpg","assets/page-02-724142aa-44a6-48d3-9cf3-761e00d05b78-1600w.jpg","assets/page-03-fa51902b-c2a4-4c33-a96e-a8f1ef67edc6-1600w.jpg","assets/page-04-005600e5-f6ab-4e59-bc86-eaeb02797dfa-1600w.jpg","assets/page-05-5ee0a38a-b5d3-4531-8793-98beed4af162-1600w.jpg"];
    const runtimeFiles = ["../../../../assets/runtime/runtime-027051effa47-gsap-min.js","../../../../assets/runtime/runtime-163ebd087cfc-iconify-icon-min.js","../../../../assets/runtime/runtime-689ca8dda44c-scrolltrigger-min.js","../../../../assets/runtime/runtime-ccc8894b3418-runtime.js"];
    const frame = document.getElementById("neuform-demo");
    const decodeBytes = (value) => Uint8Array.from(atob(value), (character) => character.charCodeAt(0));
    const decode = (value) => new TextDecoder().decode(decodeBytes(value));
    const encodeBytes = (bytes) => {
      let binary = "";
      for (let index = 0; index < bytes.length; index += 32768) {
        binary += String.fromCharCode(...bytes.subarray(index, index + 32768));
      }
      return btoa(binary);
    };
    const mediaTypes = {
      avif: "image/avif",
      gif: "image/gif",
      jpg: "image/jpeg",
      jpeg: "image/jpeg",
      mp4: "video/mp4",
      png: "image/png",
      webm: "video/webm",
      webp: "image/webp"
    };
    const loadAsset = async (file) => {
      const response = await fetch(file, { cache: "no-store", credentials: "omit", redirect: "error" });
      if (!response.ok) throw new Error("Could not load local demo asset: " + file);
      const extension = file.split(".").pop().toLowerCase();
      const contentType = mediaTypes[extension] || "application/octet-stream";
      const bytes = new Uint8Array(await response.arrayBuffer());
      return { base64: encodeBytes(bytes), contentType, file, kind: "asset" };
    };
    Promise.allSettled(assetFiles.map(loadAsset)).then((results) => {
      const runtimeSources = runtimeFiles.map((file) => new URL(file, location.href).href).join(" ");
      const source = decode(encodedHtml).replace("__NEUFORM_RUNTIME_SOURCES__", runtimeSources);
      const mediaAssets = [];
      for (const result of results) {
        if (result.status !== "fulfilled") continue;
        mediaAssets.push(result.value);
      }
      frame.addEventListener("load", () => {
        frame.contentWindow.postMessage({ type: "neuform-assets-v1", assets: mediaAssets }, "*");
      }, { once: true });
      frame.srcdoc = source;
    }).catch((error) => {
      document.body.innerHTML = '<div class="error">Unable to load this sandboxed demo.</div>';
      console.error(error);
    });
  </script>
</body>
</html>

Requirements and compatibility

Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta

“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.

Security

What our scanner noticed· Medium risk

  • Large base64-encoded blobs

A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.

Attribution and licence

Created by
Meng To
Publisher
Meng To (Community)
Source
MengTo/Skills · agent-skills/web-design/webgl-3d-object · commit 5ea1661
Licence
MIT License (redistribution allowed)
  • LICENSE (added by AutoGineer from LICENSE)
  • ATTRIBUTION.md (written by AutoGineer)
Synced

AutoGineer is not affiliated with or endorsed by Meng To.

Download ZIP

The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download webgl-3d-object.zip