<!DOCTYPE html>
<html lang="en"><head>
    <script src="---SUBDIR---/libs/clipboard/clipboard.min.js"></script>
    <script src="---SUBDIR---/libs/quarto-html/tabby.min.js"></script>
    <script src="---SUBDIR---/libs/quarto-html/popper.min.js"></script>
    <script src="---SUBDIR---/libs/quarto-html/tippy.umd.min.js"></script>
    <link href="---SUBDIR---/libs/quarto-html/tippy.css" rel="stylesheet">
    <link href="---SUBDIR---/libs/quarto-html/light-border.css" rel="stylesheet">
    <link href="---SUBDIR---/libs/quarto-html/quarto-syntax-highlighting-587c61ba64f3a5504c4d52d930310e48.css" rel="stylesheet" id="quarto-text-highlighting-styles"><meta charset="utf-8">
    <meta name="generator" content="---PRODUCER---">
    <meta name="author" content="---AUTHOR---">
    <title>---TITLE---</title>
    <meta name="apple-mobile-web-app-capable" content="yes">
    <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, minimal-ui">
    <link rel="stylesheet" href="---SUBDIR---/libs/revealjs/dist/reset.css">
    <link rel="stylesheet" href="---SUBDIR---/libs/revealjs/dist/reveal.css">
    <style>
      code{white-space: pre-wrap;}
      span.smallcaps{font-variant: small-caps;}
      div.columns{display: flex; gap: min(4vw, 1.5em);}
      div.column{flex: auto; overflow-x: auto;}
      div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
      ul.task-list{list-style: none;}
      ul.task-list li input[type="checkbox"] {
      width: 0.8em;
      margin: 0 0.8em 0.2em -1em; /* quarto-specific, see https://github.com/quarto-dev/quarto-cli/issues/4556 */ 
      vertical-align: middle;
      }
    </style>
    <link rel="stylesheet" href="---SUBDIR---/libs/revealjs/dist/theme/quarto-534cd8e3a96973385dffff3f4709048d.css">
    <link href="---SUBDIR---/libs/revealjs/plugin/quarto-line-highlight/line-highlight.css" rel="stylesheet">
    <link href="---SUBDIR---/libs/revealjs/plugin/reveal-menu/menu.css" rel="stylesheet">
    <link href="---SUBDIR---/libs/revealjs/plugin/reveal-menu/quarto-menu.css" rel="stylesheet">
    <link href="---SUBDIR---/libs/revealjs/plugin/quarto-support/footer.css" rel="stylesheet">
    <style type="text/css">
      .reveal div.sourceCode {
	  margin: 0;
	  overflow: auto;
      }
      .reveal div.hanging-indent {
	  margin-left: 1em;
	  text-indent: -1em;
      }
      .reveal .slide:not(.center) {
	  height: 100%;
      }
      .reveal .slide.scrollable {
	  overflow-y: auto;
      }
      .reveal .footnotes {
	  height: 100%;
	  overflow-y: auto;
      }
      .reveal .slide .absolute {
	  position: absolute;
	  display: block;
      }
      .reveal .footnotes ol {
	  counter-reset: ol;
	  list-style-type: none; 
	  margin-left: 0;
      }
      .reveal .footnotes ol li:before {
	  counter-increment: ol;
	  content: counter(ol) ". "; 
      }
      .reveal .footnotes ol li > p:first-child {
	  display: inline-block;
      }
      .reveal .slide ul,
      .reveal .slide ol {
	  margin-bottom: 0.5em;
      }
      .reveal .slide ul li,
      .reveal .slide ol li {
	  margin-top: 0.4em;
	  margin-bottom: 0.2em;
      }
      .reveal .slide ul[role="tablist"] li {
	  margin-bottom: 0;
      }
      .reveal .slide ul li > *:first-child,
      .reveal .slide ol li > *:first-child {
	  margin-block-start: 0;
      }
      .reveal .slide ul li > *:last-child,
      .reveal .slide ol li > *:last-child {
      margin-block-end: 0;
      }
      .reveal .slide .columns:nth-child(3) {
	  margin-block-start: 0.8em;
      }
      .reveal blockquote {
	  box-shadow: none;
      }
      .reveal .tippy-content>* {
	  margin-top: 0.2em;
	  margin-bottom: 0.7em;
      }
      .reveal .tippy-content>*:last-child {
	  margin-bottom: 0.2em;
      }
      .reveal .slide > img.stretch.quarto-figure-center,
      .reveal .slide > img.r-stretch.quarto-figure-center {
	  display: block;
	  margin-left: auto;
	  margin-right: auto; 
      }
      .reveal .slide > img.stretch.quarto-figure-left,
      .reveal .slide > img.r-stretch.quarto-figure-left  {
	  display: block;
	  margin-left: 0;
	  margin-right: auto; 
      }
      .reveal .slide > img.stretch.quarto-figure-right, .reveal .slide > img.r-stretch.quarto-figure-right  {
	  display: block;
	  margin-left: auto;
	  margin-right: 0; 
      }
      
      .menu-slide {
          display: block;
          padding-left: 2.5em;
          text-indent: -0.5em;
      }
      .menu-title {
          display: block;
          padding-left: 0em;
          text-indent: 0em;
	  color: orange;
      }
      .menu-section {
          display: block;
          padding-left: 0.5em;
          text-indent: -0.5em;
	  color:yellow;
      }
      .menu-subsection {
          display: block;
          padding-left: 1.5em;
          text-indent: -0.5em;
	  color:lightgreen;
      }
    </style>
  </head>
  <body class="quarto-light">
    <div class="reveal">
      <div class="slides">
---SLIDES---
      </div>
      <div class="quarto-auto-generated-content" style="display: none;">
	<div class="footer footer-default">
	</div>
    </div></div>

    <script>window.backupDefine = window.define; window.define = undefined;</script>
    <script src="---SUBDIR---/libs/revealjs/dist/reveal.js"></script>
    <!-- reveal.js plugins -->
    <script src="---SUBDIR---/libs/revealjs/plugin/quarto-line-highlight/line-highlight.js"></script>
    <script src="---SUBDIR---/libs/revealjs/plugin/pdf-export/pdfexport.js"></script>
    <script src="---SUBDIR---/libs/revealjs/plugin/reveal-menu/menu.js"></script>
    <script src="---SUBDIR---/libs/revealjs/plugin/reveal-menu/quarto-menu.js"></script>
    <script src="---SUBDIR---/libs/revealjs/plugin/quarto-support/support.js"></script>
    

    <script src="---SUBDIR---/libs/revealjs/plugin/notes/notes.js"></script>
    <script src="---SUBDIR---/libs/revealjs/plugin/search/search.js"></script>
    <script src="---SUBDIR---/libs/revealjs/plugin/zoom/zoom.js"></script>
    <script src="---SUBDIR---/libs/revealjs/plugin/math/math.js"></script>
    <script>window.define = window.backupDefine; window.backupDefine = undefined;</script>

    <script>

      // Full list of configuration options available at:
      // https://revealjs.com/config/
      Reveal.initialize({
	  'controlsAuto': false,
	  'previewLinksAuto': false,
	  'pdfSeparateFragments': false,
	  'autoAnimateEasing': "ease",
	  'autoAnimateDuration': 1,
	  'autoAnimateUnmatched': true,
	  'jumpToSlide': true,
	  'menu': {"side":"left","useTextContentForMissingTitles":true,"hideMissingTitles":true,"markers":false,"loadIcons":false,"custom":[{"title":"Tools","icon":"<i class=\"fas fa-gear\"></i>","content":"<ul class=\"slide-menu-items\">\n<li class=\"slide-tool-item active\" data-item=\"0\"><a href=\"#\" onclick=\"RevealMenuToolHandlers.fullscreen(event)\"><kbd>f</kbd> Fullscreen</a></li>\n<li class=\"slide-tool-item\" data-item=\"1\"><a href=\"#\" onclick=\"RevealMenuToolHandlers.speakerMode(event)\"><kbd>s</kbd> Speaker View</a></li>\n<li class=\"slide-tool-item\" data-item=\"2\"><a href=\"#\" onclick=\"RevealMenuToolHandlers.overview(event)\"><kbd>o</kbd> Slide Overview</a></li>\n<li class=\"slide-tool-item\" data-item=\"3\"><a href=\"#\" onclick=\"RevealMenuToolHandlers.togglePdfExport(event)\"><kbd>e</kbd> PDF Export Mode</a></li>\n<li class=\"slide-tool-item\" data-item=\"4\"><a href=\"#\" onclick=\"RevealMenuToolHandlers.toggleScrollView(event)\"><kbd>r</kbd> Scroll View Mode</a></li>\n<li class=\"slide-tool-item\" data-item=\"5\"><a href=\"#\" onclick=\"RevealMenuToolHandlers.keyboardHelp(event)\"><kbd>?</kbd> Keyboard Help</a></li>\n</ul>"}],"openButton":true},
	  'smaller': false,
	  
          // Display controls in the bottom right corner
          controls: false,

          // Help the user learn the controls by providing hints, for example by
          // bouncing the down arrow when they first encounter a vertical slide
          controlsTutorial: false,

          // Determines where controls appear, "edges" or "bottom-right"
          controlsLayout: 'edges',

          // Visibility rule for backwards navigation arrows; "faded", "hidden"
          // or "visible"
          controlsBackArrows: 'faded',

          // Display a presentation progress bar
          progress: true,

          // Display the page number of the current slide
          slideNumber: false,

          // 'all', 'print', or 'speaker'
          showSlideNumber: 'all',

          // Add the current slide number to the URL hash so that reloading the
          // page/copying the URL will return you to the same slide
          hash: true,

          // Start with 1 for the hash rather than 0
          hashOneBasedIndex: false,

          // Flags if we should monitor the hash and change slides accordingly
          respondToHashChanges: true,

          // Push each slide change to the browser history
          history: true,

          // Enable keyboard shortcuts for navigation
          keyboard: true,

          // Enable the slide overview mode
          overview: true,

          // Disables the default reveal.js slide layout (scaling and centering)
          // so that you can use custom CSS layout
          disableLayout: false,

          // Vertical centering of slides
          center: false,

          // Enables touch navigation on devices with touch input
          touch: true,

          // Loop the presentation
          loop: ---LOOP---,

          // Change the presentation direction to be RTL
          rtl: false,

          // see https://revealjs.com/vertical-slides/#navigation-mode
          navigationMode: 'linear',

          // Randomizes the order of slides each time the presentation loads
          shuffle: false,

          // Turns fragments on and off globally
          fragments: true,

          // Flags whether to include the current fragment in the URL,
          // so that reloading brings you to the same fragment position
          fragmentInURL: false,

          // Flags if the presentation is running in an embedded mode,
          // i.e. contained within a limited portion of the screen
          embedded: false,

          // Flags if we should show a help overlay when the questionmark
          // key is pressed
          help: true,

          // Flags if it should be possible to pause the presentation (blackout)
          pause: true,

          // Flags if speaker notes should be visible to all viewers
          showNotes: false,

          // Global override for autoplaying embedded media (null/true/false)
          autoPlayMedia: null,

          // Global override for preloading lazy-loaded iframes (null/true/false)
          preloadIframes: null,

          // Number of milliseconds between automatically proceeding to the
          // next slide, disabled when set to 0, this value can be overwritten
          // by using a data-autoslide attribute on your slides
          autoSlide: ---AUTOSLIDE---,

          // Stop auto-sliding after user input
          autoSlideStoppable: true,

          // Use this method for navigation when auto-sliding
          autoSlideMethod: null,

          // Specify the average time in seconds that you think you will spend
          // presenting each slide. This is used to show a pacing timer in the
          // speaker view
          defaultTiming: null,

          // Enable slide navigation via mouse wheel
          mouseWheel: false,

          // The display mode that will be used to show slides
          display: 'block',

          // Hide cursor if inactive
          hideInactiveCursor: true,

          // Time before the cursor is hidden (in ms)
          hideCursorTime: 5000,

          // Opens links in an iframe preview overlay
          previewLinks: false,

          // Transition style (none/fade/slide/convex/concave/zoom)
          transition: 'none',

          // Transition speed (default/fast/slow)
          transitionSpeed: 'default',

          // Transition style for full page slide backgrounds
          // (none/fade/slide/convex/concave/zoom)
          backgroundTransition: 'none',

          // Number of slides away from the current that are visible
          viewDistance: 7,

          // Number of slides away from the current that are visible on mobile
          // devices. It is advisable to set this to a lower number than
          // viewDistance in order to save resources.
          mobileViewDistance: 3,

          // The "normal" size of the presentation, aspect ratio will be preserved
          // when the presentation is scaled to fit different resolutions. Can be
          // specified using percentage units.
          width: ---CANVASWIDTH---,

          height: ---CANVASHEIGHT---,

          // Factor of the display size that should remain empty around the content
          margin: 0.0,

          math: {
              mathjax: 'https://cdn.jsdelivr.net/npm/mathjax@2.7.9/MathJax.js',
              config: 'TeX-AMS_HTML-full',
              tex2jax: {
		  inlineMath: [['\\(','\\)']],
		  displayMath: [['\\[','\\]']],
		  balanceBraces: true,
		  processEscapes: false,
		  processRefs: true,
		  processEnvironments: true,
		  preview: 'TeX',
		  skipTags: ['script','noscript','style','textarea','pre','code'],
		  ignoreClass: 'tex2jax_ignore',
		  processClass: 'tex2jax_process'
              },
          },

          // reveal.js plugins
          plugins: [QuartoLineHighlight, PdfExport, RevealMenu, QuartoSupport,

		    RevealMath,
		    RevealNotes,
		    RevealSearch,
		    RevealZoom
		   ]
      });
      </script>
    <script id="quarto-html-after-body" type="application/javascript">
      window.document.addEventListener("DOMContentLoaded", function (event) {
          const tabsets =  window.document.querySelectorAll(".panel-tabset-tabby")
          tabsets.forEach(function(tabset) {
              const tabby = new Tabby('#' + tabset.id);
          });
          const isCodeAnnotation = (el) => {
              for (const clz of el.classList) {
		  if (clz.startsWith('code-annotation-')) {                     
		      return true;
		  }
              }
              return false;
          }
          const onCopySuccess = function(e) {
              // button target
              const button = e.trigger;
              // don't keep focus
              button.blur();
              // flash "checked"
              button.classList.add('code-copy-button-checked');
              var currentTitle = button.getAttribute("title");
              button.setAttribute("title", "Copied!");
              let tooltip;
              if (window.bootstrap) {
		  button.setAttribute("data-bs-toggle", "tooltip");
		  button.setAttribute("data-bs-placement", "left");
		  button.setAttribute("data-bs-title", "Copied!");
		  tooltip = new bootstrap.Tooltip(button, 
						  { trigger: "manual", 
						    customClass: "code-copy-button-tooltip",
						    offset: [0, -8]});
		  tooltip.show();    
              }
              setTimeout(function() {
		  if (tooltip) {
		      tooltip.hide();
		      button.removeAttribute("data-bs-title");
		      button.removeAttribute("data-bs-toggle");
		      button.removeAttribute("data-bs-placement");
		  }
		  button.setAttribute("title", currentTitle);
		  button.classList.remove('code-copy-button-checked');
              }, 1000);
              // clear code selection
              e.clearSelection();
          }
          const getTextToCopy = function(trigger) {
              const outerScaffold = trigger.parentElement.cloneNode(true);
              const codeEl = outerScaffold.querySelector('code');
              for (const childEl of codeEl.children) {
		  if (isCodeAnnotation(childEl)) {
		      childEl.remove();
		  }
              }
              return codeEl.innerText;
          }
          const clipboard = new window.ClipboardJS('.code-copy-button:not([data-in-quarto-modal])', {
              text: getTextToCopy
          });
          clipboard.on('success', onCopySuccess);
          if (window.document.getElementById('quarto-embedded-source-code-modal')) {
              const clipboardModal = new window.ClipboardJS('.code-copy-button[data-in-quarto-modal]', {
		  text: getTextToCopy,
		  container: window.document.getElementById('quarto-embedded-source-code-modal')
              });
              clipboardModal.on('success', onCopySuccess);
          }
          var localhostRegex = new RegExp(/^(?:http|https):\/\/localhost\:?[0-9]*\//);
          var mailtoRegex = new RegExp(/^mailto:/);
          var filterRegex = new RegExp('/' + window.location.host + '/');
          var isInternal = (href) => {
              return filterRegex.test(href) || localhostRegex.test(href) || mailtoRegex.test(href);
          }
          // Inspect non-navigation links and adorn them if external
          var links = window.document.querySelectorAll('a[href]:not(.nav-link):not(.navbar-brand):not(.toc-action):not(.sidebar-link):not(.sidebar-item-toggle):not(.pagination-link):not(.no-external):not([aria-hidden]):not(.dropdown-item):not(.quarto-navigation-tool):not(.about-link)');
          for (var i=0; i<links.length; i++) {
              const link = links[i];
              if (!isInternal(link.href)) {
		  // undo the damage that might have been done by quarto-nav.js in the case of
		  // links that we want to consider external
		  if (link.dataset.originalHref !== undefined) {
                      link.href = link.dataset.originalHref;
		  }
              }
          }
          function tippyHover(el, contentFn, onTriggerFn, onUntriggerFn) {
              const config = {
		  allowHTML: true,
		  maxWidth: 500,
		  delay: 100,
		  arrow: false,
		  appendTo: function(el) {
                      return el.closest('section.slide') || el.parentElement;
		  },
		  interactive: true,
		  interactiveBorder: 10,
		  theme: 'light-border',
		  placement: 'bottom-start',
              };
              if (contentFn) {
		  config.content = contentFn;
              }
              if (onTriggerFn) {
		  config.onTrigger = onTriggerFn;
              }
              if (onUntriggerFn) {
		  config.onUntrigger = onUntriggerFn;
              }
              config['offset'] = [0,0];
              config['maxWidth'] = 700;
              window.tippy(el, config); 
          }
          const noterefs = window.document.querySelectorAll('a[role="doc-noteref"]');
          for (var i=0; i<noterefs.length; i++) {
              const ref = noterefs[i];
              tippyHover(ref, function() {
		  // use id or data attribute instead here
		  let href = ref.getAttribute('data-footnote-href') || ref.getAttribute('href');
		  try { href = new URL(href).hash; } catch {}
		  const id = href.replace(/^#\/?/, "");
		  const note = window.document.getElementById(id);
		  if (note) {
		      return note.innerHTML;
		  } else {
		      return "";
		  }
              });
          }
          const findCites = (el) => {
              const parentEl = el.parentElement;
              if (parentEl) {
		  const cites = parentEl.dataset.cites;
		  if (cites) {
		      return {
			  el,
			  cites: cites.split(' ')
		      };
		  } else {
		      return findCites(el.parentElement)
		  }
              } else {
		  return undefined;
              }
          };
          var bibliorefs = window.document.querySelectorAll('a[role="doc-biblioref"]');
          for (var i=0; i<bibliorefs.length; i++) {
              const ref = bibliorefs[i];
              const citeInfo = findCites(ref);
              if (citeInfo) {
		  tippyHover(citeInfo.el, function() {
		      var popup = window.document.createElement('div');
		      citeInfo.cites.forEach(function(cite) {
			  var citeDiv = window.document.createElement('div');
			  citeDiv.classList.add('hanging-indent');
			  citeDiv.classList.add('csl-entry');
			  var biblioDiv = window.document.getElementById('ref-' + cite);
			  if (biblioDiv) {
			      citeDiv.innerHTML = biblioDiv.innerHTML;
			  }
			  popup.appendChild(citeDiv);
		      });
		      return popup.innerHTML;
		  });
              }
          }
      });
    </script>
    
    <script>
      // added by DMW
      /*
      function log(msg) {
	  let el = document.getElementById("keylog");
	  if (!el) {
	      el = document.createElement("pre");
	      el.id = "keylog";
	      el.style.position = "fixed";
	      el.style.bottom = "0";
	      el.style.left = "0";
	      el.style.maxHeight = "40vh";
	      el.style.overflow = "auto";
	      el.style.background = "rgba(0,0,0,0.7)";
	      el.style.color = "white";
	      el.style.padding = "8px";
	      el.style.zIndex = "99999";
	      document.body.appendChild(el);
	  }
	  el.textContent += msg + "\n";
	  }
      */

      document.addEventListener("keydown", (e) => {
	  const k = e.key.toLowerCase();
	  if ( k !== "v" && k !== "a" && k !== "i" ) return;

	  // Don't let Reveal handle this key
	  e.preventDefault();
	  e.stopImmediatePropagation();

	  const slide = Reveal.getCurrentSlide();
	  if (!slide) return;

	  let item;
	  if( k == "v" ) {
	      item = slide.querySelector("video");
	  }
	  if( k == "a" ) {
	      item = slide.querySelector( "audio" );
	  }
	  
	  if (item) {
	      if (item.paused || item.ended) {
		  item.play().catch(()=>{});
	      } else {
		  item.pause();
	      }
	  }

	  if( k == "i" ) {
	      document.querySelectorAll("video").forEach(v => {
		  v.pause();
		  v.currentTime = 0;
	      });
	      document.querySelectorAll("audio").forEach(a => {
		  a.pause();
		  a.currentTime = 0;
	      });
	  }
      }, true); // <-- capture phase so we run before Reveal
    </script>

</body></html>
