diff --git a/docs/custom.css b/docs/custom.css
new file mode 100644
index 0000000..2667178
--- /dev/null
+++ b/docs/custom.css
@@ -0,0 +1,10 @@
+
+ .highlight {
+ background-color: yellow;
+ }
+ .highlight-line {
+ background-color: yellow;
+ display: block;
+ //padding: 2px 4px;
+}
+
diff --git a/docs/custom_highlight.js b/docs/custom_highlight.js
new file mode 100644
index 0000000..4ae1127
--- /dev/null
+++ b/docs/custom_highlight.js
@@ -0,0 +1,84 @@
+
+// This file is a bit of a hack. It allows us to force
+// highlighting of line of code. See slides.org for example
+// usage. In theory, we could have used highlight.js, but
+// I did not like how that dimmed unhighlighted areas and
+// generally made the syntax highlighting look ugly.
+
+// ---------------Start clip section-------------------------
+// You will need to put the code between here and the
+// commend called "end clip section" at the start of
+// your HTML file (e.g., via +BEGIN_EXPORT html) so
+// that you get these variables and functions defined
+// at the start for slides to use them.
+
+if (typeof highlightLineMapper === 'undefined') {
+ var highlightLineMapper = {};
+}
+
+function highlightSlide(sectionId, lines) {
+ highlightLineMapper[sectionId] = new Set(lines)
+}
+
+// -----------------End clip section-------------------------
+
+
+ Reveal.addEventListener('slidechanged', function(event) {
+ highlightLinesWithLines(event.currentSlide, highlightLineMapper);
+ });
+
+
+function highlightLinesWithLines(slide, lineMap) {
+ // lineMap is a dictionary like
+ // {section_id_1: Set, section_id_2: Set, ...}
+ // where each Set contains line numbers (1-based) to highlight
+ const startSpan = '';
+
+ slide.querySelectorAll('.src').forEach(el => {
+ // Find the parent section element to get its ID
+ let parentSection = el.closest('section');
+ let sectionId = parentSection ? parentSection.id : null;
+ console.log(`checking section ${sectionId}`);
+
+ // Get the set of line numbers to highlight for this section
+ let linesToHighlight = sectionId && lineMap[sectionId]
+ ? lineMap[sectionId]
+ : null;
+
+ // Skip if no line numbers set found for this section
+ if (!linesToHighlight) return;
+
+ const originalLines = el.innerHTML.split('\n');
+ const processedLines = [];
+
+ // Process each line, highlighting those whose line number (1-based) is in the set
+ originalLines.forEach((line, index) => {
+ // Check if this line number (converting to 1-based) should be highlighted
+ const lineNumber = index + 1;
+
+ if (linesToHighlight.has(lineNumber) && !line.includes('highlight-line')) {
+ // Find the position of the first span tag
+ const firstSpanIndex = line.indexOf('`
+ );
+ } else {
+ // If no span tag found, wrap the entire line
+ processedLines.push(`${startSpan}${line} `);
+ }
+ } else {
+ // Not a line to highlight, keep as is
+ processedLines.push(line);
+ }
+ });
+
+ el.innerHTML = processedLines.join('\n');
+ });
+}
diff --git a/docs/images/jwt-auth-vs-app-auth-response.jpg b/docs/images/jwt-auth-vs-app-auth-response.jpg
index 6dae253..1160b0e 100644
Binary files a/docs/images/jwt-auth-vs-app-auth-response.jpg and b/docs/images/jwt-auth-vs-app-auth-response.jpg differ
diff --git a/docs/images/jwt-auth-vs-app-auth.jpg b/docs/images/jwt-auth-vs-app-auth.jpg
index e9847b3..c029aed 100644
Binary files a/docs/images/jwt-auth-vs-app-auth.jpg and b/docs/images/jwt-auth-vs-app-auth.jpg differ
diff --git a/docs/images/jwt-auth-vs-app-request-app.jpg b/docs/images/jwt-auth-vs-app-request-app.jpg
index 79ab6d2..1edb1ff 100644
Binary files a/docs/images/jwt-auth-vs-app-request-app.jpg and b/docs/images/jwt-auth-vs-app-request-app.jpg differ
diff --git a/docs/images/jwt-auth-vs-app-start.jpg b/docs/images/jwt-auth-vs-app-start.jpg
index 0f2b437..9a9b977 100644
Binary files a/docs/images/jwt-auth-vs-app-start.jpg and b/docs/images/jwt-auth-vs-app-start.jpg differ
diff --git a/docs/images/nginx-example.jpg b/docs/images/nginx-example.jpg
index bb14b3a..b2e8de3 100644
Binary files a/docs/images/nginx-example.jpg and b/docs/images/nginx-example.jpg differ
diff --git a/docs/reveal/dist/reveal.css b/docs/reveal/dist/reveal.css
new file mode 100644
index 0000000..c1e8f3f
--- /dev/null
+++ b/docs/reveal/dist/reveal.css
@@ -0,0 +1,8 @@
+/*!
+* reveal.js 4.0.0 (Wed May 20 2020)
+* https://revealjs.com
+* MIT licensed
+*
+* Copyright (C) 2020 Hakim El Hattab, https://hakim.se
+*/
+.reveal .r-stretch,.reveal .stretch{max-width:none;max-height:none}.reveal pre.r-stretch code,.reveal pre.stretch code{height:100%;max-height:100%;box-sizing:border-box}.reveal .r-stack{display:grid}.reveal .r-stack>*{grid-area:1/1;margin:auto}.reveal .r-hstack,.reveal .r-vstack{display:flex}.reveal .r-vstack{flex-direction:column}.reveal .r-hstack{flex-direction:row}.reveal .items-center{align-items:center}.reveal .justify-center{justify-content:center}html.reveal-full-page{width:100%;height:100%;height:100vh;height:calc(var(--vh,1vh) * 100);overflow:hidden}.reveal-viewport{height:100%;overflow:hidden;position:relative;line-height:1;margin:0;background-color:#fff;color:#000}.reveal .slides section .fragment{opacity:0;visibility:hidden;transition:all .2s ease;will-change:opacity}.reveal .slides section .fragment.visible{opacity:1;visibility:inherit}.reveal .slides section .fragment.disabled{transition:none}.reveal .slides section .fragment.grow{opacity:1;visibility:inherit}.reveal .slides section .fragment.grow.visible{transform:scale(1.3)}.reveal .slides section .fragment.shrink{opacity:1;visibility:inherit}.reveal .slides section .fragment.shrink.visible{transform:scale(.7)}.reveal .slides section .fragment.zoom-in{transform:scale(.1)}.reveal .slides section .fragment.zoom-in.visible{transform:none}.reveal .slides section .fragment.fade-out{opacity:1;visibility:inherit}.reveal .slides section .fragment.fade-out.visible{opacity:0;visibility:hidden}.reveal .slides section .fragment.semi-fade-out{opacity:1;visibility:inherit}.reveal .slides section .fragment.semi-fade-out.visible{opacity:.5;visibility:inherit}.reveal .slides section .fragment.strike{opacity:1;visibility:inherit}.reveal .slides section .fragment.strike.visible{text-decoration:line-through}.reveal .slides section .fragment.fade-up{transform:translate(0,40px)}.reveal .slides section .fragment.fade-up.visible{transform:translate(0,0)}.reveal .slides section .fragment.fade-down{transform:translate(0,-40px)}.reveal .slides section .fragment.fade-down.visible{transform:translate(0,0)}.reveal .slides section .fragment.fade-right{transform:translate(-40px,0)}.reveal .slides section .fragment.fade-right.visible{transform:translate(0,0)}.reveal .slides section .fragment.fade-left{transform:translate(40px,0)}.reveal .slides section .fragment.fade-left.visible{transform:translate(0,0)}.reveal .slides section .fragment.current-visible,.reveal .slides section .fragment.fade-in-then-out{opacity:0;visibility:hidden}.reveal .slides section .fragment.current-visible.current-fragment,.reveal .slides section .fragment.fade-in-then-out.current-fragment{opacity:1;visibility:inherit}.reveal .slides section .fragment.fade-in-then-semi-out{opacity:0;visibility:hidden}.reveal .slides section .fragment.fade-in-then-semi-out.visible{opacity:.5;visibility:inherit}.reveal .slides section .fragment.fade-in-then-semi-out.current-fragment{opacity:1;visibility:inherit}.reveal .slides section .fragment.highlight-blue,.reveal .slides section .fragment.highlight-current-blue,.reveal .slides section .fragment.highlight-current-green,.reveal .slides section .fragment.highlight-current-red,.reveal .slides section .fragment.highlight-green,.reveal .slides section .fragment.highlight-red{opacity:1;visibility:inherit}.reveal .slides section .fragment.highlight-red.visible{color:#ff2c2d}.reveal .slides section .fragment.highlight-green.visible{color:#17ff2e}.reveal .slides section .fragment.highlight-blue.visible{color:#1b91ff}.reveal .slides section .fragment.highlight-current-red.current-fragment{color:#ff2c2d}.reveal .slides section .fragment.highlight-current-green.current-fragment{color:#17ff2e}.reveal .slides section .fragment.highlight-current-blue.current-fragment{color:#1b91ff}.reveal:after{content:'';font-style:italic}.reveal iframe{z-index:1}.reveal a{position:relative}@keyframes bounce-right{0%,10%,25%,40%,50%{transform:translateX(0)}20%{transform:translateX(10px)}30%{transform:translateX(-5px)}}@keyframes bounce-left{0%,10%,25%,40%,50%{transform:translateX(0)}20%{transform:translateX(-10px)}30%{transform:translateX(5px)}}@keyframes bounce-down{0%,10%,25%,40%,50%{transform:translateY(0)}20%{transform:translateY(10px)}30%{transform:translateY(-5px)}}.reveal .controls{display:none;position:absolute;top:auto;bottom:12px;right:12px;left:auto;z-index:11;color:#000;pointer-events:none;font-size:10px}.reveal .controls button{position:absolute;padding:0;background-color:transparent;border:0;outline:0;cursor:pointer;color:currentColor;transform:scale(.9999);transition:color .2s ease,opacity .2s ease,transform .2s ease;z-index:2;pointer-events:auto;font-size:inherit;visibility:hidden;opacity:0;-webkit-appearance:none;-webkit-tap-highlight-color:transparent}.reveal .controls .controls-arrow:after,.reveal .controls .controls-arrow:before{content:'';position:absolute;top:0;left:0;width:2.6em;height:.5em;border-radius:.25em;background-color:currentColor;transition:all .15s ease,background-color .8s ease;transform-origin:.2em 50%;will-change:transform}.reveal .controls .controls-arrow{position:relative;width:3.6em;height:3.6em}.reveal .controls .controls-arrow:before{transform:translateX(.5em) translateY(1.55em) rotate(45deg)}.reveal .controls .controls-arrow:after{transform:translateX(.5em) translateY(1.55em) rotate(-45deg)}.reveal .controls .controls-arrow:hover:before{transform:translateX(.5em) translateY(1.55em) rotate(40deg)}.reveal .controls .controls-arrow:hover:after{transform:translateX(.5em) translateY(1.55em) rotate(-40deg)}.reveal .controls .controls-arrow:active:before{transform:translateX(.5em) translateY(1.55em) rotate(36deg)}.reveal .controls .controls-arrow:active:after{transform:translateX(.5em) translateY(1.55em) rotate(-36deg)}.reveal .controls .navigate-left{right:6.4em;bottom:3.2em;transform:translateX(-10px)}.reveal .controls .navigate-left.highlight{animation:bounce-left 2s 50 both ease-out}.reveal .controls .navigate-right{right:0;bottom:3.2em;transform:translateX(10px)}.reveal .controls .navigate-right .controls-arrow{transform:rotate(180deg)}.reveal .controls .navigate-right.highlight{animation:bounce-right 2s 50 both ease-out}.reveal .controls .navigate-up{right:3.2em;bottom:6.4em;transform:translateY(-10px)}.reveal .controls .navigate-up .controls-arrow{transform:rotate(90deg)}.reveal .controls .navigate-down{right:3.2em;bottom:-1.4em;padding-bottom:1.4em;transform:translateY(10px)}.reveal .controls .navigate-down .controls-arrow{transform:rotate(-90deg)}.reveal .controls .navigate-down.highlight{animation:bounce-down 2s 50 both ease-out}.reveal .controls[data-controls-back-arrows=faded] .navigate-up.enabled{opacity:.3}.reveal .controls[data-controls-back-arrows=faded] .navigate-up.enabled:hover{opacity:1}.reveal .controls[data-controls-back-arrows=hidden] .navigate-up.enabled{opacity:0;visibility:hidden}.reveal .controls .enabled{visibility:visible;opacity:.9;cursor:pointer;transform:none}.reveal .controls .enabled.fragmented{opacity:.5}.reveal .controls .enabled.fragmented:hover,.reveal .controls .enabled:hover{opacity:1}.reveal:not(.rtl) .controls[data-controls-back-arrows=faded] .navigate-left.enabled{opacity:.3}.reveal:not(.rtl) .controls[data-controls-back-arrows=faded] .navigate-left.enabled:hover{opacity:1}.reveal:not(.rtl) .controls[data-controls-back-arrows=hidden] .navigate-left.enabled{opacity:0;visibility:hidden}.reveal.rtl .controls[data-controls-back-arrows=faded] .navigate-right.enabled{opacity:.3}.reveal.rtl .controls[data-controls-back-arrows=faded] .navigate-right.enabled:hover{opacity:1}.reveal.rtl .controls[data-controls-back-arrows=hidden] .navigate-right.enabled{opacity:0;visibility:hidden}.reveal[data-navigation-mode=linear].has-horizontal-slides .navigate-down,.reveal[data-navigation-mode=linear].has-horizontal-slides .navigate-up{display:none}.reveal:not(.has-vertical-slides) .controls .navigate-left,.reveal[data-navigation-mode=linear].has-horizontal-slides .navigate-left{bottom:1.4em;right:5.5em}.reveal:not(.has-vertical-slides) .controls .navigate-right,.reveal[data-navigation-mode=linear].has-horizontal-slides .navigate-right{bottom:1.4em;right:.5em}.reveal:not(.has-horizontal-slides) .controls .navigate-up{right:1.4em;bottom:5em}.reveal:not(.has-horizontal-slides) .controls .navigate-down{right:1.4em;bottom:.5em}.reveal.has-dark-background .controls{color:#fff}.reveal.has-light-background .controls{color:#000}.reveal.no-hover .controls .controls-arrow:active:before,.reveal.no-hover .controls .controls-arrow:hover:before{transform:translateX(.5em) translateY(1.55em) rotate(45deg)}.reveal.no-hover .controls .controls-arrow:active:after,.reveal.no-hover .controls .controls-arrow:hover:after{transform:translateX(.5em) translateY(1.55em) rotate(-45deg)}@media screen and (min-width:500px){.reveal .controls[data-controls-layout=edges]{top:0;right:0;bottom:0;left:0}.reveal .controls[data-controls-layout=edges] .navigate-down,.reveal .controls[data-controls-layout=edges] .navigate-left,.reveal .controls[data-controls-layout=edges] .navigate-right,.reveal .controls[data-controls-layout=edges] .navigate-up{bottom:auto;right:auto}.reveal .controls[data-controls-layout=edges] .navigate-left{top:50%;left:.8em;margin-top:-1.8em}.reveal .controls[data-controls-layout=edges] .navigate-right{top:50%;right:.8em;margin-top:-1.8em}.reveal .controls[data-controls-layout=edges] .navigate-up{top:.8em;left:50%;margin-left:-1.8em}.reveal .controls[data-controls-layout=edges] .navigate-down{bottom:-.3em;left:50%;margin-left:-1.8em}}.reveal .progress{position:absolute;display:none;height:3px;width:100%;bottom:0;left:0;z-index:10;background-color:rgba(0,0,0,.2);color:#fff}.reveal .progress:after{content:'';display:block;position:absolute;height:10px;width:100%;top:-10px}.reveal .progress span{display:block;height:100%;width:100%;background-color:currentColor;transition:transform .8s cubic-bezier(.26,.86,.44,.985);transform-origin:0 0;transform:scaleX(0)}.reveal .slide-number{position:absolute;display:block;right:8px;bottom:8px;z-index:31;font-family:Helvetica,sans-serif;font-size:12px;line-height:1;color:#fff;background-color:rgba(0,0,0,.4);padding:5px}.reveal .slide-number a{color:currentColor}.reveal .slide-number-delimiter{margin:0 3px}.reveal{position:relative;width:100%;height:100%;overflow:hidden;touch-action:pinch-zoom}.reveal.embedded{touch-action:pan-y}.reveal .slides{position:absolute;width:100%;height:100%;top:0;right:0;bottom:0;left:0;margin:auto;pointer-events:none;overflow:visible;z-index:1;text-align:center;perspective:600px;perspective-origin:50% 40%}.reveal .slides>section{perspective:600px}.reveal .slides>section,.reveal .slides>section>section{display:none;position:absolute;width:100%;padding:20px 0;pointer-events:auto;z-index:10;transform-style:flat;transition:transform-origin .8s cubic-bezier(.26,.86,.44,.985),transform .8s cubic-bezier(.26,.86,.44,.985),visibility .8s cubic-bezier(.26,.86,.44,.985),opacity .8s cubic-bezier(.26,.86,.44,.985)}.reveal[data-transition-speed=fast] .slides section{transition-duration:.4s}.reveal[data-transition-speed=slow] .slides section{transition-duration:1.2s}.reveal .slides section[data-transition-speed=fast]{transition-duration:.4s}.reveal .slides section[data-transition-speed=slow]{transition-duration:1.2s}.reveal .slides>section.stack{padding-top:0;padding-bottom:0;pointer-events:none;height:100%}.reveal .slides>section.present,.reveal .slides>section>section.present{display:block;z-index:11;opacity:1}.reveal .slides>section:empty,.reveal .slides>section>section:empty,.reveal .slides>section>section[data-background-interactive],.reveal .slides>section[data-background-interactive]{pointer-events:none}.reveal.center,.reveal.center .slides,.reveal.center .slides section{min-height:0!important}.reveal .slides>section:not(.present),.reveal .slides>section>section:not(.present){pointer-events:none}.reveal.overview .slides>section,.reveal.overview .slides>section>section{pointer-events:auto}.reveal .slides>section.future,.reveal .slides>section.past,.reveal .slides>section>section.future,.reveal .slides>section>section.past{opacity:0}.reveal.slide section{-webkit-backface-visibility:hidden;backface-visibility:hidden}.reveal .slides>section[data-transition=slide].past,.reveal .slides>section[data-transition~=slide-out].past,.reveal.slide .slides>section:not([data-transition]).past{transform:translate(-150%,0)}.reveal .slides>section[data-transition=slide].future,.reveal .slides>section[data-transition~=slide-in].future,.reveal.slide .slides>section:not([data-transition]).future{transform:translate(150%,0)}.reveal .slides>section>section[data-transition=slide].past,.reveal .slides>section>section[data-transition~=slide-out].past,.reveal.slide .slides>section>section:not([data-transition]).past{transform:translate(0,-150%)}.reveal .slides>section>section[data-transition=slide].future,.reveal .slides>section>section[data-transition~=slide-in].future,.reveal.slide .slides>section>section:not([data-transition]).future{transform:translate(0,150%)}.reveal.linear section{-webkit-backface-visibility:hidden;backface-visibility:hidden}.reveal .slides>section[data-transition=linear].past,.reveal .slides>section[data-transition~=linear-out].past,.reveal.linear .slides>section:not([data-transition]).past{transform:translate(-150%,0)}.reveal .slides>section[data-transition=linear].future,.reveal .slides>section[data-transition~=linear-in].future,.reveal.linear .slides>section:not([data-transition]).future{transform:translate(150%,0)}.reveal .slides>section>section[data-transition=linear].past,.reveal .slides>section>section[data-transition~=linear-out].past,.reveal.linear .slides>section>section:not([data-transition]).past{transform:translate(0,-150%)}.reveal .slides>section>section[data-transition=linear].future,.reveal .slides>section>section[data-transition~=linear-in].future,.reveal.linear .slides>section>section:not([data-transition]).future{transform:translate(0,150%)}.reveal .slides section[data-transition=default].stack,.reveal.default .slides section.stack{transform-style:preserve-3d}.reveal .slides>section[data-transition=default].past,.reveal .slides>section[data-transition~=default-out].past,.reveal.default .slides>section:not([data-transition]).past{transform:translate3d(-100%,0,0) rotateY(-90deg) translate3d(-100%,0,0)}.reveal .slides>section[data-transition=default].future,.reveal .slides>section[data-transition~=default-in].future,.reveal.default .slides>section:not([data-transition]).future{transform:translate3d(100%,0,0) rotateY(90deg) translate3d(100%,0,0)}.reveal .slides>section>section[data-transition=default].past,.reveal .slides>section>section[data-transition~=default-out].past,.reveal.default .slides>section>section:not([data-transition]).past{transform:translate3d(0,-300px,0) rotateX(70deg) translate3d(0,-300px,0)}.reveal .slides>section>section[data-transition=default].future,.reveal .slides>section>section[data-transition~=default-in].future,.reveal.default .slides>section>section:not([data-transition]).future{transform:translate3d(0,300px,0) rotateX(-70deg) translate3d(0,300px,0)}.reveal .slides section[data-transition=convex].stack,.reveal.convex .slides section.stack{transform-style:preserve-3d}.reveal .slides>section[data-transition=convex].past,.reveal .slides>section[data-transition~=convex-out].past,.reveal.convex .slides>section:not([data-transition]).past{transform:translate3d(-100%,0,0) rotateY(-90deg) translate3d(-100%,0,0)}.reveal .slides>section[data-transition=convex].future,.reveal .slides>section[data-transition~=convex-in].future,.reveal.convex .slides>section:not([data-transition]).future{transform:translate3d(100%,0,0) rotateY(90deg) translate3d(100%,0,0)}.reveal .slides>section>section[data-transition=convex].past,.reveal .slides>section>section[data-transition~=convex-out].past,.reveal.convex .slides>section>section:not([data-transition]).past{transform:translate3d(0,-300px,0) rotateX(70deg) translate3d(0,-300px,0)}.reveal .slides>section>section[data-transition=convex].future,.reveal .slides>section>section[data-transition~=convex-in].future,.reveal.convex .slides>section>section:not([data-transition]).future{transform:translate3d(0,300px,0) rotateX(-70deg) translate3d(0,300px,0)}.reveal .slides section[data-transition=concave].stack,.reveal.concave .slides section.stack{transform-style:preserve-3d}.reveal .slides>section[data-transition=concave].past,.reveal .slides>section[data-transition~=concave-out].past,.reveal.concave .slides>section:not([data-transition]).past{transform:translate3d(-100%,0,0) rotateY(90deg) translate3d(-100%,0,0)}.reveal .slides>section[data-transition=concave].future,.reveal .slides>section[data-transition~=concave-in].future,.reveal.concave .slides>section:not([data-transition]).future{transform:translate3d(100%,0,0) rotateY(-90deg) translate3d(100%,0,0)}.reveal .slides>section>section[data-transition=concave].past,.reveal .slides>section>section[data-transition~=concave-out].past,.reveal.concave .slides>section>section:not([data-transition]).past{transform:translate3d(0,-80%,0) rotateX(-70deg) translate3d(0,-80%,0)}.reveal .slides>section>section[data-transition=concave].future,.reveal .slides>section>section[data-transition~=concave-in].future,.reveal.concave .slides>section>section:not([data-transition]).future{transform:translate3d(0,80%,0) rotateX(70deg) translate3d(0,80%,0)}.reveal .slides section[data-transition=zoom],.reveal.zoom .slides section:not([data-transition]){transition-timing-function:ease}.reveal .slides>section[data-transition=zoom].past,.reveal .slides>section[data-transition~=zoom-out].past,.reveal.zoom .slides>section:not([data-transition]).past{visibility:hidden;transform:scale(16)}.reveal .slides>section[data-transition=zoom].future,.reveal .slides>section[data-transition~=zoom-in].future,.reveal.zoom .slides>section:not([data-transition]).future{visibility:hidden;transform:scale(.2)}.reveal .slides>section>section[data-transition=zoom].past,.reveal .slides>section>section[data-transition~=zoom-out].past,.reveal.zoom .slides>section>section:not([data-transition]).past{transform:scale(16)}.reveal .slides>section>section[data-transition=zoom].future,.reveal .slides>section>section[data-transition~=zoom-in].future,.reveal.zoom .slides>section>section:not([data-transition]).future{transform:scale(.2)}.reveal.cube .slides{perspective:1300px}.reveal.cube .slides section{padding:30px;min-height:700px;-webkit-backface-visibility:hidden;backface-visibility:hidden;box-sizing:border-box;transform-style:preserve-3d}.reveal.center.cube .slides section{min-height:0}.reveal.cube .slides section:not(.stack):before{content:'';position:absolute;display:block;width:100%;height:100%;left:0;top:0;background:rgba(0,0,0,.1);border-radius:4px;transform:translateZ(-20px)}.reveal.cube .slides section:not(.stack):after{content:'';position:absolute;display:block;width:90%;height:30px;left:5%;bottom:0;background:0 0;z-index:1;border-radius:4px;box-shadow:0 95px 25px rgba(0,0,0,.2);transform:translateZ(-90px) rotateX(65deg)}.reveal.cube .slides>section.stack{padding:0;background:0 0}.reveal.cube .slides>section.past{transform-origin:100% 0;transform:translate3d(-100%,0,0) rotateY(-90deg)}.reveal.cube .slides>section.future{transform-origin:0 0;transform:translate3d(100%,0,0) rotateY(90deg)}.reveal.cube .slides>section>section.past{transform-origin:0 100%;transform:translate3d(0,-100%,0) rotateX(90deg)}.reveal.cube .slides>section>section.future{transform-origin:0 0;transform:translate3d(0,100%,0) rotateX(-90deg)}.reveal.page .slides{perspective-origin:0 50%;perspective:3000px}.reveal.page .slides section{padding:30px;min-height:700px;box-sizing:border-box;transform-style:preserve-3d}.reveal.page .slides section.past{z-index:12}.reveal.page .slides section:not(.stack):before{content:'';position:absolute;display:block;width:100%;height:100%;left:0;top:0;background:rgba(0,0,0,.1);transform:translateZ(-20px)}.reveal.page .slides section:not(.stack):after{content:'';position:absolute;display:block;width:90%;height:30px;left:5%;bottom:0;background:0 0;z-index:1;border-radius:4px;box-shadow:0 95px 25px rgba(0,0,0,.2);-webkit-transform:translateZ(-90px) rotateX(65deg)}.reveal.page .slides>section.stack{padding:0;background:0 0}.reveal.page .slides>section.past{transform-origin:0 0;transform:translate3d(-40%,0,0) rotateY(-80deg)}.reveal.page .slides>section.future{transform-origin:100% 0;transform:translate3d(0,0,0)}.reveal.page .slides>section>section.past{transform-origin:0 0;transform:translate3d(0,-40%,0) rotateX(80deg)}.reveal.page .slides>section>section.future{transform-origin:0 100%;transform:translate3d(0,0,0)}.reveal .slides section[data-transition=fade],.reveal.fade .slides section:not([data-transition]),.reveal.fade .slides>section>section:not([data-transition]){transform:none;transition:opacity .5s}.reveal.fade.overview .slides section,.reveal.fade.overview .slides>section>section{transition:none}.reveal .slides section[data-transition=none],.reveal.none .slides section:not([data-transition]){transform:none;transition:none}.reveal .pause-overlay{position:absolute;top:0;left:0;width:100%;height:100%;background:#000;visibility:hidden;opacity:0;z-index:100;transition:all 1s ease}.reveal .pause-overlay .resume-button{position:absolute;bottom:20px;right:20px;color:#ccc;border-radius:2px;padding:6px 14px;border:2px solid #ccc;font-size:16px;background:0 0;cursor:pointer}.reveal .pause-overlay .resume-button:hover{color:#fff;border-color:#fff}.reveal.paused .pause-overlay{visibility:visible;opacity:1}.reveal .no-transition,.reveal .no-transition *,.reveal .slides.disable-slide-transitions section{transition:none!important}.reveal .slides.disable-slide-transitions section{transform:none!important}.reveal .backgrounds{position:absolute;width:100%;height:100%;top:0;left:0;perspective:600px}.reveal .slide-background{display:none;position:absolute;width:100%;height:100%;opacity:0;visibility:hidden;overflow:hidden;background-color:rgba(0,0,0,0);transition:all .8s cubic-bezier(.26,.86,.44,.985)}.reveal .slide-background-content{position:absolute;width:100%;height:100%;background-position:50% 50%;background-repeat:no-repeat;background-size:cover}.reveal .slide-background.stack{display:block}.reveal .slide-background.present{opacity:1;visibility:visible;z-index:2}.print-pdf .reveal .slide-background{opacity:1!important;visibility:visible!important}.reveal .slide-background video{position:absolute;width:100%;height:100%;max-width:none;max-height:none;top:0;left:0;-o-object-fit:cover;object-fit:cover}.reveal .slide-background[data-background-size=contain] video{-o-object-fit:contain;object-fit:contain}.reveal>.backgrounds .slide-background[data-background-transition=none],.reveal[data-background-transition=none]>.backgrounds .slide-background{transition:none}.reveal>.backgrounds .slide-background[data-background-transition=slide],.reveal[data-background-transition=slide]>.backgrounds .slide-background{opacity:1;-webkit-backface-visibility:hidden;backface-visibility:hidden}.reveal>.backgrounds .slide-background.past[data-background-transition=slide],.reveal[data-background-transition=slide]>.backgrounds .slide-background.past{transform:translate(-100%,0)}.reveal>.backgrounds .slide-background.future[data-background-transition=slide],.reveal[data-background-transition=slide]>.backgrounds .slide-background.future{transform:translate(100%,0)}.reveal>.backgrounds .slide-background>.slide-background.past[data-background-transition=slide],.reveal[data-background-transition=slide]>.backgrounds .slide-background>.slide-background.past{transform:translate(0,-100%)}.reveal>.backgrounds .slide-background>.slide-background.future[data-background-transition=slide],.reveal[data-background-transition=slide]>.backgrounds .slide-background>.slide-background.future{transform:translate(0,100%)}.reveal>.backgrounds .slide-background.past[data-background-transition=convex],.reveal[data-background-transition=convex]>.backgrounds .slide-background.past{opacity:0;transform:translate3d(-100%,0,0) rotateY(-90deg) translate3d(-100%,0,0)}.reveal>.backgrounds .slide-background.future[data-background-transition=convex],.reveal[data-background-transition=convex]>.backgrounds .slide-background.future{opacity:0;transform:translate3d(100%,0,0) rotateY(90deg) translate3d(100%,0,0)}.reveal>.backgrounds .slide-background>.slide-background.past[data-background-transition=convex],.reveal[data-background-transition=convex]>.backgrounds .slide-background>.slide-background.past{opacity:0;transform:translate3d(0,-100%,0) rotateX(90deg) translate3d(0,-100%,0)}.reveal>.backgrounds .slide-background>.slide-background.future[data-background-transition=convex],.reveal[data-background-transition=convex]>.backgrounds .slide-background>.slide-background.future{opacity:0;transform:translate3d(0,100%,0) rotateX(-90deg) translate3d(0,100%,0)}.reveal>.backgrounds .slide-background.past[data-background-transition=concave],.reveal[data-background-transition=concave]>.backgrounds .slide-background.past{opacity:0;transform:translate3d(-100%,0,0) rotateY(90deg) translate3d(-100%,0,0)}.reveal>.backgrounds .slide-background.future[data-background-transition=concave],.reveal[data-background-transition=concave]>.backgrounds .slide-background.future{opacity:0;transform:translate3d(100%,0,0) rotateY(-90deg) translate3d(100%,0,0)}.reveal>.backgrounds .slide-background>.slide-background.past[data-background-transition=concave],.reveal[data-background-transition=concave]>.backgrounds .slide-background>.slide-background.past{opacity:0;transform:translate3d(0,-100%,0) rotateX(-90deg) translate3d(0,-100%,0)}.reveal>.backgrounds .slide-background>.slide-background.future[data-background-transition=concave],.reveal[data-background-transition=concave]>.backgrounds .slide-background>.slide-background.future{opacity:0;transform:translate3d(0,100%,0) rotateX(90deg) translate3d(0,100%,0)}.reveal>.backgrounds .slide-background[data-background-transition=zoom],.reveal[data-background-transition=zoom]>.backgrounds .slide-background{transition-timing-function:ease}.reveal>.backgrounds .slide-background.past[data-background-transition=zoom],.reveal[data-background-transition=zoom]>.backgrounds .slide-background.past{opacity:0;visibility:hidden;transform:scale(16)}.reveal>.backgrounds .slide-background.future[data-background-transition=zoom],.reveal[data-background-transition=zoom]>.backgrounds .slide-background.future{opacity:0;visibility:hidden;transform:scale(.2)}.reveal>.backgrounds .slide-background>.slide-background.past[data-background-transition=zoom],.reveal[data-background-transition=zoom]>.backgrounds .slide-background>.slide-background.past{opacity:0;visibility:hidden;transform:scale(16)}.reveal>.backgrounds .slide-background>.slide-background.future[data-background-transition=zoom],.reveal[data-background-transition=zoom]>.backgrounds .slide-background>.slide-background.future{opacity:0;visibility:hidden;transform:scale(.2)}.reveal[data-transition-speed=fast]>.backgrounds .slide-background{transition-duration:.4s}.reveal[data-transition-speed=slow]>.backgrounds .slide-background{transition-duration:1.2s}.reveal [data-auto-animate-target^=unmatched]{will-change:opacity}.reveal section[data-auto-animate]:not(.stack):not([data-auto-animate=running]) [data-auto-animate-target^=unmatched]{opacity:0}.reveal.overview{perspective-origin:50% 50%;perspective:700px}.reveal.overview .slides{-moz-transform-style:preserve-3d}.reveal.overview .slides section{height:100%;top:0!important;opacity:1!important;overflow:hidden;visibility:visible!important;cursor:pointer;box-sizing:border-box}.reveal.overview .slides section.present,.reveal.overview .slides section:hover{outline:10px solid rgba(150,150,150,.4);outline-offset:10px}.reveal.overview .slides section .fragment{opacity:1;transition:none}.reveal.overview .slides section:after,.reveal.overview .slides section:before{display:none!important}.reveal.overview .slides>section.stack{padding:0;top:0!important;background:0 0;outline:0;overflow:visible}.reveal.overview .backgrounds{perspective:inherit;-moz-transform-style:preserve-3d}.reveal.overview .backgrounds .slide-background{opacity:1;visibility:visible;outline:10px solid rgba(150,150,150,.1);outline-offset:10px}.reveal.overview .backgrounds .slide-background.stack{overflow:visible}.reveal.overview .slides section,.reveal.overview-deactivating .slides section{transition:none}.reveal.overview .backgrounds .slide-background,.reveal.overview-deactivating .backgrounds .slide-background{transition:none}.reveal.rtl .slides,.reveal.rtl .slides h1,.reveal.rtl .slides h2,.reveal.rtl .slides h3,.reveal.rtl .slides h4,.reveal.rtl .slides h5,.reveal.rtl .slides h6{direction:rtl;font-family:sans-serif}.reveal.rtl code,.reveal.rtl pre{direction:ltr}.reveal.rtl ol,.reveal.rtl ul{text-align:right}.reveal.rtl .progress span{float:right}.reveal.has-parallax-background .backgrounds{transition:all .8s ease}.reveal.has-parallax-background[data-transition-speed=fast] .backgrounds{transition-duration:.4s}.reveal.has-parallax-background[data-transition-speed=slow] .backgrounds{transition-duration:1.2s}.reveal>.overlay{position:absolute;top:0;left:0;width:100%;height:100%;z-index:1000;background:rgba(0,0,0,.9);transition:all .3s ease}.reveal>.overlay .spinner{position:absolute;display:block;top:50%;left:50%;width:32px;height:32px;margin:-16px 0 0 -16px;z-index:10;background-image:url(data:image/gif;base64,R0lGODlhIAAgAPMAAJmZmf%2F%2F%2F6%2Bvr8nJybW1tcDAwOjo6Nvb26ioqKOjo7Ozs%2FLy8vz8%2FAAAAAAAAAAAACH%2FC05FVFNDQVBFMi4wAwEAAAAh%2FhpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh%2BQQJCgAAACwAAAAAIAAgAAAE5xDISWlhperN52JLhSSdRgwVo1ICQZRUsiwHpTJT4iowNS8vyW2icCF6k8HMMBkCEDskxTBDAZwuAkkqIfxIQyhBQBFvAQSDITM5VDW6XNE4KagNh6Bgwe60smQUB3d4Rz1ZBApnFASDd0hihh12BkE9kjAJVlycXIg7CQIFA6SlnJ87paqbSKiKoqusnbMdmDC2tXQlkUhziYtyWTxIfy6BE8WJt5YJvpJivxNaGmLHT0VnOgSYf0dZXS7APdpB309RnHOG5gDqXGLDaC457D1zZ%2FV%2FnmOM82XiHRLYKhKP1oZmADdEAAAh%2BQQJCgAAACwAAAAAIAAgAAAE6hDISWlZpOrNp1lGNRSdRpDUolIGw5RUYhhHukqFu8DsrEyqnWThGvAmhVlteBvojpTDDBUEIFwMFBRAmBkSgOrBFZogCASwBDEY%2FCZSg7GSE0gSCjQBMVG023xWBhklAnoEdhQEfyNqMIcKjhRsjEdnezB%2BA4k8gTwJhFuiW4dokXiloUepBAp5qaKpp6%2BHo7aWW54wl7obvEe0kRuoplCGepwSx2jJvqHEmGt6whJpGpfJCHmOoNHKaHx61WiSR92E4lbFoq%2BB6QDtuetcaBPnW6%2BO7wDHpIiK9SaVK5GgV543tzjgGcghAgAh%2BQQJCgAAACwAAAAAIAAgAAAE7hDISSkxpOrN5zFHNWRdhSiVoVLHspRUMoyUakyEe8PTPCATW9A14E0UvuAKMNAZKYUZCiBMuBakSQKG8G2FzUWox2AUtAQFcBKlVQoLgQReZhQlCIJesQXI5B0CBnUMOxMCenoCfTCEWBsJColTMANldx15BGs8B5wlCZ9Po6OJkwmRpnqkqnuSrayqfKmqpLajoiW5HJq7FL1Gr2mMMcKUMIiJgIemy7xZtJsTmsM4xHiKv5KMCXqfyUCJEonXPN2rAOIAmsfB3uPoAK%2B%2BG%2Bw48edZPK%2BM6hLJpQg484enXIdQFSS1u6UhksENEQAAIfkECQoAAAAsAAAAACAAIAAABOcQyEmpGKLqzWcZRVUQnZYg1aBSh2GUVEIQ2aQOE%2BG%2BcD4ntpWkZQj1JIiZIogDFFyHI0UxQwFugMSOFIPJftfVAEoZLBbcLEFhlQiqGp1Vd140AUklUN3eCA51C1EWMzMCezCBBmkxVIVHBWd3HHl9JQOIJSdSnJ0TDKChCwUJjoWMPaGqDKannasMo6WnM562R5YluZRwur0wpgqZE7NKUm%2BFNRPIhjBJxKZteWuIBMN4zRMIVIhffcgojwCF117i4nlLnY5ztRLsnOk%2BaV%2BoJY7V7m76PdkS4trKcdg0Zc0tTcKkRAAAIfkECQoAAAAsAAAAACAAIAAABO4QyEkpKqjqzScpRaVkXZWQEximw1BSCUEIlDohrft6cpKCk5xid5MNJTaAIkekKGQkWyKHkvhKsR7ARmitkAYDYRIbUQRQjWBwJRzChi9CRlBcY1UN4g0%2FVNB0AlcvcAYHRyZPdEQFYV8ccwR5HWxEJ02YmRMLnJ1xCYp0Y5idpQuhopmmC2KgojKasUQDk5BNAwwMOh2RtRq5uQuPZKGIJQIGwAwGf6I0JXMpC8C7kXWDBINFMxS4DKMAWVWAGYsAdNqW5uaRxkSKJOZKaU3tPOBZ4DuK2LATgJhkPJMgTwKCdFjyPHEnKxFCDhEAACH5BAkKAAAALAAAAAAgACAAAATzEMhJaVKp6s2nIkolIJ2WkBShpkVRWqqQrhLSEu9MZJKK9y1ZrqYK9WiClmvoUaF8gIQSNeF1Er4MNFn4SRSDARWroAIETg1iVwuHjYB1kYc1mwruwXKC9gmsJXliGxc%2BXiUCby9ydh1sOSdMkpMTBpaXBzsfhoc5l58Gm5yToAaZhaOUqjkDgCWNHAULCwOLaTmzswadEqggQwgHuQsHIoZCHQMMQgQGubVEcxOPFAcMDAYUA85eWARmfSRQCdcMe0zeP1AAygwLlJtPNAAL19DARdPzBOWSm1brJBi45soRAWQAAkrQIykShQ9wVhHCwCQCACH5BAkKAAAALAAAAAAgACAAAATrEMhJaVKp6s2nIkqFZF2VIBWhUsJaTokqUCoBq%2BE71SRQeyqUToLA7VxF0JDyIQh%2FMVVPMt1ECZlfcjZJ9mIKoaTl1MRIl5o4CUKXOwmyrCInCKqcWtvadL2SYhyASyNDJ0uIiRMDjI0Fd30%2FiI2UA5GSS5UDj2l6NoqgOgN4gksEBgYFf0FDqKgHnyZ9OX8HrgYHdHpcHQULXAS2qKpENRg7eAMLC7kTBaixUYFkKAzWAAnLC7FLVxLWDBLKCwaKTULgEwbLA4hJtOkSBNqITT3xEgfLpBtzE%2FjiuL04RGEBgwWhShRgQExHBAAh%2BQQJCgAAACwAAAAAIAAgAAAE7xDISWlSqerNpyJKhWRdlSAVoVLCWk6JKlAqAavhO9UkUHsqlE6CwO1cRdCQ8iEIfzFVTzLdRAmZX3I2SfZiCqGk5dTESJeaOAlClzsJsqwiJwiqnFrb2nS9kmIcgEsjQydLiIlHehhpejaIjzh9eomSjZR%2BipslWIRLAgMDOR2DOqKogTB9pCUJBagDBXR6XB0EBkIIsaRsGGMMAxoDBgYHTKJiUYEGDAzHC9EACcUGkIgFzgwZ0QsSBcXHiQvOwgDdEwfFs0sDzt4S6BK4xYjkDOzn0unFeBzOBijIm1Dgmg5YFQwsCMjp1oJ8LyIAACH5BAkKAAAALAAAAAAgACAAAATwEMhJaVKp6s2nIkqFZF2VIBWhUsJaTokqUCoBq%2BE71SRQeyqUToLA7VxF0JDyIQh%2FMVVPMt1ECZlfcjZJ9mIKoaTl1MRIl5o4CUKXOwmyrCInCKqcWtvadL2SYhyASyNDJ0uIiUd6GGl6NoiPOH16iZKNlH6KmyWFOggHhEEvAwwMA0N9GBsEC6amhnVcEwavDAazGwIDaH1ipaYLBUTCGgQDA8NdHz0FpqgTBwsLqAbWAAnIA4FWKdMLGdYGEgraigbT0OITBcg5QwPT4xLrROZL6AuQAPUS7bxLpoWidY0JtxLHKhwwMJBTHgPKdEQAACH5BAkKAAAALAAAAAAgACAAAATrEMhJaVKp6s2nIkqFZF2VIBWhUsJaTokqUCoBq%2BE71SRQeyqUToLA7VxF0JDyIQh%2FMVVPMt1ECZlfcjZJ9mIKoaTl1MRIl5o4CUKXOwmyrCInCKqcWtvadL2SYhyASyNDJ0uIiUd6GAULDJCRiXo1CpGXDJOUjY%2BYip9DhToJA4RBLwMLCwVDfRgbBAaqqoZ1XBMHswsHtxtFaH1iqaoGNgAIxRpbFAgfPQSqpbgGBqUD1wBXeCYp1AYZ19JJOYgH1KwA4UBvQwXUBxPqVD9L3sbp2BNk2xvvFPJd%2BMFCN6HAAIKgNggY0KtEBAAh%2BQQJCgAAACwAAAAAIAAgAAAE6BDISWlSqerNpyJKhWRdlSAVoVLCWk6JKlAqAavhO9UkUHsqlE6CwO1cRdCQ8iEIfzFVTzLdRAmZX3I2SfYIDMaAFdTESJeaEDAIMxYFqrOUaNW4E4ObYcCXaiBVEgULe0NJaxxtYksjh2NLkZISgDgJhHthkpU4mW6blRiYmZOlh4JWkDqILwUGBnE6TYEbCgevr0N1gH4At7gHiRpFaLNrrq8HNgAJA70AWxQIH1%2BvsYMDAzZQPC9VCNkDWUhGkuE5PxJNwiUK4UfLzOlD4WvzAHaoG9nxPi5d%2BjYUqfAhhykOFwJWiAAAIfkECQoAAAAsAAAAACAAIAAABPAQyElpUqnqzaciSoVkXVUMFaFSwlpOCcMYlErAavhOMnNLNo8KsZsMZItJEIDIFSkLGQoQTNhIsFehRww2CQLKF0tYGKYSg%2BygsZIuNqJksKgbfgIGepNo2cIUB3V1B3IvNiBYNQaDSTtfhhx0CwVPI0UJe0%2Bbm4g5VgcGoqOcnjmjqDSdnhgEoamcsZuXO1aWQy8KAwOAuTYYGwi7w5h%2BKr0SJ8MFihpNbx%2B4Erq7BYBuzsdiH1jCAzoSfl0rVirNbRXlBBlLX%2BBP0XJLAPGzTkAuAOqb0WT5AH7OcdCm5B8TgRwSRKIHQtaLCwg1RAAAOwAAAAAAAAAAAA%3D%3D);visibility:visible;opacity:.6;transition:all .3s ease}.reveal>.overlay header{position:absolute;left:0;top:0;width:100%;padding:5px;z-index:2;box-sizing:border-box}.reveal>.overlay header a{display:inline-block;width:40px;height:40px;line-height:36px;padding:0 10px;float:right;opacity:.6;box-sizing:border-box}.reveal>.overlay header a:hover{opacity:1}.reveal>.overlay header a .icon{display:inline-block;width:20px;height:20px;background-position:50% 50%;background-size:100%;background-repeat:no-repeat}.reveal>.overlay header a.close .icon{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAABkklEQVRYR8WX4VHDMAxG6wnoJrABZQPYBCaBTWAD2g1gE5gg6OOsXuxIlr40d81dfrSJ9V4c2VLK7spHuTJ/5wpM07QXuXc5X0opX2tEJcadjHuV80li/FgxTIEK/5QBCICBD6xEhSMGHgQPgBgLiYVAB1dpSqKDawxTohFw4JSEA3clzgIBPCURwE2JucBR7rhPJJv5OpJwDX+SfDjgx1wACQeJG1aChP9K/IMmdZ8DtESV1WyP3Bt4MwM6sj4NMxMYiqUWHQu4KYA/SYkIjOsm3BXYWMKFDwU2khjCQ4ELJUJ4SmClRArOCmSXGuKma0fYD5CbzHxFpCSGAhfAVSSUGDUk2BWZaff2g6GE15BsBQ9nwmpIGDiyHQddwNTMKkbZaf9fajXQca1EX44puJZUsnY0ObGmITE3GVLCbEhQUjGVt146j6oasWN+49Vph2w1pZ5EansNZqKBm1txbU57iRRcZ86RWMDdWtBJUHBHwoQPi1GV+JCbntmvok7iTX4/Up9mgyTc/FJYDTcndgH/AA5A/CHsyEkVAAAAAElFTkSuQmCC)}.reveal>.overlay header a.external .icon{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAcElEQVRYR+2WSQoAIQwEzf8f7XiOMkUQxUPlGkM3hVmiQfQR9GYnH1SsAQlI4DiBqkCMoNb9y2e90IAEJPAcgdznU9+engMaeJ7Azh5Y1U67gAho4DqBqmB1buAf0MB1AlVBek83ZPkmJMGc1wAR+AAqod/B97TRpQAAAABJRU5ErkJggg==)}.reveal>.overlay .viewport{position:absolute;display:flex;top:50px;right:0;bottom:0;left:0}.reveal>.overlay.overlay-preview .viewport iframe{width:100%;height:100%;max-width:100%;max-height:100%;border:0;opacity:0;visibility:hidden;transition:all .3s ease}.reveal>.overlay.overlay-preview.loaded .viewport iframe{opacity:1;visibility:visible}.reveal>.overlay.overlay-preview.loaded .viewport-inner{position:absolute;z-index:-1;left:0;top:45%;width:100%;text-align:center;letter-spacing:normal}.reveal>.overlay.overlay-preview .x-frame-error{opacity:0;transition:opacity .3s ease .3s}.reveal>.overlay.overlay-preview.loaded .x-frame-error{opacity:1}.reveal>.overlay.overlay-preview.loaded .spinner{opacity:0;visibility:hidden;transform:scale(.2)}.reveal>.overlay.overlay-help .viewport{overflow:auto;color:#fff}.reveal>.overlay.overlay-help .viewport .viewport-inner{width:600px;margin:auto;padding:20px 20px 80px 20px;text-align:center;letter-spacing:normal}.reveal>.overlay.overlay-help .viewport .viewport-inner .title{font-size:20px}.reveal>.overlay.overlay-help .viewport .viewport-inner table{border:1px solid #fff;border-collapse:collapse;font-size:16px}.reveal>.overlay.overlay-help .viewport .viewport-inner table td,.reveal>.overlay.overlay-help .viewport .viewport-inner table th{width:200px;padding:14px;border:1px solid #fff;vertical-align:middle}.reveal>.overlay.overlay-help .viewport .viewport-inner table th{padding-top:20px;padding-bottom:20px}.reveal .playback{position:absolute;left:15px;bottom:20px;z-index:30;cursor:pointer;transition:all .4s ease;-webkit-tap-highlight-color:transparent}.reveal.overview .playback{opacity:0;visibility:hidden}.reveal .hljs{min-height:100%}.reveal .hljs table{margin:initial}.reveal .hljs-ln-code,.reveal .hljs-ln-numbers{padding:0;border:0}.reveal .hljs-ln-numbers{opacity:.6;padding-right:.75em;text-align:right;vertical-align:top}.reveal .hljs.has-highlights tr:not(.highlight-line){opacity:.4}.reveal .hljs:not(:first-child).fragment{position:absolute;top:0;left:0;width:100%;box-sizing:border-box}.reveal pre[data-auto-animate-target]{overflow:hidden}.reveal pre[data-auto-animate-target] code{height:100%}.reveal .roll{display:inline-block;line-height:1.2;overflow:hidden;vertical-align:top;perspective:400px;perspective-origin:50% 50%}.reveal .roll:hover{background:0 0;text-shadow:none}.reveal .roll span{display:block;position:relative;padding:0 2px;pointer-events:none;transition:all .4s ease;transform-origin:50% 0;transform-style:preserve-3d;-webkit-backface-visibility:hidden;backface-visibility:hidden}.reveal .roll:hover span{background:rgba(0,0,0,.5);transform:translate3d(0,0,-45px) rotateX(90deg)}.reveal .roll span:after{content:attr(data-title);display:block;position:absolute;left:0;top:0;padding:0 2px;-webkit-backface-visibility:hidden;backface-visibility:hidden;transform-origin:50% 0;transform:translate3d(0,110%,0) rotateX(-90deg)}.reveal aside.notes{display:none}.reveal .speaker-notes{display:none;position:absolute;width:33.33333%;height:100%;top:0;left:100%;padding:14px 18px 14px 18px;z-index:1;font-size:18px;line-height:1.4;border:1px solid rgba(0,0,0,.05);color:#222;background-color:#f5f5f5;overflow:auto;box-sizing:border-box;text-align:left;font-family:Helvetica,sans-serif;-webkit-overflow-scrolling:touch}.reveal .speaker-notes .notes-placeholder{color:#ccc;font-style:italic}.reveal .speaker-notes:focus{outline:0}.reveal .speaker-notes:before{content:'Speaker notes';display:block;margin-bottom:10px;opacity:.5}.reveal.show-notes{max-width:75%;overflow:visible}.reveal.show-notes .speaker-notes{display:block}@media screen and (min-width:1600px){.reveal .speaker-notes{font-size:20px}}@media screen and (max-width:1024px){.reveal.show-notes{border-left:0;max-width:none;max-height:70%;max-height:70vh;overflow:visible}.reveal.show-notes .speaker-notes{top:100%;left:0;width:100%;height:42.85714%;height:30vh;border:0}}@media screen and (max-width:600px){.reveal.show-notes{max-height:60%;max-height:60vh}.reveal.show-notes .speaker-notes{top:100%;height:66.66667%;height:40vh}.reveal .speaker-notes{font-size:14px}}.zoomed .reveal *,.zoomed .reveal :after,.zoomed .reveal :before{-webkit-backface-visibility:visible!important;backface-visibility:visible!important}.zoomed .reveal .controls,.zoomed .reveal .progress{opacity:0}.zoomed .reveal .roll span{background:0 0}.zoomed .reveal .roll span:after{visibility:hidden}html.print-pdf *{-webkit-print-color-adjust:exact}html.print-pdf{width:100%;height:100%;overflow:visible}html.print-pdf body{margin:0 auto!important;border:0;padding:0;float:none!important;overflow:visible}html.print-pdf .fork-reveal,html.print-pdf .nestedarrow,html.print-pdf .reveal .controls,html.print-pdf .reveal .playback,html.print-pdf .reveal .progress,html.print-pdf .reveal.overview,html.print-pdf .share-reveal,html.print-pdf .state-background{display:none!important}html.print-pdf h1,html.print-pdf h2,html.print-pdf h3,html.print-pdf h4,html.print-pdf h5,html.print-pdf h6{text-shadow:0 0 0 #000!important}html.print-pdf .reveal pre code{overflow:hidden!important;font-family:Courier,'Courier New',monospace!important}html.print-pdf div,html.print-pdf ol,html.print-pdf p,html.print-pdf ul{visibility:visible;position:static;width:auto;height:auto;display:block;overflow:visible;margin:auto}html.print-pdf .reveal{width:auto!important;height:auto!important;overflow:hidden!important}html.print-pdf .reveal .slides{position:static;width:100%!important;height:auto!important;zoom:1!important;pointer-events:initial;left:auto;top:auto;margin:0!important;padding:0!important;overflow:visible;display:block;perspective:none;perspective-origin:50% 50%}html.print-pdf .reveal .slides .pdf-page{position:relative;overflow:hidden;z-index:1;page-break-after:always}html.print-pdf .reveal .slides section{visibility:visible!important;display:block!important;position:absolute!important;margin:0!important;padding:0!important;box-sizing:border-box!important;min-height:1px;opacity:1!important;transform-style:flat!important;transform:none!important}html.print-pdf .reveal section.stack{position:relative!important;margin:0!important;padding:0!important;page-break-after:avoid!important;height:auto!important;min-height:auto!important}html.print-pdf .reveal img{box-shadow:none}html.print-pdf .reveal .roll{overflow:visible;line-height:1em}html.print-pdf .reveal .slide-background{display:block!important;position:absolute;top:0;left:0;width:100%;height:100%;z-index:auto!important}html.print-pdf .reveal.show-notes{max-width:none;max-height:none}html.print-pdf .reveal .speaker-notes-pdf{display:block;width:100%;height:auto;max-height:none;top:auto;right:auto;bottom:auto;left:auto;z-index:100}html.print-pdf .reveal .speaker-notes-pdf[data-layout=separate-page]{position:relative;color:inherit;background-color:transparent;padding:20px;page-break-after:always;border:0}html.print-pdf .reveal .slide-number-pdf{display:block;position:absolute;font-size:14px}html.print-pdf .aria-status{display:none}@media print{html:not(.print-pdf){background:#fff;width:auto;height:auto;overflow:visible}html:not(.print-pdf) body{background:#fff;font-size:20pt;width:auto;height:auto;border:0;margin:0 5%;padding:0;overflow:visible;float:none!important}html:not(.print-pdf) .controls,html:not(.print-pdf) .fork-reveal,html:not(.print-pdf) .nestedarrow,html:not(.print-pdf) .reveal .backgrounds,html:not(.print-pdf) .reveal .progress,html:not(.print-pdf) .reveal .slide-number,html:not(.print-pdf) .share-reveal,html:not(.print-pdf) .state-background{display:none!important}html:not(.print-pdf) body,html:not(.print-pdf) li,html:not(.print-pdf) p,html:not(.print-pdf) td{font-size:20pt!important;color:#000}html:not(.print-pdf) h1,html:not(.print-pdf) h2,html:not(.print-pdf) h3,html:not(.print-pdf) h4,html:not(.print-pdf) h5,html:not(.print-pdf) h6{color:#000!important;height:auto;line-height:normal;text-align:left;letter-spacing:normal}html:not(.print-pdf) h1{font-size:28pt!important}html:not(.print-pdf) h2{font-size:24pt!important}html:not(.print-pdf) h3{font-size:22pt!important}html:not(.print-pdf) h4{font-size:22pt!important;font-variant:small-caps}html:not(.print-pdf) h5{font-size:21pt!important}html:not(.print-pdf) h6{font-size:20pt!important;font-style:italic}html:not(.print-pdf) a:link,html:not(.print-pdf) a:visited{color:#000!important;font-weight:700;text-decoration:underline}html:not(.print-pdf) div,html:not(.print-pdf) ol,html:not(.print-pdf) p,html:not(.print-pdf) ul{visibility:visible;position:static;width:auto;height:auto;display:block;overflow:visible;margin:0;text-align:left!important}html:not(.print-pdf) .reveal pre,html:not(.print-pdf) .reveal table{margin-left:0;margin-right:0}html:not(.print-pdf) .reveal pre code{padding:20px}html:not(.print-pdf) .reveal blockquote{margin:20px 0}html:not(.print-pdf) .reveal .slides{position:static!important;width:auto!important;height:auto!important;left:0!important;top:0!important;margin-left:0!important;margin-top:0!important;padding:0!important;zoom:1!important;transform:none!important;overflow:visible!important;display:block!important;text-align:left!important;perspective:none;perspective-origin:50% 50%}html:not(.print-pdf) .reveal .slides section{visibility:visible!important;position:static!important;width:auto!important;height:auto!important;display:block!important;overflow:visible!important;left:0!important;top:0!important;margin-left:0!important;margin-top:0!important;padding:60px 20px!important;z-index:auto!important;opacity:1!important;page-break-after:always!important;transform-style:flat!important;transform:none!important;transition:none!important}html:not(.print-pdf) .reveal .slides section.stack{padding:0!important}html:not(.print-pdf) .reveal section:last-of-type{page-break-after:avoid!important}html:not(.print-pdf) .reveal section .fragment{opacity:1!important;visibility:visible!important;transform:none!important}html:not(.print-pdf) .reveal section img{display:block;margin:15px 0;background:#fff;border:1px solid #666;box-shadow:none}html:not(.print-pdf) .reveal section small{font-size:.8em}html:not(.print-pdf) .reveal .hljs{max-height:100%;white-space:pre-wrap;word-wrap:break-word;word-break:break-word;font-size:15pt}html:not(.print-pdf) .reveal .hljs .hljs-ln-numbers{white-space:nowrap}html:not(.print-pdf) .reveal .hljs td{font-size:inherit!important;color:inherit!important}}
\ No newline at end of file
diff --git a/docs/reveal/dist/reveal.js b/docs/reveal/dist/reveal.js
new file mode 100644
index 0000000..3d5ec43
--- /dev/null
+++ b/docs/reveal/dist/reveal.js
@@ -0,0 +1,9 @@
+/*!
+* reveal.js 4.0.0 (Wed May 20 2020)
+* https://revealjs.com
+* MIT licensed
+*
+* Copyright (C) 2020 Hakim El Hattab, https://hakim.se
+*/
+!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).Reveal=t()}(this,(function(){"use strict";function e(t){return(e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(t)}function t(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}function i(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,a)}return i}function a(e){for(var a=1;a{for(var i in t)e[i]=t[i];return e},o=(e,t)=>Array.from(e.querySelectorAll(t)),l=(e,t,i)=>{i?e.classList.add(t):e.classList.remove(t)},d=e=>{if("string"==typeof e){if("null"===e)return null;if("true"===e)return!0;if("false"===e)return!1;if(e.match(/^-?[\d\.]+$/))return parseFloat(e)}return e},c=(e,t)=>{e.style.transform=t},h=(e,t)=>{for(var i=e.parentNode;i;){var a=i.matches||i.matchesSelector||i.msMatchesSelector;if(a&&a.call(i,t))return i;i=i.parentNode}return null},u=function(e,t,i){for(var a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"",n=e.querySelectorAll("."+i),s=0;s{var t=document.createElement("style");return t.type="text/css",e&&e.length>0&&(t.styleSheet?t.styleSheet.cssText=e:t.appendChild(document.createTextNode(e))),document.head.appendChild(t),t},g=()=>{var e={};for(var t in location.search.replace(/[A-Z0-9]+?=([\w\.%-]*)/gi,t=>{e[t.split("=").shift()]=t.split("=").pop()}),e){var i=e[t];e[t]=d(unescape(i))}return void 0!==e.dependencies&&delete e.dependencies,e},p=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;if(e){var i,a=e.style.height;return e.style.height="0px",e.parentNode.style.height="auto",i=t-e.parentNode.offsetHeight,e.style.height=a+"px",e.parentNode.style.removeProperty("height"),i}return t},m=navigator.userAgent,f=document.createElement("div"),b=/(iphone|ipod|ipad|android)/gi.test(m)||"MacIntel"===navigator.platform&&navigator.maxTouchPoints>1,y=/chrome/i.test(m)&&!/edge/i.test(m),w=/android/gi.test(m),R="zoom"in f.style&&!b&&(y||/Version\/[\d\.]+.*Safari/.test(m)),A="function"==typeof window.history.replaceState&&!/PhantomJS/.test(m);class E{constructor(e){this.Reveal=e,this.startEmbeddedIframe=this.startEmbeddedIframe.bind(this)}shouldPreload(e){var t=this.Reveal.getConfig().preloadIframes;return"boolean"!=typeof t&&(t=e.hasAttribute("data-preload")),t}load(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};e.style.display=this.Reveal.getConfig().display,o(e,"img[data-src], video[data-src], audio[data-src], iframe[data-src]").forEach(e=>{("IFRAME"!==e.tagName||this.shouldPreload(e))&&(e.setAttribute("src",e.getAttribute("data-src")),e.setAttribute("data-lazy-loaded",""),e.removeAttribute("data-src"))}),o(e,"video, audio").forEach(e=>{var t=0;o(e,"source[data-src]").forEach(e=>{e.setAttribute("src",e.getAttribute("data-src")),e.removeAttribute("data-src"),e.setAttribute("data-lazy-loaded",""),t+=1}),t>0&&e.load()});var i=e.slideBackgroundElement;if(i){i.style.display="block";var a=e.slideBackgroundContentElement,n=e.getAttribute("data-background-iframe");if(!1===i.hasAttribute("data-loaded")){i.setAttribute("data-loaded","true");var s=e.getAttribute("data-background-image"),r=e.getAttribute("data-background-video"),l=e.hasAttribute("data-background-video-loop"),d=e.hasAttribute("data-background-video-muted");if(s)a.style.backgroundImage="url("+encodeURI(s)+")";else if(r&&!this.Reveal.isSpeakerNotes()){var c=document.createElement("video");l&&c.setAttribute("loop",""),d&&(c.muted=!0),b&&(c.muted=!0,c.autoplay=!0,c.setAttribute("playsinline","")),r.split(",").forEach(e=>{c.innerHTML+=''}),a.appendChild(c)}else if(n&&!0!==t.excludeIframes){var h=document.createElement("iframe");h.setAttribute("allowfullscreen",""),h.setAttribute("mozallowfullscreen",""),h.setAttribute("webkitallowfullscreen",""),h.setAttribute("allow","autoplay"),h.setAttribute("data-src",n),h.style.width="100%",h.style.height="100%",h.style.maxHeight="100%",h.style.maxWidth="100%",a.appendChild(h)}}var u=a.querySelector("iframe[data-src]");u&&this.shouldPreload(i)&&!/autoplay=(1|true|yes)/gi.test(n)&&u.getAttribute("src")!==n&&u.setAttribute("src",n)}}unload(e){e.style.display="none";var t=this.Reveal.getSlideBackground(e);t&&(t.style.display="none",o(t,"iframe[src]").forEach(e=>{e.removeAttribute("src")})),o(e,"video[data-lazy-loaded][src], audio[data-lazy-loaded][src], iframe[data-lazy-loaded][src]").forEach(e=>{e.setAttribute("data-src",e.getAttribute("src")),e.removeAttribute("src")}),o(e,"video[data-lazy-loaded] source[src], audio source[src]").forEach(e=>{e.setAttribute("data-src",e.getAttribute("src")),e.removeAttribute("src")})}formatEmbeddedContent(){var e=(e,t,i)=>{o(this.Reveal.getSlidesElement(),"iframe["+e+'*="'+t+'"]').forEach(t=>{var a=t.getAttribute(e);a&&-1===a.indexOf(i)&&t.setAttribute(e,a+(/\?/.test(a)?"&":"?")+i)})};e("src","youtube.com/embed/","enablejsapi=1"),e("data-src","youtube.com/embed/","enablejsapi=1"),e("src","player.vimeo.com/","api=1"),e("data-src","player.vimeo.com/","api=1")}startEmbeddedContent(e){e&&!this.Reveal.isSpeakerNotes()&&(o(e,'img[src$=".gif"]').forEach(e=>{e.setAttribute("src",e.getAttribute("src"))}),o(e,"video, audio").forEach(e=>{if(!h(e,".fragment")||h(e,".fragment.visible")){var t=this.Reveal.getConfig().autoPlayMedia;if("boolean"!=typeof t&&(t=e.hasAttribute("data-autoplay")||!!h(e,".slide-background")),t&&"function"==typeof e.play)if(e.readyState>1)this.startEmbeddedMedia({target:e});else if(b){var i=e.play();i&&"function"==typeof i.catch&&!1===e.controls&&i.catch(()=>{e.controls=!0,e.addEventListener("play",()=>{e.controls=!1})})}else e.removeEventListener("loadeddata",this.startEmbeddedMedia),e.addEventListener("loadeddata",this.startEmbeddedMedia)}}),o(e,"iframe[src]").forEach(e=>{h(e,".fragment")&&!h(e,".fragment.visible")||this.startEmbeddedIframe({target:e})}),o(e,"iframe[data-src]").forEach(e=>{h(e,".fragment")&&!h(e,".fragment.visible")||e.getAttribute("src")!==e.getAttribute("data-src")&&(e.removeEventListener("load",this.startEmbeddedIframe),e.addEventListener("load",this.startEmbeddedIframe),e.setAttribute("src",e.getAttribute("data-src")))}))}startEmbeddedMedia(e){var t=!!h(e.target,"html"),i=!!h(e.target,".present");t&&i&&(e.target.currentTime=0,e.target.play()),e.target.removeEventListener("loadeddata",this.startEmbeddedMedia)}startEmbeddedIframe(e){var t=e.target;if(t&&t.contentWindow){var i=!!h(e.target,"html"),a=!!h(e.target,".present");if(i&&a){var n=this.Reveal.getConfig().autoPlayMedia;"boolean"!=typeof n&&(n=t.hasAttribute("data-autoplay")||!!h(t,".slide-background")),/youtube\.com\/embed\//.test(t.getAttribute("src"))&&n?t.contentWindow.postMessage('{"event":"command","func":"playVideo","args":""}',"*"):/player\.vimeo\.com\//.test(t.getAttribute("src"))&&n?t.contentWindow.postMessage('{"method":"play"}',"*"):t.contentWindow.postMessage("slide:start","*")}}}stopEmbeddedContent(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};t=r({unloadIframes:!0},t),e&&e.parentNode&&(o(e,"video, audio").forEach(e=>{e.hasAttribute("data-ignore")||"function"!=typeof e.pause||(e.setAttribute("data-paused-by-reveal",""),e.pause())}),o(e,"iframe").forEach(e=>{e.contentWindow&&e.contentWindow.postMessage("slide:stop","*"),e.removeEventListener("load",this.startEmbeddedIframe)}),o(e,'iframe[src*="youtube.com/embed/"]').forEach(e=>{!e.hasAttribute("data-ignore")&&e.contentWindow&&"function"==typeof e.contentWindow.postMessage&&e.contentWindow.postMessage('{"event":"command","func":"pauseVideo","args":""}',"*")}),o(e,'iframe[src*="player.vimeo.com/"]').forEach(e=>{!e.hasAttribute("data-ignore")&&e.contentWindow&&"function"==typeof e.contentWindow.postMessage&&e.contentWindow.postMessage('{"method":"pause"}',"*")}),!0===t.unloadIframes&&o(e,"iframe[data-src]").forEach(e=>{e.setAttribute("src","about:blank"),e.removeAttribute("src")}))}}class S{constructor(e){this.Reveal=e}render(){this.element=document.createElement("div"),this.element.className="slide-number",this.Reveal.getRevealElement().appendChild(this.element)}configure(e,t){var i="none";e.slideNumber&&!this.Reveal.isPrintingPDF()&&("all"===e.showSlideNumber||"speaker"===e.showSlideNumber&&this.Reveal.isSpeakerNotes())&&(i="block"),this.element.style.display=i}update(){this.Reveal.getConfig().slideNumber&&this.element&&(this.element.innerHTML=this.getSlideNumber())}getSlideNumber(){var e,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.Reveal.getCurrentSlide(),i=this.Reveal.getConfig(),a="h.v";if("function"==typeof i.slideNumber)e=i.slideNumber(t);else switch("string"==typeof i.slideNumber&&(a=i.slideNumber),/c/.test(a)||1!==this.Reveal.getHorizontalSlides().length||(a="c"),e=[],a){case"c":e.push(this.Reveal.getSlidePastCount(t)+1);break;case"c/t":e.push(this.Reveal.getSlidePastCount(t)+1,"/",this.Reveal.getTotalSlides());break;default:var n=this.Reveal.getIndices(t);e.push(n.h+1);var s="h/v"===a?"/":".";this.Reveal.isVerticalSlide(t)&&e.push(s,n.v+1)}var r="#"+this.Reveal.location.getHash(t);return this.formatNumber(e[0],e[1],e[2],r)}formatNumber(e,t,i){var a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"#"+this.Reveal.location.getHash();return"number"!=typeof i||isNaN(i)?'\n\t\t\t\t\t').concat(e," \n\t\t\t\t\t "):'\n\t\t\t\t\t').concat(e,' \n\t\t\t\t\t').concat(t,' \n\t\t\t\t\t').concat(i," \n\t\t\t\t\t ")}}var k=e=>{var t=e.match(/^#([0-9a-f]{3})$/i);if(t&&t[1])return t=t[1],{r:17*parseInt(t.charAt(0),16),g:17*parseInt(t.charAt(1),16),b:17*parseInt(t.charAt(2),16)};var i=e.match(/^#([0-9a-f]{6})$/i);if(i&&i[1])return i=i[1],{r:parseInt(i.substr(0,2),16),g:parseInt(i.substr(2,2),16),b:parseInt(i.substr(4,2),16)};var a=e.match(/^rgb\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)$/i);if(a)return{r:parseInt(a[1],10),g:parseInt(a[2],10),b:parseInt(a[3],10)};var n=e.match(/^rgba\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\,\s*([\d]+|[\d]*.[\d]+)\s*\)$/i);return n?{r:parseInt(n[1],10),g:parseInt(n[2],10),b:parseInt(n[3],10),a:parseFloat(n[4])}:null};class L{constructor(e){this.Reveal=e}render(){this.element=document.createElement("div"),this.element.className="backgrounds",this.Reveal.getRevealElement().appendChild(this.element)}create(){this.Reveal.isPrintingPDF();this.element.innerHTML="",this.element.classList.add("no-transition"),this.Reveal.getHorizontalSlides().forEach(e=>{var t=this.createBackground(e,this.element);o(e,"section").forEach(e=>{this.createBackground(e,t),t.classList.add("stack")})}),this.Reveal.getConfig().parallaxBackgroundImage?(this.element.style.backgroundImage='url("'+this.Reveal.getConfig().parallaxBackgroundImage+'")',this.element.style.backgroundSize=this.Reveal.getConfig().parallaxBackgroundSize,this.element.style.backgroundRepeat=this.Reveal.getConfig().parallaxBackgroundRepeat,this.element.style.backgroundPosition=this.Reveal.getConfig().parallaxBackgroundPosition,setTimeout(()=>{this.Reveal.getRevealElement().classList.add("has-parallax-background")},1)):(this.element.style.backgroundImage="",this.Reveal.getRevealElement().classList.remove("has-parallax-background"))}createBackground(e,t){var i=document.createElement("div");i.className="slide-background "+e.className.replace(/present|past|future/,"");var a=document.createElement("div");return a.className="slide-background-content",i.appendChild(a),t.appendChild(i),e.slideBackgroundElement=i,e.slideBackgroundContentElement=a,this.sync(e),i}sync(e){var t=e.slideBackgroundElement,i=e.slideBackgroundContentElement;e.classList.remove("has-dark-background"),e.classList.remove("has-light-background"),t.removeAttribute("data-loaded"),t.removeAttribute("data-background-hash"),t.removeAttribute("data-background-size"),t.removeAttribute("data-background-transition"),t.style.backgroundColor="",i.style.backgroundSize="",i.style.backgroundRepeat="",i.style.backgroundPosition="",i.style.backgroundImage="",i.style.opacity="",i.innerHTML="";var a={background:e.getAttribute("data-background"),backgroundSize:e.getAttribute("data-background-size"),backgroundImage:e.getAttribute("data-background-image"),backgroundVideo:e.getAttribute("data-background-video"),backgroundIframe:e.getAttribute("data-background-iframe"),backgroundColor:e.getAttribute("data-background-color"),backgroundRepeat:e.getAttribute("data-background-repeat"),backgroundPosition:e.getAttribute("data-background-position"),backgroundTransition:e.getAttribute("data-background-transition"),backgroundOpacity:e.getAttribute("data-background-opacity")};a.background&&(/^(http|file|\/\/)/gi.test(a.background)||/\.(svg|png|jpg|jpeg|gif|bmp)([?#\s]|$)/gi.test(a.background)?e.setAttribute("data-background-image",a.background):t.style.background=a.background),(a.background||a.backgroundColor||a.backgroundImage||a.backgroundVideo||a.backgroundIframe)&&t.setAttribute("data-background-hash",a.background+a.backgroundSize+a.backgroundImage+a.backgroundVideo+a.backgroundIframe+a.backgroundColor+a.backgroundRepeat+a.backgroundPosition+a.backgroundTransition+a.backgroundOpacity),a.backgroundSize&&t.setAttribute("data-background-size",a.backgroundSize),a.backgroundColor&&(t.style.backgroundColor=a.backgroundColor),a.backgroundTransition&&t.setAttribute("data-background-transition",a.backgroundTransition),e.hasAttribute("data-preload")&&t.setAttribute("data-preload",""),a.backgroundSize&&(i.style.backgroundSize=a.backgroundSize),a.backgroundRepeat&&(i.style.backgroundRepeat=a.backgroundRepeat),a.backgroundPosition&&(i.style.backgroundPosition=a.backgroundPosition),a.backgroundOpacity&&(i.style.opacity=a.backgroundOpacity);var n,s=a.backgroundColor;if(!s){var r=window.getComputedStyle(t);r&&r.backgroundColor&&(s=r.backgroundColor)}if(s){var o=k(s);o&&0!==o.a&&("string"==typeof(n=s)&&(n=k(n)),(n?(299*n.r+587*n.g+114*n.b)/1e3:null)<128?e.classList.add("has-dark-background"):e.classList.add("has-light-background"))}}update(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=this.Reveal.getCurrentSlide(),i=this.Reveal.getIndices(),a=null,n=this.Reveal.getConfig().rtl?"future":"past",s=this.Reveal.getConfig().rtl?"past":"future";if(Array.from(this.element.childNodes).forEach((t,r)=>{t.classList.remove("past","present","future"),ri.h?t.classList.add(s):(t.classList.add("present"),a=t),(e||r===i.h)&&o(t,".slide-background").forEach((e,t)=>{e.classList.remove("past","present","future"),ti.v?e.classList.add("future"):(e.classList.add("present"),r===i.h&&(a=e))})}),this.previousBackground&&this.Reveal.slideContent.stopEmbeddedContent(this.previousBackground,{unloadIframes:!this.Reveal.slideContent.shouldPreload(this.previousBackground)}),a){this.Reveal.slideContent.startEmbeddedContent(a);var r=a.querySelector(".slide-background-content");if(r){var l=r.style.backgroundImage||"";/\.gif/i.test(l)&&(r.style.backgroundImage="",window.getComputedStyle(r).opacity,r.style.backgroundImage=l)}var d=this.previousBackground?this.previousBackground.getAttribute("data-background-hash"):null,c=a.getAttribute("data-background-hash");c&&c===d&&a!==this.previousBackground&&this.element.classList.add("no-transition"),this.previousBackground=a}t&&["has-light-background","has-dark-background"].forEach(e=>{t.classList.contains(e)?this.Reveal.getRevealElement().classList.add(e):this.Reveal.getRevealElement().classList.remove(e)},this),setTimeout(()=>{this.element.classList.remove("no-transition")},1)}updateParallax(){var e=this.Reveal.getIndices();if(this.Reveal.getConfig().parallaxBackgroundImage){var t,i,a=this.Reveal.getHorizontalSlides(),n=this.Reveal.getVerticalSlides(),s=this.element.style.backgroundSize.split(" ");1===s.length?t=i=parseInt(s[0],10):(t=parseInt(s[0],10),i=parseInt(s[1],10));var r,o=this.element.offsetWidth,l=a.length;r=("number"==typeof this.Reveal.getConfig().parallaxBackgroundHorizontal?this.Reveal.getConfig().parallaxBackgroundHorizontal:l>1?(t-o)/(l-1):0)*e.h*-1;var d,c,h=this.element.offsetHeight,u=n.length;d="number"==typeof this.Reveal.getConfig().parallaxBackgroundVertical?this.Reveal.getConfig().parallaxBackgroundVertical:(i-h)/(u-1),c=u>0?d*e.v:0,this.element.style.backgroundPosition=r+"px "+-c+"px"}}}class x{constructor(e){this.Reveal=e,this.autoAnimateCounter=0}run(e,t){if(this.reset(),e.hasAttribute("data-auto-animate")&&t.hasAttribute("data-auto-animate")){this.autoAnimateStyleSheet=this.autoAnimateStyleSheet||v();var i=this.getAutoAnimateOptions(t);e.dataset.autoAnimate="pending",t.dataset.autoAnimate="pending";var a=this.Reveal.getSlides();i.slideDirection=a.indexOf(t)>a.indexOf(e)?"forward":"backward";var n=this.getAutoAnimatableElements(e,t).map(e=>this.autoAnimateElements(e.from,e.to,e.options||{},i,this.autoAnimateCounter++));if("false"!==t.dataset.autoAnimateUnmatched&&!0===this.Reveal.getConfig().autoAnimateUnmatched){var s=.8*i.duration,r=.2*i.duration;this.getUnmatchedAutoAnimateElements(t).forEach(e=>{var t=this.getAutoAnimateOptions(e,i),a="unmatched";t.duration===i.duration&&t.delay===i.delay||(a="unmatched-"+this.autoAnimateCounter++,n.push('[data-auto-animate="running"] [data-auto-animate-target="'.concat(a,'"] { transition: opacity ').concat(t.duration,"s ease ").concat(t.delay,"s; }"))),e.dataset.autoAnimateTarget=a},this),n.push('[data-auto-animate="running"] [data-auto-animate-target="unmatched"] { transition: opacity '.concat(s,"s ease ").concat(r,"s; }"))}this.autoAnimateStyleSheet.innerHTML=n.join(""),requestAnimationFrame(()=>{this.autoAnimateStyleSheet&&(getComputedStyle(this.autoAnimateStyleSheet).fontWeight,t.dataset.autoAnimate="running")}),this.Reveal.dispatchEvent({type:"autoanimate",data:{fromSlide:e,toSlide:t,sheet:this.autoAnimateStyleSheet}})}}reset(){o(this.Reveal.getRevealElement(),'[data-auto-animate]:not([data-auto-animate=""])').forEach(e=>{e.dataset.autoAnimate=""}),o(this.Reveal.getRevealElement(),"[data-auto-animate-target]").forEach(e=>{delete e.dataset.autoAnimateTarget}),this.autoAnimateStyleSheet&&this.autoAnimateStyleSheet.parentNode&&(this.autoAnimateStyleSheet.parentNode.removeChild(this.autoAnimateStyleSheet),this.autoAnimateStyleSheet=null)}autoAnimateElements(e,t,i,a,n){e.dataset.autoAnimateTarget="",t.dataset.autoAnimateTarget=n;var r=this.getAutoAnimateOptions(t,a);void 0!==i.delay&&(r.delay=i.delay),void 0!==i.duration&&(r.duration=i.duration),void 0!==i.easing&&(r.easing=i.easing);var o=this.getAutoAnimatableProperties("from",e,i),l=this.getAutoAnimatableProperties("to",t,i);t.classList.contains("fragment")&&(delete l.styles.opacity,e.classList.contains("fragment")&&(e.className.match(s)||[""])[0]===(t.className.match(s)||[""])[0]&&"forward"===a.slideDirection&&t.classList.add("visible","disabled"));if(!1!==i.translate||!1!==i.scale){var d=this.Reveal.getScale(),c={x:(o.x-l.x)/d,y:(o.y-l.y)/d,scaleX:o.width/l.width,scaleY:o.height/l.height};c.x=Math.round(1e3*c.x)/1e3,c.y=Math.round(1e3*c.y)/1e3,c.scaleX=Math.round(1e3*c.scaleX)/1e3,c.scaleX=Math.round(1e3*c.scaleX)/1e3;var h=!1!==i.translate&&(0!==c.x||0!==c.y),u=!1!==i.scale&&(0!==c.scaleX||0!==c.scaleY);if(h||u){var v=[];h&&v.push("translate(".concat(c.x,"px, ").concat(c.y,"px)")),u&&v.push("scale(".concat(c.scaleX,", ").concat(c.scaleY,")")),o.styles.transform=v.join(" "),o.styles["transform-origin"]="top left",l.styles.transform="none"}}for(var g in l.styles){var p=l.styles[g],m=o.styles[g];p===m?delete l.styles[g]:(!0===p.explicitValue&&(l.styles[g]=p.value),!0===m.explicitValue&&(o.styles[g]=m.value))}var f="",b=Object.keys(l.styles);b.length>0&&(o.styles.transition="none",l.styles.transition="all ".concat(r.duration,"s ").concat(r.easing," ").concat(r.delay,"s"),l.styles["transition-property"]=b.join(", "),l.styles["will-change"]=b.join(", "),f='[data-auto-animate-target="'+n+'"] {'+Object.keys(o.styles).map(e=>e+": "+o.styles[e]+" !important;").join("")+'}[data-auto-animate="running"] [data-auto-animate-target="'+n+'"] {'+Object.keys(l.styles).map(e=>e+": "+l.styles[e]+" !important;").join("")+"}");return f}getAutoAnimateOptions(e,t){var i={easing:this.Reveal.getConfig().autoAnimateEasing,duration:this.Reveal.getConfig().autoAnimateDuration,delay:0};if(i=r(i,t),e.closest&&e.parentNode){var a=e.parentNode.closest("[data-auto-animate-target]");a&&(i=this.getAutoAnimateOptions(a,i))}return e.dataset.autoAnimateEasing&&(i.easing=e.dataset.autoAnimateEasing),e.dataset.autoAnimateDuration&&(i.duration=parseFloat(e.dataset.autoAnimateDuration)),e.dataset.autoAnimateDelay&&(i.delay=parseFloat(e.dataset.autoAnimateDelay)),i}getAutoAnimatableProperties(e,t,i){var a=this.Reveal.getConfig(),n={styles:[]};if(!1!==i.translate||!1!==i.scale){var s;if("function"==typeof i.measure)s=i.measure(t);else if(a.center)s=t.getBoundingClientRect();else{var r=this.Reveal.getScale();s={x:t.offsetLeft*r,y:t.offsetTop*r,width:t.offsetWidth*r,height:t.offsetHeight*r}}n.x=s.x,n.y=s.y,n.width=s.width,n.height=s.height}var o=getComputedStyle(t);return(i.styles||a.autoAnimateStyles).forEach(t=>{var i;"string"==typeof t&&(t={property:t}),""!==(i=void 0!==t.from&&"from"===e?{value:t.from,explicitValue:!0}:void 0!==t.to&&"to"===e?{value:t.to,explicitValue:!0}:o[t.property])&&(n.styles[t.property]=i)}),n}getAutoAnimatableElements(e,t){var i=("function"==typeof this.Reveal.getConfig().autoAnimateMatcher?this.Reveal.getConfig().autoAnimateMatcher:this.getAutoAnimatePairs).call(this,e,t),a=[];return i.filter((e,t)=>{if(-1===a.indexOf(e.to))return a.push(e.to),!0})}getAutoAnimatePairs(e,t){var i=[],a="h1, h2, h3, h4, h5, h6, p, li";return this.findAutoAnimateMatches(i,e,t,"[data-id]",e=>e.nodeName+":::"+e.getAttribute("data-id")),this.findAutoAnimateMatches(i,e,t,a,e=>e.nodeName+":::"+e.innerText),this.findAutoAnimateMatches(i,e,t,"img, video, iframe",e=>e.nodeName+":::"+(e.getAttribute("src")||e.getAttribute("data-src"))),this.findAutoAnimateMatches(i,e,t,"pre",e=>e.nodeName+":::"+e.innerText),i.forEach(e=>{e.from.matches(a)?e.options={scale:!1}:e.from.matches("pre")&&(e.options={scale:!1,styles:["width","height"]},this.findAutoAnimateMatches(i,e.from,e.to,".hljs .hljs-ln-code",e=>e.textContent,{scale:!1,styles:[],measure:this.getLocalBoundingBox.bind(this)}),this.findAutoAnimateMatches(i,e.from,e.to,".hljs .hljs-ln-line[data-line-number]",e=>e.getAttribute("data-line-number"),{scale:!1,styles:["width"],measure:this.getLocalBoundingBox.bind(this)}))},this),i}getLocalBoundingBox(e){var t=this.Reveal.getScale();return{x:Math.round(e.offsetLeft*t*100)/100,y:Math.round(e.offsetTop*t*100)/100,width:Math.round(e.offsetWidth*t*100)/100,height:Math.round(e.offsetHeight*t*100)/100}}findAutoAnimateMatches(e,t,i,a,n,s){var r={},o={};[].slice.call(t.querySelectorAll(a)).forEach((e,t)=>{var i=n(e);"string"==typeof i&&i.length&&(r[i]=r[i]||[],r[i].push(e))}),[].slice.call(i.querySelectorAll(a)).forEach((t,i)=>{var a,l=n(t);if(o[l]=o[l]||[],o[l].push(t),r[l]){var d=o[l].length-1,c=r[l].length-1;r[l][d]?(a=r[l][d],r[l][d]=null):r[l][c]&&(a=r[l][c],r[l][c]=null)}a&&e.push({from:a,to:t,options:s})})}getUnmatchedAutoAnimateElements(e){return[].slice.call(e.children).reduce((e,t)=>{var i=t.querySelector("[data-auto-animate-target]");return t.hasAttribute("data-auto-animate-target")||i||e.push(t),t.querySelector("[data-auto-animate-target]")&&(e=e.concat(this.getUnmatchedAutoAnimateElements(t))),e},[])}}class C{constructor(e){this.Reveal=e}configure(e,t){!1===e.fragments?this.disable():!1===t.fragments&&this.enable()}disable(){o(this.Reveal.getSlidesElement(),".fragment").forEach(e=>{e.classList.add("visible"),e.classList.remove("current-fragment")})}enable(){o(this.Reveal.getSlidesElement(),".fragment").forEach(e=>{e.classList.remove("visible"),e.classList.remove("current-fragment")})}availableRoutes(){var e=this.Reveal.getCurrentSlide();if(e&&this.Reveal.getConfig().fragments){var t=e.querySelectorAll(".fragment:not(.disabled)"),i=e.querySelectorAll(".fragment:not(.disabled):not(.visible)");return{prev:t.length-i.length>0,next:!!i.length}}return{prev:!1,next:!1}}sort(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];e=Array.from(e);var i=[],a=[],n=[];e.forEach(e=>{if(e.hasAttribute("data-fragment-index")){var t=parseInt(e.getAttribute("data-fragment-index"),10);i[t]||(i[t]=[]),i[t].push(e)}else a.push([e])}),i=i.concat(a);var s=0;return i.forEach(e=>{e.forEach(e=>{n.push(e),e.setAttribute("data-fragment-index",s)}),s++}),!0===t?i:n}sortAll(){this.Reveal.getHorizontalSlides().forEach(e=>{var t=o(e,"section");t.forEach((e,t)=>{this.sort(e.querySelectorAll(".fragment"))},this),0===t.length&&this.sort(e.querySelectorAll(".fragment"))})}update(e,t){var i={shown:[],hidden:[]},a=this.Reveal.getCurrentSlide();if(a&&this.Reveal.getConfig().fragments&&(t=t||this.sort(a.querySelectorAll(".fragment"))).length){var n=0;if("number"!=typeof e){var s=this.sort(a.querySelectorAll(".fragment.visible")).pop();s&&(e=parseInt(s.getAttribute("data-fragment-index")||0,10))}Array.from(t).forEach((t,a)=>{if(t.hasAttribute("data-fragment-index")&&(a=parseInt(t.getAttribute("data-fragment-index"),10)),n=Math.max(n,a),a<=e){var s=t.classList.contains("visible");t.classList.add("visible"),t.classList.remove("current-fragment"),a===e&&(this.Reveal.announceStatus(this.Reveal.getStatusText(t)),t.classList.add("current-fragment"),this.Reveal.slideContent.startEmbeddedContent(t)),s||(i.shown.push(t),this.Reveal.dispatchEvent({target:t,type:"visible",bubbles:!1}))}else{var r=t.classList.contains("visible");t.classList.remove("visible"),t.classList.remove("current-fragment"),r&&(i.hidden.push(t),this.Reveal.dispatchEvent({target:t,type:"hidden",bubbles:!1}))}}),e="number"==typeof e?e:-1,e=Math.max(Math.min(e,n),-1),a.setAttribute("data-fragment",e)}return i}sync(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.Reveal.getCurrentSlide();return this.sort(e.querySelectorAll(".fragment"))}goto(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=this.Reveal.getCurrentSlide();if(i&&this.Reveal.getConfig().fragments){var a=this.sort(i.querySelectorAll(".fragment:not(.disabled)"));if(a.length){if("number"!=typeof e){var n=this.sort(i.querySelectorAll(".fragment:not(.disabled).visible")).pop();e=n?parseInt(n.getAttribute("data-fragment-index")||0,10):-1}e+=t;var s=this.update(e,a);return s.hidden.length&&this.Reveal.dispatchEvent({type:"fragmenthidden",data:{fragment:s.hidden[0],fragments:s.hidden}}),s.shown.length&&this.Reveal.dispatchEvent({type:"fragmentshown",data:{fragment:s.shown[0],fragments:s.shown}}),this.Reveal.controls.update(),this.Reveal.progress.update(),this.Reveal.getConfig().fragmentInURL&&this.Reveal.location.writeURL(),!(!s.shown.length&&!s.hidden.length)}}return!1}next(){return this.goto(null,1)}prev(){return this.goto(null,-1)}}class P{constructor(e){this.Reveal=e,this.active=!1,this.onSlideClicked=this.onSlideClicked.bind(this)}activate(){if(this.Reveal.getConfig().overview&&!this.isActive()){this.active=!0,this.Reveal.getRevealElement().classList.add("overview"),this.Reveal.cancelAutoSlide(),this.Reveal.getSlidesElement().appendChild(this.Reveal.getBackgroundsElement()),o(this.Reveal.getRevealElement(),".slides section").forEach(e=>{e.classList.contains("stack")||e.addEventListener("click",this.onSlideClicked,!0)});var e=this.Reveal.getComputedSlideSize();this.overviewSlideWidth=e.width+70,this.overviewSlideHeight=e.height+70,this.Reveal.getConfig().rtl&&(this.overviewSlideWidth=-this.overviewSlideWidth),this.Reveal.updateSlidesVisibility(),this.layout(),this.update(),this.Reveal.layout();var t=this.Reveal.getIndices();this.Reveal.dispatchEvent({type:"overviewshown",data:{indexh:t.h,indexv:t.v,currentSlide:this.Reveal.getCurrentSlide()}})}}layout(){this.Reveal.getHorizontalSlides().forEach((e,t)=>{e.setAttribute("data-index-h",t),c(e,"translate3d("+t*this.overviewSlideWidth+"px, 0, 0)"),e.classList.contains("stack")&&o(e,"section").forEach((e,i)=>{e.setAttribute("data-index-h",t),e.setAttribute("data-index-v",i),c(e,"translate3d(0, "+i*this.overviewSlideHeight+"px, 0)")})}),Array.from(this.Reveal.getBackgroundsElement().childNodes).forEach((e,t)=>{c(e,"translate3d("+t*this.overviewSlideWidth+"px, 0, 0)"),o(e,".slide-background").forEach((e,t)=>{c(e,"translate3d(0, "+t*this.overviewSlideHeight+"px, 0)")})})}update(){var e=Math.min(window.innerWidth,window.innerHeight),t=Math.max(e/5,150)/e,i=this.Reveal.getIndices();this.Reveal.transformSlides({overview:["scale("+t+")","translateX("+-i.h*this.overviewSlideWidth+"px)","translateY("+-i.v*this.overviewSlideHeight+"px)"].join(" ")})}deactivate(){if(this.Reveal.getConfig().overview){this.active=!1,this.Reveal.getRevealElement().classList.remove("overview"),this.Reveal.getRevealElement().classList.add("overview-deactivating"),setTimeout(()=>{this.Reveal.getRevealElement().classList.remove("overview-deactivating")},1),this.Reveal.getRevealElement().appendChild(this.Reveal.getBackgroundsElement()),o(this.Reveal.getRevealElement(),".slides section").forEach(e=>{c(e,""),e.removeEventListener("click",this.onSlideClicked,!0)}),o(this.Reveal.getBackgroundsElement(),".slide-background").forEach(e=>{c(e,"")}),this.Reveal.transformSlides({overview:""});var e=this.Reveal.getIndices();this.Reveal.slide(e.h,e.v),this.Reveal.layout(),this.Reveal.cueAutoSlide(),this.Reveal.dispatchEvent({type:"overviewhidden",data:{indexh:e.h,indexv:e.v,currentSlide:this.Reveal.getCurrentSlide()}})}}toggle(e){"boolean"==typeof e?e?this.activate():this.deactivate():this.isActive()?this.deactivate():this.activate()}isActive(){return this.active}onSlideClicked(e){if(this.isActive()){e.preventDefault();for(var t=e.target;t&&!t.nodeName.match(/section/gi);)t=t.parentNode;if(t&&!t.classList.contains("disabled")&&(this.deactivate(),t.nodeName.match(/section/gi))){var i=parseInt(t.getAttribute("data-index-h"),10),a=parseInt(t.getAttribute("data-index-v"),10);this.Reveal.slide(i,a)}}}}class N{constructor(e){this.Reveal=e,this.shortcuts={},this.bindings={},this.onDocumentKeyDown=this.onDocumentKeyDown.bind(this),this.onDocumentKeyPress=this.onDocumentKeyPress.bind(this)}configure(e,t){"linear"===e.navigationMode?(this.shortcuts["→ , ↓ , SPACE , N , L , J"]="Next slide",this.shortcuts["← , ↑ , P , H , K"]="Previous slide"):(this.shortcuts["N , SPACE"]="Next slide",this.shortcuts.P="Previous slide",this.shortcuts["← , H"]="Navigate left",this.shortcuts["→ , L"]="Navigate right",this.shortcuts["↑ , K"]="Navigate up",this.shortcuts["↓ , J"]="Navigate down"),this.shortcuts["Home , Shift ←"]="First slide",this.shortcuts["End , Shift →"]="Last slide",this.shortcuts["B , ."]="Pause",this.shortcuts.F="Fullscreen",this.shortcuts["ESC, O"]="Slide overview"}bind(){document.addEventListener("keydown",this.onDocumentKeyDown,!1),document.addEventListener("keypress",this.onDocumentKeyPress,!1)}unbind(){document.removeEventListener("keydown",this.onDocumentKeyDown,!1),document.removeEventListener("keypress",this.onDocumentKeyPress,!1)}addKeyBinding(e,t){"object"==typeof e&&e.keyCode?this.bindings[e.keyCode]={callback:t,key:e.key,description:e.description}:this.bindings[e]={callback:t,key:null,description:null}}removeKeyBinding(e){delete this.bindings[e]}triggerKey(e){this.onDocumentKeyDown({keyCode:e})}registerKeyboardShortcut(e,t){this.shortcuts[e]=t}getShortcuts(){return this.shortcuts}getBindings(){return this.bindings}onDocumentKeyPress(e){e.shiftKey&&63===e.charCode&&this.Reveal.toggleHelp()}onDocumentKeyDown(e){var t=this.Reveal.getConfig();if("function"==typeof t.keyboardCondition&&!1===t.keyboardCondition(e))return!0;if("focused"===t.keyboardCondition&&!this.Reveal.isFocused())return!0;var i=e.keyCode,a=!this.Reveal.isAutoSliding();this.Reveal.onUserInput(e);var n=document.activeElement&&!0===document.activeElement.isContentEditable,s=document.activeElement&&document.activeElement.tagName&&/input|textarea/i.test(document.activeElement.tagName),r=document.activeElement&&document.activeElement.className&&/speaker-notes/i.test(document.activeElement.className),o=e.shiftKey&&32===e.keyCode,l=e.shiftKey&&37===i,d=e.shiftKey&&39===i,c=!o&&!l&&!d&&(e.shiftKey||e.altKey||e.ctrlKey||e.metaKey);if(!(n||s||r||c)){var h,u=[66,86,190,191];if("object"==typeof t.keyboard)for(h in t.keyboard)"togglePause"===t.keyboard[h]&&u.push(parseInt(h,10));if(this.Reveal.isPaused()&&-1===u.indexOf(i))return!1;var v,g,p="linear"===t.navigationMode||!this.Reveal.hasHorizontalSlides()||!this.Reveal.hasVerticalSlides(),m=!1;if("object"==typeof t.keyboard)for(h in t.keyboard)if(parseInt(h,10)===i){var f=t.keyboard[h];"function"==typeof f?f.apply(null,[e]):"string"==typeof f&&"function"==typeof this.Reveal[f]&&this.Reveal[f].call(),m=!0}if(!1===m)for(h in this.bindings)if(parseInt(h,10)===i){var b=this.bindings[h].callback;"function"==typeof b?b.apply(null,[e]):"string"==typeof b&&"function"==typeof this.Reveal[b]&&this.Reveal[b].call(),m=!0}!1===m&&(m=!0,80===i||33===i?this.Reveal.prev():78===i||34===i?this.Reveal.next():72===i||37===i?l?this.Reveal.slide(0):!this.Reveal.overview.isActive()&&p?this.Reveal.prev():this.Reveal.left():76===i||39===i?d?this.Reveal.slide(Number.MAX_VALUE):!this.Reveal.overview.isActive()&&p?this.Reveal.next():this.Reveal.right():75===i||38===i?!this.Reveal.overview.isActive()&&p?this.Reveal.prev():this.Reveal.up():74===i||40===i?!this.Reveal.overview.isActive()&&p?this.Reveal.next():this.Reveal.down():36===i?this.Reveal.slide(0):35===i?this.Reveal.slide(Number.MAX_VALUE):32===i?(this.Reveal.overview.isActive()&&this.Reveal.overview.deactivate(),e.shiftKey?this.Reveal.prev():this.Reveal.next()):58===i||59===i||66===i||86===i||190===i||191===i?this.Reveal.togglePause():70===i?(v=t.embedded?this.Reveal.getViewportElement():document.documentElement,(g=(v=v||document.documentElement).requestFullscreen||v.webkitRequestFullscreen||v.webkitRequestFullScreen||v.mozRequestFullScreen||v.msRequestFullscreen)&&g.apply(v)):65===i?t.autoSlideStoppable&&this.Reveal.toggleAutoSlide(a):m=!1),m?e.preventDefault&&e.preventDefault():27!==i&&79!==i||(!1===this.Reveal.closeOverlay()&&this.Reveal.overview.toggle(),e.preventDefault&&e.preventDefault()),this.Reveal.cueAutoSlide()}}}class M{constructor(e){this.Reveal=e,this.writeURLTimeout=0,this.onWindowHashChange=this.onWindowHashChange.bind(this)}bind(){window.addEventListener("hashchange",this.onWindowHashChange,!1)}unbind(){window.removeEventListener("hashchange",this.onWindowHashChange,!1)}readURL(){var e=this.Reveal.getConfig(),t=this.Reveal.getIndices(),i=this.Reveal.getCurrentSlide(),a=window.location.hash,n=a.slice(2).split("/"),s=a.replace(/#\/?/gi,"");if(!/^[0-9]*$/.test(n[0])&&s.length){var r,o;/\/[-\d]+$/g.test(s)&&(o=parseInt(s.split("/").pop(),10),o=isNaN(o)?void 0:o,s=s.split("/").shift());try{r=document.getElementById(decodeURIComponent(s))}catch(e){}var l=!!i&&i.getAttribute("id")===s;if(r){if(!l||void 0!==o){var d=this.Reveal.getIndices(r);this.Reveal.slide(d.h,d.v,o)}}else this.Reveal.slide(t.h||0,t.v||0)}else{var c,h=e.hashOneBasedIndex?1:0,u=parseInt(n[0],10)-h||0,v=parseInt(n[1],10)-h||0;e.fragmentInURL&&(c=parseInt(n[2],10),isNaN(c)&&(c=void 0)),u===t.h&&v===t.v&&void 0===c||this.Reveal.slide(u,v,c)}}writeURL(e){var t=this.Reveal.getConfig(),i=this.Reveal.getCurrentSlide();clearTimeout(this.writeURLTimeout),"number"==typeof e?this.writeURLTimeout=setTimeout(this.writeURL,e):i&&(t.history||!1===A?window.location.hash=this.getHash():t.hash&&window.history.replaceState(null,null,"#"+this.getHash()))}getHash(e){var t="/",i=e||this.Reveal.getCurrentSlide(),a=i?i.getAttribute("id"):null;a&&(a=encodeURIComponent(a));var n=this.Reveal.getIndices(e);if(this.Reveal.getConfig().fragmentInURL||(n.f=void 0),"string"==typeof a&&a.length)t="/"+a,n.f>=0&&(t+="/"+n.f);else{var s=this.Reveal.getConfig().hashOneBasedIndex?1:0;(n.h>0||n.v>0||n.f>=0)&&(t+=n.h+s),(n.v>0||n.f>=0)&&(t+="/"+(n.v+s)),n.f>=0&&(t+="/"+n.f)}return t}onWindowHashChange(e){this.readURL()}}class D{constructor(e){this.Reveal=e,this.onNavigateLeftClicked=this.onNavigateLeftClicked.bind(this),this.onNavigateRightClicked=this.onNavigateRightClicked.bind(this),this.onNavigateUpClicked=this.onNavigateUpClicked.bind(this),this.onNavigateDownClicked=this.onNavigateDownClicked.bind(this),this.onNavigatePrevClicked=this.onNavigatePrevClicked.bind(this),this.onNavigateNextClicked=this.onNavigateNextClicked.bind(this)}render(){var e=this.Reveal.getConfig().rtl,t=this.Reveal.getRevealElement();this.element=document.createElement("aside"),this.element.className="controls",this.element.innerHTML='
\n\t\t\t
\n\t\t\t
\n\t\t\t
'),this.Reveal.getRevealElement().appendChild(this.element),this.controlsLeft=o(t,".navigate-left"),this.controlsRight=o(t,".navigate-right"),this.controlsUp=o(t,".navigate-up"),this.controlsDown=o(t,".navigate-down"),this.controlsPrev=o(t,".navigate-prev"),this.controlsNext=o(t,".navigate-next"),this.controlsRightArrow=this.element.querySelector(".navigate-right"),this.controlsLeftArrow=this.element.querySelector(".navigate-left"),this.controlsDownArrow=this.element.querySelector(".navigate-down")}configure(e,t){this.element.style.display=e.controls?"block":"none",this.element.setAttribute("data-controls-layout",e.controlsLayout),this.element.setAttribute("data-controls-back-arrows",e.controlsBackArrows)}bind(){var e=["touchstart","click"];w&&(e=["touchstart"]),e.forEach(e=>{this.controlsLeft.forEach(t=>t.addEventListener(e,this.onNavigateLeftClicked,!1)),this.controlsRight.forEach(t=>t.addEventListener(e,this.onNavigateRightClicked,!1)),this.controlsUp.forEach(t=>t.addEventListener(e,this.onNavigateUpClicked,!1)),this.controlsDown.forEach(t=>t.addEventListener(e,this.onNavigateDownClicked,!1)),this.controlsPrev.forEach(t=>t.addEventListener(e,this.onNavigatePrevClicked,!1)),this.controlsNext.forEach(t=>t.addEventListener(e,this.onNavigateNextClicked,!1))})}unbind(){["touchstart","click"].forEach(e=>{this.controlsLeft.forEach(t=>t.removeEventListener(e,this.onNavigateLeftClicked,!1)),this.controlsRight.forEach(t=>t.removeEventListener(e,this.onNavigateRightClicked,!1)),this.controlsUp.forEach(t=>t.removeEventListener(e,this.onNavigateUpClicked,!1)),this.controlsDown.forEach(t=>t.removeEventListener(e,this.onNavigateDownClicked,!1)),this.controlsPrev.forEach(t=>t.removeEventListener(e,this.onNavigatePrevClicked,!1)),this.controlsNext.forEach(t=>t.removeEventListener(e,this.onNavigateNextClicked,!1))})}update(){var e=this.Reveal.availableRoutes();[...this.controlsLeft,...this.controlsRight,...this.controlsUp,...this.controlsDown,...this.controlsPrev,...this.controlsNext].forEach(e=>{e.classList.remove("enabled","fragmented"),e.setAttribute("disabled","disabled")}),e.left&&this.controlsLeft.forEach(e=>{e.classList.add("enabled"),e.removeAttribute("disabled")}),e.right&&this.controlsRight.forEach(e=>{e.classList.add("enabled"),e.removeAttribute("disabled")}),e.up&&this.controlsUp.forEach(e=>{e.classList.add("enabled"),e.removeAttribute("disabled")}),e.down&&this.controlsDown.forEach(e=>{e.classList.add("enabled"),e.removeAttribute("disabled")}),(e.left||e.up)&&this.controlsPrev.forEach(e=>{e.classList.add("enabled"),e.removeAttribute("disabled")}),(e.right||e.down)&&this.controlsNext.forEach(e=>{e.classList.add("enabled"),e.removeAttribute("disabled")});var t=this.Reveal.getCurrentSlide();if(t){var i=this.Reveal.fragments.availableRoutes();i.prev&&this.controlsPrev.forEach(e=>{e.classList.add("fragmented","enabled"),e.removeAttribute("disabled")}),i.next&&this.controlsNext.forEach(e=>{e.classList.add("fragmented","enabled"),e.removeAttribute("disabled")}),this.Reveal.isVerticalSlide(t)?(i.prev&&this.controlsUp.forEach(e=>{e.classList.add("fragmented","enabled"),e.removeAttribute("disabled")}),i.next&&this.controlsDown.forEach(e=>{e.classList.add("fragmented","enabled"),e.removeAttribute("disabled")})):(i.prev&&this.controlsLeft.forEach(e=>{e.classList.add("fragmented","enabled"),e.removeAttribute("disabled")}),i.next&&this.controlsRight.forEach(e=>{e.classList.add("fragmented","enabled"),e.removeAttribute("disabled")}))}if(this.Reveal.getConfig().controlsTutorial){var a=this.Reveal.getIndices();!this.Reveal.hasNavigatedVertically()&&e.down?this.controlsDownArrow.classList.add("highlight"):(this.controlsDownArrow.classList.remove("highlight"),this.Reveal.getConfig().rtl?!this.Reveal.hasNavigatedHorizontally()&&e.left&&0===a.v?this.controlsLeftArrow.classList.add("highlight"):this.controlsLeftArrow.classList.remove("highlight"):!this.Reveal.hasNavigatedHorizontally()&&e.right&&0===a.v?this.controlsRightArrow.classList.add("highlight"):this.controlsRightArrow.classList.remove("highlight"))}}onNavigateLeftClicked(e){e.preventDefault(),this.Reveal.onUserInput(),"linear"===this.Reveal.getConfig().navigationMode?this.Reveal.prev():this.Reveal.left()}onNavigateRightClicked(e){e.preventDefault(),this.Reveal.onUserInput(),"linear"===this.Reveal.getConfig().navigationMode?this.Reveal.next():this.Reveal.right()}onNavigateUpClicked(e){e.preventDefault(),this.Reveal.onUserInput(),this.Reveal.up()}onNavigateDownClicked(e){e.preventDefault(),this.Reveal.onUserInput(),this.Reveal.down()}onNavigatePrevClicked(e){e.preventDefault(),this.Reveal.onUserInput(),this.Reveal.prev()}onNavigateNextClicked(e){e.preventDefault(),this.Reveal.onUserInput(),this.Reveal.next()}}class I{constructor(e){this.Reveal=e,this.onProgressClicked=this.onProgressClicked.bind(this)}render(){this.element=document.createElement("div"),this.element.className="progress",this.Reveal.getRevealElement().appendChild(this.element),this.bar=document.createElement("span"),this.element.appendChild(this.bar)}configure(e,t){this.element.style.display=e.progress?"block":"none"}bind(){this.Reveal.getConfig().progress&&this.element&&this.element.addEventListener("click",this.onProgressClicked,!1)}unbind(){this.Reveal.getConfig().progress&&this.element&&this.element.removeEventListener("click",this.onProgressClicked,!1)}update(){this.Reveal.getConfig().progress&&this.bar&&(this.bar.style.transform="scaleX("+this.Reveal.getProgress()+")")}getMaxWidth(){return this.Reveal.getRevealElement().offsetWidth}onProgressClicked(e){this.Reveal.onUserInput(e),e.preventDefault();var t=this.Reveal.getHorizontalSlides().length,i=Math.floor(e.clientX/this.getMaxWidth()*t);this.Reveal.getConfig().rtl&&(i=t-i),this.Reveal.slide(i)}}class T{constructor(e){this.Reveal=e,this.lastMouseWheelStep=0,this.cursorHidden=!1,this.cursorInactiveTimeout=0,this.onDocumentCursorActive=this.onDocumentCursorActive.bind(this),this.onDocumentMouseScroll=this.onDocumentMouseScroll.bind(this)}configure(e,t){e.mouseWheel?(document.addEventListener("DOMMouseScroll",this.onDocumentMouseScroll,!1),document.addEventListener("mousewheel",this.onDocumentMouseScroll,!1)):(document.removeEventListener("DOMMouseScroll",this.onDocumentMouseScroll,!1),document.removeEventListener("mousewheel",this.onDocumentMouseScroll,!1)),e.hideInactiveCursor?(document.addEventListener("mousemove",this.onDocumentCursorActive,!1),document.addEventListener("mousedown",this.onDocumentCursorActive,!1)):(this.showCursor(),document.removeEventListener("mousemove",this.onDocumentCursorActive,!1),document.removeEventListener("mousedown",this.onDocumentCursorActive,!1))}showCursor(){this.cursorHidden&&(this.cursorHidden=!1,this.Reveal.getRevealElement().style.cursor="")}hideCursor(){!1===this.cursorHidden&&(this.cursorHidden=!0,this.Reveal.getRevealElement().style.cursor="none")}onDocumentCursorActive(e){this.showCursor(),clearTimeout(this.cursorInactiveTimeout),this.cursorInactiveTimeout=setTimeout(this.hideCursor.bind(this),this.Reveal.getConfig().hideCursorTime)}onDocumentMouseScroll(e){if(Date.now()-this.lastMouseWheelStep>1e3){this.lastMouseWheelStep=Date.now();var t=e.detail||-e.wheelDelta;t>0?this.Reveal.next():t<0&&this.Reveal.prev()}}}var H=(e,t)=>{var i=document.createElement("script");i.type="text/javascript",i.async=!1,i.defer=!1,i.src=e,"function"==typeof t&&(i.onload=i.onreadystatechange=e=>{("load"===e.type||/loaded|complete/.test(i.readyState))&&(i.onload=i.onreadystatechange=i.onerror=null,t())},i.onerror=e=>{i.onload=i.onreadystatechange=i.onerror=null,t(new Error("Failed loading script: "+i.src+"\n"+e))});var a=document.querySelector("head");a.insertBefore(i,a.lastChild)};class B{constructor(e){this.Reveal=e,this.state="idle",this.registeredPlugins={},this.asyncDependencies=[]}load(e,t){return this.state="loading",e.forEach(this.registerPlugin.bind(this)),new Promise(e=>{var i=[],a=0;if(t.forEach(e=>{e.condition&&!e.condition()||(e.async?this.asyncDependencies.push(e):i.push(e))}),i.length){a=i.length;var n=t=>{t&&"function"==typeof t.callback&&t.callback(),0==--a&&this.initPlugins().then(e)};i.forEach(e=>{"string"==typeof e.id?(this.registerPlugin(e),n(e)):"string"==typeof e.src?H(e.src,()=>n(e)):(console.warn("Unrecognized plugin format",e),n())})}else this.initPlugins().then(e)})}initPlugins(){return new Promise(e=>{var t=Object.values(this.registeredPlugins),i=t.length;if(0===i)this.loadAsync().then(e);else{var a,n=()=>{0==--i?this.loadAsync().then(e):a()},s=0;(a=()=>{var e=t[s++];if("function"==typeof e.init){var i=e.init(this.Reveal);i&&"function"==typeof i.then?i.then(n):n()}else n()})()}})}loadAsync(){return this.state="loaded",this.asyncDependencies.length&&this.asyncDependencies.forEach(e=>{H(e.src,e.callback)}),Promise.resolve()}registerPlugin(e){2===arguments.length&&"string"==typeof arguments[0]?(e=arguments[1]).id=arguments[0]:"function"==typeof e&&(e=e());var t=e.id;"string"!=typeof t?console.warn("Unrecognized plugin format; can't find plugin.id",e):void 0===this.registeredPlugins[t]?(this.registeredPlugins[t]=e,"loaded"===this.state&&"function"==typeof e.init&&e.init(this.Reveal)):console.warn('reveal.js: "'+t+'" plugin has already been registered')}hasPlugin(e){return!!this.registeredPlugins[e]}getPlugin(e){return this.registeredPlugins[e]}getRegisteredPlugins(){return this.registeredPlugins}}class O{constructor(e){this.Reveal=e}setupPDF(){var e=this.Reveal.getConfig(),t=this.Reveal.getComputedSlideSize(window.innerWidth,window.innerHeight),i=Math.floor(t.width*(1+e.margin)),a=Math.floor(t.height*(1+e.margin)),n=t.width,s=t.height;v("@page{size:"+i+"px "+a+"px; margin: 0px;}"),v(".reveal section>img, .reveal section>video, .reveal section>iframe{max-width: "+n+"px; max-height:"+s+"px}"),document.documentElement.classList.add("print-pdf"),document.body.style.width=i+"px",document.body.style.height=a+"px",this.Reveal.layoutSlideContents(n,s);var r=e.slideNumber&&/all|print/i.test(e.showSlideNumber);o(this.Reveal.getRevealElement(),".slides section").forEach((function(e){e.setAttribute("data-slide-number",this.Reveal.slideNumber.getSlideNumber(e))}),this),o(this.Reveal.getRevealElement(),".slides section").forEach((function(t){if(!1===t.classList.contains("stack")){var l=(i-n)/2,d=(a-s)/2,c=t.scrollHeight,h=Math.max(Math.ceil(c/a),1);(1===(h=Math.min(h,e.pdfMaxPagesPerSlide))&&e.center||t.classList.contains("center"))&&(d=Math.max((a-c)/2,0));var u=document.createElement("div");if(u.className="pdf-page",u.style.height=(a+e.pdfPageHeightOffset)*h+"px",t.parentNode.insertBefore(u,t),u.appendChild(t),t.style.left=l+"px",t.style.top=d+"px",t.style.width=n+"px",t.slideBackgroundElement&&u.insertBefore(t.slideBackgroundElement,t),e.showNotes){var v=getSlideNotes(t);if(v){var g="string"==typeof e.showNotes?e.showNotes:"inline",p=document.createElement("div");p.classList.add("speaker-notes"),p.classList.add("speaker-notes-pdf"),p.setAttribute("data-layout",g),p.innerHTML=v,"separate-page"===g?u.parentNode.insertBefore(p,u.nextSibling):(p.style.left="8px",p.style.bottom="8px",p.style.width=i-16+"px",u.appendChild(p))}}if(r){var m=document.createElement("div");m.classList.add("slide-number"),m.classList.add("slide-number-pdf"),m.innerHTML=t.getAttribute("data-slide-number"),u.appendChild(m)}if(e.pdfSeparateFragments){var f,b,y=this.Reveal.fragments.sort(u.querySelectorAll(".fragment"),!0);y.forEach((function(e){f&&f.forEach((function(e){e.classList.remove("current-fragment")})),e.forEach((function(e){e.classList.add("visible","current-fragment")}),this);var t=u.cloneNode(!0);u.parentNode.insertBefore(t,(b||u).nextSibling),f=e,b=t}),this),y.forEach((function(e){e.forEach((function(e){e.classList.remove("visible","current-fragment")}))}))}else o(u,".fragment:not(.fade-out)").forEach((function(e){e.classList.add("visible")}))}}),this),this.Reveal.dispatchEvent({type:"pdf-ready"})}isPrintingPDF(){return/print-pdf/gi.test(window.location.search)}}class U{constructor(e){this.Reveal=e,this.touchStartX=0,this.touchStartY=0,this.touchStartCount=0,this.touchCaptured=!1,this.onPointerDown=this.onPointerDown.bind(this),this.onPointerMove=this.onPointerMove.bind(this),this.onPointerUp=this.onPointerUp.bind(this),this.onTouchStart=this.onTouchStart.bind(this),this.onTouchMove=this.onTouchMove.bind(this),this.onTouchEnd=this.onTouchEnd.bind(this)}bind(){var e=this.Reveal.getRevealElement();"onpointerdown"in window?(e.addEventListener("pointerdown",this.onPointerDown,!1),e.addEventListener("pointermove",this.onPointerMove,!1),e.addEventListener("pointerup",this.onPointerUp,!1)):window.navigator.msPointerEnabled?(e.addEventListener("MSPointerDown",this.onPointerDown,!1),e.addEventListener("MSPointerMove",this.onPointerMove,!1),e.addEventListener("MSPointerUp",this.onPointerUp,!1)):(e.addEventListener("touchstart",this.onTouchStart,!1),e.addEventListener("touchmove",this.onTouchMove,!1),e.addEventListener("touchend",this.onTouchEnd,!1))}unbind(){var e=this.Reveal.getRevealElement();e.removeEventListener("pointerdown",this.onPointerDown,!1),e.removeEventListener("pointermove",this.onPointerMove,!1),e.removeEventListener("pointerup",this.onPointerUp,!1),e.removeEventListener("MSPointerDown",this.onPointerDown,!1),e.removeEventListener("MSPointerMove",this.onPointerMove,!1),e.removeEventListener("MSPointerUp",this.onPointerUp,!1),e.removeEventListener("touchstart",this.onTouchStart,!1),e.removeEventListener("touchmove",this.onTouchMove,!1),e.removeEventListener("touchend",this.onTouchEnd,!1)}isSwipePrevented(e){for(;e&&"function"==typeof e.hasAttribute;){if(e.hasAttribute("data-prevent-swipe"))return!0;e=e.parentNode}return!1}onTouchStart(e){if(this.isSwipePrevented(e.target))return!0;this.touchStartX=e.touches[0].clientX,this.touchStartY=e.touches[0].clientY,this.touchStartCount=e.touches.length}onTouchMove(e){if(this.isSwipePrevented(e.target))return!0;var t=this.Reveal.getConfig();if(this.touchCaptured)w&&e.preventDefault();else{this.Reveal.onUserInput(e);var i=e.touches[0].clientX,a=e.touches[0].clientY;if(1===e.touches.length&&2!==this.touchStartCount){var n=this.Reveal.availableRoutes({includeFragments:!0}),s=i-this.touchStartX,r=a-this.touchStartY;s>40&&Math.abs(s)>Math.abs(r)?(this.touchCaptured=!0,"linear"===t.navigationMode?t.rtl?this.Reveal.next():this.Reveal.prev():this.Reveal.left()):s<-40&&Math.abs(s)>Math.abs(r)?(this.touchCaptured=!0,"linear"===t.navigationMode?t.rtl?this.Reveal.prev():this.Reveal.next():this.Reveal.right()):r>40&&n.up?(this.touchCaptured=!0,"linear"===t.navigationMode?this.Reveal.prev():this.Reveal.up()):r<-40&&n.down&&(this.touchCaptured=!0,"linear"===t.navigationMode?this.Reveal.next():this.Reveal.down()),t.embedded?(this.touchCaptured||this.Reveal.isVerticalSlide())&&e.preventDefault():e.preventDefault()}}}onTouchEnd(e){this.touchCaptured=!1}onPointerDown(e){e.pointerType!==e.MSPOINTER_TYPE_TOUCH&&"touch"!==e.pointerType||(e.touches=[{clientX:e.clientX,clientY:e.clientY}],this.onTouchStart(e))}onPointerMove(e){e.pointerType!==e.MSPOINTER_TYPE_TOUCH&&"touch"!==e.pointerType||(e.touches=[{clientX:e.clientX,clientY:e.clientY}],this.onTouchMove(e))}onPointerUp(e){e.pointerType!==e.MSPOINTER_TYPE_TOUCH&&"touch"!==e.pointerType||(e.touches=[{clientX:e.clientX,clientY:e.clientY}],this.onTouchEnd(e))}}class z{constructor(e){this.Reveal=e,this.onRevealPointerDown=this.onRevealPointerDown.bind(this),this.onDocumentPointerDown=this.onDocumentPointerDown.bind(this)}configure(e,t){e.embedded?this.blur():(this.focus(),this.unbind())}bind(){this.Reveal.getConfig().embedded&&this.Reveal.getRevealElement().addEventListener("pointerdown",this.onRevealPointerDown,!1)}unbind(){this.Reveal.getRevealElement().removeEventListener("pointerdown",this.onRevealPointerDown,!1),document.removeEventListener("pointerdown",this.onDocumentPointerDown,!1)}focus(){"focus"!==this.state&&(this.Reveal.getRevealElement().classList.add("focused"),document.addEventListener("pointerdown",this.onDocumentPointerDown,!1)),this.state="focus"}blur(){"blur"!==this.state&&(this.Reveal.getRevealElement().classList.remove("focused"),document.removeEventListener("pointerdown",this.onDocumentPointerDown,!1)),this.state="blur"}isFocused(){return"focus"===this.state}onRevealPointerDown(e){this.focus()}onDocumentPointerDown(e){var t=e.target.closest(".reveal");t&&t===this.Reveal.getRevealElement()||this.blur()}}class q{constructor(e){this.Reveal=e}render(){this.element=document.createElement("div"),this.element.className="speaker-notes",this.element.setAttribute("data-prevent-swipe",""),this.element.setAttribute("tabindex","0"),this.Reveal.getRevealElement().appendChild(this.element)}configure(e,t){e.showNotes&&this.element.setAttribute("data-layout","string"==typeof e.showNotes?e.showNotes:"inline")}update(){this.Reveal.getConfig().showNotes&&this.element&&this.Reveal.getCurrentSlide()&&!this.Reveal.print.isPrintingPDF()&&(this.element.innerHTML=this.getSlideNotes()||'No notes on this slide. ')}updateVisibility(){this.Reveal.getConfig().showNotes&&this.hasNotes()?this.Reveal.getRevealElement().classList.add("show-notes"):this.Reveal.getRevealElement().classList.remove("show-notes")}hasNotes(){return this.Reveal.getSlidesElement().querySelectorAll("[data-notes], aside.notes").length>0}isSpeakerNotesWindow(){return!!window.location.search.match(/receiver/gi)}getSlideNotes(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.Reveal.getCurrentSlide();if(e.hasAttribute("data-notes"))return e.getAttribute("data-notes");var t=e.querySelector("aside.notes");return t?t.innerHTML:null}}class W{constructor(e,t){this.diameter=100,this.diameter2=this.diameter/2,this.thickness=6,this.playing=!1,this.progress=0,this.progressOffset=1,this.container=e,this.progressCheck=t,this.canvas=document.createElement("canvas"),this.canvas.className="playback",this.canvas.width=this.diameter,this.canvas.height=this.diameter,this.canvas.style.width=this.diameter2+"px",this.canvas.style.height=this.diameter2+"px",this.context=this.canvas.getContext("2d"),this.container.appendChild(this.canvas),this.render()}setPlaying(e){var t=this.playing;this.playing=e,!t&&this.playing?this.animate():this.render()}animate(){var e=this.progress;this.progress=this.progressCheck(),e>.8&&this.progress<.2&&(this.progressOffset=this.progress),this.render(),this.playing&&requestAnimationFrame(this.animate.bind(this))}render(){var e=this.playing?this.progress:0,t=this.diameter2-this.thickness,i=this.diameter2,a=this.diameter2;this.progressOffset+=.1*(1-this.progressOffset);var n=-Math.PI/2+e*(2*Math.PI),s=-Math.PI/2+this.progressOffset*(2*Math.PI);this.context.save(),this.context.clearRect(0,0,this.diameter,this.diameter),this.context.beginPath(),this.context.arc(i,a,t+4,0,2*Math.PI,!1),this.context.fillStyle="rgba( 0, 0, 0, 0.4 )",this.context.fill(),this.context.beginPath(),this.context.arc(i,a,t,0,2*Math.PI,!1),this.context.lineWidth=this.thickness,this.context.strokeStyle="rgba( 255, 255, 255, 0.2 )",this.context.stroke(),this.playing&&(this.context.beginPath(),this.context.arc(i,a,t,s,n,!1),this.context.lineWidth=this.thickness,this.context.strokeStyle="#fff",this.context.stroke()),this.context.translate(i-14,a-14),this.playing?(this.context.fillStyle="#fff",this.context.fillRect(0,0,10,28),this.context.fillRect(18,0,10,28)):(this.context.beginPath(),this.context.translate(4,0),this.context.moveTo(0,0),this.context.lineTo(24,14),this.context.lineTo(0,28),this.context.fillStyle="#fff",this.context.fill()),this.context.restore()}on(e,t){this.canvas.addEventListener(e,t,!1)}off(e,t){this.canvas.removeEventListener(e,t,!1)}destroy(){this.playing=!1,this.canvas.parentNode&&this.container.removeChild(this.canvas)}}var F={width:960,height:700,margin:.04,minScale:.2,maxScale:2,controls:!0,controlsTutorial:!0,controlsLayout:"bottom-right",controlsBackArrows:"faded",progress:!0,slideNumber:!1,showSlideNumber:"all",hashOneBasedIndex:!1,hash:!1,respondToHashChanges:!0,history:!1,keyboard:!0,keyboardCondition:null,disableLayout:!1,overview:!0,center:!0,touch:!0,loop:!1,rtl:!1,navigationMode:"default",shuffle:!1,fragments:!0,fragmentInURL:!0,embedded:!1,help:!0,pause:!0,showNotes:!1,autoPlayMedia:null,preloadIframes:null,autoAnimate:!0,autoAnimateMatcher:null,autoAnimateEasing:"ease",autoAnimateDuration:1,autoAnimateUnmatched:!0,autoAnimateStyles:["opacity","color","background-color","padding","font-size","line-height","letter-spacing","border-width","border-color","border-radius","outline","outline-offset"],autoSlide:0,autoSlideStoppable:!0,autoSlideMethod:null,defaultTiming:null,mouseWheel:!1,previewLinks:!1,postMessage:!0,postMessageEvents:!1,focusBodyOnPageVisibilityChange:!0,transition:"slide",transitionSpeed:"default",backgroundTransition:"fade",parallaxBackgroundImage:"",parallaxBackgroundSize:"",parallaxBackgroundRepeat:"",parallaxBackgroundPosition:"",parallaxBackgroundHorizontal:null,parallaxBackgroundVertical:null,pdfMaxPagesPerSlide:Number.POSITIVE_INFINITY,pdfSeparateFragments:!0,pdfPageHeightOffset:-1,viewDistance:3,mobileViewDistance:2,display:"block",hideInactiveCursor:!0,hideCursorTime:5e3,dependencies:[],plugins:[]};function V(t,i){arguments.length<2&&(i=arguments[0],t=document.querySelector(".reveal"));var s,h,v,m,f,y,w={},A=!1,k={hasNavigatedHorizontally:!1,hasNavigatedVertically:!1},H=[],V=1,j={layout:"",overview:""},K={},X="idle",Y=0,$=0,_=-1,J=!1,Q=new E(w),Z=new S(w),G=new x(w),ee=new L(w),te=new C(w),ie=new P(w),ae=new N(w),ne=new M(w),se=new D(w),re=new I(w),oe=new T(w),le=new B(w),de=new O(w),ce=new z(w),he=new U(w),ue=new q(w);function ve(e){return K.wrapper=t,K.slides=t.querySelector(".slides"),s=a(a(a(a({},F),i),e),g()),ge(),window.addEventListener("load",Be,!1),le.load(s.plugins,s.dependencies).then(pe),new Promise((function(e){return w.on("ready",e)}))}function ge(){!0===s.embedded?K.viewport=t.closest(".reveal-viewport")||t:(K.viewport=document.body,document.documentElement.classList.add("reveal-full-page")),K.viewport.classList.add("reveal-viewport")}function pe(){A=!0,me(),Re(),we(),et(),Ae(),ne.readURL(),ee.update(!0),setTimeout((function(){K.slides.classList.remove("no-transition"),K.wrapper.classList.add("ready"),Ce({type:"ready",data:{indexh:h,indexv:v,currentSlide:f}})}),1),de.isPrintingPDF()&&(Se(),"complete"===document.readyState?de.setupPDF():window.addEventListener("load",(function(){de.setupPDF()})))}function me(){K.slides.classList.add("no-transition"),b?K.wrapper.classList.add("no-hover"):K.wrapper.classList.remove("no-hover"),ee.render(),Z.render(),se.render(),re.render(),ue.render(),K.pauseOverlay=u(K.wrapper,"div","pause-overlay",s.controls?'Resume presentation ':null),K.statusElement=fe(),K.wrapper.setAttribute("role","application")}function fe(){var e=K.wrapper.querySelector(".aria-status");return e||((e=document.createElement("div")).style.position="absolute",e.style.height="1px",e.style.width="1px",e.style.overflow="hidden",e.style.clip="rect( 1px, 1px, 1px, 1px )",e.classList.add("aria-status"),e.setAttribute("aria-live","polite"),e.setAttribute("aria-atomic","true"),K.wrapper.appendChild(e)),e}function be(e){K.statusElement.textContent=e}function ye(e){var t="";if(3===e.nodeType)t+=e.textContent;else if(1===e.nodeType){var i=e.getAttribute("aria-hidden"),a="none"===window.getComputedStyle(e).display;"true"===i||a||Array.from(e.childNodes).forEach((function(e){t+=ye(e)}))}return""===(t=t.trim())?"":t+" "}function we(){setInterval((function(){0===K.wrapper.scrollTop&&0===K.wrapper.scrollLeft||(K.wrapper.scrollTop=0,K.wrapper.scrollLeft=0)}),1e3)}function Re(){s.postMessage&&window.addEventListener("message",(function(e){var t=e.data;if("string"==typeof t&&"{"===t.charAt(0)&&"}"===t.charAt(t.length-1)&&(t=JSON.parse(t)).method&&"function"==typeof w[t.method])if(!1===n.test(t.method)){var i=w[t.method].apply(w,t.args);Pe("callback",{method:t.method,result:i})}else console.warn('reveal.js: "'+t.method+'" is is blacklisted from the postMessage API')}),!1)}function Ae(t){var i=a({},s);if("object"===e(t)&&r(s,t),!1!==w.isReady()){var n=K.wrapper.querySelectorAll(".slides section").length;K.wrapper.classList.remove(i.transition),K.wrapper.classList.add(s.transition),K.wrapper.setAttribute("data-transition-speed",s.transitionSpeed),K.wrapper.setAttribute("data-background-transition",s.backgroundTransition),s.shuffle&&tt(),l(K.wrapper,"embedded",s.embedded),l(K.wrapper,"rtl",s.rtl),l(K.wrapper,"center",s.center),!1===s.pause&&Xe(),s.previewLinks?(Ne(),Me("[data-preview-link=false]")):(Me(),Ne("[data-preview-link]:not([data-preview-link=false])")),G.reset(),y&&(y.destroy(),y=null),n>1&&s.autoSlide&&s.autoSlideStoppable&&((y=new W(K.wrapper,(function(){return Math.min(Math.max((Date.now()-_)/Y,0),1)}))).on("click",Ht),J=!1),"default"!==s.navigationMode?K.wrapper.setAttribute("data-navigation-mode",s.navigationMode):K.wrapper.removeAttribute("data-navigation-mode"),ue.configure(s,i),ce.configure(s,i),oe.configure(s,i),se.configure(s,i),re.configure(s,i),ae.configure(s,i),te.configure(s,i),Z.configure(s,i),Ze()}}function Ee(){window.addEventListener("resize",Dt,!1),s.touch&&he.bind(),s.keyboard&&ae.bind(),s.progress&&re.bind(),s.respondToHashChanges&&ne.bind(),se.bind(),ce.bind(),K.slides.addEventListener("transitionend",Mt,!1),K.pauseOverlay.addEventListener("click",Xe,!1),s.focusBodyOnPageVisibilityChange&&document.addEventListener("visibilitychange",It,!1)}function Se(){he.unbind(),ce.unbind(),ae.unbind(),se.unbind(),re.unbind(),ne.unbind(),window.removeEventListener("resize",Dt,!1),K.slides.removeEventListener("transitionend",Mt,!1),K.pauseOverlay.removeEventListener("click",Xe,!1)}function ke(e,i,a){t.addEventListener(e,i,a)}function Le(e,i,a){t.removeEventListener(e,i,a)}function xe(e){"string"==typeof e.layout&&(j.layout=e.layout),"string"==typeof e.overview&&(j.overview=e.overview),j.layout?c(K.slides,j.layout+" "+j.overview):c(K.slides,j.overview)}function Ce(e){var t=e.target,i=void 0===t?K.wrapper:t,a=e.type,n=e.data,s=e.bubbles,o=void 0===s||s,l=document.createEvent("HTMLEvents",1,2);l.initEvent(a,o,!0),r(l,n),i.dispatchEvent(l),i===K.wrapper&&Pe(a)}function Pe(e,t){if(s.postMessageEvents&&window.parent!==window.self){var i={namespace:"reveal",eventName:e,state:bt()};r(i,t),window.parent.postMessage(JSON.stringify(i),"*")}}function Ne(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"a";Array.from(K.wrapper.querySelectorAll(e)).forEach((function(e){/^(http|www)/gi.test(e.getAttribute("href"))&&e.addEventListener("click",Tt,!1)}))}function Me(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"a";Array.from(K.wrapper.querySelectorAll(e)).forEach((function(e){/^(http|www)/gi.test(e.getAttribute("href"))&&e.removeEventListener("click",Tt,!1)}))}function De(e){He(),K.overlay=document.createElement("div"),K.overlay.classList.add("overlay"),K.overlay.classList.add("overlay-preview"),K.wrapper.appendChild(K.overlay),K.overlay.innerHTML='\n\t\t\t\t \n\t\t\t\t \n\t\t\t \n\t\t\t
\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\tUnable to load iframe. This is likely due to the site\'s policy (x-frame-options). \n\t\t\t\t \n\t\t\t
'),K.overlay.querySelector("iframe").addEventListener("load",(function(e){K.overlay.classList.add("loaded")}),!1),K.overlay.querySelector(".close").addEventListener("click",(function(e){He(),e.preventDefault()}),!1),K.overlay.querySelector(".external").addEventListener("click",(function(e){He()}),!1)}function Ie(e){"boolean"==typeof e?e?Te():He():K.overlay?He():Te()}function Te(){if(s.help){He(),K.overlay=document.createElement("div"),K.overlay.classList.add("overlay"),K.overlay.classList.add("overlay-help"),K.wrapper.appendChild(K.overlay);var e='Keyboard Shortcuts
',t=ae.getShortcuts(),i=ae.getBindings();for(var a in e+="KEY ACTION ",t)e+="".concat(a," ").concat(t[a]," ");for(var n in i)i[n].key&&i[n].description&&(e+="".concat(i[n].key," ").concat(i[n].description," "));e+="
",K.overlay.innerHTML='\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t
'.concat(e,"
\n\t\t\t\t
\n\t\t\t"),K.overlay.querySelector(".close").addEventListener("click",(function(e){He(),e.preventDefault()}),!1)}}function He(){return!!K.overlay&&(K.overlay.parentNode.removeChild(K.overlay),K.overlay=null,!0)}function Be(){if(K.wrapper&&!de.isPrintingPDF()){if(!s.disableLayout){b&&!s.embedded&&document.documentElement.style.setProperty("--vh",.01*window.innerHeight+"px");var e=Ue(),t=V;Oe(s.width,s.height),K.slides.style.width=e.width+"px",K.slides.style.height=e.height+"px",V=Math.min(e.presentationWidth/e.width,e.presentationHeight/e.height),V=Math.max(V,s.minScale),1===(V=Math.min(V,s.maxScale))?(K.slides.style.zoom="",K.slides.style.left="",K.slides.style.top="",K.slides.style.bottom="",K.slides.style.right="",xe({layout:""})):V>1&&R&&window.devicePixelRatio<2?(K.slides.style.zoom=V,K.slides.style.left="",K.slides.style.top="",K.slides.style.bottom="",K.slides.style.right="",xe({layout:""})):(K.slides.style.zoom="",K.slides.style.left="50%",K.slides.style.top="50%",K.slides.style.bottom="auto",K.slides.style.right="auto",xe({layout:"translate(-50%, -50%) scale("+V+")"}));for(var i=Array.from(K.wrapper.querySelectorAll(".slides section")),a=0,n=i.length;a .stretch, section > .r-stretch").forEach((function(i){var a=p(i,t);if(/(img|video)/gi.test(i.nodeName)){var n=i.naturalWidth||i.videoWidth,s=i.naturalHeight||i.videoHeight,r=Math.min(e/n,a/s);i.style.width=n*r+"px",i.style.height=s*r+"px"}else i.style.width=e+"px",i.style.height=a+"px"}))}function Ue(e,t){var i={width:s.width,height:s.height,presentationWidth:e||K.wrapper.offsetWidth,presentationHeight:t||K.wrapper.offsetHeight};return i.presentationWidth-=i.presentationWidth*s.margin,i.presentationHeight-=i.presentationHeight*s.margin,"string"==typeof i.width&&/%$/.test(i.width)&&(i.width=parseInt(i.width,10)/100*i.presentationWidth),"string"==typeof i.height&&/%$/.test(i.height)&&(i.height=parseInt(i.height,10)/100*i.presentationHeight),i}function ze(t,i){"object"===e(t)&&"function"==typeof t.setAttribute&&t.setAttribute("data-previous-indexv",i||0)}function qe(t){if("object"===e(t)&&"function"==typeof t.setAttribute&&t.classList.contains("stack")){var i=t.hasAttribute("data-start-indexv")?"data-start-indexv":"data-previous-indexv";return parseInt(t.getAttribute(i)||0,10)}return 0}function We(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:f;return e&&e.parentNode&&!!e.parentNode.nodeName.match(/section/i)}function Fe(){return!(!f||!We(f))&&!f.nextElementSibling}function Ve(){return 0===h&&0===v}function je(){return!!f&&(!f.nextElementSibling&&(!We(f)||!f.parentNode.nextElementSibling))}function Ke(){if(s.pause){var e=K.wrapper.classList.contains("paused");Rt(),K.wrapper.classList.add("paused"),!1===e&&Ce({type:"paused"})}}function Xe(){var e=K.wrapper.classList.contains("paused");K.wrapper.classList.remove("paused"),wt(),e&&Ce({type:"resumed"})}function Ye(e){"boolean"==typeof e?e?Ke():Xe():$e()?Xe():Ke()}function $e(){return K.wrapper.classList.contains("paused")}function _e(e){"boolean"==typeof e?e?Et():At():J?Et():At()}function Je(){return!(!Y||J)}function Qe(e,t,i,a){m=f;var n=K.wrapper.querySelectorAll(".slides>section");if(0!==n.length){void 0!==t||ie.isActive()||(t=qe(n[e])),m&&m.parentNode&&m.parentNode.classList.contains("stack")&&ze(m.parentNode,v);var r=H.concat();H.length=0;var o=h||0,l=v||0;h=it(".slides>section",void 0===e?h:e),v=it(".slides>section.present>section",void 0===t?v:t);var d=h!==o||v!==l;d||(m=null);var c=n[h],u=c.querySelectorAll("section");f=u[v]||c;var g=!1;d&&m&&f&&!ie.isActive()&&(m.hasAttribute("data-auto-animate")&&f.hasAttribute("data-auto-animate")&&(g=!0,K.slides.classList.add("disable-slide-transitions")),X="running"),at(),Be(),ie.isActive()&&ie.update(),void 0!==i&&te.goto(i),m&&m!==f&&(m.classList.remove("present"),m.setAttribute("aria-hidden","true"),Ve()&&setTimeout((function(){ht().forEach((function(e){ze(e,0)}))}),0));e:for(var p=0,b=H.length;p0&&void 0!==arguments[0]?arguments[0]:f;ee.sync(e),te.sync(e),Q.load(e),ee.update(),ue.update()}function et(){dt().forEach((function(e){o(e,"section").forEach((function(e,t){t>0&&(e.classList.remove("present"),e.classList.remove("past"),e.classList.add("future"),e.setAttribute("aria-hidden","true"))}))}))}function tt(){dt().forEach((function(e,t,i){K.slides.insertBefore(e,i[Math.floor(Math.random()*i.length)])}))}function it(e,t){var i=o(K.wrapper,e),a=i.length,n=de.isPrintingPDF();if(a){s.loop&&(t%=a)<0&&(t=a+t),t=Math.max(Math.min(t,a-1),0);for(var r=0;rt&&(l.classList.add(d?"past":"future"),s.fragments&&o(l,".fragment.visible").forEach((function(e){e.classList.remove("visible","current-fragment")})))}var c=i[t],h=c.classList.contains("present");c.classList.add("present"),c.removeAttribute("hidden"),c.removeAttribute("aria-hidden"),h||Ce({target:c,type:"visible",bubbles:!1});var u=c.getAttribute("data-state");u&&(H=H.concat(u.split(" ")))}else t=0;return t}function at(){var e,t=dt(),i=t.length;if(i&&void 0!==h){var a=ie.isActive()?10:s.viewDistance;b&&(a=ie.isActive()?6:s.mobileViewDistance),de.isPrintingPDF()&&(a=Number.MAX_VALUE);for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:{},t=e.includeFragments,i=void 0!==t&&t,a=K.wrapper.querySelectorAll(".slides>section"),n=K.wrapper.querySelectorAll(".slides>section.present>section"),r={left:h>0,right:h0,down:v1&&(r.left=!0,r.right=!0),n.length>1&&(r.up=!0,r.down=!0)),a.length>1&&"linear"===s.navigationMode&&(r.right=r.right||r.down,r.left=r.left||r.up),!0===i){var o=te.availableRoutes();r.left=r.left||o.prev,r.up=r.up||o.prev,r.down=r.down||o.next,r.right=r.right||o.next}if(s.rtl){var l=r.left;r.left=r.right,r.right=l}return r}function st(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:f,t=dt(),i=0;e:for(var a=0;a0){t+=f.querySelectorAll(".fragment.visible").length/i.length*.9}}return Math.min(t/(e-1),1)}function ot(e){var t,i=h,a=v;if(e){var n=We(e),s=n?e.parentNode:e,r=dt();i=Math.max(r.indexOf(s),0),a=void 0,n&&(a=Math.max(o(e.parentNode,"section").indexOf(e),0))}if(!e&&f&&f.querySelectorAll(".fragment").length>0){var l=f.querySelector(".current-fragment");t=l&&l.hasAttribute("data-fragment-index")?parseInt(l.getAttribute("data-fragment-index"),10):f.querySelectorAll(".fragment.visible").length-1}return{h:i,v:a,f:t}}function lt(){return o(K.wrapper,'.slides section:not(.stack):not([data-visibility="uncounted"])')}function dt(){return o(K.wrapper,".slides>section")}function ct(){return o(K.wrapper,".slides>section>section")}function ht(){return o(K.wrapper,".slides>section.stack")}function ut(){return dt().length>1}function vt(){return ct().length>1}function gt(){return lt().map((function(e){for(var t={},i=0;iY&&(Y=1e3*e.duration/e.playbackRate+1e3)})),!Y||J||$e()||ie.isActive()||je()&&!te.availableRoutes().next&&!0!==s.loop||($=setTimeout((function(){"function"==typeof s.autoSlideMethod?s.autoSlideMethod():Pt(),wt()}),Y),_=Date.now()),y&&y.setPlaying(-1!==$)}}function Rt(){clearTimeout($),$=-1}function At(){Y&&!J&&(J=!0,Ce({type:"autoslidepaused"}),clearTimeout($),y&&y.setPlaying(!1))}function Et(){Y&&J&&(J=!1,Ce({type:"autoslideresumed"}),wt())}function St(){k.hasNavigatedHorizontally=!0,s.rtl?(ie.isActive()||!1===te.next())&&nt().left&&Qe(h+1,"grid"===s.navigationMode?v:void 0):(ie.isActive()||!1===te.prev())&&nt().left&&Qe(h-1,"grid"===s.navigationMode?v:void 0)}function kt(){k.hasNavigatedHorizontally=!0,s.rtl?(ie.isActive()||!1===te.prev())&&nt().right&&Qe(h-1,"grid"===s.navigationMode?v:void 0):(ie.isActive()||!1===te.next())&&nt().right&&Qe(h+1,"grid"===s.navigationMode?v:void 0)}function Lt(){(ie.isActive()||!1===te.prev())&&nt().up&&Qe(h,v-1)}function xt(){k.hasNavigatedVertically=!0,(ie.isActive()||!1===te.next())&&nt().down&&Qe(h,v+1)}function Ct(){var e;if(!1===te.prev())if(nt().up)Lt();else if(e=s.rtl?o(K.wrapper,".slides>section.future").pop():o(K.wrapper,".slides>section.past").pop()){var t=e.querySelectorAll("section").length-1||void 0;Qe(h-1,t)}}function Pt(){if(k.hasNavigatedHorizontally=!0,k.hasNavigatedVertically=!0,!1===te.next()){var e=nt();e.down&&e.right&&s.loop&&Fe()&&(e.down=!1),e.down?xt():s.rtl?St():kt()}}function Nt(e){s.autoSlideStoppable&&At()}function Mt(e){"running"===X&&/section/gi.test(e.target.nodeName)&&(X="idle",Ce({type:"slidetransitionend",data:{indexh:h,indexv:v,previousSlide:m,currentSlide:f}}))}function Dt(e){Be()}function It(e){!1===document.hidden&&document.activeElement!==document.body&&("function"==typeof document.activeElement.blur&&document.activeElement.blur(),document.body.focus())}function Tt(e){if(e.currentTarget&&e.currentTarget.hasAttribute("href")){var t=e.currentTarget.getAttribute("href");t&&(De(t),e.preventDefault())}}function Ht(e){je()&&!1===s.loop?(Qe(0,0),Et()):J?Et():At()}var Bt={VERSION:"4.0.0",initialize:ve,configure:Ae,sync:Ze,syncSlide:Ge,syncFragments:te.sync.bind(te),slide:Qe,left:St,right:kt,up:Lt,down:xt,prev:Ct,next:Pt,navigateLeft:St,navigateRight:kt,navigateUp:Lt,navigateDown:xt,navigatePrev:Ct,navigateNext:Pt,navigateFragment:te.goto.bind(te),prevFragment:te.prev.bind(te),nextFragment:te.next.bind(te),on:ke,off:Le,addEventListener:ke,removeEventListener:Le,layout:Be,shuffle:tt,availableRoutes:nt,availableFragments:te.availableRoutes.bind(te),toggleHelp:Ie,toggleOverview:ie.toggle.bind(ie),togglePause:Ye,toggleAutoSlide:_e,isFirstSlide:Ve,isLastSlide:je,isLastVerticalSlide:Fe,isVerticalSlide:We,isPaused:$e,isAutoSliding:Je,isSpeakerNotes:ue.isSpeakerNotesWindow.bind(ue),isOverview:ie.isActive.bind(ie),isFocused:ce.isFocused.bind(ce),isPrintingPDF:de.isPrintingPDF.bind(de),isReady:function(){return A},loadSlide:Q.load.bind(Q),unloadSlide:Q.unload.bind(Q),addEventListeners:Ee,removeEventListeners:Se,dispatchEvent:Ce,getState:bt,setState:yt,getProgress:rt,getIndices:ot,getSlidesAttributes:gt,getSlidePastCount:st,getTotalSlides:pt,getSlide:mt,getPreviousSlide:function(){return m},getCurrentSlide:function(){return f},getSlideBackground:ft,getSlideNotes:ue.getSlideNotes.bind(ue),getSlides:lt,getHorizontalSlides:dt,getVerticalSlides:ct,hasHorizontalSlides:ut,hasVerticalSlides:vt,hasNavigatedHorizontally:function(){return k.hasNavigatedHorizontally},hasNavigatedVertically:function(){return k.hasNavigatedVertically},addKeyBinding:ae.addKeyBinding.bind(ae),removeKeyBinding:ae.removeKeyBinding.bind(ae),triggerKey:ae.triggerKey.bind(ae),registerKeyboardShortcut:ae.registerKeyboardShortcut.bind(ae),getComputedSlideSize:Ue,getScale:function(){return V},getConfig:function(){return s},getQueryHash:g,getRevealElement:function(){return t},getSlidesElement:function(){return K.slides},getViewportElement:function(){return K.viewport},getBackgroundsElement:function(){return ee.element},registerPlugin:le.registerPlugin.bind(le),hasPlugin:le.hasPlugin.bind(le),getPlugin:le.getPlugin.bind(le),getPlugins:le.getRegisteredPlugins.bind(le)};return r(w,a(a({},Bt),{},{announceStatus:be,getStatusText:ye,print:de,focus:ce,progress:re,controls:se,location:ne,overview:ie,fragments:te,slideContent:Q,slideNumber:Z,onUserInput:Nt,closeOverlay:He,updateSlidesVisibility:at,layoutSlideContents:Oe,transformSlides:xe,cueAutoSlide:wt,cancelAutoSlide:Rt})),Bt}var j=V,K=[];return j.initialize=e=>(Object.assign(j,new V(document.querySelector(".reveal"),e)),K.map(e=>e(j)),j.initialize()),["on","off","addEventListener","removeEventListener","registerPlugin"].forEach(e=>{j[e]=function(){for(var t=arguments.length,i=new Array(t),a=0;at[e].call(null,...i))}}),j.VERSION="4.0.0",j}));
+//# sourceMappingURL=reveal.js.map
diff --git a/docs/reveal/dist/theme/solarized.css b/docs/reveal/dist/theme/solarized.css
new file mode 100644
index 0000000..e555f41
--- /dev/null
+++ b/docs/reveal/dist/theme/solarized.css
@@ -0,0 +1,289 @@
+/**
+ * Solarized Light theme for reveal.js.
+ * Author: Achim Staebler
+ */
+@import url(fonts/league-gothic/league-gothic.css);
+@import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic);
+/**
+ * Solarized colors by Ethan Schoonover
+ */
+html * {
+ color-profile: sRGB;
+ rendering-intent: auto; }
+
+/*********************************************
+ * GLOBAL STYLES
+ *********************************************/
+:root {
+ --background-color: #fdf6e3;
+ --main-font: Lato, sans-serif;
+ --main-font-size: 40px;
+ --main-color: #657b83;
+ --block-margin: 20px;
+ --heading-margin: 0 0 20px 0;
+ --heading-font: League Gothic, Impact, sans-serif;
+ --heading-color: #586e75;
+ --heading-line-height: 1.2;
+ --heading-letter-spacing: normal;
+ --heading-text-transform: uppercase;
+ --heading-text-shadow: none;
+ --heading-font-weight: normal;
+ --heading1-text-shadow: none;
+ --heading1-size: 3.77em;
+ --heading2-size: 2.11em;
+ --heading3-size: 1.55em;
+ --heading4-size: 1em;
+ --code-font: monospace;
+ --link-color: #268bd2;
+ --link-color-hover: #78b9e6;
+ --selection-background-color: #d33682;
+ --selection-color: #fff; }
+
+.reveal-viewport {
+ background: #fdf6e3;
+ background-color: #fdf6e3; }
+
+.reveal {
+ font-family: "Lato", sans-serif;
+ font-size: 40px;
+ font-weight: normal;
+ color: #657b83; }
+
+.reveal ::selection {
+ color: #fff;
+ background: #d33682;
+ text-shadow: none; }
+
+.reveal ::-moz-selection {
+ color: #fff;
+ background: #d33682;
+ text-shadow: none; }
+
+.reveal .slides section,
+.reveal .slides section > section {
+ line-height: 1.3;
+ font-weight: inherit; }
+
+/*********************************************
+ * HEADERS
+ *********************************************/
+.reveal h1,
+.reveal h2,
+.reveal h3,
+.reveal h4,
+.reveal h5,
+.reveal h6 {
+ margin: 0 0 20px 0;
+ color: #586e75;
+ font-family: "League Gothic", Impact, sans-serif;
+ font-weight: normal;
+ line-height: 1.2;
+ letter-spacing: normal;
+ text-transform: uppercase;
+ text-shadow: none;
+ word-wrap: break-word; }
+
+.reveal h1 {
+ font-size: 3.77em; }
+
+.reveal h2 {
+ font-size: 2.11em; }
+
+.reveal h3 {
+ font-size: 1.55em; }
+
+.reveal h4 {
+ font-size: 1em; }
+
+.reveal h1 {
+ text-shadow: none; }
+
+/*********************************************
+ * OTHER
+ *********************************************/
+.reveal p {
+ margin: 20px 0;
+ line-height: 1.3; }
+
+/* Ensure certain elements are never larger than the slide itself */
+.reveal img,
+.reveal video,
+.reveal iframe {
+ max-width: 95%;
+ max-height: 95%; }
+
+.reveal strong,
+.reveal b {
+ font-weight: bold; }
+
+.reveal em {
+ font-style: italic; }
+
+.reveal ol,
+.reveal dl,
+.reveal ul {
+ display: inline-block;
+ text-align: left;
+ margin: 0 0 0 1em; }
+
+.reveal ol {
+ list-style-type: decimal; }
+
+.reveal ul {
+ list-style-type: disc; }
+
+.reveal ul ul {
+ list-style-type: square; }
+
+.reveal ul ul ul {
+ list-style-type: circle; }
+
+.reveal ul ul,
+.reveal ul ol,
+.reveal ol ol,
+.reveal ol ul {
+ display: block;
+ margin-left: 40px; }
+
+.reveal dt {
+ font-weight: bold; }
+
+.reveal dd {
+ margin-left: 40px; }
+
+.reveal blockquote {
+ display: block;
+ position: relative;
+ width: 70%;
+ margin: 20px auto;
+ padding: 5px;
+ font-style: italic;
+ background: rgba(255, 255, 255, 0.05);
+ box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.2); }
+
+.reveal blockquote p:first-child,
+.reveal blockquote p:last-child {
+ display: inline-block; }
+
+.reveal q {
+ font-style: italic; }
+
+.reveal pre {
+ display: block;
+ position: relative;
+ width: 90%;
+ margin: 20px auto;
+ text-align: left;
+ font-size: 0.55em;
+ font-family: monospace;
+ line-height: 1.2em;
+ word-wrap: break-word;
+ box-shadow: 0px 5px 15px rgba(0, 0, 0, 0.15); }
+
+.reveal code {
+ font-family: monospace;
+ text-transform: none; }
+
+.reveal pre code {
+ display: block;
+ padding: 5px;
+ overflow: auto;
+ max-height: 400px;
+ word-wrap: normal; }
+
+.reveal table {
+ margin: auto;
+ border-collapse: collapse;
+ border-spacing: 0; }
+
+.reveal table th {
+ font-weight: bold; }
+
+.reveal table th,
+.reveal table td {
+ text-align: left;
+ padding: 0.2em 0.5em 0.2em 0.5em;
+ border-bottom: 1px solid; }
+
+.reveal table th[align="center"],
+.reveal table td[align="center"] {
+ text-align: center; }
+
+.reveal table th[align="right"],
+.reveal table td[align="right"] {
+ text-align: right; }
+
+.reveal table tbody tr:last-child th,
+.reveal table tbody tr:last-child td {
+ border-bottom: none; }
+
+.reveal sup {
+ vertical-align: super;
+ font-size: smaller; }
+
+.reveal sub {
+ vertical-align: sub;
+ font-size: smaller; }
+
+.reveal small {
+ display: inline-block;
+ font-size: 0.6em;
+ line-height: 1.2em;
+ vertical-align: top; }
+
+.reveal small * {
+ vertical-align: top; }
+
+.reveal img {
+ margin: 20px 0; }
+
+/*********************************************
+ * LINKS
+ *********************************************/
+.reveal a {
+ color: #268bd2;
+ text-decoration: none;
+ transition: color .15s ease; }
+
+.reveal a:hover {
+ color: #78b9e6;
+ text-shadow: none;
+ border: none; }
+
+.reveal .roll span:after {
+ color: #fff;
+ background: #1a6091; }
+
+/*********************************************
+ * Frame helper
+ *********************************************/
+.reveal .r-frame {
+ border: 4px solid #657b83;
+ box-shadow: 0 0 10px rgba(0, 0, 0, 0.15); }
+
+.reveal a .r-frame {
+ transition: all .15s linear; }
+
+.reveal a:hover .r-frame {
+ border-color: #268bd2;
+ box-shadow: 0 0 20px rgba(0, 0, 0, 0.55); }
+
+/*********************************************
+ * NAVIGATION CONTROLS
+ *********************************************/
+.reveal .controls {
+ color: #268bd2; }
+
+/*********************************************
+ * PROGRESS BAR
+ *********************************************/
+.reveal .progress {
+ background: rgba(0, 0, 0, 0.2);
+ color: #268bd2; }
+
+/*********************************************
+ * PRINT BACKGROUND
+ *********************************************/
+@media print {
+ .backgrounds {
+ background-color: #fdf6e3; } }
diff --git a/docs/reveal/plugin/notes/notes.js b/docs/reveal/plugin/notes/notes.js
new file mode 100644
index 0000000..f2e53da
--- /dev/null
+++ b/docs/reveal/plugin/notes/notes.js
@@ -0,0 +1 @@
+!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t=t||self).RevealNotes=e()}(this,(function(){"use strict";var t=function(t,e){return t(e={exports:{}},e.exports),e.exports}((function(t){function e(){return{baseUrl:null,breaks:!1,gfm:!0,headerIds:!0,headerPrefix:"",highlight:null,langPrefix:"language-",mangle:!0,pedantic:!1,renderer:null,sanitize:!1,sanitizer:null,silent:!1,smartLists:!1,smartypants:!1,tokenizer:null,walkTokens:null,xhtml:!1}}t.exports={defaults:{baseUrl:null,breaks:!1,gfm:!0,headerIds:!0,headerPrefix:"",highlight:null,langPrefix:"language-",mangle:!0,pedantic:!1,renderer:null,sanitize:!1,sanitizer:null,silent:!1,smartLists:!1,smartypants:!1,tokenizer:null,walkTokens:null,xhtml:!1},getDefaults:e,changeDefaults:function(e){t.exports.defaults=e}}}));t.defaults,t.getDefaults,t.changeDefaults;const e=/[&<>"']/,n=/[&<>"']/g,s=/[<>"']|&(?!#?\w+;)/,i=/[<>"']|&(?!#?\w+;)/g,r={"&":"&","<":"<",">":">",'"':""","'":"'"},a=t=>r[t];const l=/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/gi;function o(t){return t.replace(l,(t,e)=>"colon"===(e=e.toLowerCase())?":":"#"===e.charAt(0)?"x"===e.charAt(1)?String.fromCharCode(parseInt(e.substring(2),16)):String.fromCharCode(+e.substring(1)):"")}const c=/(^|[^\[])\^/g;const u=/[^\w:]/g,d=/^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;const p={},h=/^[^:]+:\/*[^/]*$/,g=/^([^:]+:)[\s\S]*$/,m=/^([^:]+:\/*[^/]*)[\s\S]*$/;function f(t,e){p[" "+t]||(h.test(t)?p[" "+t]=t+"/":p[" "+t]=k(t,"/",!0));const n=-1===(t=p[" "+t]).indexOf(":");return"//"===e.substring(0,2)?n?e:t.replace(g,"$1")+e:"/"===e.charAt(0)?n?e:t.replace(m,"$1")+e:t+e}function k(t,e,n){const s=t.length;if(0===s)return"";let i=0;for(;i(s=(s=s.source||s).replace(c,"$1"),t=t.replace(e,s),n),getRegex:()=>new RegExp(t,e)};return n},cleanUrl:function(t,e,n){if(t){let t;try{t=decodeURIComponent(o(n)).replace(u,"").toLowerCase()}catch(t){return null}if(0===t.indexOf("javascript:")||0===t.indexOf("vbscript:")||0===t.indexOf("data:"))return null}e&&!d.test(n)&&(n=f(e,n));try{n=encodeURI(n).replace(/%25/g,"%")}catch(t){return null}return n},resolveUrl:f,noopTest:{exec:function(){}},merge:function(t){let e,n,s=1;for(;s{let s=!1,i=e;for(;--i>=0&&"\\"===n[i];)s=!s;return s?"|":" |"}).split(/ \|/);let s=0;if(n.length>e)n.splice(e);else for(;n.length1?{type:"space",raw:e[0]}:{raw:"\n"}}code(t,e){const n=this.rules.block.code.exec(t);if(n){const t=e[e.length-1];if(t&&"paragraph"===t.type)return{raw:n[0],text:n[0].trimRight()};const s=n[0].replace(/^ {4}/gm,"");return{type:"code",raw:n[0],codeBlockStyle:"indented",text:this.options.pedantic?s:y(s,"\n")}}}fences(t){const e=this.rules.block.fences.exec(t);if(e){const t=e[0],n=function(t,e){const n=t.match(/^(\s+)(?:```)/);if(null===n)return e;const s=n[1];return e.split("\n").map(t=>{const e=t.match(/^\s+/);if(null===e)return t;const[n]=e;return n.length>=s.length?t.slice(s.length):t}).join("\n")}(t,e[3]||"");return{type:"code",raw:t,lang:e[2]?e[2].trim():e[2],text:n}}}heading(t){const e=this.rules.block.heading.exec(t);if(e)return{type:"heading",raw:e[0],depth:e[1].length,text:e[2]}}nptable(t){const e=this.rules.block.nptable.exec(t);if(e){const t={type:"table",header:x(e[1].replace(/^ *| *\| *$/g,"")),align:e[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:e[3]?e[3].replace(/\n$/,"").split("\n"):[],raw:e[0]};if(t.header.length===t.align.length){let e,n=t.align.length;for(e=0;e ?/gm,"");return{type:"blockquote",raw:e[0],text:t}}}list(t){const e=this.rules.block.list.exec(t);if(e){let t=e[0];const n=e[2],s=n.length>1,i={type:"list",raw:t,ordered:s,start:s?+n:"",loose:!1,items:[]},r=e[0].match(this.rules.block.item);let a,l,o,c,u,d,p,h=!1;const g=r.length;for(let e=0;e1?1===o.length:o.length>1||this.options.smartLists&&o!==n)&&(c=r.slice(e+1).join("\n"),i.raw=i.raw.substring(0,i.raw.length-c.length),e=g-1)),u=h||/\n\n(?!\s*$)/.test(a),e!==g-1&&(h="\n"===a.charAt(a.length-1),u||(u=h)),u&&(i.loose=!0),d=/^\[[ xX]\] /.test(a),p=void 0,d&&(p=" "!==a[1],a=a.replace(/^\[[ xX]\] +/,"")),i.items.push({type:"list_item",raw:t,task:d,checked:p,loose:u,text:a});return i}}html(t){const e=this.rules.block.html.exec(t);if(e)return{type:this.options.sanitize?"paragraph":"html",raw:e[0],pre:!this.options.sanitizer&&("pre"===e[1]||"script"===e[1]||"style"===e[1]),text:this.options.sanitize?this.options.sanitizer?this.options.sanitizer(e[0]):v(e[0]):e[0]}}def(t){const e=this.rules.block.def.exec(t);if(e){return e[3]&&(e[3]=e[3].substring(1,e[3].length-1)),{tag:e[1].toLowerCase().replace(/\s+/g," "),raw:e[0],href:e[2],title:e[3]}}}table(t){const e=this.rules.block.table.exec(t);if(e){const t={type:"table",header:x(e[1].replace(/^ *| *\| *$/g,"")),align:e[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:e[3]?e[3].replace(/\n$/,"").split("\n"):[]};if(t.header.length===t.align.length){t.raw=e[0];let n,s=t.align.length;for(n=0;n/i.test(s[0])&&(e=!1),!n&&/^<(pre|code|kbd|script)(\s|>)/i.test(s[0])?n=!0:n&&/^<\/(pre|code|kbd|script)(\s|>)/i.test(s[0])&&(n=!1),{type:this.options.sanitize?"text":"html",raw:s[0],inLink:e,inRawBlock:n,text:this.options.sanitize?this.options.sanitizer?this.options.sanitizer(s[0]):v(s[0]):s[0]}}link(t){const e=this.rules.inline.link.exec(t);if(e){const t=S(e[2],"()");if(t>-1){const n=(0===e[0].indexOf("!")?5:4)+e[1].length+t;e[2]=e[2].substring(0,t),e[0]=e[0].substring(0,n).trim(),e[3]=""}let n=e[2],s="";if(this.options.pedantic){const t=/^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(n);t?(n=t[1],s=t[3]):s=""}else s=e[3]?e[3].slice(1,-1):"";return n=n.trim().replace(/^<([\s\S]*)>$/,"$1"),T(e,{href:n?n.replace(this.rules.inline._escapes,"$1"):n,title:s?s.replace(this.rules.inline._escapes,"$1"):s},e[0])}}reflink(t,e){let n;if((n=this.rules.inline.reflink.exec(t))||(n=this.rules.inline.nolink.exec(t))){let t=(n[2]||n[1]).replace(/\s+/g," ");if(t=e[t.toLowerCase()],!t||!t.href){const t=n[0].charAt(0);return{type:"text",raw:t,text:t}}return T(n,t,n[0])}}strong(t){const e=this.rules.inline.strong.exec(t);if(e)return{type:"strong",raw:e[0],text:e[4]||e[3]||e[2]||e[1]}}em(t){const e=this.rules.inline.em.exec(t);if(e)return{type:"em",raw:e[0],text:e[6]||e[5]||e[4]||e[3]||e[2]||e[1]}}codespan(t){const e=this.rules.inline.code.exec(t);if(e){let t=e[2].replace(/\n/g," ");const n=/[^ ]/.test(t),s=t.startsWith(" ")&&t.endsWith(" ");return n&&s&&(t=t.substring(1,t.length-1)),t=v(t,!0),{type:"codespan",raw:e[0],text:t}}}br(t){const e=this.rules.inline.br.exec(t);if(e)return{type:"br",raw:e[0]}}del(t){const e=this.rules.inline.del.exec(t);if(e)return{type:"del",raw:e[0],text:e[1]}}autolink(t,e){const n=this.rules.inline.autolink.exec(t);if(n){let t,s;return"@"===n[2]?(t=v(this.options.mangle?e(n[1]):n[1]),s="mailto:"+t):(t=v(n[1]),s=t),{type:"link",raw:n[0],text:t,href:s,tokens:[{type:"text",raw:t,text:t}]}}}url(t,e){let n;if(n=this.rules.inline.url.exec(t)){let t,s;if("@"===n[2])t=v(this.options.mangle?e(n[0]):n[0]),s="mailto:"+t;else{let e;do{e=n[0],n[0]=this.rules.inline._backpedal.exec(n[0])[0]}while(e!==n[0]);t=v(n[0]),s="www."===n[1]?"http://"+t:t}return{type:"link",raw:n[0],text:t,href:s,tokens:[{type:"text",raw:t,text:t}]}}}inlineText(t,e,n){const s=this.rules.inline.text.exec(t);if(s){let t;return t=e?this.options.sanitize?this.options.sanitizer?this.options.sanitizer(s[0]):v(s[0]):s[0]:v(this.options.smartypants?n(s[0]):s[0]),{type:"text",raw:s[0],text:t}}}};const{noopTest:_,edit:A,merge:E}=b,L={newline:/^\n+/,code:/^( {4}[^\n]+\n*)+/,fences:/^ {0,3}(`{3,}(?=[^`\n]*\n)|~{3,})([^\n]*)\n(?:|([\s\S]*?)\n)(?: {0,3}\1[~`]* *(?:\n+|$)|$)/,hr:/^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\* *){3,})(?:\n+|$)/,heading:/^ {0,3}(#{1,6}) +([^\n]*?)(?: +#+)? *(?:\n+|$)/,blockquote:/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/,list:/^( {0,3})(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?!\1bull )\n*|\s*$)/,html:"^ {0,3}(?:<(script|pre|style)[\\s>][\\s\\S]*?(?:\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?\\?>\\n*|\\n*|\\n*|?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:\\n{2,}|$)|<(?!script|pre|style)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:\\n{2,}|$)|(?!script|pre|style)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:\\n{2,}|$))",def:/^ {0,3}\[(label)\]: *\n? *([^\s>]+)>?(?:(?: +\n? *| *\n *)(title))? *(?:\n+|$)/,nptable:_,table:_,lheading:/^([^\n]+)\n {0,3}(=+|-+) *(?:\n+|$)/,_paragraph:/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html)[^\n]+)*)/,text:/^[^\n]+/,_label:/(?!\s*\])(?:\\[\[\]]|[^\[\]])+/,_title:/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/};L.def=A(L.def).replace("label",L._label).replace("title",L._title).getRegex(),L.bullet=/(?:[*+-]|\d{1,9}\.)/,L.item=/^( *)(bull) ?[^\n]*(?:\n(?!\1bull ?)[^\n]*)*/,L.item=A(L.item,"gm").replace(/bull/g,L.bullet).getRegex(),L.list=A(L.list).replace(/bull/g,L.bullet).replace("hr","\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))").replace("def","\\n+(?="+L.def.source+")").getRegex(),L._tag="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",L._comment=//,L.html=A(L.html,"i").replace("comment",L._comment).replace("tag",L._tag).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),L.paragraph=A(L._paragraph).replace("hr",L.hr).replace("heading"," {0,3}#{1,6} ").replace("|lheading","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|!--)").replace("tag",L._tag).getRegex(),L.blockquote=A(L.blockquote).replace("paragraph",L.paragraph).getRegex(),L.normal=E({},L),L.gfm=E({},L.normal,{nptable:"^ *([^|\\n ].*\\|.*)\\n *([-:]+ *\\|[-| :]*)(?:\\n((?:(?!\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)",table:"^ *\\|(.+)\\n *\\|?( *[-:]+[-| :]*)(?:\\n *((?:(?!\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)"}),L.gfm.nptable=A(L.gfm.nptable).replace("hr",L.hr).replace("heading"," {0,3}#{1,6} ").replace("blockquote"," {0,3}>").replace("code"," {4}[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|!--)").replace("tag",L._tag).getRegex(),L.gfm.table=A(L.gfm.table).replace("hr",L.hr).replace("heading"," {0,3}#{1,6} ").replace("blockquote"," {0,3}>").replace("code"," {4}[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|!--)").replace("tag",L._tag).getRegex(),L.pedantic=E({},L.normal,{html:A("^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?\\1> *(?:\\n{2,}|\\s*$)| \\s]*)*?/?> *(?:\\n{2,}|\\s*$))").replace("comment",L._comment).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^ *(#{1,6}) *([^\n]+?) *(?:#+ *)?(?:\n+|$)/,fences:_,paragraph:A(L.normal._paragraph).replace("hr",L.hr).replace("heading"," *#{1,6} *[^\n]").replace("lheading",L.lheading).replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").getRegex()});const $={escape:/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,autolink:/^<(scheme:[^\s\x00-\x1f<>]*|email)>/,url:_,tag:"^comment|^[a-zA-Z][\\w:-]*\\s*>|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^|^",link:/^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/,reflink:/^!?\[(label)\]\[(?!\s*\])((?:\\[\[\]]?|[^\[\]\\])+)\]/,nolink:/^!?\[(?!\s*\])((?:\[[^\[\]]*\]|\\[\[\]]|[^\[\]])*)\](?:\[\])?/,strong:/^__([^\s_])__(?!_)|^\*\*([^\s*])\*\*(?!\*)|^__([^\s][\s\S]*?[^\s])__(?!_)|^\*\*([^\s][\s\S]*?[^\s])\*\*(?!\*)/,em:/^_([^\s_])_(?!_)|^_([^\s_<][\s\S]*?[^\s_])_(?!_|[^\s,punctuation])|^_([^\s_<][\s\S]*?[^\s])_(?!_|[^\s,punctuation])|^\*([^\s*<\[])\*(?!\*)|^\*([^\s<"][\s\S]*?[^\s\[\*])\*(?![\]`punctuation])|^\*([^\s*"<\[][\s\S]*[^\s])\*(?!\*)/,code:/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,br:/^( {2,}|\\)\n(?!\s*$)/,del:_,text:/^(`+|[^`])(?:[\s\S]*?(?:(?=[\\?@\\[^_{|}~"};$.em=A($.em).replace(/punctuation/g,$._punctuation).getRegex(),$._escapes=/\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/g,$._scheme=/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/,$._email=/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/,$.autolink=A($.autolink).replace("scheme",$._scheme).replace("email",$._email).getRegex(),$._attribute=/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/,$.tag=A($.tag).replace("comment",L._comment).replace("attribute",$._attribute).getRegex(),$._label=/(?:\[[^\[\]]*\]|\\.|`[^`]*`|[^\[\]\\`])*?/,$._href=/<(?:\\[<>]?|[^\s<>\\])*>|[^\s\x00-\x1f]*/,$._title=/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/,$.link=A($.link).replace("label",$._label).replace("href",$._href).replace("title",$._title).getRegex(),$.reflink=A($.reflink).replace("label",$._label).getRegex(),$.normal=E({},$),$.pedantic=E({},$.normal,{strong:/^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,em:/^_(?=\S)([\s\S]*?\S)_(?!_)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/,link:A(/^!?\[(label)\]\((.*?)\)/).replace("label",$._label).getRegex(),reflink:A(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",$._label).getRegex()}),$.gfm=E({},$.normal,{escape:A($.escape).replace("])","~|])").getRegex(),_extended_email:/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,url:/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,_backpedal:/(?:[^?!.,:;*_~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,del:/^~+(?=\S)([\s\S]*?\S)~+/,text:/^(`+|[^`])(?:[\s\S]*?(?:(?=[\\.5&&(n="x"+n.toString(16)),s+=""+n+";";return s}var N=class t{constructor(t){this.tokens=[],this.tokens.links=Object.create(null),this.options=t||C,this.options.tokenizer=this.options.tokenizer||new z,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options;const e={block:I.normal,inline:q.normal};this.options.pedantic?(e.block=I.pedantic,e.inline=q.pedantic):this.options.gfm&&(e.block=I.gfm,this.options.breaks?e.inline=q.breaks:e.inline=q.gfm),this.tokenizer.rules=e}static get rules(){return{block:I,inline:q}}static lex(e,n){return new t(n).lex(e)}lex(t){return t=t.replace(/\r\n|\r/g,"\n").replace(/\t/g," "),this.blockTokens(t,this.tokens,!0),this.inline(this.tokens),this.tokens}blockTokens(t,e=[],n=!0){let s,i,r,a;for(t=t.replace(/^ +$/gm,"");t;)if(s=this.tokenizer.space(t))t=t.substring(s.raw.length),s.type&&e.push(s);else if(s=this.tokenizer.code(t,e))t=t.substring(s.raw.length),s.type?e.push(s):(a=e[e.length-1],a.raw+="\n"+s.raw,a.text+="\n"+s.text);else if(s=this.tokenizer.fences(t))t=t.substring(s.raw.length),e.push(s);else if(s=this.tokenizer.heading(t))t=t.substring(s.raw.length),e.push(s);else if(s=this.tokenizer.nptable(t))t=t.substring(s.raw.length),e.push(s);else if(s=this.tokenizer.hr(t))t=t.substring(s.raw.length),e.push(s);else if(s=this.tokenizer.blockquote(t))t=t.substring(s.raw.length),s.tokens=this.blockTokens(s.text,[],n),e.push(s);else if(s=this.tokenizer.list(t)){for(t=t.substring(s.raw.length),r=s.items.length,i=0;i'+(n?t:U(t,!0))+"\n":""+(n?t:U(t,!0))+" \n"}blockquote(t){return"\n"+t+" \n"}html(t){return t}heading(t,e,n,s){return this.options.headerIds?"\n":""+t+" \n"}hr(){return this.options.xhtml?" \n":" \n"}list(t,e,n){const s=e?"ol":"ul";return"<"+s+(e&&1!==n?' start="'+n+'"':"")+">\n"+t+""+s+">\n"}listitem(t){return""+t+" \n"}checkbox(t){return" "}paragraph(t){return""+t+"
\n"}table(t,e){return e&&(e=""+e+" "),"\n"}tablerow(t){return"\n"+t+" \n"}tablecell(t,e){const n=e.header?"th":"td";return(e.align?"<"+n+' align="'+e.align+'">':"<"+n+">")+t+""+n+">\n"}strong(t){return""+t+" "}em(t){return""+t+" "}codespan(t){return""+t+""}br(){return this.options.xhtml?" ":" "}del(t){return""+t+""}link(t,e,n){if(null===(t=D(this.options.sanitize,this.options.baseUrl,t)))return n;let s='"+n+" ",s}image(t,e,n){if(null===(t=D(this.options.sanitize,this.options.baseUrl,t)))return n;let s=' ":">",s}text(t){return t}},j=class{strong(t){return t}em(t){return t}codespan(t){return t}del(t){return t}html(t){return t}text(t){return t}link(t,e,n){return""+n}image(t,e,n){return""+n}br(){return""}},J=class{constructor(){this.seen={}}slug(t){let e=t.toLowerCase().trim().replace(/<[!\/a-z].*?>/gi,"").replace(/[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,./:;<=>?@[\]^`{|}~]/g,"").replace(/\s/g,"-");if(this.seen.hasOwnProperty(e)){const t=e;do{this.seen[t]++,e=t+"-"+this.seen[t]}while(this.seen.hasOwnProperty(e))}return this.seen[e]=0,e}};const{defaults:H}=t,{unescape:K}=b;var W=class t{constructor(t){this.options=t||H,this.options.renderer=this.options.renderer||new Z,this.renderer=this.options.renderer,this.renderer.options=this.options,this.textRenderer=new j,this.slugger=new J}static parse(e,n){return new t(n).parse(e)}parse(t,e=!0){let n,s,i,r,a,l,o,c,u,d,p,h,g,m,f,k,b,w,y="";const x=t.length;for(n=0;n0&&"text"===f.tokens[0].type?(f.tokens[0].text=w+" "+f.tokens[0].text,f.tokens[0].tokens&&f.tokens[0].tokens.length>0&&"text"===f.tokens[0].tokens[0].type&&(f.tokens[0].tokens[0].text=w+" "+f.tokens[0].tokens[0].text)):f.tokens.unshift({type:"text",text:w}):m+=w),m+=this.parse(f.tokens,g),u+=this.renderer.listitem(m,b,k);y+=this.renderer.list(u,p,h);continue;case"html":y+=this.renderer.html(d.text);continue;case"paragraph":y+=this.renderer.paragraph(this.parseInline(d.tokens));continue;case"text":for(u=d.tokens?this.parseInline(d.tokens):d.text;n+1An error occurred:
"+F(t.message+"",!0)+" ";throw t}}Q.options=Q.setOptions=function(t){return B(Q.defaults,t),X(Q.defaults),Q},Q.getDefaults=Y,Q.defaults=G,Q.use=function(t){const e=B({},t);if(t.renderer){const n=Q.defaults.renderer||new Z;for(const e in t.renderer){const s=n[e];n[e]=(...i)=>{let r=t.renderer[e].apply(n,i);return!1===r&&(r=s.apply(n,i)),r}}e.renderer=n}if(t.tokenizer){const n=Q.defaults.tokenizer||new z;for(const e in t.tokenizer){const s=n[e];n[e]=(...i)=>{let r=t.tokenizer[e].apply(n,i);return!1===r&&(r=s.apply(n,i)),r}}e.tokenizer=n}if(t.walkTokens){const n=Q.defaults.walkTokens;e.walkTokens=e=>{t.walkTokens(e),n&&n(e)}}Q.setOptions(e)},Q.walkTokens=function(t,e){for(const n of t)switch(e(n),n.type){case"table":for(const t of n.tokens.header)Q.walkTokens(t,e);for(const t of n.tokens.cells)for(const n of t)Q.walkTokens(n,e);break;case"list":Q.walkTokens(n.items,e);break;default:n.tokens&&Q.walkTokens(n.tokens,e)}},Q.Parser=W,Q.parser=W.parse,Q.Renderer=Z,Q.TextRenderer=j,Q.Lexer=N,Q.lexer=N.lex,Q.Tokenizer=z,Q.Slugger=J,Q.parse=Q;var tt=Q;return function(){var t,e=null;function n(){var n;!e||e.closed?((e=window.open("about:blank","reveal.js - Notes","width=1100,height=700")).marked=tt,e.document.write("\n\t\n\t\t \n\n\t\treveal.js - Speaker View \n\n\t\t\n\t\n\n\t\n\n\t\tLoading speaker view...
\n\n\t\t
\n\t\tUpcoming
\n\t\t\n\t\t\t
\n\t\t\t\t
Time Click to Reset \n\t\t\t\t
\n\t\t\t\t\t0:00 AM \n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t00 :00 :00 \n\t\t\t\t
\n\t\t\t\t
\n\n\t\t\t\t
Pacing – Time to finish current slide \n\t\t\t\t
\n\t\t\t\t\t00 :00 :00 \n\t\t\t\t
\n\t\t\t
\n\n\t\t\t
\n\t\t\t\t
Notes \n\t\t\t\t
\n\t\t\t
\n\t\t
\n\t\t\n\t\t\t \n\t\t\t \n\t\t
\n\n\t\t
-
-JWT: JSON Web Token
+
+JWT: JSON Web Token
Used for authentication/authorization such as:
@@ -46,12 +368,11 @@ JWT: JSON Web Token
-
-
-Why JWTs?
+
+Why JWTs?
Imagine app with many features + servers + engineers:
@@ -66,13 +387,11 @@ Why JWTs?
-
-
-
-JWT Architecture
+
+Authentication vs Validation
Auth server manages passwords, takes credit cards, etc.
@@ -83,28 +402,496 @@ JWT Architecture
-
-Separate authentication from validation/application:
-
-
-Authentication requires secret keys (high security)
-Validation can use public key (less security)
-Easier to manage secrets, keys, load, sync, etc.
-
-
-
-