2023-09-27 20:12:30 +01:00
( function ( ) { const n = document . createElement ( "link" ) . relList ; if ( n && n . supports && n . supports ( "modulepreload" ) ) return ; for ( const E of document . querySelectorAll ( 'link[rel="modulepreload"]' ) ) d ( E ) ; new MutationObserver ( E => { for ( const N of E ) if ( N . type === "childList" ) for ( const v of N . addedNodes ) v . tagName === "LINK" && v . rel === "modulepreload" && d ( v ) } ) . observe ( document , { childList : ! 0 , subtree : ! 0 } ) ; function r ( E ) { const N = { } ; return E . integrity && ( N . integrity = E . integrity ) , E . referrerpolicy && ( N . referrerPolicy = E . referrerpolicy ) , E . crossorigin === "use-credentials" ? N . credentials = "include" : E . crossorigin === "anonymous" ? N . credentials = "omit" : N . credentials = "same-origin" , N } function d ( E ) { if ( E . ep ) return ; E . ep = ! 0 ; const N = r ( E ) ; fetch ( E . href , N ) } } ) ( ) ; function et ( ) { } function fi ( f ) { return f ( ) } function oi ( ) { return Object . create ( null ) } function ca ( f ) { f . forEach ( fi ) } function Ti ( f ) { return typeof f == "function" } function zt ( f , n ) { return f != f ? n == n : f !== n || f && typeof f == "object" || typeof f == "function" } function wo ( f ) { return Object . keys ( f ) . length === 0 } function xo ( f , n ) { f . appendChild ( n ) } function bt ( f , n , r ) { f . insertBefore ( n , r || null ) } function St ( f ) { f . parentNode && f . parentNode . removeChild ( f ) } function Ht ( f ) { return document . createElement ( f ) } function Mo ( f ) { return document . createTextNode ( f ) } function dn ( ) { return Mo ( " " ) } function li ( f , n , r ) { r == null ? f . removeAttribute ( n ) : f . getAttribute ( n ) !== r && f . setAttribute ( n , r ) } function Lo ( f ) { return Array . from ( f . childNodes ) } let yn ; function Nn ( f ) { yn = f } function ko ( ) { if ( ! yn ) throw new Error ( "Function called outside component initialization" ) ; return yn } function Po ( f ) { ko ( ) . $$ . on _mount . push ( f ) } const _n = [ ] , ci = [ ] ; let mn = [ ] ; const di = [ ] , vi = Promise . resolve ( ) ; let Pa = ! 1 ; function Ci ( ) { Pa || ( Pa = ! 0 , vi . then ( Ri ) ) } function Uo ( ) { return Ci ( ) , vi } function Ua ( f ) { mn . push ( f ) } const xa = new Set ; let cn = 0 ; function Ri ( ) { if ( cn !== 0 ) return ; const f = yn ; do { try { for ( ; cn < _n . length ; ) { const n = _n [ cn ] ; cn ++ , Nn ( n ) , Fo ( n . $$ ) } } catch ( n ) { throw _n . length = 0 , cn = 0 , n } for ( Nn ( null ) , _n . length = 0 , cn = 0 ; ci . length ; ) ci . pop ( ) ( ) ; for ( let n = 0 ; n < mn . length ; n += 1 ) { const r = mn [ n ] ; xa . has ( r ) || ( xa . add ( r ) , r ( ) ) } mn . length = 0 } while ( _n . length ) ; for ( ; di . length ; ) di . pop ( ) ( ) ; Pa = ! 1 , xa . clear ( ) , Nn ( f ) } function Fo ( f ) { if ( f . fragment !== null ) { f . update ( ) , ca ( f . before _update ) ; const n = f . dirty ; f . dirty = [ - 1 ] , f . fragment && f . fragment . p ( f . ctx , n ) , f . after _update . forEach ( Ua ) } } function Bo ( f ) { const n = [ ] , r = [ ] ; mn . forEach ( d => f . indexOf ( d ) === - 1 ? n . push ( d ) : r . push ( d ) ) , r . forEach ( d => d ( ) ) , mn = n } const sa = new Set ; let Go ; function Ft ( f , n ) { f && f . i && ( sa . delete ( f ) , f . i ( n ) ) } function Zt ( f , n , r , d ) { if ( f && f . o ) { if ( sa . has ( f ) ) return ; sa . add ( f ) , Go . c . push ( ( ) => { sa . delete ( f ) , d && ( r && f . d ( 1 ) , d ( ) ) } ) , f . o ( n ) } else d && d ( ) } function Jt ( f ) { f && f . c ( ) } function Bt ( f , n , r , d ) { const { fragment : E , after _update : N } = f . $$ ; E && E . m ( n , r ) , d || Ua ( ( ) => { const v = f . $$ . on _mount . map ( fi ) . filter ( Ti ) ; f . $$ . on _destroy ? f . $$ . on _destroy . push ( ... v ) : ca ( v ) , f . $$ . on _mount = [ ] } ) , N . forEach ( Ua ) } function Gt ( f , n ) { const r = f . $$ ; r . fragment !== null && ( Bo ( r . after _update ) , ca ( r . on _destroy ) , r . fragment && r . fragment . d ( n ) , r . on _destroy = r . fragment = null , r . ctx = [ ] ) } function Yo ( f , n ) { f . $$ . dirty [ 0 ] === - 1 && ( _n . push ( f ) , Ci ( ) , f . $$ . dirty . fill ( 0 ) ) , f . $$ . dirty [ n / 31 | 0 ] |= 1 << n % 31 } function qt ( f , n , r , d , E , N , v , A = [ - 1 ] ) { const C = yn ; Nn ( f ) ; const Z = f . $$ = { fragment : null , ctx : [ ] , props : N , update : et , not _equal : E , bound : oi ( ) , on _mount : [ ] , on _destroy : [ ] , on _disconnect : [ ] , before _update : [ ] , after _update : [ ] , context : new Map ( n . context || ( C ? C . $$ . context : [ ] ) ) , callbacks : oi ( ) , dirty : A , skip _bound : ! 1 , root : n . target || C . $$ . root } ; v && v ( Z . root ) ; let j = ! 1 ; if ( Z . ctx = r ? r ( f , n . props || { } , ( V , X , ... $ ) => { const h = $ . length ? $ [ 0 ] : X ; return Z . ctx && E ( Z . ctx [ V ] , Z . ctx [ V ] = h ) && ( ! Z . skip _bound && Z . bound [ V ] && Z . bound [ V ] ( h ) , j && Yo ( f , V ) ) , X } ) : [ ] , Z . update ( ) , j = ! 0 , ca ( Z . before _update ) , Z . fragment = d ? d ( Z . ctx ) : ! 1 , n . target ) { if ( n . hydrate ) { const V = Lo ( n . target ) ; Z . fragment && Z . fragment . l ( V ) , V . forEach ( St ) } else Z . fragment && Z . fragment . c ( ) ; n . intro && Ft ( f . $$ . fragment ) , Bt ( f , n . target , n . anchor , n . customElement ) , Ri ( ) } Nn ( C ) } class Vt { $destroy ( ) { Gt ( this , 1 ) , this . $destroy = et } $on ( n , r ) { if ( ! Ti ( r ) ) return et ; const d = this . $$ . callbacks [ n ] || ( this . $$ . callbacks [ n ] = [ ] ) ; return d . push ( r ) , ( ) => { const E = d . indexOf ( r ) ; E !== - 1 && d . splice ( E , 1 ) } } $set ( n ) { this . $$set && ! wo ( n ) && ( this . $$ . skip _bound = ! 0 , this . $$set ( n ) , this . $$ . skip _bound = ! 1 ) } } / * !
* reveal . js 4.6 . 0
* https : //revealjs.com
* MIT licensed
*
* Copyright ( C ) 2011 - 2023 Hakim El Hattab , https : //hakim.se
* /const pn=(f,n)=>{for(let r in n)f[r]=n[r];return f},Se=(f,n)=>Array.from(f.querySelectorAll(n)),Ma=(f,n,r)=>{r?f.classList.add(n):f.classList.remove(n)},un=f=>{if(typeof f=="string"){if(f==="null")return null;if(f==="true")return!0;if(f==="false")return!1;if(f.match(/ ^ - ? [ \ d \ . ] + $ / ) ) return parseFloat ( f ) } return f } , Yt = ( f , n ) => { f . style . transform = n } , oa = ( f , n ) => { let r = f . matches || f . matchesSelector || f . msMatchesSelector ; return ! ( ! r || ! r . call ( f , n ) ) } , ut = ( f , n ) => { if ( typeof f . closest == "function" ) return f . closest ( n ) ; for ( ; f ; ) { if ( oa ( f , n ) ) return f ; f = f . parentNode } return null } , Ho = ( f , n , r , d = "" ) => { let E = f . querySelectorAll ( "." + r ) ; for ( let v = 0 ; v < E . length ; v ++ ) { let A = E [ v ] ; if ( A . parentNode === f ) return A } let N = document . createElement ( n ) ; return N . className = r , N . innerHTML = d , f . appendChild ( N ) , N } , Fa = f => { let n = document . createElement ( "style" ) ; return n . type = "text/css" , f && f . length > 0 && ( n . styleSheet ? n . styleSheet . cssText = f : n . appendChild ( document . createTextNode ( f ) ) ) , document . head . appendChild ( n ) , n } , _i = ( ) => { let f = { } ; location . search . replace ( /[A-Z0-9]+?=([\w\.%-]*)/gi , n => { f [ n . split ( "=" ) . shift ( ) ] = n . split ( "=" ) . pop ( ) } ) ; for ( let n in f ) { let r = f [ n ] ; f [ n ] = un ( unescape ( r ) ) } return f . dependencies !== void 0 && delete f . dependencies , f } , zo = ( f , n = 0 ) => { if ( f ) { let r , d = f . style . height ; return f . style . height = "0px" , f . parentNode . style . height = "auto" , r = n - f . parentNode . offsetHeight , f . style . height = d + "px" , f . parentNode . style . removeProperty ( "height" ) , r } return n } , qo = { mp4 : "video/mp4" , m4a : "video/mp4" , ogv : "video/ogg" , mpeg : "video/mpeg" , webm : "video/webm" } , la = navigator . userAgent , gn = /(iphone|ipod|ipad|android)/gi . test ( la ) || navigator . platform === "MacIntel" && navigator . maxTouchPoints > 1 ; /chrome/i . test ( la ) && /edge/i . test ( la ) ; const Ni = /android/gi . test ( la ) ; var yi = { } ; Object . defineProperty ( yi , "__esModule" , { value : ! 0 } ) ; var ui = Object . assign || function ( f ) { for ( var n = 1 ; n < arguments . length ; n ++ ) { var r = arguments [ n ] ; for ( var d in r ) Object . prototype . hasOwnProperty . call ( r , d ) && ( f [ d ] = r [ d ] ) } return f } , Vo = yi . default = function ( f ) { if ( f ) { var n = function ( z ) { return [ ] . slice . call ( z ) } , r = 0 , d = 1 , E = 2 , N = 3 , v = [ ] , A = null , C = "requestAnimationFrame" in f ? function ( ) { f . cancelAnimationFrame ( A ) , A = f . requestAnimationFrame ( function ( ) { return j ( v . filter ( function ( z ) { return z . dirty && z . active } ) ) } ) } : function ( ) { } , Z = function ( z ) { return function ( ) { v . forEach ( function ( k ) { return k . dirty = z } ) , C ( ) } } , j = function ( z ) { z . filter ( function ( x ) { return ! x . styleComputed } ) . forEach ( function ( x ) { x . styleComputed = h ( x ) } ) , z . filter ( ye ) . forEach ( Me ) ; var k = z . filter ( $ ) ; k . forEach ( X ) , k . forEach ( function ( x ) { Me ( x ) , V ( x ) } ) , k . forEach ( tt ) } , V = function ( z ) { return z . dirty = r } , X = function ( z ) { z . availableWidth = z . element . parentNode . clientWidth , z . currentWidth = z . element . scrollWidth , z . previousFontSize = z . currentFontSize , z . currentFontSize = Math . min ( Math . max ( z . minSize , z . availableWidth / z . currentWidth * z . previousFontSize ) , z . maxSize ) , z . whiteSpace = z . multiLine && z . currentFontSize === z . minSize ? "normal" : "nowrap" } , $ = function ( z ) { return z . dirty !== E || z . dirty === E && z . element . parentNode . clientWidth !== z . availableWidth } , h = function ( z ) { var k = f . getComputedStyle ( z . element , null ) ; z . currentFontSize = parseFloat ( k . getPropertyValue ( "font-size" ) ) , z . display = k . getPropertyValue ( "display" ) , z . whiteSpace = k . getPropertyValue ( "white-space" ) } , ye = function ( z ) { var k = ! 1 ; return ! z . preStyleTestCompleted && ( /inline-/ . test ( z . display ) || ( k = ! 0 , z . display = "inline-block" ) , z . whiteSpace !== "nowrap" && ( k = ! 0 , z . whiteSpace = "nowrap" ) , z . preStyleTestCompleted = ! 0 , k ) } , Me = function ( z ) { z . element . style . whiteSpace = z . whiteSpace , z . element . style . display = z . display , z . element . style . fontSize = z . currentFontSize + "px" } , tt = function ( z ) { z . element . dispatchEvent ( new CustomEvent ( "fit" , { detail : { oldValue : z . previousFontSize , newValue : z . currentFontSize , scaleFactor : z . currentFontSize / z . previousFontSize } } ) ) } , je = function ( z , k ) { return function ( ) { z . dirty = k , z . active && C ( ) } } , Qe = function ( z ) { return function ( ) { v = v . filter ( function ( k ) { return k . element !== z . element } ) , z . observeMutations && z . observer . disconnect ( ) , z . element . style . whiteSpace = z . originalStyle . whiteSpace , z . element . style . display = z . originalStyle . display , z . element . style . fontSize = z . originalStyle . fontSize } } , we = function ( z ) { return function ( ) { z . active || ( z . active = ! 0 , C ( ) ) } } , ke = function ( z ) { return function ( ) {
< span class = "slide-number-a" > $ { n } < / s p a n >
< / a > ` : ` < a h r e f = " $ { E } " >
< span class = "slide-number-a" > $ { n } < / s p a n >
< span class = "slide-number-delimiter" > $ { r } < / s p a n >
< span class = "slide-number-b" > $ { d } < / s p a n >
< /a>`}destroy(){this.element.remove()}}class Qo{constructor(n){this.Reveal=n,this.onInput=this.onInput.bind(this),this.onBlur=this.onBlur.bind(this),this.onKeyDown=this.onKeyDown.bind(this)}render(){this.element=document.createElement("div"),this.element.className="jump-to-slide",this.jumpInput=document.createElement("input"),this.jumpInput.type="text",this.jumpInput.className="jump-to-slide-input",this.jumpInput.placeholder="Jump to slide",this.jumpInput.addEventListener("input",this.onInput),this.jumpInput.addEventListener("keydown",this.onKeyDown),this.jumpInput.addEventListener("blur",this.onBlur),this.element.appendChild(this.jumpInput)}show(){this.indicesOnShow=this.Reveal.getIndices(),this.Reveal.getRevealElement().appendChild(this.element),this.jumpInput.focus()}hide(){this.isVisible()&&(this.element.remove(),this.jumpInput.value="",clearTimeout(this.jumpTimeout),delete this.jumpTimeout)}isVisible(){return!!this.element.parentNode}jump(){clearTimeout(this.jumpTimeout),delete this.jumpTimeout;const n=this.jumpInput.value.trim("");let r=this.Reveal.location.getIndicesFromHash(n,{oneBasedIndex:!0});return!r&&/ \ S + /i.test(n)&&n.length>1&&(r=this.search(n)),r&&n!==""?(this.Reveal.slide(r.h,r.v,r.f),!0):(this.Reveal.slide(this.indicesOnShow.h,this.indicesOnShow.v,this.indicesOnShow.f),!1)}jumpAfter(n){clearTimeout(this.jumpTimeout),this.jumpTimeout=setTimeout(()=>this.jump(),n)}search(n){const r=new RegExp("\\b"+n.trim()+"\\b","i"),d=this.Reveal.getSlides().find(E=>r.test(E.innerText));return d?this.Reveal.getIndices(d):null}cancel(){this.Reveal.slide(this.indicesOnShow.h,this.indicesOnShow.v,this.indicesOnShow.f),this.hide()}confirm(){this.jump(),this.hide()}destroy(){this.jumpInput.removeEventListener("input",this.onInput),this.jumpInput.removeEventListener("keydown",this.onKeyDown),this.jumpInput.removeEventListener("blur",this.onBlur),this.element.remove()}onKeyDown(n){n.keyCode===13?this.confirm():n.keyCode===27&&(this.cancel(),n.stopImmediatePropagation())}onInput(n){this.jumpAfter(200)}onBlur(){setTimeout(()=>this.hide(),1)}}const La=f=>{let n=f.match(/ ^ # ( [ 0 - 9 a - f ] { 3 } ) $ / i ) ; if ( n && n [ 1 ] ) return n = n [ 1 ] , { r : 17 * parseInt ( n . charAt ( 0 ) , 16 ) , g : 17 * parseInt ( n . charAt ( 1 ) , 16 ) , b : 17 * parseInt ( n . charAt ( 2 ) , 16 ) } ; let r = f . match ( /^#([0-9a-f]{6})$/i ) ; if ( r && r [ 1 ] ) return r = r [ 1 ] , { r : parseInt ( r . slice ( 0 , 2 ) , 16 ) , g : parseInt ( r . slice ( 2 , 4 ) , 16 ) , b : parseInt ( r . slice ( 4 , 6 ) , 16 ) } ; let d = f . match ( /^rgb\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)$/i ) ; if ( d ) return { r : parseInt ( d [ 1 ] , 10 ) , g : parseInt ( d [ 2 ] , 10 ) , b : parseInt ( d [ 3 ] , 10 ) } ; let E = f . match ( /^rgba\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\,\s*([\d]+|[\d]*.[\d]+)\s*\)$/i ) ; return E ? { r : parseInt ( E [ 1 ] , 10 ) , g : parseInt ( E [ 2 ] , 10 ) , b : parseInt ( E [ 3 ] , 10 ) , a : parseFloat ( E [ 4 ] ) } : null } ; class Ko { constructor ( n ) { this . Reveal = n } render ( ) { this . element = document . createElement ( "div" ) , this . element . className = "backgrounds" , this . Reveal . getRevealElement ( ) . appendChild ( this . element ) } create ( ) { this . element . innerHTML = "" , this . element . classList . add ( "no-transition" ) , this . Reveal . getHorizontalSlides ( ) . forEach ( n => { let r = this . createBackground ( n , this . element ) ; Se ( n , "section" ) . forEach ( d => { this . createBackground ( d , r ) , r . 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 ( n , r ) { let d = document . createElement ( "div" ) ; d . className = "slide-background " + n . className . replace ( /present|past|future/ , "" ) ; let E = document . createElement ( "div" ) ; return E . className = "slide-background-content" , d . appendChild ( E ) , r . appendChild ( d ) , n . slideBackgroundElement = d , n . slideBackgroundContentElement = E , this . sync ( n ) , d } sync ( n ) {
< button class = "navigate-right" aria - label = "${n?" previous slide ":" next slide "}" > < div class = "controls-arrow" > < / d i v > < / b u t t o n >
< button class = "navigate-up" aria - label = "above slide" > < div class = "controls-arrow" > < / d i v > < / b u t t o n >
< button class = "navigate-down" aria - label = "below slide" > < div class = "controls-arrow" > < / d i v > < / b u t t o n > ` , t h i s . R e v e a l . g e t R e v e a l E l e m e n t ( ) . a p p e n d C h i l d ( t h i s . e l e m e n t ) , t h i s . c o n t r o l s L e f t = S e ( r , " . n a v i g a t e - l e f t " ) , t h i s . c o n t r o l s R i g h t = S e ( r , " . n a v i g a t e - r i g h t " ) , t h i s . c o n t r o l s U p = S e ( r , " . n a v i g a t e - u p " ) , t h i s . c o n t r o l s D o w n = S e ( r , " . n a v i g a t e - d o w n " ) , t h i s . c o n t r o l s P r e v = S e ( r , " . n a v i g a t e - p r e v " ) , t h i s . c o n t r o l s N e x t = S e ( r , " . n a v i g a t e - n e x t " ) , t h i s . c o n t r o l s R i g h t A r r o w = t h i s . e l e m e n t . q u e r y S e l e c t o r ( " . n a v i g a t e - r i g h t " ) , t h i s . c o n t r o l s L e f t A r r o w = t h i s . e l e m e n t . q u e r y S e l e c t o r ( " . n a v i g a t e - l e f t " ) , t h i s . c o n t r o l s D o w n A r r o w = t h i s . e l e m e n t . q u e r y S e l e c t o r ( " . n a v i g a t e - d o w n " ) } c o n f i g u r e ( n , r ) { t h i s . e l e m e n t . s t y l e . d i s p l a y = n . c o n t r o l s ? " b l o c k " : " n o n e " , t h i s . e l e m e n t . s e t A t t r i b u t e ( " d a t a - c o n t r o l s - l a y o u t " , n . c o n t r o l s L a y o u t ) , t h i s . e l e m e n t . s e t A t t r i b u t e ( " d a t a - c o n t r o l s - b a c k - a r r o w s " , n . c o n t r o l s B a c k A r r o w s ) } b i n d ( ) { l e t n = [ " t o u c h s t a r t " , " c l i c k " ] ; N i & & ( n = [ " t o u c h s t a r t " ] ) , n . f o r E a c h ( r = > { t h i s . c o n t r o l s L e f t . f o r E a c h ( d = > d . a d d E v e n t L i s t e n e r ( r , t h i s . o n N a v i g a t e L e f t C l i c k e d , ! 1 ) ) , t h i s . c o n t r o l s R i g h t . f o r E a c h ( d = > d . a d d E v e n t L i s t e n e r ( r , t h i s . o n N a v i g a t e R i g h t C l i c k e d , ! 1 ) ) , t h i s . c o n t r o l s U p . f o r E a c h ( d = > d . a d d E v e n t L i s t e n e r ( r , t h i s . o n N a v i g a t e U p C l i c k e d , ! 1 ) ) , t h i s . c o n t r o l s D o w n . f o r E a c h ( d = > d . a d d E v e n t L i s t e n e r ( r , t h i s . o n N a v i g a t e D o w n C l i c k e d , ! 1 ) ) , t h i s . c o n t r o l s P r e v . f o r E a c h ( d = > d . a d d E v e n t L i s t e n e r ( r , t h i s . o n N a v i g a t e P r e v C l i c k e d , ! 1 ) ) , t h i s . c o n t r o l s N e x t . f o r E a c h ( d = > d . a d d E v e n t L i s t e n e r ( r , t h i s . o n N a v i g a t e N e x t C l i c k e d , ! 1 ) ) } ) } u n b i n d ( ) { [ " t o u c h s t a r t " , " c l i c k " ] . f o r E a c h ( n = > { t h i s . c o n t r o l s L e f t . f o r E a c h ( r = > r . r e m o v e E v e n t L i s t e n e r ( n , t h i s . o n N a v i g a t e L e f t C l i c k e d , ! 1 ) ) , t h i s . c o n t r o l s R i g h t . f o r E a c h ( r = > r . r e m o v e E v e n t L i s t e n e r ( n , t h i s . o n N a v i g a t e R i g h t C l i c k e d , ! 1 ) ) , t h i s . c o n t r o l s U p . f o r E a c h ( r = > r . r e m o v e E v e n t L i s t e n e r ( n , t h i s . o n N a v i g a t e U p C l i c k e d , ! 1 ) ) , t h i s . c o n t r o l s D o w n . f o r E a c h ( r = > r . r e m o v e E v e n t L i s t e n e r ( n , t h i s . o n N a v i g a t e D o w n C l i c k e d , ! 1 ) ) , t h i s . c o n t r o l s P r e v . f o r E a c h ( r = > r . r e m o v e E v e n t L i s t e n e r ( n , t h i s . o n N a v i g a t e P r e v C l i c k e d , ! 1 ) ) , t h i s . c o n t r o l s N e x t . f o r E a c h ( r = > r . r e m o v e E v e n t L i s t e n e r ( n , t h i s . o n N a v i g a t e N e x t C l i c k e d , ! 1 ) ) } ) } u p d a t e ( ) { l e t n = t h i s . R e v e a l . a v a i l a b l e R o u t e s ( ) ; [ . . . t h i s . c o n t r o l s L e f t , . . . t h i s . c o n t r o l s R i g h t , . . . t h i s . c o n t r o l s U p , . . . t h i s . c o n t r o l s D o w n , . . . t h i s . c o n t r o l s P r e v , . . . t h i s . c o n t r o l s N e x t ] . f o r E a c h ( d = > { d . c l a s s L i s t . r e m o v e ( " e n a b l e d " , " f r a g m e n t e d " ) , d . s e t A t t r i b u t e ( " d i s a b l e d " , " d i s a b l e d " ) } ) , n . l e f t & & t h i s . c o n t r o l s L e f t . f o r E a c h ( d = > { d . c l a s s L i s t . a d d ( " e n a b l e d " ) , d . r e m o v e A t t r i b u t e ( " d i s a b l e d " ) } ) , n . r i g h t & & t h i s . c o n t r o l s R i g h t . f o r E a c h ( d = > { d . c l a s s L i s t . a d d ( " e n a b l e d " ) , d . r e m o v e A t t r i b u t e ( " d i s a b l e d " ) } ) , n . u p & & t h i s . c o n t r o l s U p . f o r E a c h ( d = > { d . c l a s s L i s t . a d d ( " e n a b l e d " ) , d . r e m o v e A t t r i b u t e ( " d i s a b l e d " ) } ) , n . d o w n & & t h i s . c o n t r o l s D o w n . f o r E a c h ( d = > { d . c l a s s L i s t . a d d ( " e n a b l e d " ) , d . r e m o v e A t t r i b u t e ( " d i s a b l e d " ) } ) , ( n . l e f t | | n . u p ) & & t h i s . c o n t r o l s P r e v . f o r E a c h ( d = > { d . c l a s s L i s t . a d d ( " e n a b l e d " ) , d . r e m o v e A t t r i b u t e ( " d i s a b l e d " ) } ) , ( n . r i g h t | | n . d o w n ) & & t h i s . c o n t r o l s N e x t . f o r E a c h ( d = > { d . c l a s s L i s t . a d d ( " e n a b l e d " ) , d . r e m o v e A t t r i b u t e ( " d i s a b l e d " ) } ) ; l e t r = t h i s . R e v e a l . g e t C u r r e n t S l i d e ( ) ; i f ( r ) { l e t d = t h i s . R e v e a l . f r a g m e n t s . a v a i l a b l e R o u t e s ( ) ; d . p r e v & & t h i s . c o n t r o l s P r e v . f o r E a c h ( E = > { E . c l a s s L i s t . a d d ( " f r a g m e n t e d " , " e n a b l e d " ) , E . r e m o v e A t t r i b u t e ( " d i s a b l e d " ) } ) , d . n e x t & & t h i s . c o n t r o l s N e x t . f o r E a c h ( E = > { E . c l a s s L i s t . a d d ( " f r a g m e n t e d " , " e n a b l e d " ) , E . r e m o v e A t t r i b u t e ( " d i s a b l e d " ) } ) , t h i s . R e v e a l . i s V e r t i c a l S l i d e ( r ) ? ( d . p r e v & & t h i s . c o n t r o l s U p . f o r E a c h ( E = > { E . c l a s s L i s t . a d d ( " f r a g m e n t e d " , " e n a b l e d " ) , E . r e m o v e A t t r i b u t e ( " d i s a b l e d " ) } ) , d . n e x t & & t h i s . c o n t r o l s D o w n . f o r E a c h ( E = > { E . c l a s s L i s t . a d d ( " f r a g m e n t e d " , " e n a b l e d " ) , E . r e m o v e A t t r i b u t e ( " d i s a b l e d " ) } ) ) : ( d . p r e v & & t h i s . c o n t r o l s L e f t . f o r E a c h ( E = > { E . c l a s s L i s t . a d d ( " f r a g m e n t e d " , " e n a b l e d " ) , E . r e m o v e A t t r i b u t e ( " d i s a b l e d " ) } ) , d . n e x t & & t h i s . c o n t r o l s R i g h t . f o r E a c h ( E = > { E . c l a s s L i s t . a d d ( " f r a g m e n t e d " , " e n a b l e d " ) , E . r e m o v e A t t r i b u t e ( " d i s a b l e d " ) } ) ) } i f ( t h i s . R e v e a l . g e t C o n f i g ( ) . c o n t r o l s T u t o r i a l ) { l e t d = t h i s . R e v e a l . g e t I n d i c e s ( ) ; ! t h i s . R e v e a l . h a s N a v i g a t e d V e r t i c a l l y ( ) & & n . d o w n ? t h i s . c o n t r o l s D o w n A r r o w . c l a s s L i s t . a d d ( " h i g h l i g h t " ) : ( t h i s . c o n t r o l s D o w n A r r o w . c l a s s L i s t . r e m o v e ( " h i g h l i g h t " ) , t h i s . R e v e a l . g e t C o n f i g ( ) . r t l ? ! t h i s . R e v e a l . h a s N a v i g a t e d H o r i z o n t a l l y ( ) & & n . l e f t & & d . v = = = 0 ? t h i s . c o n t r o l s L e f t A r r o w . c l a s s L i s t . a d d ( " h i g h l i g h t " ) : t h i s . c o n t r o l s L e f t A r r o w . c l a s s L i s t . r e m o v e ( " h i g h l i g h t " ) : ! t h i s . R e v e a l . h a s N a v i g a t e d H o r i z o n t a l l y ( ) & & n . r i g h t & & d . v = = = 0 ? t h i s . c o n t r o l s R i g h t A r r o w . c l a s s L i s t . a
` +E))});const d=document.querySelector("head");d.insertBefore(r,d.lastChild)};class rl{constructor(n){this.Reveal=n,this.state="idle",this.registeredPlugins={},this.asyncDependencies=[]}load(n,r){return this.state="loading",n.forEach(this.registerPlugin.bind(this)),new Promise(d=>{let E=[],N=0;if(r.forEach(v=>{v.condition&&!v.condition()||(v.async?this.asyncDependencies.push(v):E.push(v))}),E.length){N=E.length;const v=A=>{A&&typeof A.callback=="function"&&A.callback(),--N==0&&this.initPlugins().then(d)};E.forEach(A=>{typeof A.id=="string"?(this.registerPlugin(A),v(A)):typeof A.src=="string"?Ei(A.src,()=>v(A)):(console.warn("Unrecognized plugin format",A),v())})}else this.initPlugins().then(d)})}initPlugins(){return new Promise(n=>{let r=Object.values(this.registeredPlugins),d=r.length;if(d===0)this.loadAsync().then(n);else{let E,N=()=>{--d==0?this.loadAsync().then(n):E()},v=0;E=()=>{let A=r[v++];if(typeof A.init=="function"){let C=A.init(this.Reveal);C&&typeof C.then=="function"?C.then(N):N()}else N()},E()}})}loadAsync(){return this.state="loaded",this.asyncDependencies.length&&this.asyncDependencies.forEach(n=>{Ei(n.src,n.callback)}),Promise.resolve()}registerPlugin(n){arguments.length===2&&typeof arguments[0]=="string"?(n=arguments[1]).id=arguments[0]:typeof n=="function"&&(n=n());let r=n.id;typeof r!="string"?console.warn("Unrecognized plugin format; can't find plugin.id",n):this.registeredPlugins[r]===void 0?(this.registeredPlugins[r]=n,this.state==="loaded"&&typeof n.init=="function"&&n.init(this.Reveal)):console.warn('reveal.js: "'+r+'" plugin has already been registered')}hasPlugin(n){return!!this.registeredPlugins[n]}getPlugin(n){return this.registeredPlugins[n]}getRegisteredPlugins(){return this.registeredPlugins}destroy(){Object.values(this.registeredPlugins).forEach(n=>{typeof n.destroy=="function"&&n.destroy()}),this.registeredPlugins={},this.asyncDependencies=[]}}class sl{constructor(n){this.Reveal=n}async setupPDF(){const n=this.Reveal.getConfig(),r=Se(this.Reveal.getRevealElement(),en),d=n.slideNumber&&/all|print/i.test(n.showSlideNumber),E=this.Reveal.getComputedSlideSize(window.innerWidth,window.innerHeight),N=Math.floor(E.width*(1+n.margin)),v=Math.floor(E.height*(1+n.margin)),A=E.width,C=E.height;await new Promise(requestAnimationFrame),Fa("@page{size:"+N+"px "+v+"px; margin: 0px;}"),Fa(".reveal section>img, .reveal section>video, .reveal section>iframe{max-width: "+A+"px; max-height:"+C+"px}"),document.documentElement.classList.add("print-pdf"),document.body.style.width=N+"px",document.body.style.height=v+"px";const Z=document.querySelector(".reveal-viewport");let j;if(Z){const ye=window.getComputedStyle(Z);ye&&ye.background&&(j=ye.background)}await new Promise(requestAnimationFrame),this.Reveal.layoutSlideContents(A,C),await new Promise(requestAnimationFrame);const V=r.map(ye=>ye.scrollHeight),X=[], $ =r[0].parentNode;let h=1;r.forEach(function(ye,Me){if(ye.classList.contains("stack")===!1){let tt=(N-A)/2,je=(v-C)/2;const Qe=V[Me];let we=Math.max(Math.ceil(Qe/v),1);we=Math.min(we,n.pdfMaxPagesPerSlide),(we===1&&n.center||ye.classList.contains("center"))&&(je=Math.max((v-Qe)/2,0));const ke=document.createElement("div");if(X.push(ke),ke.className="pdf-page",ke.style.height=(v+n.pdfPageHeightOffset)*we+"px",j&&(ke.style.background=j),ke.appendChild(ye),ye.style.left=tt+"px",ye.style.top=je+"px",ye.style.width=A+"px",this.Reveal.slideContent.layout(ye),ye.slideBackgroundElement&&ke.insertBefore(ye.slideBackgroundElement,ye),n.showNotes){const Re=this.Reveal.getSlideNotes(ye);if(Re){const Pe=typeof n.showNotes=="string"?n.showNotes:"inline",me=document.createElement("div");me.classList.add("speaker-notes"),me.classList.add("speaker-notes-pdf"),me.setAttribute("data-layout",Pe),me.innerHTML=Re,Pe==="separate-page"?X.push(me):(me.style.left=8+"px",me.style.bottom=8+"px",me.style.width=N-2*8+"px",ke.appendChild(me))}}if(d){const Re=document.createElement("div");Re.classList.add("slide-number"),Re.classList.add("slide-number-pdf"),Re.innerHTML=h++,ke.appendChild(Re)}if(n.pdfSeparateFragments){const Re=this.Re
` ):null}destroy(){this.element.remove()}}class dl{constructor(n,r){this.diameter=100,this.diameter2=this.diameter/2,this.thickness=6,this.playing=!1,this.progress=0,this.progressOffset=1,this.container=n,this.progressCheck=r,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(n){const r=this.playing;this.playing=n,!r&&this.playing?this.animate():this.render()}animate(){const n=this.progress;this.progress=this.progressCheck(),n>.8&&this.progress<.2&&(this.progressOffset=this.progress),this.render(),this.playing&&requestAnimationFrame(this.animate.bind(this))}render(){let n=this.playing?this.progress:0,r=this.diameter2-this.thickness,d=this.diameter2,E=this.diameter2,N=28;this.progressOffset+=.1*(1-this.progressOffset);const v=-Math.PI/2+n*(2*Math.PI),A=-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(d,E,r+4,0,2*Math.PI,!1),this.context.fillStyle="rgba( 0, 0, 0, 0.4 )",this.context.fill(),this.context.beginPath(),this.context.arc(d,E,r,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(d,E,r,A,v,!1),this.context.lineWidth=this.thickness,this.context.strokeStyle="#fff",this.context.stroke()),this.context.translate(d-14,E-14),this.playing?(this.context.fillStyle="#fff",this.context.fillRect(0,0,10,N),this.context.fillRect(18,0,10,N)):(this.context.beginPath(),this.context.translate(4,0),this.context.moveTo(0,0),this.context.lineTo(24,14),this.context.lineTo(0,N),this.context.fillStyle="#fff",this.context.fill()),this.context.restore()}on(n,r){this.canvas.addEventListener(n,r,!1)}off(n,r){this.canvas.removeEventListener(n,r,!1)}destroy(){this.playing=!1,this.canvas.parentNode&&this.container.removeChild(this.canvas)}}var _l={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,jumpToSlide:!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,showHiddenSlides:!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,sortFragmentsOnSync:!0,dependencies:[],plugins:[]};const Oi="4.6.0";function Ai(f,n){arguments.length<2&&(n=arguments[0],f=document.querySelector(".reveal"));const r={};let d,E,N,v,A,C={},Z=!1,j={hasNavigatedHorizontally:!1,hasNavigatedVertically:!1},V=[],X=1, $ ={layout:"",overview:""},h={},ye="idle",Me=0,tt=0,je=-1,Qe=!1,we=new $ o(r),ke=new Wo(r),Re=new Qo(r),De=new Xo(r),Pe=new Ko(r),me=new Zo(r),Ne=new Jo(r),Be=new el(r),Ke=new tl(r),z=new nl(r),k=new al(r),x=new i
< a class = "close" href = "#" > < span class = "icon" > < / s p a n > < / a >
< a class = "external" href = "${R}" target = "_blank" > < span class = "icon" > < / s p a n > < / a >
< / h e a d e r >
< div class = "spinner" > < / d i v >
< div class = "viewport" >
< iframe src = "${R}" > < / i f r a m e >
< small class = "viewport-inner" >
< span class = "x-frame-error" > Unable to load iframe . This is likely due to the site ' s policy ( x - frame - options ) . < / s p a n >
< / s m a l l >
< / d i v > ` , h . o v e r l a y . q u e r y S e l e c t o r ( " i f r a m e " ) . a d d E v e n t L i s t e n e r ( " l o a d " , M = > { h . o v e r l a y . c l a s s L i s t . a d d ( " l o a d e d " ) } , ! 1 ) , h . o v e r l a y . q u e r y S e l e c t o r ( " . c l o s e " ) . a d d E v e n t L i s t e n e r ( " c l i c k " , M = > { g e ( ) , M . p r e v e n t D e f a u l t ( ) } , ! 1 ) , h . o v e r l a y . q u e r y S e l e c t o r ( " . e x t e r n a l " ) . a d d E v e n t L i s t e n e r ( " c l i c k " , M = > { g e ( ) } , ! 1 ) } f u n c t i o n s e ( R ) { t y p e o f R = = " b o o l e a n " ? R ? O e ( ) : g e ( ) : h . o v e r l a y ? g e ( ) : O e ( ) } f u n c t i o n O e ( ) { i f ( C . h e l p ) { g e ( ) , h . o v e r l a y = d o c u m e n t . c r e a t e E l e m e n t ( " d i v " ) , h . o v e r l a y . c l a s s L i s t . a d d ( " o v e r l a y " ) , h . o v e r l a y . c l a s s L i s t . a d d ( " o v e r l a y - h e l p " ) , h . w r a p p e r . a p p e n d C h i l d ( h . o v e r l a y ) ; l e t R = ' < p c l a s s = " t i t l e " > K e y b o a r d S h o r t c u t s < / p > < b r / > ' , M = B e . g e t S h o r t c u t s ( ) , n e = B e . g e t B i n d i n g s ( ) ; R + = " < t a b l e > < t h > K E Y < / t h > < t h > A C T I O N < / t h > " ; f o r ( l e t e e i n M ) R + = ` < t r > < t d > $ { e e } < / t d > < t d > $ { M [ e e ] } < / t d > < / t r > ` ; f o r ( l e t e e i n n e ) n e [ e e ] . k e y & & n e [ e e ] . d e s c r i p t i o n & & ( R + = ` < t r > < t d > $ { n e [ e e ] . k e y } < / t d > < t d > $ { n e [ e e ] . d e s c r i p t i o n } < / t d > < / t r > ` ) ; R + = " < / t a b l e > " , h . o v e r l a y . i n n e r H T M L = `
< header >
< a class = "close" href = "#" > < span class = "icon" > < / s p a n > < / a >
< / h e a d e r >
< div class = "viewport" >
< div class = "viewport-inner" > $ { R } < / d i v >
< / d i v >
` ,h.overlay.querySelector(".close").addEventListener("click",ee=>{ge(),ee.preventDefault()},!1)}}function ge(){return!!h.overlay&&(h.overlay.parentNode.removeChild(h.overlay),h.overlay=null,!0)}function Ae(){if(h.wrapper&&!st.isPrintingPDF()){if(!C.disableLayout){gn&&!C.embedded&&document.documentElement.style.setProperty("--vh",.01*window.innerHeight+"px");const R=Ue(),M=X;Ge(C.width,C.height),h.slides.style.width=R.width+"px",h.slides.style.height=R.height+"px",X=Math.min(R.presentationWidth/R.width,R.presentationHeight/R.height),X=Math.max(X,C.minScale),X=Math.min(X,C.maxScale),X===1?(h.slides.style.zoom="",h.slides.style.left="",h.slides.style.top="",h.slides.style.bottom="",h.slides.style.right="",G({layout:""})):(h.slides.style.zoom="",h.slides.style.left="50%",h.slides.style.top="50%",h.slides.style.bottom="auto",h.slides.style.right="auto",G({layout:"translate(-50%, -50%) scale("+X+")"}));const ne=Array.from(h.wrapper.querySelectorAll(en));for(let ee=0,oe=ne.length;ee<oe;ee++){const xe=ne[ee];xe.style.display!=="none"&&(C.center||xe.classList.contains("center")?xe.classList.contains("stack")?xe.style.top=0:xe.style.top=Math.max((R.height-xe.scrollHeight)/2,0)+"px":xe.style.top="")}M!==X&&Q({type:"resize",data:{oldScale:M,scale:X,size:R}})}h.viewport.style.setProperty("--slide-scale",X),k.update(),Pe.updateParallax(),Ne.isActive()&&Ne.update()}}function Ge(R,M){Se(h.slides,"section > .stretch, section > .r-stretch").forEach(ne=>{let ee=zo(ne,M);if(/(img|video)/gi.test(ne.nodeName)){const oe=ne.naturalWidth||ne.videoWidth,xe=ne.naturalHeight||ne.videoHeight,Ze=Math.min(R/oe,ee/xe);ne.style.width=oe*Ze+"px",ne.style.height=xe*Ze+"px"}else ne.style.width=R+"px",ne.style.height=ee+"px"})}function Ue(R,M){let ne=C.width,ee=C.height;C.disableLayout&&(ne=h.slides.offsetWidth,ee=h.slides.offsetHeight);const oe={width:ne,height:ee,presentationWidth:R||h.wrapper.offsetWidth,presentationHeight:M||h.wrapper.offsetHeight};return oe.presentationWidth-=oe.presentationWidth*C.margin,oe.presentationHeight-=oe.presentationHeight*C.margin,typeof oe.width=="string"&&/% $ /.test(oe.width)&&(oe.width=parseInt(oe.width,10)/100*oe.presentationWidth),typeof oe.height=="string"&&/% $ /.test(oe.height)&&(oe.height=parseInt(oe.height,10)/100*oe.presentationHeight),oe}function Ct(R,M){typeof R=="object"&&typeof R.setAttribute=="function"&&R.setAttribute("data-previous-indexv",M||0)}function Ot(R){if(typeof R=="object"&&typeof R.setAttribute=="function"&&R.classList.contains("stack")){const M=R.hasAttribute("data-start-indexv")?"data-start-indexv":"data-previous-indexv";return parseInt(R.getAttribute(M)||0,10)}return 0}function Dt(R=v){return R&&R.parentNode&&!!R.parentNode.nodeName.match(/section/i)}function On(){return!(!v||!Dt(v))&&!v.nextElementSibling}function An(){return d===0&&E===0}function En(){return!!v&&!v.nextElementSibling&&(!Dt(v)||!v.parentNode.nextElementSibling)}function In(){if(C.pause){const R=h.wrapper.classList.contains("paused");tn(),h.wrapper.classList.add("paused"),R===!1&&Q({type:"paused"})}}function $ t(){const R=h.wrapper.classList.contains("paused");h.wrapper.classList.remove("paused"),kt(),R&&Q({type:"resumed"})}function Dn(R){typeof R=="boolean"?R?In(): $ t():Wt()? $ t():In()}function Wt(){return h.wrapper.classList.contains("paused")}function _a(R){typeof R=="boolean"?R?Re.show():Re.hide():Re.isVisible()?Re.hide():Re.show()}function ua(R){typeof R=="boolean"?R?an():nn():Qe?an():nn()}function pa(){return!(!Me||Qe)}function ht(R,M,ne,ee){if(Q({type:"beforeslidechange",data:{indexh:R===void 0?d:R,indexv:M===void 0?E:M,origin:ee}}).defaultPrevented)return;N=v;const oe=h.wrapper.querySelectorAll(Xt);if(oe.length===0)return;M!==void 0||Ne.isActive()||(M=Ot(oe[R])),N&&N.parentNode&&N.parentNode.classList.contains("stack")&&Ct(N.parentNode,E);const xe=V.concat();V.length=0;let Ze=d||0,gt=E||0;d=xn(Xt,R===void 0?d:R),E=xn(pi,M===void 0?E:M);let Nt=d!==Ze||E!==gt;Nt||(N=null);let wt=oe[d];v=wt.querySelectorAll("section")[E]||wt;let Xe=!1;Nt&&N&&v&&!Ne.isActive()&&(N.hasAttribute("data-auto-animate")&&v.hasAttribute("data-auto-a
< img src = "https://avatars.githubusercontent.com/u/17150045?v=4" width = "120" / >
< p > < a href = "https://github.com/vincenzopalazzo" > vincenzopalazzo < / a > < / p >
< a href = "mailito:vincenzopalazzo@member.fsf.org" > vincenzopalazzo @ member . fsf . org < / a >
< div align = "center" > < p > < small > Sep 28 , 2023 < / s m a l l > < / p > < / d i v > < / s e c t i o n > ` } , m ( r , d ) { b t ( r , n , d ) } , p : e t , i : e t , o : e t , d ( r ) { r & & S t ( n ) } } } c l a s s p l e x t e n d s V t { c o n s t r u c t o r ( n ) { s u p e r ( ) , q t ( t h i s , n , n u l l , u l , z t , { } ) } } f u n c t i o n m l ( f ) { l e t n ; r e t u r n { c ( ) { n = H t ( " s e c t i o n " ) , n . i n n e r H T M L = ` < s e c t i o n > < p s t y l e = " b a c k g r o u n d - c o l o r : # 3 7 3 A 3 C ; c o l o r : # A D B 5 B D ; b o r d e r - r a d i u s : 2 5 p x ; w i d t h : 3 0 % ; t e x t - a l i g n : l e f t ; p a d d i n g : 8 p x " > < s p a n s t y l e = " c o l o r : g r e e n ; d i p l a y : f l e x ; m a r g i n - l e f t : 1 4 p x " > \ u 2 7 9 C < / s p a n >
< span style = "color:#ADB5BD" > ~ < / s p a n > w h o a m i < / p >
< q > CLN Core Contributor & amp ; Lightning Network developer ! < / q > < / s e c t i o n >
< section > < h4 > Area of Work < / h 4 >
< ul > < li class = "fragment" > Lightning Network
< ul > < li > Core Contributor < a href = "https://github.com/ElementsProject/lightning" > Core Lightning < / a > < / l i >
< li > Lightning Network Developer in the < a href = "https://github.com/lightning/bolts" > BOLTs < / a > < / l i > < / u l > < / l i >
< li class = "fragment" > Mantainer of < a href = "https://github.com/rustyrussell/lnprototest" > lnprototest < / a > ; < / l i >
< li class = "fragment" > Side Project developer . < / l i > < / u l > < / s e c t i o n >
< section > < p style = "background-color: #373A3C; color: #ADB5BD;border-radius:25px;width:40%;text-align:left;padding:8px" > < span style = "color:green;diplay:flex;margin-left:14px" > \u279C < / s p a n >
< span style = "color:#ADB5BD" > ~ < / s p a n > c a t t o p i c s . t x t < / p >
< h3 > Today topics < / h 3 > < / s e c t i o n >
< section > < ul > < li > Understand what core lightning provides ; < / l i >
< li class = "fragment" > Understand how core lightning provides things ; < / l i >
< li class = "fragment" > How core lightning plugin are used inside the code . < / l i > < / u l > < / s e c t i o n > ` } , m ( r , d ) { b t ( r , n , d ) } , p : e t , i : e t , o : e t , d ( r ) { r & & S t ( n ) } } } c l a s s g l e x t e n d s V t { c o n s t r u c t o r ( n ) { s u p e r ( ) , q t ( t h i s , n , n u l l , m l , z t , { } ) } } f u n c t i o n E l ( f ) { l e t n ; r e t u r n { c ( ) { n = H t ( " s e c t i o n " ) , n . i n n e r H T M L = ` < s e c t i o n > < p s t y l e = " b a c k g r o u n d - c o l o r : # 3 7 3 A 3 C ; c o l o r : # A D B 5 B D ; b o r d e r - r a d i u s : 2 5 p x ; w i d t h : 7 0 % ; t e x t - a l i g n : l e f t ; p a d d i n g : 8 p x " > < s p a n s t y l e = " c o l o r : g r e e n ; d i p l a y : f l e x ; m a r g i n - l e f t : 1 4 p x " > \ u 2 7 9 C < / s p a n >
< span style = "color:#ADB5BD" > ~ < / s p a n > s h o w l i g h t n i n g d / l i g h t n i n g d . c < / p >
< h3 > Introduction < / h 3 >
< q > One day in core lightning < / q > < / s e c t i o n >
< section > < ul > < li > Lightning Network Implementation written in C < / l i >
< li class = "fragment" > Compliant with the < a href = "https://github.com/lightning/bolts/pulls" > BOLTs < / a > < / l i >
< li class = "fragment" > First real implementation of the Lightning Network < / l i >
< li class = "fragment" > Developed and Mantained by < a href = "https://blockstream.com/" > Blockstream < / a > < / l i > < / u l > < / s e c t i o n >
< section > < ul > < li > Developed in a Unix Style < / l i >
< li class = "fragment" > Support a very powerful plugin system language agnostic < / l i > < / u l > < / s e c t i o n >
< section > < img src = "https://i.ibb.co/VtKR2qg/Untitled-2023-09-27-1945.png" / > < / s e c t i o n >
< section > < img src = "https://i.ibb.co/GkKt4L3/Untitled-2023-09-27-1945-2.png" / > < / s e c t i o n >
< section > < p > Cool , this is cool , right ? < / p >
< p class = "fragment" > But you can replace deamon with your implementation < / p > < / s e c t i o n >
< section > < img src = "https://i.ibb.co/bdrzgpq/Untitled-2023-09-27-1945-3.png" / > < / s e c t i o n >
< section > < img src = "https://i.ibb.co/1bMmX6s/Untitled-2023-09-27-1945-4.png" / > < / s e c t i o n >
< section > < div > < img src = "https://i.ibb.co/260M5yW/Untitled-2023-09-27-1945-5.png" / > < / d i v >
< div > < p > You can visit < a href = "https://vls.tech" > https : //vls.tech</a></p></div></section>`},m(r,d){bt(r,n,d)},p:et,i:et,o:et,d(r){r&&St(n)}}}class Sl extends Vt{constructor(n){super(),qt(this,n,null,El,zt,{})}}function bl(f){let n;return{c(){n=Ht("section"),n.innerHTML=`<section><p style="background-color: #373A3C; color: #ADB5BD;border-radius:25px;width:70%;text-align:left;padding:8px"><span style="color:green;diplay:flex;margin-left:14px">\u279C</span>
< span style = "color:#ADB5BD" > ~ < / s p a n > e m a c s - n w l i g h t n i n g d / l i g h t n i n g d . c < / p >
< h3 > Implementation Details < / h 3 > < / s e c t i o n >
2023-09-28 23:25:20 +01:00
< section > < p > How CLN deal with encoding and decoding ( aka < strong > wire < / s t r o n g > )
messages < / p >
< ul > < li class = "fragment" > Every lightning network messages is a < strong > struct < / s t r o n g > < / l i >
< li class = "fragment" > Every message information is defined inside a < strong > csv < / s t r o n g > f i l e < / l i >
< li class = "fragment" > CLN build system generate the equivalent C code < / l i > < / u l > < / s e c t i o n >
< section > < pre > < code data - trim = "" data - noescape = "" >
< script type = "text/template" >
msgtype , hsmd _init , 11
msgdata , hsmd _init , bip32 _key _version , bip32 _key _version ,
msgdata , hsmd _init , chainparams , chainparams ,
msgdata , hsmd _init , hsm _encryption _key , ? secret ,
msgdata , hsmd _init , dev _force _privkey , ? privkey ,
msgdata , hsmd _init , dev _force _bip32 _seed , ? secret ,
msgdata , hsmd _init , dev _force _channel _secrets , ? secrets ,
msgdata , hsmd _init , dev _force _channel _secrets _shaseed , ? sha256 ,
msgdata , hsmd _init , hsm _wire _min _version , u32 ,
msgdata , hsmd _init , hsm _wire _max _version , u32 ,
< \ / script >
< / c o d e >
< / p r e > < / s e c t i o n >
< section > < pre > < code data - trim = "" data - noescape = "" >
< script type = "text/template" >
/** hsmd/hsmd_wiregen.h after running make **/
u8 * towire _hsmd _init ( const tal _t * ctx , ... ) ;
bool fromwire _hsmd _init ( const tal _t * ctx , ... ) ;
< \ / script >
< / c o d e >
< / p r e >
< p class = "fragment" > Then write / read through a file descriptor ( UNIX concept ) to communicate
with a deamon < / p > < / s e c t i o n >
< section > < p > Message format : < / p >
< ul > < li class = "fragment" > All the message are in binary format < / l i >
< li class = "fragment" > Following the < a href = "https://github.com/lightning/bolts/blob/master/01-messaging.md#lightning-message-format" > BOLT 1 < / a > < / l i >
< li class = "fragment" > There are different code generator , e . g < a href = "https://github.com/lnspec-tools/lncodegen" > https : //github.com/lnspec-tools/lncodegen</a></li></ul></section>`},m(r,d){bt(r,n,d)},p:et,i:et,o:et,d(r){r&&St(n)}}}class hl extends Vt{constructor(n){super(),qt(this,n,null,bl,zt,{})}}function fl(f){let n;return{c(){n=Ht("section"),n.innerHTML=`<section><p style="background-color: #373A3C; color: #ADB5BD;border-radius:25px;width:70%;text-align:left;padding:8px"><span style="color:green;diplay:flex;margin-left:14px">\u279C</span>
2023-09-27 20:12:30 +01:00
< span style = "color:#ADB5BD" > ~ < / s p a n > e m a c s - n w l i g h t n i n g d / p l u g i n . c < / p >
< h3 > How CLN uses plugins < / h 3 > < / s e c t i o n >
2023-09-28 23:25:20 +01:00
< section > < ul > < li > Plugins in core lightning are first citizen < / l i >
< li class = "fragment" > CLN implement functions with builtin plugins < / l i >
< li class = "fragment" > Most of the major important functionality are plugins < / l i >
< li class = "fragment" > You can write the plugin in any languages < / l i > < / u l > < / s e c t i o n >
< section > < ul > < li > CLN talk with bitcoin through a plugin < / l i >
< li class = "fragment" > CLN pay an invoice through a plugin < / l i >
< li class = "fragment" > < strong > plugins can be replaced < / s t r o n g > < / l i > < / u l > < / s e c t i o n >
< section > < ul > < li > List of plugins < a href = "https://github.com/lightningd/plugins" > lightningd / plugins < / a > < / l i >
< li class = "fragment" > Initial support for plugins manager . e . g < a href = "https://github.com/coffee-tools/coffee" > coffee < / a > < / l i > < / u l > < / s e c t i o n >
< section > < p > Why use a plugin manager : < / p >
< ul > < li class = "fragment" > Every language required different setup < / l i >
< li class = "fragment" > A plugin manager < strong > try to do < / s t r o n g > a l l t h e s e t u p f o r y o u u n d e r t h e
hood < / l i > < / u l > < / s e c t i o n > ` } , m ( r , d ) { b t ( r , n , d ) } , p : e t , i : e t , o : e t , d ( r ) { r & & S t ( n ) } } } c l a s s T l e x t e n d s V t { c o n s t r u c t o r ( n ) { s u p e r ( ) , q t ( t h i s , n , n u l l , f l , z t , { } ) } } f u n c t i o n v l ( f ) { l e t n ; r e t u r n { c ( ) { n = H t ( " s e c t i o n " ) , n . i n n e r H T M L = ` < s e c t i o n > < p s t y l e = " b a c k g r o u n d - c o l o r : # 3 7 3 A 3 C ; c o l o r : # A D B 5 B D ; b o r d e r - r a d i u s : 2 5 p x ; w i d t h : 4 0 % ; t e x t - a l i g n : l e f t ; p a d d i n g : 8 p x " > < s p a n s t y l e = " c o l o r : g r e e n ; d i p l a y : f l e x ; m a r g i n - l e f t : 1 4 p x " > \ u 2 7 9 C < / s p a n >
2023-09-27 20:12:30 +01:00
< span style = "color:#ADB5BD" > ~ < / s p a n > l i g h t n i n g d - - h e l p < / p >
< q > Demo Time ! < / q > < / s e c t i o n >
2023-09-28 23:25:20 +01:00
< section > < h3 > Compile and Install step < / h 3 >
< div style = "background-color: #373A3C; color: #ADB5BD;border-radius:25px;width:90%;text-align:left;padding:8px;font-size:28px" > < div > < span style = "color:green;diplay:flex;margin-left:14px" > \u279C < / s p a n >
< span style = "color:#ADB5BD" > ~ < / s p a n > g i t c l o n e g i t @ g i t h u b . c o m : E l e m e n t s P r o j e c t / l i g h t n i n g . g i t < / d i v >
< div > < span style = "color:green;diplay:flex;margin-left:14px" > \u279C < / s p a n >
< span style = "color:#ADB5BD" > ~ < / s p a n > . / c o n f i g u r e & a m p ; & a m p ; p o e t r y s h e l l < / d i v >
< div > < span style = "color:green;diplay:flex;margin-left:14px" > \u279C < / s p a n >
< span style = "color:#ADB5BD" > ~ < / s p a n > m a k e & a m p ; & a m p ; m a k e i n s t a l l < / d i v > < / d i v >
< p > See official docs < a href = "https://docs.corelightning.org/docs/installation" > INSTALL . md < / a > < / p > < / s e c t i o n >
< section > < h3 > Install Coffee < / h 3 >
< div style = "background-color: #373A3C; color: #ADB5BD;border-radius:25px;width:90%;text-align:left;padding:8px;font-size:28px" > < div > < span style = "color:green;diplay:flex;margin-left:14px" > \u279C < / s p a n >
< span style = "color:#ADB5BD" > ~ < / s p a n > g i t c l o n e g i t @ g i t h u b . c o m : c o f f e e - t o o l s / c o f f e e . g i t < / d i v >
< div > < span style = "color:green;diplay:flex;margin-left:14px" > \u279C < / s p a n >
< span style = "color:#ADB5BD" > ~ < / s p a n > c d c o f f e e & a m p ; & a m p ; m a k e i n s t a l l < / d i v > < / d i v >
< p > See official docs < a href = "https://coffee-docs.netlify.app/" > coffee docs < / a > < / p > < / s e c t i o n >
< section > < h3 > Run Lightning Deamon < / h 3 >
< div style = "background-color: #373A3C; color: #ADB5BD;border-radius:25px;width:90%;text-align:left;padding:8px;font-size:28px" > < div > < span style = "color:green;diplay:flex;margin-left:14px" > \u279C < / s p a n >
< span style = "color:#ADB5BD" > ~ < / s p a n > l i g h t n i n g d - - s i g n e t < / d i v > < / d i v >
< pre class = "fragment" style = "font-size: 12px" > < code data - trim = "" data - noescape = "" >
< script type = "text/template" >
\u279C coffee git : ( master ) lightningd -- signet
2023 - 09 - 28 T17 : 10 : 10.571 Z INFO lightningd : Creating configuration directory / home / vincent / . lightning / signet
2023 - 09 - 28 T17 : 10 : 10.645 Z INFO plugin - clnrest . py : Killing plugin : disabled itself : No module named 'gunicorn'
2023 - 09 - 28 T17 : 10 : 10.658 Z INFO lightningd : Creating database
2023 - 09 - 28 T17 : 10 : 10.687 Z UNUSUAL hsmd : HSM : created new hsm _secret file
Could not connect to bitcoind using bitcoin - cli . Is bitcoind running ?
Make sure you have bitcoind running and that bitcoin - cli is able to connect to bitcoind .
You can verify that your Bitcoin Core installation is ready for use by running :
$ bitcoin - cli - signet echo 'hello world'
2023 - 09 - 28 T17 : 10 : 10.969 Z * * BROKEN * * plugin - bcli : \ \ nCould not connect to bitcoind using bitcoin - cli .
Is bitcoind running ?
Make sure you have bitcoind running and that bitcoin - cli is able to connect to bitcoind .
You can verify that your Bitcoin Core installation is ready for use by running :
$ bitcoin - cli - signet echo 'hello world' \ \ n
2023 - 09 - 28 T17 : 10 : 10.969 Z INFO plugin - bcli : Killing plugin : exited before we sent init
The Bitcoin backend died .
< \ / script >
< / c o d e >
< / p r e > < / s e c t i o n >
< section > < p > What is the problem ? < / p >
< p class = "fragment" > We do not have bitcoin core running < / p >
< p class = "fragment" > But maybe I do not have it sync and it can take days on mainet < / p >
< p class = "fragment" > We can solve this problem ? < / p >
< p class = "fragment" > Yes with a plugin called < a href = "https://github.com/coffee-tools/folgore" > folgore < / a > < / p > < / s e c t i o n >
< section > < h3 > Install Folgore < / h 3 >
< div style = "background-color: #373A3C; color: #ADB5BD;border-radius:25px;width:90%;text-align:left;padding:8px;font-size:28px" > < div > < span style = "color:green;diplay:flex;margin-left:14px" > \u279C < / s p a n >
< span style = "color:#ADB5BD" > ~ < / s p a n > g i t c l o n e g i t @ g i t h u b . c o m : c o f f e e - t o o l s / f o l g o r e . g i t < / d i v >
< div > < span style = "color:green;diplay:flex;margin-left:14px" > \u279C < / s p a n >
< span style = "color:#ADB5BD" > ~ < / s p a n > c o f f e e - - n e t w o r k s i g n e t s e t u p
/home/ < user > / . l i g h t n i n g < / u s e r > < / d i v >
< div > < span style = "color:green;diplay:flex;margin-left:14px" > \u279C < / s p a n >
< span style = "color:#ADB5BD" > ~ < / s p a n > c o f f e e - - n e t w o r k s i g n e t r e m o t e a d d f o l g o r e - g i t
https : //github.com/coffee-tools/folgore.git</div>
< div > < span style = "color:green;diplay:flex;margin-left:14px" > \u279C < / s p a n >
< span style = "color:#ADB5BD" > ~ < / s p a n > c o f f e e - - n e t w o r k s i g n e t i n s t a l l f o l g o r e
-- verbose < / d i v > < / d i v > < / s e c t i o n >
< section > < h3 > Run Lightning Deamon < / h 3 >
< div style = "background-color: #373A3C; color: #ADB5BD;border-radius:25px;width:90%;text-align:left;padding:8px;font-size:22px" > < div > < span style = "color:green;diplay:flex;margin-left:14px" > \u279C < / s p a n >
< span style = "color:#ADB5BD" > ~ < / s p a n > l i g h t n i n g d - - s i g n e t - - d i s a b l e - p l u g i n
bcli -- bitcoin - client = esplora -- bitcoin - rpcuser = & quot ; & quot ; -- bitcoin - rpcpassword = & quot ; & quot ;
-- bitcoin - esplora - url = & quot ; & quot ; -- bitcoin - rpcurl = & quot ; & quot ; < / d i v >
< div > < span style = "color:green;diplay:flex;margin-left:14px" > \u279C < / s p a n >
< span style = "color:#ADB5BD" > ~ < / s p a n > l i g h t n i n g - c l i - - s i g n e t g e t i n f o < / d i v > < / d i v > < / s e c t i o n > ` } , m ( r , d ) { b t ( r , n , d ) } , p : e t , i : e t , o : e t , d ( r ) { r & & S t ( n ) } } } c l a s s C l e x t e n d s V t { c o n s t r u c t o r ( n ) { s u p e r ( ) , q t ( t h i s , n , n u l l , v l , z t , { } ) } } f u n c t i o n R l ( f ) { l e t n , r , d , E , N , v , A , C , Z , j , V , X ; r e t u r n n = n e w p l ( { } ) , d = n e w g l ( { } ) , N = n e w S l ( { } ) , A = n e w h l ( { } ) , Z = n e w T l ( { } ) , V = n e w C l ( { } ) , { c ( ) { J t ( n . $ $ . f r a g m e n t ) , r = d n ( ) , J t ( d . $ $ . f r a g m e n t ) , E = d n ( ) , J t ( N . $ $ . f r a g m e n t ) , v = d n ( ) , J t ( A . $ $ . f r a g m e n t ) , C = d n ( ) , J t ( Z . $ $ . f r a g m e n t ) , j = d n ( ) , J t ( V . $ $ . f r a g m e n t ) } , m ( $ , h ) { B t ( n , $ , h ) , b t ( $ , r , h ) , B t ( d , $ , h ) , b t ( $ , E , h ) , B t ( N , $ , h ) , b t ( $ , v , h ) , B t ( A , $ , h ) , b t ( $ , C , h ) , B t ( Z , $ , h ) , b t ( $ , j , h ) , B t ( V , $ , h ) , X = ! 0 } , p : e t , i ( $ ) { X | | ( F t ( n . $ $ . f r a g m e n t , $ ) , F t ( d . $ $ . f r a g m e n t , $ ) , F t ( N . $ $ . f r a g m e n t , $ ) , F t ( A . $ $ . f r a g m e n t , $ ) , F t ( Z . $ $ . f r a g m e n t , $ ) , F t ( V . $ $ . f r a g m e n t , $ ) , X = ! 0 ) } , o ( $ ) { Z t ( n . $ $ . f r a g m e n t , $ ) , Z t ( d . $ $ . f r a g m e n t , $ ) , Z t ( N . $ $ . f r a g m e n t , $ ) , Z t ( A . $ $ . f r a g m e n t , $ ) , Z t ( Z . $ $ . f r a g m e n t , $ ) , Z t ( V . $ $ . f r a g m e n t , $ ) , X = ! 1 } , d ( $ ) { G t ( n , $ ) , $ & & S t ( r ) , G t ( d , $ ) , $ & & S t ( E ) , G t ( N , $ ) , $ & & S t ( v ) , G t ( A , $ ) , $ & & S t ( C ) , G t ( Z , $ ) , $ & & S t ( j ) , G t ( V , $ ) } } } c l a s s N l e x t e n d s V t { c o n s t r u c t o r ( n ) { s u p e r ( ) , q t ( t h i s , n , n u l l , R l , z t , { } ) } } f u n c t i o n y l ( f ) { l e t n , r , d , E , N , v ; r e t u r n d o c u m e n t . t i t l e = n = f [ 0 ] . n a m e , N = n e w N l ( { } ) , { c ( ) { r = d n ( ) , d = H t ( " d i v " ) , E = H t ( " d i v " ) , J t ( N . $ $ . f r a g m e n t ) , l i ( E , " c l a s s " , " s l i d e s " ) , l i ( d , " c l a s s " , " r e v e a l " ) } , m ( A , C ) { b t ( A , r , C ) , b t ( A , d , C ) , x o ( d , E ) , B t ( N , E , n u l l ) , v = ! 0 } , p ( A , [ C ] ) { ( ! v | | C & 1 ) & & n ! = = ( n = A [ 0 ] . n a m e ) & & ( d o c u m e n t . t i t l e = n ) } , i ( A ) { v | | ( F t ( N . $ $ . f r a g m e n t , A ) , v = ! 0 ) } , o ( A ) { Z t ( N . $ $ . f r a g m e n t , A ) , v = ! 1 } , d ( A ) { A & & S t ( r ) , A & & S t ( d ) , G t ( N ) } } } f u n c t i o n O l ( f , n , r ) { l e t { a p p : d } = n , { r e v e a l : E } = n ; r e t u r n P o ( a s y n c ( ) = > { a w a i t U o ( ) , n e w U t ( E ) . i n i t i a l i z e ( ) } ) , f . $ $ s e t = N = > { " a p p " i n N & & r ( 0 , d = N . a p p ) , " r e v e a l " i n N & & r ( 1 , E = N . r e v e a l ) } , [ d , E ] } c l a s s A l e x t e n d s V t { c o n s t r u c t o r ( n ) { s u p e r ( ) , q t ( t h i s , n , O l , y l , z t , { a p p : 0 , r e v e a l : 1 } ) } } v a r d a = t y p e o f g l o b a l T h i s < " u " ? g l o b a l T h i s : t y p e o f w i n d o w < " u " ? w i n d o w : t y p e o f g l o b a l < " u " ? g l o b a l : t y p e o f s e l f < " u " ? s e l f : { } , I i = { e x p o r t s : { } } ; ( f u n c t i o n ( f , n ) { ( f u n c t i o n ( r , d ) { f . e x p o r t s = d ( ) } ) ( d a , f u n c t i o n ( ) { v a r r = { e x p o r t s : { } } ; f u n c t i o n d ( e ) { r e t u r n e i n s t a n c e o f M a p ? e . c l e a r = e . d e l e t e = e . s e t = f u n c t i o n ( ) { t h r o w n e w E r r o r ( " m a p i s r e a d - o n l y " ) } : e i n s t a n c e o f S e t & & ( e . a d d = e . c l e a r = e . d e l e t e = f u n c t i o n ( ) { t h r o w n e w E r r o r ( " s e t i s r e a d - o n l y " ) } ) , O b j e c t . f r e e z e ( e ) , O b j e c t . g e t O w n P r o p e r t y N a m e s ( e ) . f o r E a c h ( f u n c t i o n ( t ) { v a r i = e [ t ] ; t y p e o f i ! = " o b j e c t " | | O b j e c t . i s F r o z e n ( i ) | | d ( i ) } ) , e } r . e x p o r t s = d , r . e x p o r t s . d e f a u l t = d ; c l a s s E { c o n s t r u c t o r ( t ) { t . d a t a = = = v o i d 0 & & ( t . d a t a = { } ) , t h i s . d a t a = t . d a t a , t h i s . i s M a t c h I g n o r e d = ! 1 } i g n o r e M a t c h ( ) { t h i s . i s M a t c h I g n o r e d = ! 0 } } f u n c t i o n N ( e ) { r e t u r n e . r e p l a c e ( / & / g , " & a m p ; " ) . r e p l a c e ( / < / g , " & l t ; " ) . r e p l a c e ( / > / g , " & g t ; " ) . r e p l a c e ( / " / g , " & q u o t ; " ) . r e p l a c e ( / ' / g , " & # x 2 7 ; " ) } f u n c t i o n v ( e , . . . t ) { c o n s t i = O b j e c t . c r e a t e ( n u l l ) ; f o r ( c o n s t l i n e ) i [ l ] = e [ l ] ; r e t u r n t . f o r E a c h ( f u n c t i o n ( l ) { f o r ( c o n s t p i n l ) i [ p ] = l [ p ] } ) , i } c o n s t A = e = > ! ! e . s c o p e | | e . s u b l a n g u a g e & & e . l a n g u a g e ; c l a s s C { c o n s t r u c t o r ( t , i ) { t h i s . b u f f e r = " " , t h i s . c l a s s P r e f i x = i . c l a s s P r e f i x , t . w a l k ( t h i s ) } a d d T e x t ( t ) { t h i s . b u f f e r + = N ( t ) } o p e n N o d e ( t ) { i f ( ! A ( t ) ) r e t u r n ; l e t i = " " ; i = t . s u b l a n g u a g e ? ` l a n g u a g e - $ { t . l a n g u a g e } ` : ( ( l , { p r e f i x : p } ) = > { i f ( l . i n c l u d e s ( " . " ) ) { c o n s t m = l . s p l i t ( " . " ) ; r e t u r n [ ` $ { p } $ { m . s h i f t ( ) } ` , . . . m . m a p ( ( b , S ) = > ` $ { b } $ { " _ " . r e p e a t ( S + 1 ) } ` ) ] . j o i n ( " " ) } r e t u r n ` $ { p } $ { l } ` } ) ( t . s c o p e , { p r e f i x : t h i s . c l a s s P r e f i x } ) , t h i s . s p a n ( i ) } c l o s e N o d e ( t ) { A ( t ) & & ( t h i s . b u f f e r + = " < / s p a n > " ) } v a l u e ( ) { r e t u r n t h i s . b u f f e r } s p a n ( t ) { t h i s . b u f f e r + = ` < s p a n c l a s s = " $ { t } " > ` } } c o n s t Z = ( e = { } ) = > { c o n s t t = { c h i l d r e n : [ ] } ; r e t u r n O b j e c t . a s s i g n ( t , e ) , t } ; c l a s s j { c o n s t r u c t o r ( ) { t h i s . r o o t N o d e = Z ( ) , t h i s . s t a c k = [ t h i s . r o o t N o d e ] } g e t t o p ( ) { r e t u r n t h i s . s t a c k [ t h i s . s t a c k . l e n g t h - 1 ] } g e t r o o t ( ) { r e t u r n t h i s . r o o t N o d e } a d d ( t ) { t h i s . t o p . c h i l d r e n . p u s h ( t ) } o p e n N o d e ( t ) { c o n s t i = Z ( { s c o p e : t } ) ; t h i s . a d d ( i ) , t h i s . s t a c k . p u s h ( i ) } c l o s e N o d e ( ) { i f ( t h i s . s t a c k . l e n g t h > 1 ) r e t u r n t h i s . s t a c k . p o p ( ) } c l o s e A l l N o d e s ( ) { f o r ( ; t h i s . c l o s e N o d e ( ) ; ) ; } t o J S O N ( ) { r e t u r n J S O N . s t r i n g i f y ( t h i s . r o o t N o d e , n u l l , 4 ) } w a l k ( t ) { r e t u r n t h i s . c o n s t r u c t o r . _ w a l k ( t , t h i s . r o o t N o d e ) } s t a t i c _ w a l k ( t , i ) { r e t u r n t y p e o f i = = " s t r i n g " ? t . a d d T e x t ( i ) : i . c h i l d r e n & & ( t . o p e n N o d e ( i ) , i . c h i l d r e n . f o r E a c h ( l = > t h i s . _ w a l k ( t , l ) ) , t . c l o s e N o d e ( i ) ) , t } s t a t i c _ c o l l a p s e ( t ) { t y p e o f t ! = " s t r i n g " & & t . c h i l d r e n & & ( t . c h i l d r e n . e v e r y ( i = > t y p e o f i = = " s t r i n g " ) ? t . c h i l d r e n = [ t . c h i l d r e n . j o i n ( " " ) ] : t . c h i l d r e n . f o r E a c h ( i = > { j . _ c o l l a p s e ( i ) } ) ) } } c l a s s V e x t e n d s j { c o n s t r u c t o r ( t ) { s u p e
2023-09-27 20:12:30 +01:00
https : //github.com/highlightjs/highlight.js/issues/2277`),pe=q,Ce=ie),re===void 0&&(re=!0);const Ee={code:Ce,language:pe};_e("before:highlight",Ee);const he=Ee.result?Ee.result:w(Ee.language,Ee.code,re);return he.code=Ee.code,_e("after:highlight",he),he}function w(q,ie,re,Ce){const pe=Object.create(null);function Ee(){if(!fe.keywords)return void dt.addText($e);let de=0;fe.keywordPatternRe.lastIndex=0;let ve=fe.keywordPatternRe.exec($e),He="";for(;ve;){He+=$e.substring(de,ve.index);const We=ct.case_insensitive?ve[0].toLowerCase():ve[0],_t=(Ye=We,fe.keywords[Ye]);if(_t){const[Lt,wa]=_t;if(dt.addText(He),He="",pe[We]=(pe[We]||0)+1,pe[We]<=7&&(ia+=wa),Lt.startsWith("_"))He+=ve[0];else{const ra=ct.classNameAliases[Lt]||Lt;dt.addKeyword(ve[0],ra)}}else He+=ve[0];de=fe.keywordPatternRe.lastIndex,ve=fe.keywordPatternRe.exec($e)}var Ye;He+=$e.substring(de),dt.addText(He)}function he(){fe.subLanguage!=null?function(){if($e==="")return;let de=null;if(typeof fe.subLanguage=="string"){if(!t[fe.subLanguage])return void dt.addText($e);de=w(fe.subLanguage,$e,!0,Pt[fe.subLanguage]),Pt[fe.subLanguage]=de._top}else de=F($e,fe.subLanguage.length?fe.subLanguage:null);fe.relevance>0&&(ia+=de.relevance),dt.addSublanguage(de._emitter,de.language)}():Ee(),$e=""}function qe(de,ve){let He=1;const Ye=ve.length-1;for(;He<=Ye;){if(!de._emit[He]){He++;continue}const We=ct.classNameAliases[de[He]]||de[He],_t=ve[He];We?dt.addKeyword(_t,We):($e=_t,Ee(),$e=""),He++}}function Ie(de,ve){return de.scope&&typeof de.scope=="string"&&dt.openNode(ct.classNameAliases[de.scope]||de.scope),de.beginScope&&(de.beginScope._wrap?(dt.addKeyword($e,ct.classNameAliases[de.beginScope._wrap]||de.beginScope._wrap),$e=""):de.beginScope._multi&&(qe(de.beginScope,ve),$e="")),fe=Object.create(de,{parent:{value:fe}}),fe}function Ve(de,ve,He){let Ye=function(We,_t){const Lt=We&&We.exec(_t);return Lt&&Lt.index===0}(de.endRe,He);if(Ye){if(de["on:end"]){const We=new E(de);de["on:end"](ve,We),We.isMatchIgnored&&(Ye=!1)}if(Ye){for(;de.endsParent&&de.parent;)de=de.parent;return de}}if(de.endsWithParent)return Ve(de.parent,ve,He)}function Je(de){return fe.matcher.regexIndex===0?($e+=de[0],1):(Da=!0,0)}function mt(de){const ve=de[0],He=ie.substring(de.index),Ye=Ve(fe,de,He);if(!Ye)return Ae;const We=fe;fe.endScope&&fe.endScope._wrap?(he(),dt.addKeyword(ve,fe.endScope._wrap)):fe.endScope&&fe.endScope._multi?(he(),qe(fe.endScope,de)):We.skip?$e+=ve:(We.returnEnd||We.excludeEnd||($e+=ve),he(),We.excludeEnd&&($e=ve));do fe.scope&&dt.closeNode(),fe.skip||fe.subLanguage||(ia+=fe.relevance),fe=fe.parent;while(fe!==Ye.parent);return Ye.starts&&Ie(Ye.starts,de),We.returnEnd?0:ve.length}let rt={};function Tt(de,ve){const He=ve&&ve[0];if($e+=de,He==null)return he(),0;if(rt.type==="begin"&&ve.type==="end"&&rt.index===ve.index&&He===""){if($e+=ie.slice(ve.index,ve.index+1),!p){const Ye=new Error(`0 width match regex (${q})`);throw Ye.languageName=q,Ye.badRule=rt.rule,Ye}return 1}if(rt=ve,ve.type==="begin")return function(Ye){const We=Ye[0],_t=Ye.rule,Lt=new E(_t),wa=[_t.__beforeBegin,_t["on:begin"]];for(const ra of wa)if(ra&&(ra(Ye,Lt),Lt.isMatchIgnored))return Je(We);return _t.skip?$e+=We:(_t.excludeBegin&&($e+=We),he(),_t.returnBegin||_t.excludeBegin||($e=We)),Ie(_t,Ye),_t.returnBegin?0:We.length}(ve);if(ve.type==="illegal"&&!re){const Ye=new Error('Illegal lexeme "'+He+'" for mode "'+(fe.scope||"<unnamed>")+'"');throw Ye.mode=fe,Ye}if(ve.type==="end"){const Ye=mt(ve);if(Ye!==Ae)return Ye}if(ve.type==="illegal"&&He==="")return 1;if(Ia>1e5&&Ia>3*ve.index)throw new Error("potential infinite loop, way more iterations than matches");return $e+=He,He.length}const ct=Y(q);if(!ct)throw P(m.replace("{}",q)),new Error('Unknown language: "'+q+'"');const Fe=ue(ct);let vt="",fe=Ce||Fe;const Pt={},dt=new S.__emitter(S);(function(){const de=[];for(let ve=fe;ve!==ct;ve=ve.parent)ve.scope&&de.unshift(ve.scope);de.forEach(ve=>dt.openNode(ve))})();let $e="",ia=0,jt=0,Ia=0,Da=!1;try{for(fe.matcher.considerAll();;){Ia++,Da?Da=!1:fe.matcher.considerAll(),fe.matcher.lastIndex=jt;const de=fe.matcher.exec(ie);if(!de)break
` },y]}},mr=function(e){const t="[a-zA-Z_][ \\ w.]*",i="< \\ ?(lasso(script)?|=)",l=" \\ ]| \\ ?>",p={ $ pattern:t+"|&[lg]t;",literal:"true false none minimal full all void and or not bw nbw ew new cn ncn lt lte gt gte eq neq rx nrx ft",built_in:"array date decimal duration integer map pair string tag xml null boolean bytes keyword list locale queue set stack staticarray local var variable global data self inherited currentcapture givenblock",keyword:"cache database_names database_schemanames database_tablenames define_tag define_type email_batch encode_set html_comment handle handle_error header if inline iterate ljax_target link link_currentaction link_currentgroup link_currentrecord link_detail link_firstgroup link_firstrecord link_lastgroup link_lastrecord link_nextgroup link_nextrecord link_prevgroup link_prevrecord log loop namespace_using output_none portal private protect records referer referrer repeating resultset rows search_args search_arguments select sort_args sort_arguments thread_atomic value_list while abort case else fail_if fail_ifnot fail if_empty if_false if_null if_true loop_abort loop_continue loop_count params params_up return return_value run_children soap_definetag soap_lastrequest soap_lastresponse tag_name ascending average by define descending do equals frozen group handle_failure import in into join let match max min on order parent protected provide public require returnhome skip split_thread sum take thread to trait type where with yield yieldhome"},m=e.COMMENT("<!--","-->",{relevance:0}),b={className:"meta",begin:" \\ [noprocess \\ ]",starts:{end:" \\ [/noprocess \\ ]",returnEnd:!0,contains:[m]}},S={className:"meta",begin:" \\ [/noprocess|"+i},y={className:"symbol",begin:"'"+t+"'"},D=[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.inherit(e.C_NUMBER_MODE,{begin:e.C_NUMBER_RE+"|(-?infinity|NaN) \\ b"}),e.inherit(e.APOS_STRING_MODE,{illegal:null}),e.inherit(e.QUOTE_STRING_MODE,{illegal:null}),{className:"string",begin:" ` ",end:" ` "},{variants:[{begin:"[# $ ]"+t},{begin:"#",end:" \\ d+",illegal:" \\ W"}]},{className:"type",begin:":: \\ s*",end:t,illegal:" \\ W"},{className:"params",variants:[{begin:"-(?!infinity)"+t,relevance:0},{begin:"( \\ . \\ . \\ .)"}]},{begin:/(->| \. ) \s */,relevance:0,contains:[y]},{className:"class",beginKeywords:"define",returnEnd:!0,end:" \\ (|=>",contains:[e.inherit(e.TITLE_MODE,{begin:t+"(=(?!>))?|[-+*/%](?!>)"})]}];return{name:"Lasso",aliases:["ls","lassoscript"],case_insensitive:!0,keywords:p,contains:[{className:"meta",begin:l,relevance:0,starts:{end:" \\ [|"+i,returnEnd:!0,relevance:0,contains:[m]}},b,S,{className:"meta",begin:" \\ [no_square_brackets",starts:{end:" \\ [/no_square_brackets \\ ]",keywords:p,contains:[{className:"meta",begin:l,relevance:0,starts:{end:" \\ [noprocess \\ ]|"+i,returnEnd:!0,contains:[m]}},b,S].concat(D)}},{className:"meta",begin:" \\ [",relevance:0},{className:"meta",begin:"^#!",end:"lasso9 $ ",relevance:10}].concat(D)}},gr=function(e){const t=[{begin:/ \^ {6}[0-9a-f]{6}/},{begin:/ \^ {5}[0-9a-f]{5}/},{begin:/ \^ {4}[0-9a-f]{4}/},{begin:/ \^ {3}[0-9a-f]{3}/},{begin:/ \^ {2}[0-9a-f]{2}/},{begin:/ \^ {2}[ \u 0000- \u 007f]/}],i=[{className:"keyword",begin:/ \\ /,relevance:0,contains:[{endsParent:!0,begin:e.regex.either(...["(?:NeedsTeXFormat|RequirePackage|GetIdInfo)","Provides(?:Expl)?(?:Package|Class|File)","(?:DeclareOption|ProcessOptions)","(?:documentclass|usepackage|input|include)","makeat(?:letter|other)","ExplSyntax(?:On|Off)","(?:new|renew|provide)?command","(?:re)newenvironment","(?:New|Renew|Provide|Declare)(?:Expandable)?DocumentCommand","(?:New|Renew|Provide|Declare)DocumentEnvironment","(?:(?:e|g|x)?def|let)","(?:begin|end)","(?:part|chapter|(?:sub){0,2}section|(?:sub)?paragraph)","caption","(?:label|(?:eq|page|name)?ref|(?:paren|foot|super)?cite)","(?:alpha|beta|[Gg]amma|[Dd]elta|(?:var)?epsilon|zeta|eta|[Tt]heta|vartheta)","(?:iota|(?:var)?kappa|[Ll]ambda|mu|nu|[Xx]i|[Pp]i|varpi|(?:var)rho)","(?:[Ss]igma|varsigma|tau|[Uu]psilon|[Pp]hi|varphi|chi|[Pp]si|[Oo]mega)","(?:frac|sum|prod|lim|infty|times|sqrt|leq|geq|left|right|middle|[bB]igg?)","(?:[lr]angle|q?quad|[lcvdi]?dots|d?dot|hat|tilde|bar)"]
] ` ,D={scope:"string",variants:[e.inherit(e.QUOTE_STRING_MODE,{illegal:null,contains:e.QUOTE_STRING_MODE.contains.concat(b)}),S,e.END_SAME_AS_BEGIN({begin:/<<<[ \t ]*( \w +) \n /,end:/[ \t ]*( \w +) \b /,contains:e.QUOTE_STRING_MODE.contains.concat(b)})]},w={scope:"number",variants:[{begin:" \\ b0[bB][01]+(?:_[01]+)* \\ b"},{begin:" \\ b0[oO][0-7]+(?:_[0-7]+)* \\ b"},{begin:" \\ b0[xX][ \\ da-fA-F]+(?:_[ \\ da-fA-F]+)* \\ b"},{begin:"(?: \\ b \\ d+(?:_ \\ d+)*( \\ .(?: \\ d+(?:_ \\ d+)*))?| \\ B \\ . \\ d+)(?:[eE][+-]? \\ d+)?"}],relevance:0},F=["false","null","true"],U=["__CLASS__","__DIR__","__FILE__","__FUNCTION__","__COMPILER_HALT_OFFSET__","__LINE__","__METHOD__","__NAMESPACE__","__TRAIT__","die","echo","exit","include","include_once","print","require","require_once","array","abstract","and","as","binary","bool","boolean","break","callable","case","catch","class","clone","const","continue","declare","default","do","double","else","elseif","empty","enddeclare","endfor","endforeach","endif","endswitch","endwhile","enum","eval","extends","final","finally","float","for","foreach","from","global","goto","if","implements","instanceof","insteadof","int","integer","interface","isset","iterable","list","match|0","mixed","new","never","object","or","private","protected","public","readonly","real","return","string","switch","throw","trait","try","unset","use","var","void","while","xor","yield"],K=["Error|0","AppendIterator","ArgumentCountError","ArithmeticError","ArrayIterator","ArrayObject","AssertionError","BadFunctionCallException","BadMethodCallException","CachingIterator","CallbackFilterIterator","CompileError","Countable","DirectoryIterator","DivisionByZeroError","DomainException","EmptyIterator","ErrorException","Exception","FilesystemIterator","FilterIterator","GlobIterator","InfiniteIterator","InvalidArgumentException","IteratorIterator","LengthException","LimitIterator","LogicException","MultipleIterator","NoRewindIterator","OutOfBoundsException","OutOfRangeException","OuterIterator","OverflowException","ParentIterator","ParseError","RangeException","RecursiveArrayIterator","RecursiveCachingIterator","RecursiveCallbackFilterIterator","RecursiveDirectoryIterator","RecursiveFilterIterator","RecursiveIterator","RecursiveIteratorIterator","RecursiveRegexIterator","RecursiveTreeIterator","RegexIterator","RuntimeException","SeekableIterator","SplDoublyLinkedList","SplFileInfo","SplFileObject","SplFixedArray","SplHeap","SplMaxHeap","SplMinHeap","SplObjectStorage","SplObserver","SplPriorityQueue","SplQueue","SplStack","SplSubject","SplTempFileObject","TypeError","UnderflowException","UnexpectedValueException","UnhandledMatchError","ArrayAccess","BackedEnum","Closure","Fiber","Generator","Iterator","IteratorAggregate","Serializable","Stringable","Throwable","Traversable","UnitEnum","WeakReference","WeakMap","Directory","__PHP_Incomplete_Class","parent","php_user_filter","self","static","stdClass"],B={keyword:U,literal:(pe=>{const Ee=[];return pe.forEach(he=>{Ee.push(he),he.toLowerCase()===he?Ee.push(he.toUpperCase()):Ee.push(he.toLowerCase())}),Ee})(F),built_in:K},Y=pe=>pe.map(Ee=>Ee.replace(/ \| \d + $ /,"")),te={variants:[{match:[/new/,t.concat(y,"+"),t.concat("(?!",Y(K).join(" \\ b|")," \\ b)"),p],scope:{1:"keyword",4:"title.class"}}]},be=t.concat(l," \\ b(?! \\ ()"),_e={variants:[{match:[t.concat(/::/,t.lookahead(/(?!class \b )/)),be],scope:{2:"variable.constant"}},{match:[/::/,/class/],scope:{2:"variable.language"}},{match:[p,t.concat(/::/,t.lookahead(/(?!class \b )/)),be],scope:{1:"title.class",3:"variable.constant"}},{match:[p,t.concat("::",t.lookahead(/(?!class \b )/))],scope:{1:"title.class"}},{match:[p,/::/,/class/],scope:{1:"title.class",3:"variable.language"}}]},q={scope:"attr",match:t.concat(l,t.lookahead(":"),t.lookahead(/(?!::)/))},ie={relevance:0,begin:/ \( /,end:/ \) /,keywords:B,contains:[q,m,_e,e.C_BLOCK_COMMENT_MODE,D,w,te]},re={relevance:0,match:[/ \b /,t.concat("(?!fn \\ b|function \\ b|",Y(U).join(" \\ b|"),"|",Y(K).join(" \\ b|")," \\ b)"),l,t.concat(y,"*"),t.lookahead(/(?= \( )/)],scope:{3:"title.function.invoke"},contains:[ie]};ie.contains.push(re);const Ce=[q,_e,e.C_BLOCK_COMMENT_
] * ; ` ,relevance:0},{begin:"[vp][0-9]+"}]}},Ys=function(e){const t="[a-z][a-zA-Z0-9_]*",i={className:"string",begin:" \\ $ .{1}"},l={className:"symbol",begin:"#"+e.UNDERSCORE_IDENT_RE};return{name:"Smalltalk",aliases:["st"],keywords:["self","super","nil","true","false","thisContext"],contains:[e.COMMENT('"','"'),e.APOS_STRING_MODE,{className:"type",begin:" \\ b[A-Z][A-Za-z0-9_]*",relevance:0},{begin:t+":",relevance:0},e.C_NUMBER_MODE,l,i,{begin:" \\ |[ ]*"+t+"([ ]+"+t+")*[ ]* \\ |",returnBegin:!0,end:/ \| /,illegal:/ \S /,contains:[{begin:"( \\ |[ ]*)?"+t}]},{begin:"# \\ (",end:" \\ )",contains:[e.APOS_STRING_MODE,i,e.C_NUMBER_MODE,l]}]}},Hs=function(e){return{name:"SML (Standard ML)",aliases:["ml"],keywords:{ $ pattern:"[a-z_] \\ w*!?",keyword:"abstype and andalso as case datatype do else end eqtype exception fn fun functor handle if in include infix infixr let local nonfix of op open orelse raise rec sharing sig signature struct structure then type val with withtype where while",built_in:"array bool char exn int list option order real ref string substring vector unit word",literal:"true false NONE SOME LESS EQUAL GREATER nil"},illegal:/ \/ \/ |>>/,contains:[{className:"literal",begin:/ \[ ( \| \| )? \] | \( \) /,relevance:0},e.COMMENT(" \\ ( \\ *"," \\ * \\ )",{contains:["self"]}),{className:"symbol",begin:"'[A-Za-z_](?!')[ \\ w']*"},{className:"type",begin:" ` [ A - Z ] [ \ \ w ']*"},{className:"type",begin:"\\b[A-Z][\\w' ] * ",relevance:0},{begin:" [ a - z _ ] \ \ w * '[\\w' ] * "},e.inherit(e.APOS_STRING_MODE,{className:" string ",relevance:0}),e.inherit(e.QUOTE_STRING_MODE,{illegal:null}),{className:" number ",begin:" \ \ b ( 0 [ xX ] [ a - fA - F0 - 9_ ] + [ Lln ] ? | 0 [ oO ] [ 0 - 7_ ] + [ Lln ] ? | 0 [ bB ] [ 01_ ] + [ Lln ] ? | [ 0 - 9 ] [ 0 - 9_ ] * ( [ Lln ] | ( \ \ . [ 0 - 9_ ] * ) ? ( [ eE ] [ - + ] ? [ 0 - 9_ ] + ) ? ) ? ) ",relevance:0},{begin:/[-=]>/}]}},zs=function(e){const t={className:" string ",variants:[{begin:'" ',end:' "',contains:[{begin:'" "',relevance:0}]},{begin:" '",end:"' ",contains:[{begin:" '' ",relevance:0}]}]},i={className:" meta ",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{keyword:" define undef ifdef ifndef else endif include "},contains:[{begin:/\\\n/,relevance:0},e.inherit(t,{className:" string "}),{className:" string ",begin:/<[^\n>]*>/,end:/$/,illegal:" \ \ n "},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]};return{name:" SQF ",case_insensitive:!0,keywords:{keyword:[" case "," catch "," default "," do "," else "," exit "," exitWith "," for "," forEach "," from "," if "," private "," switch "," then "," throw "," to "," try "," waitUntil "," while "," with "],built_in:[" abs "," accTime "," acos "," action "," actionIDs "," actionKeys "," actionKeysImages "," actionKeysNames "," actionKeysNamesArray "," actionName "," actionParams "," activateAddons "," activatedAddons "," activateKey "," add3DENConnection "," add3DENEventHandler "," add3DENLayer "," addAction "," addBackpack "," addBackpackCargo "," addBackpackCargoGlobal "," addBackpackGlobal "," addBinocularItem "," addCamShake "," addCuratorAddons "," addCuratorCameraArea "," addCuratorEditableObjects "," addCuratorEditingArea "," addCuratorPoints "," addEditorObject "," addEventHandler "," addForce "," addForceGeneratorRTD "," addGoggles "," addGroupIcon "," addHandgunItem "," addHeadgear "," addItem "," addItemCargo "," addItemCargoGlobal "," addItemPool "," addItemToBackpack "," addItemToUniform "," addItemToVest "," addLiveStats "," addMagazine "," addMagazineAmmoCargo "," addMagazineCargo "," addMagazineCargoGlobal "," addMagazineGlobal "," addMagazinePool "," addMagazines "," addMagazineTurret "," addMenu "," addMenuItem "," addMissionEventHandler "," addMPEventHandler "," addMusicEventHandler "," addonFiles "," addOwnedMine "," addPlayerScores "," addPrimaryWeaponItem "," addPublicVariableEventHandler "," addRating "," addResources "," addScore "," addScoreSide "," addSecondaryWeaponItem "," addSwitchableUnit "," addTeamMember "," addToRemainsCollector "," addTorque "," addUniform "," addVehicle "," addVest "," addWaypoint "," addWeapon "," addWeaponCargo "," addWeaponCargoGlobal "," addWeaponGlobal "," addWeaponItem "," addWeaponPool "," addWeaponTurret "," addWeaponWithAttachmentsCargo "," addWeaponWithAttachmentsCargoGlobal "," admin "," agent "," agents "," AGLToASL "," aimedAtTarget "," aimPos "," airDensityCurveRTD "," airDensityRTD "," airplaneThrottle "," airportSide "," AISFinishHeal "," alive "," all3DENEntities "," allActiveTitleEffects "," allAd
] * ? "'`},{begin:`" [ ^ \ r
"]*" ` }]},{className:"built_in",variants:[{begin:" \\ b(abs|acos|asin|atan|atan2|atanh|ceil|cloglog|comb|cos|digamma|exp|floor|invcloglog|invlogit|ln|lnfact|lnfactorial|lngamma|log|log10|max|min|mod|reldif|round|sign|sin|sqrt|sum|tan|tanh|trigamma|trunc|betaden|Binomial|binorm|binormal|chi2|chi2tail|dgammapda|dgammapdada|dgammapdadx|dgammapdx|dgammapdxdx|F|Fden|Ftail|gammaden|gammap|ibeta|invbinomial|invchi2|invchi2tail|invF|invFtail|invgammap|invibeta|invnchi2|invnFtail|invnibeta|invnorm|invnormal|invttail|nbetaden|nchi2|nFden|nFtail|nibeta|norm|normal|normalden|normd|npnchi2|tden|ttail|uniform|abbrev|char|index|indexnot|length|lower|ltrim|match|plural|proper|real|regexm|regexr|regexs|reverse|rtrim|string|strlen|strlower|strltrim|strmatch|strofreal|strpos|strproper|strreverse|strrtrim|strtrim|strupper|subinstr|subinword|substr|trim|upper|word|wordcount|_caller|autocode|byteorder|chop|clip|cond|e|epsdouble|epsfloat|group|inlist|inrange|irecode|matrix|maxbyte|maxdouble|maxfloat|maxint|maxlong|mi|minbyte|mindouble|minfloat|minint|minlong|missing|r|recode|replay|return|s|scalar|d|date|day|dow|doy|halfyear|mdy|month|quarter|week|year|d|daily|dofd|dofh|dofm|dofq|dofw|dofy|h|halfyearly|hofd|m|mofd|monthly|q|qofd|quarterly|tin|twithin|w|weekly|wofd|y|yearly|yh|ym|yofd|yq|yw|cholesky|colnumb|colsof|corr|det|diag|diag0cnt|el|get|hadamard|I|inv|invsym|issym|issymmetric|J|matmissing|matuniform|mreldif|nullmat|rownumb|rowsof|sweep|syminv|trace|vec|vecdiag)(?= \\ ()"}]},e.COMMENT("^[ ]* \\ *.* $ ",!1),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]}},Ws=function(e){return{name:"STEP Part 21",aliases:["p21","step","stp"],case_insensitive:!0,keywords:{ $ pattern:"[A-Z_][A-Z0-9_.]*",keyword:["HEADER","ENDSEC","DATA"]},contains:[{className:"meta",begin:"ISO-10303-21;",relevance:10},{className:"meta",begin:"END-ISO-10303-21;",relevance:10},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.COMMENT("/ \\ * \\ *!"," \\ */"),e.C_NUMBER_MODE,e.inherit(e.APOS_STRING_MODE,{illegal:null}),e.inherit(e.QUOTE_STRING_MODE,{illegal:null}),{className:"string",begin:"'",end:"'"},{className:"symbol",variants:[{begin:"#",end:" \\ d+",illegal:" \\ W"}]}]}};const Qs=["a","abbr","address","article","aside","audio","b","blockquote","body","button","canvas","caption","cite","code","dd","del","details","dfn","div","dl","dt","em","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","html","i","iframe","img","input","ins","kbd","label","legend","li","main","mark","menu","nav","object","ol","p","q","quote","samp","section","span","strong","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","ul","var","video"],Ks=["any-hover","any-pointer","aspect-ratio","color","color-gamut","color-index","device-aspect-ratio","device-height","device-width","display-mode","forced-colors","grid","height","hover","inverted-colors","monochrome","orientation","overflow-block","overflow-inline","pointer","prefers-color-scheme","prefers-contrast","prefers-reduced-motion","prefers-reduced-transparency","resolution","scan","scripting","update","width","min-width","max-width","min-height","max-height"],js=["active","any-link","blank","checked","current","default","defined","dir","disabled","drop","empty","enabled","first","first-child","first-of-type","fullscreen","future","focus","focus-visible","focus-within","has","host","host-context","hover","indeterminate","in-range","invalid","is","lang","last-child","last-of-type","left","link","local-link","not","nth-child","nth-col","nth-last-child","nth-last-col","nth-last-of-type","nth-of-type","only-child","only-of-type","optional","out-of-range","past","placeholder-shown","read-only","read-write","required","right","root","scope","target","target-within","user-invalid","valid","visited","where"],Xs=["after","backdrop","before","cue","cue-region","first-letter","first-line","grammar-error","marker","part","placeholder","selection","slotted","spelling-error"],Zs=["align-content","align-items","align-self","all","animation","animation-delay","animation-direction","animation-duration","animation-fi
( multipart ) ? ` ,end: ` \ \ ]
` },{className:"string",begin:" \\ d{4}- \\ d{2}- \\ d{2}( \\ s+) \\ d{2}: \\ d{2}: \\ d{2}. \\ d+Z"},{className:"string",begin:"( \\ +|-) \\ d+"},{className:"keyword",relevance:10,variants:[{begin:"^(test|testing|success|successful|failure|error|skip|xfail|uxsuccess)(:?) \\ s+(test)?"},{begin:"^progress(:?)( \\ s+)?(pop|push)?"},{begin:"^tags:"},{begin:"^time:"}]}]}};function Wa(e){return e?typeof e=="string"?e:e.source:null}function ta(e){return ze("(?=",e,")")}function ze(...e){return e.map(t=>Wa(t)).join("")}function Et(...e){return"("+(function(i){const l=i[i.length-1];return typeof l=="object"&&l.constructor===Object?(i.splice(i.length-1,1),l):{}}(e).capture?"":"?:")+e.map(i=>Wa(i)).join("|")+")"}const Na=e=>ze(/ \b /,e,/ \w $ /.test(e)?/ \b /:/ \B /),to=["Protocol","Type"].map(Na),Qa=["init","self"].map(Na),no=["Any","Self"],ya=["actor","any","associatedtype","async","await",/as \? /,/as!/,"as","break","case","catch","class","continue","convenience","default","defer","deinit","didSet","distributed","do","dynamic","else","enum","extension","fallthrough",/fileprivate \( set \) /,"fileprivate","final","for","func","get","guard","if","import","indirect","infix",/init \? /,/init!/,"inout",/internal \( set \) /,"internal","in","is","isolated","nonisolated","lazy","let","mutating","nonmutating",/open \( set \) /,"open","operator","optional","override","postfix","precedencegroup","prefix",/private \( set \) /,"private","protocol",/public \( set \) /,"public","repeat","required","rethrows","return","set","some","static","struct","subscript","super","switch","throws","throw",/try \? /,/try!/,"try","typealias",/unowned \( safe \) /,/unowned \( unsafe \) /,"unowned","var","weak","where","while","willSet"],Ka=["false","nil","true"],ao=["assignment","associativity","higherThan","left","lowerThan","none","right"],io=["#colorLiteral","#column","#dsohandle","#else","#elseif","#endif","#error","#file","#fileID","#fileLiteral","#filePath","#function","#if","#imageLiteral","#keyPath","#line","#selector","#sourceLocation","#warn_unqualified_access","#warning"],ja=["abs","all","any","assert","assertionFailure","debugPrint","dump","fatalError","getVaList","isKnownUniquelyReferenced","max","min","numericCast","pointwiseMax","pointwiseMin","precondition","preconditionFailure","print","readLine","repeatElement","sequence","stride","swap","swift_unboxFromSwiftValueWithType","transcode","type","unsafeBitCast","unsafeDowncast","withExtendedLifetime","withUnsafeMutablePointer","withUnsafePointer","withVaList","withoutActuallyEscaping","zip"],Xa=Et(/[/= \- +!*%<>&|^~?]/,/[ \u 00A1- \u 00A7]/,/[ \u 00A9 \u 00AB]/,/[ \u 00AC \u 00AE]/,/[ \u 00B0 \u 00B1]/,/[ \u 00B6 \u 00BB \u 00BF \u 00D7 \u 00F7]/,/[ \u 2016- \u 2017]/,/[ \u 2020- \u 2027]/,/[ \u 2030- \u 203E]/,/[ \u 2041- \u 2053]/,/[ \u 2055- \u 205E]/,/[ \u 2190- \u 23FF]/,/[ \u 2500- \u 2775]/,/[ \u 2794- \u 2BFF]/,/[ \u 2E00- \u 2E7F]/,/[ \u 3001- \u 3003]/,/[ \u 3008- \u 3020]/,/[ \u 3030]/),Za=Et(Xa,/[ \u 0300- \u 036F]/,/[ \u 1DC0- \u 1DFF]/,/[ \u 20D0- \u 20FF]/,/[ \u FE00- \u FE0F]/,/[ \u FE20- \u FE2F]/),Oa=ze(Xa,Za,"*"),Ja=Et(/[a-zA-Z_]/,/[ \u 00A8 \u 00AA \u 00AD \u 00AF \u 00B2- \u 00B5 \u 00B7- \u 00BA]/,/[ \u 00BC- \u 00BE \u 00C0- \u 00D6 \u 00D8- \u 00F6 \u 00F8- \u 00FF]/,/[ \u 0100- \u 02FF \u 0370- \u 167F \u 1681- \u 180D \u 180F- \u 1DBF]/,/[ \u 1E00- \u 1FFF]/,/[ \u 200B- \u 200D \u 202A- \u 202E \u 203F- \u 2040 \u 2054 \u 2060- \u 206F]/,/[ \u 2070- \u 20CF \u 2100- \u 218F \u 2460- \u 24FF \u 2776- \u 2793]/,/[ \u 2C00- \u 2DFF \u 2E80- \u 2FFF]/,/[ \u 3004- \u 3007 \u 3021- \u 302F \u 3031- \u 303F \u 3040- \u D7FF]/,/[ \u F900- \u FD3D \u FD40- \u FDCF \u FDF0- \u FE1F \u FE30- \u FE44]/,/[ \u FE47- \u FEFE \u FF00- \u FFFD]/),na=Et(Ja,/ \d /,/[ \u 0300- \u 036F \u 1DC0- \u 1DFF \u 20D0- \u 20FF \u FE20- \u FE2F]/),xt=ze(Ja,na,"*"),Aa=ze(/[A-Z]/,na,"*"),ro=["autoclosure",ze(/convention \( /,Et("swift","block","c"),/ \) /),"discardableResult","dynamicCallable","dynamicMemberLookup","escaping","frozen","GKInspectable","IBAction","IBDesignable","IBInspectable","IBOutlet","IBSegueAction","inlinable","main","nonobjc","NSApplicationMain","NSCopying","NSManaged",ze(/objc \( /,xt,/ \) /),"objc","objcMembers","propertyWrapper","requires_stored_property_inits","resultBuilder","testable","UIApplicationMain","unknown","usableFromInline"],so=["iOS","iOSApplicationExtension","macOS","macOSAppl
` ,[Y,0<te[be].length?te[be]:" "]);B.innerHTML=_e.trim()}}function U(B){return B.length===0?[]:B.split(S)}function K(B,Y){return B.replace(/ \{ ( \d +) \} /g,function(te,be){return Y[be]!==void 0?Y[be]:te})}Mt?(Mt.initLineNumbersOnLoad=function(B){t.readyState==="interactive"||t.readyState==="complete"?y(B):e.addEventListener("DOMContentLoaded",function(){y(B)})},Mt.lineNumbersBlock=D,Mt.lineNumbersValue=function(B,Y){if(typeof B=="string"){var te=document.createElement("code");return te.innerHTML=B,w(te,Y)}},(i=t.createElement("style")).type="text/css",i.innerHTML=K(".{0}{border-collapse:collapse}.{0} td{padding:0}.{1}:before{content:attr({2})}",[l,m,b]),t.getElementsByTagName("head")[0].appendChild(i)):e.console.error("highlight.js not detected!"),document.addEventListener("copy",function(B){var Y,te=window.getSelection();!function(be){for(var _e=be;_e;){if(_e.className&&_e.className.indexOf("hljs-ln-code")!==-1)return 1;_e=_e.parentNode}}(te.anchorNode)||(Y=window.navigator.userAgent.indexOf("Edge")!==-1?function(be){for(var _e=be.toString(),q=be.anchorNode;q.nodeName!=="TD";)q=q.parentNode;for(var ie=be.focusNode;ie.nodeName!=="TD";)ie=ie.parentNode;var re=parseInt(q.dataset.lineNumber),Ce=parseInt(ie.dataset.lineNumber);if(re==Ce)return _e;var pe,Ee=q.textContent,he=ie.textContent;for(Ce<re&&(pe=re,re=Ce,Ce=pe,pe=Ee,Ee=he,he=pe);_e.indexOf(Ee)!==0;)Ee=Ee.slice(1);for(;_e.lastIndexOf(he)===-1;)he=he.slice(0,-1);for(var qe=Ee,Ie=function(mt){for(var rt=mt;rt.nodeName!=="TABLE";)rt=rt.parentNode;return rt}(q),Ve=re+1;Ve<Ce;++Ve){var Je=K('.{0}[{1}="{2}"]',[p,b,Ve]);qe+= `
` +Ie.querySelector(Je).textContent}return qe+ `
` +he}(te):te.toString(),B.clipboardData.setData("text/plain",Y),B.preventDefault())})})(window,document);/*!
* reveal . js plugin that adds syntax highlight support .
* /const it={id:"highlight",HIGHLIGHT_STEP_DELIMITER:"|",HIGHLIGHT_LINE_DELIMITER:",",HIGHLIGHT_LINE_RANGE_DELIMITER:"-",hljs:Mt,init:function(e){let t=e.getConfig().highlight||{};t.highlightOnLoad=typeof t.highlightOnLoad!="boolean"||t.highlightOnLoad,t.escapeHTML=typeof t.escapeHTML!="boolean"||t.escapeHTML,Array.from(e.getRevealElement().querySelectorAll("pre code")).forEach(i=>{i.parentNode.classList.add("code-wrapper");let l=i.querySelector('script[type="text/template"]');l&&(i.textContent=l.innerHTML),i.hasAttribute("data-trim")&&typeof i.innerHTML.trim=="function"&&(i.innerHTML=function(p){function m(S){return S.replace(/ ^ [ \ s\uFEFF \ xA0 ] + / g , " " ) } f u n c t i o n b ( S ) { f o r ( v a r y = S . s p l i t ( `
` ),D=0;D<y.length&&y[D].trim()==="";D++)y.splice(D--,1);for(D=y.length-1;D>=0&&y[D].trim()==="";D--)y.splice(D,1);return y.join( `
` )}return function(S){var y=b(S.innerHTML).split( `
` ),D=y.reduce(function(w,F){return F.length>0&&m(F).length>0&&w>F.length-m(F).length?F.length-m(F).length:w},Number.POSITIVE_INFINITY);return y.map(function(w,F){return w.slice(D)}).join( `
` )}(p)}(i)),t.escapeHTML&&!i.hasAttribute("data-noescape")&&(i.innerHTML=i.innerHTML.replace(/</g,"<").replace(/>/g,">")),i.addEventListener("focusout",function(p){Mt.highlightElement(p.currentTarget)},!1)}),typeof t.beforeHighlight=="function"&&t.beforeHighlight(Mt),t.highlightOnLoad&&Array.from(e.getRevealElement().querySelectorAll("pre code")).forEach(i=>{it.highlightBlock(i)}),e.on("pdf-ready",function(){[].slice.call(e.getRevealElement().querySelectorAll("pre code[data-line-numbers].current-fragment")).forEach(function(i){it.scrollHighlightedLineIntoView(i,{},!0)})})},highlightBlock:function(e){if(Mt.highlightElement(e),e.innerHTML.trim().length!==0&&e.hasAttribute("data-line-numbers")){Mt.lineNumbersBlock(e,{singleLine:!0});var t={currentBlock:e},i=it.deserializeHighlightSteps(e.getAttribute("data-line-numbers"));if(i.length>1){var l=parseInt(e.getAttribute("data-fragment-index"),10);(typeof l!="number"||isNaN(l))&&(l=null),i.slice(1).forEach(function(b){var S=e.cloneNode(!0);S.setAttribute("data-line-numbers",it.serializeHighlightSteps([b])),S.classList.add("fragment"),e.parentNode.appendChild(S),it.highlightLines(S),typeof l=="number"?(S.setAttribute("data-fragment-index",l),l+=1):S.removeAttribute("data-fragment-index"),S.addEventListener("visible",it.scrollHighlightedLineIntoView.bind(it,S,t)),S.addEventListener("hidden",it.scrollHighlightedLineIntoView.bind(it,S.previousSibling,t))}),e.removeAttribute("data-fragment-index"),e.setAttribute("data-line-numbers",it.serializeHighlightSteps([i[0]]))}var p=typeof e.closest=="function"?e.closest("section:not(.stack)"):null;if(p){var m=function(){it.scrollHighlightedLineIntoView(e,t,!0),p.removeEventListener("visible",m)};p.addEventListener("visible",m)}it.highlightLines(e)}},scrollHighlightedLineIntoView:function(e,t,i){cancelAnimationFrame(t.animationFrameID),t.currentBlock&&(e.scrollTop=t.currentBlock.scrollTop),t.currentBlock=e;var l=this.getHighlightedLineBounds(e),p=e.offsetHeight,m=getComputedStyle(e);p-=parseInt(m.paddingTop)+parseInt(m.paddingBottom);var b=e.scrollTop,S=l.top+(Math.min(l.bottom-l.top,p)-p)/2,y=e.querySelector(".hljs-ln");if(y&&(S+=y.offsetTop-parseInt(m.paddingTop)),S=Math.max(Math.min(S,e.scrollHeight-p),0),i===!0||b===S)e.scrollTop=S;else{if(e.scrollHeight<=p)return;var D=0,w=function(){D=Math.min(D+.02,1),e.scrollTop=b+(S-b)*it.easeInOutQuart(D),D<1&&(t.animationFrameID=requestAnimationFrame(w))};w()}},easeInOutQuart:function(e){return e<.5?8*e*e*e*e:1-8*--e*e*e*e},getHighlightedLineBounds:function(e){var t=e.querySelectorAll(".highlight-line");if(t.length===0)return{top:0,bottom:0};var i=t[0],l=t[t.length-1];return{top:i.offsetTop,bottom:l.offsetTop+l.offsetHeight}},highlightLines:function(e,t){var i=it.deserializeHighlightSteps(t||e.getAttribute("data-line-numbers"));i.length&&i[0].forEach(function(l){var p=[];typeof l.end=="number"?p=[].slice.call(e.querySelectorAll("table tr:nth-child(n+"+l.start+"):nth-child(-n+"+l.end+")")):typeof l.start=="number"&&(p=[].slice.call(e.querySelectorAll("table tr:nth-child("+l.start+")"))),p.length&&(p.forEach(function(m){m.classList.add("highlight-line")}),e.classList.add("has-highlights"))})},deserializeHighlightSteps:function(e){return(e=(e=e.replace(/ \s /g,"")).split(it.HIGHLIGHT_STEP_DELIMITER)).map(function(t){return t.split(it.HIGHLIGHT_LINE_DELIMITER).map(function(i){if(/^[ \d -]+ $ /.test(i)){i=i.split(it.HIGHLIGHT_LINE_RANGE_DELIMITER);var l=parseInt(i[0],10),p=parseInt(i[1],10);return isNaN(p)?{start:l}:{start:l,end:p}}return{}})})},serializeHighlightSteps:function(e){return e.map(function(t){return t.map(function(i){return typeof i.end=="number"?i.start+it.HIGHLIGHT_LINE_RANGE_DELIMITER+i.end:typeof i.start=="number"?i.start:""}).join(it.HIGHLIGHT_LINE_DELIMITER)}).join(it.HIGHLIGHT_STEP_DELIMITER)}};return()=>it})})(Ii);const Il=Ii.exports;var Di={exports:{}};(function(f,n){(function(r,d){f.exports=d()})(da,function(){function r(){return{baseUrl:null,breaks:!1,extensions:null,gfm:!0,headerIds:!0,headerPrefix:"",highlight:null,langPrefix:"language-",mangle:!0,pedantic:!1,renderer:null,sani
` )}}}fences(a){const s=this.rules.block.fences.exec(a);if(s){const o=s[0],g=function(T,I){const L=T.match(/^( \s +)(?: ` ` ` ) / ) ; if ( L === null ) return I ; const H = L [ 1 ] ; return I . split ( `
` ).map(P=>{const W=P.match(/^ \s +/);if(W===null)return P;const[G]=W;return G.length>=H.length?P.slice(H.length):P}).join( `
` )}(o,s[3]||"");return{type:"code",raw:o,lang:s[2]?s[2].trim():s[2],text:g}}}heading(a){const s=this.rules.block.heading.exec(a);if(s){let o=s[2].trim();if(/# $ /.test(o)){const T=me(o,"#");this.options.pedantic?o=T.trim():T&&!/ $ /.test(T)||(o=T.trim())}const g={type:"heading",raw:s[0],depth:s[1].length,text:o,tokens:[]};return this.lexer.inline(g.text,g.tokens),g}}hr(a){const s=this.rules.block.hr.exec(a);if(s)return{type:"hr",raw:s[0]}}blockquote(a){const s=this.rules.block.blockquote.exec(a);if(s){const o=s[0].replace(/^ *> ?/gm,"");return{type:"blockquote",raw:s[0],tokens:this.lexer.blockTokens(o,[]),text:o}}}list(a){let s=this.rules.block.list.exec(a);if(s){let o,g,T,I,L,H,P,W,G,Q,le,ce,ue=s[1].trim();const Te=ue.length>1,se={type:"list",raw:"",ordered:Te,start:Te?+ue.slice(0,-1):"",loose:!1,items:[]};ue=Te? ` \ \ d { 1 , 9 } \ \ $ { ue . slice ( - 1 ) } ` : ` \ \ $ { ue } ` ,this.options.pedantic&&(ue=Te?ue:"[*+-]");const Oe=new RegExp( ` ^ ( { 0 , 3 } $ { ue } ) ( ( ? : [ ^ \ \ n ] * ) ? ( ? : \ \ n | $ ) ) ` );for(;a&&(ce=!1,s=Oe.exec(a))&&!this.rules.block.hr.test(a);){if(o=s[0],a=a.substring(o.length),W=s[2].split( `
` ,1)[0],G=a.split( `
` ,1)[0],this.options.pedantic?(I=2,le=W.trimLeft()):(I=s[2].search(/[^ ]/),I=I>4?1:I,le=W.slice(I),I+=s[1].length),H=!1,!W&&/^ * $ /.test(G)&&(o+=G+ `
` ,a=a.substring(G.length+1),ce=!0),!ce){const Ae=new RegExp( ` ^ { 0 , $ { Math . min ( 3 , I - 1 ) } } ( ? : [ * + - ] | \ \ d { 1 , 9 } [ . ) ] ) ` );for(;a&&(Q=a.split( `
` ,1)[0],W=Q,this.options.pedantic&&(W=W.replace(/^ {1,4}(?=( {4})*[^ ])/g," ")),!Ae.test(W));){if(W.search(/[^ ]/)>=I||!W.trim())le+= `
` +W.slice(I);else{if(H)break;le+= `
` +W}H||W.trim()||(H=!0),o+=Q+ `
` ,a=a.substring(Q.length+1)}}se.loose||(P?se.loose=!0:/ \n * \n * $ /.test(o)&&(P=!0)),this.options.gfm&&(g=/^ \[ [ xX] \] /.exec(le),g&&(T=g[0]!=="[ ] ",le=le.replace(/^ \[ [ xX] \] +/,""))),se.items.push({type:"list_item",raw:o,task:!!g,checked:T,loose:!1,text:le}),se.raw+=o}se.items[se.items.length-1].raw=o.trimRight(),se.items[se.items.length-1].text=le.trimRight(),se.raw=se.raw.trimRight();const ge=se.items.length;for(L=0;L<ge;L++){this.lexer.state.top=!1,se.items[L].tokens=this.lexer.blockTokens(se.items[L].text,[]);const Ae=se.items[L].tokens.filter(Ue=>Ue.type==="space"),Ge=Ae.every(Ue=>{const Ct=Ue.raw.split("");let Ot=0;for(const Dt of Ct)if(Dt=== `
` &&(Ot+=1),Ot>1)return!0;return!1});!se.loose&&Ae.length&&Ge&&(se.loose=!0,se.items[L].loose=!0)}return se}}html(a){const s=this.rules.block.html.exec(a);if(s){const o={type:"html",raw:s[0],pre:!this.options.sanitizer&&(s[1]==="pre"||s[1]==="script"||s[1]==="style"),text:s[0]};return this.options.sanitize&&(o.type="paragraph",o.text=this.options.sanitizer?this.options.sanitizer(s[0]):j(s[0]),o.tokens=[],this.lexer.inline(o.text,o.tokens)),o}}def(a){const s=this.rules.block.def.exec(a);if(s)return s[3]&&(s[3]=s[3].substring(1,s[3].length-1)),{type:"def",tag:s[1].toLowerCase().replace(/ \s +/g," "),raw:s[0],href:s[2],title:s[3]}}table(a){const s=this.rules.block.table.exec(a);if(s){const o={type:"table",header:Pe(s[1]).map(g=>({text:g})),align:s[2].replace(/^ *| \| * $ /g,"").split(/ * \| */),rows:s[3]&&s[3].trim()?s[3].replace(/ \n [ \t ]* $ /,"").split( `
` ):[]};if(o.header.length===o.align.length){o.raw=s[0];let g,T,I,L,H=o.align.length;for(g=0;g<H;g++)/^ *-+: * $ /.test(o.align[g])?o.align[g]="right":/^ *:-+: * $ /.test(o.align[g])?o.align[g]="center":/^ *:-+ * $ /.test(o.align[g])?o.align[g]="left":o.align[g]=null;for(H=o.rows.length,g=0;g<H;g++)o.rows[g]=Pe(o.rows[g],o.header.length).map(P=>({text:P}));for(H=o.header.length,T=0;T<H;T++)o.header[T].tokens=[],this.lexer.inlineTokens(o.header[T].text,o.header[T].tokens);for(H=o.rows.length,T=0;T<H;T++)for(L=o.rows[T],I=0;I<L.length;I++)L[I].tokens=[],this.lexer.inlineTokens(L[I].text,L[I].tokens);return o}}}lheading(a){const s=this.rules.block.lheading.exec(a);if(s){const o={type:"heading",raw:s[0],depth:s[2].charAt(0)==="="?1:2,text:s[1],tokens:[]};return this.lexer.inline(o.text,o.tokens),o}}paragraph(a){const s=this.rules.block.paragraph.exec(a);if(s){const o={type:"paragraph",raw:s[0],text:s[1].charAt(s[1].length-1)=== `
` ?s[1].slice(0,-1):s[1],tokens:[]};return this.lexer.inline(o.text,o.tokens),o}}text(a){const s=this.rules.block.text.exec(a);if(s){const o={type:"text",raw:s[0],text:s[0],tokens:[]};return this.lexer.inline(o.text,o.tokens),o}}escape(a){const s=this.rules.inline.escape.exec(a);if(s)return{type:"escape",raw:s[0],text:j(s[1])}}tag(a){const s=this.rules.inline.tag.exec(a);if(s)return!this.lexer.state.inLink&&/^<a /i.test(s[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&/^< \/ a>/i.test(s[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&/^<(pre|code|kbd|script)( \s |>)/i.test(s[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&/^< \/ (pre|code|kbd|script)( \s |>)/i.test(s[0])&&(this.lexer.state.inRawBlock=!1),{type:this.options.sanitize?"text":"html",raw:s[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,text:this.options.sanitize?this.options.sanitizer?this.options.sanitizer(s[0]):j(s[0]):s[0]}}link(a){const s=this.rules.inline.link.exec(a);if(s){const o=s[2].trim();if(!this.options.pedantic&&/^</.test(o)){if(!/> $ /.test(o))return;const I=me(o.slice(0,-1)," \\ ");if((o.length-I.length)%2==0)return}else{const I=function(L,H){if(L.indexOf(H[1])===-1)return-1;const P=L.length;let W=0,G=0;for(;G<P;G++)if(L[G]===" \\ ")G++;else if(L[G]===H[0])W++;else if(L[G]===H[1]&&(W--,W<0))return G;return-1}(s[2],"()");if(I>-1){const L=(s[0].indexOf("!")===0?5:4)+s[1].length+I;s[2]=s[2].substring(0,I),s[0]=s[0].substring(0,L).trim(),s[3]=""}}let g=s[2],T="";if(this.options.pedantic){const I=/^([^'"]*[^ \s ]) \s +(['"])(.*) \2 /.exec(g);I&&(g=I[1],T=I[3])}else T=s[3]?s[3].slice(1,-1):"";return g=g.trim(),/^</.test(g)&&(g=this.options.pedantic&&!/> $ /.test(o)?g.slice(1):g.slice(1,-1)),Ke(s,{href:g&&g.replace(this.rules.inline._escapes," $ 1"),title:T&&T.replace(this.rules.inline._escapes," $ 1")},s[0],this.lexer)}}reflink(a,s){let o;if((o=this.rules.inline.reflink.exec(a))||(o=this.rules.inline.nolink.exec(a))){let g=(o[2]||o[1]).replace(/ \s +/g," ");if(g=s[g.toLowerCase()],!g||!g.href){const T=o[0].charAt(0);return{type:"text",raw:T,text:T}}return Ke(o,g,o[0],this.lexer)}}emStrong(a,s,o=""){let g=this.rules.inline.emStrong.lDelim.exec(a);if(!g||g[3]&&o.match(/[ \p {L} \p {N}]/u))return;const T=g[1]||g[2]||"";if(!T||T&&(o===""||this.rules.inline.punctuation.exec(o))){const I=g[0].length-1;let L,H,P=I,W=0;const G=g[0][0]==="*"?this.rules.inline.emStrong.rDelimAst:this.rules.inline.emStrong.rDelimUnd;for(G.lastIndex=0,s=s.slice(-1*a.length+I);(g=G.exec(s))!=null;){if(L=g[1]||g[2]||g[3]||g[4]||g[5]||g[6],!L)continue;if(H=L.length,g[3]||g[4]){P+=H;continue}if((g[5]||g[6])&&I%3&&!((I+H)%3)){W+=H;continue}if(P-=H,P>0)continue;if(H=Math.min(H,H+P+W),Math.min(I,H)%2){const le=a.slice(1,I+g.index+H);return{type:"em",raw:a.slice(0,I+g.index+H+1),text:le,tokens:this.lexer.inlineTokens(le,[])}}const Q=a.slice(2,I+g.index+H-1);return{type:"strong",raw:a.slice(0,I+g.index+H+1),text:Q,tokens:this.lexer.inlineTokens(Q,[])}}}}codespan(a){const s=this.rules.inline.code.exec(a);if(s){let o=s[2].replace(/ \n /g," ");const g=/[^ ]/.test(o),T=/^ /.test(o)&&/ $ /.test(o);return g&&T&&(o=o.substring(1,o.length-1)),o=j(o,!0),{type:"codespan",raw:s[0],text:o}}}br(a){const s=this.rules.inline.br.exec(a);if(s)return{type:"br",raw:s[0]}}del(a){const s=this.rules.inline.del.exec(a);if(s)return{type:"del",raw:s[0],text:s[2],tokens:this.lexer.inlineTokens(s[2],[])}}autolink(a,s){const o=this.rules.inline.autolink.exec(a);if(o){let g,T;return o[2]==="@"?(g=j(this.options.mangle?s(o[1]):o[1]),T="mailto:"+g):(g=j(o[1]),T=g),{type:"link",raw:o[0],text:g,href:T,tokens:[{type:"text",raw:g,text:g}]}}}url(a,s){let o;if(o=this.rules.inline.url.exec(a)){let g,T;if(o[2]==="@")g=j(this.options.mangle?s(o[0]):o[0]),T="mailto:"+g;else{let I;do I=o[0],o[0]=this.rules.inline._backpedal.exec(o[0])[0];while(I!==o[0]);g=j(o[0]),T=o[1]==="www."?"http://"+g:g}return{type:"link",raw:o[0],text:g,href:T,tokens:[{type:"text",raw:g,text:g}]}}}inlineText(a,s){const o=this.rules.inline.text.exec(a);if(o){let g;return g=this.lexer.state.inRawBlock?this.options.sanitize?th
] ` ).replace("lheading",k.lheading).replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").getRegex()});const x={escape:/^ \\ ([!"# $ %&'()*+, \- ./:;<=>?@ \[ \] \\ ^_ ` { | } ~ ] ) / , autolink : /^<(scheme:[^\s\x00-\x1f<>]*|email)>/ , url : Re , tag : "^comment|^</[a-zA-Z][\\w:-]*\\s*>|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^<![a-zA-Z]+\\s[\\s\\S]*?>|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>" , link : /^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/ , reflink : /^!?\[(label)\]\[(ref)\]/ , nolink : /^!?\[(ref)\](?:\[\])?/ , reflinkSearch : "reflink|nolink(?!\\()" , emStrong : { lDelim : /^(?:\*+(?:([punct_])|[^\s*]))|^_+(?:([punct*])|([^\s_]))/ , rDelimAst : /^[^_*]*?\_\_[^_*]*?\*[^_*]*?(?=\_\_)|[punct_](\*+)(?=[\s]|$)|[^punct*_\s](\*+)(?=[punct_\s]|$)|[punct_\s](\*+)(?=[^punct*_\s])|[\s](\*+)(?=[punct_])|[punct_](\*+)(?=[punct_])|[^punct*_\s](\*+)(?=[^punct*_\s])/ , rDelimUnd : /^[^_*]*?\*\*[^_*]*?\_[^_*]*?(?=\*\*)|[punct*](\_+)(?=[\s]|$)|[^punct*_\s](\_+)(?=[punct*\s]|$)|[punct*\s](\_+)(?=[^punct*_\s])|[\s](\_+)(?=[punct*])|[punct*](\_+)(?=[punct*])/ } , code : /^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/ , br : /^( {2,}|\\)\n(?!\s*$)/ , del : Re , text : /^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/ , punctuation : /^([\spunctuation])/ } ; function lt ( c ) { return c . replace ( /---/g , "\u2014" ) . replace ( /--/g , "\u2013" ) . replace ( /(^|[-\u2014/(\[{"\s])'/g , "$1\u2018" ) . replace ( /'/g , "\u2019" ) . replace ( /(^|[-\u2014/(\[{\u2018\s])"/g , "$1\u201C" ) . replace ( /"/g , "\u201D" ) . replace ( /\.{3}/g , "\u2026" ) } function st ( c ) { let a , s , o = "" ; const g = c . length ; for ( a = 0 ; a < g ; a ++ ) s = c . charCodeAt ( a ) , Math . random ( ) > . 5 && ( s = "x" + s . toString ( 16 ) ) , o += "&#" + s + ";" ; return o } x . _punctuation = "!\"#$%&'()+\\-.,/:;<=>?@\\[\\]`^{|}~" , x . punctuation = h ( x . punctuation ) . replace ( /punctuation/g , x . _punctuation ) . getRegex ( ) , x . blockSkip = /\[[^\]]*?\]\([^\)]*?\)|`[^`]*?`|<[^>]*?>/g , x . escapedEmSt = /\\\*|\\_/g , x . _comment = h ( k . _comment ) . replace ( "(?:-->|$)" , "-->" ) . getRegex ( ) , x . emStrong . lDelim = h ( x . emStrong . lDelim ) . replace ( /punct/g , x . _punctuation ) . getRegex ( ) , x . emStrong . rDelimAst = h ( x . emStrong . rDelimAst , "g" ) . replace ( /punct/g , x . _punctuation ) . getRegex ( ) , x . emStrong . rDelimUnd = h ( x . emStrong . rDelimUnd , "g" ) . replace ( /punct/g , x . _punctuation ) . getRegex ( ) , x . _escapes = /\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/g , x . _scheme = /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/ , x . _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])?)+(?![-_])/ , x . autolink = h ( x . autolink ) . replace ( "scheme" , x . _scheme ) . replace ( "email" , x . _email ) . getRegex ( ) , x . _attribute = /\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/ , x . tag = h ( x . tag ) . replace ( "comment" , x . _comment ) . replace ( "attribute" , x . _attribute ) . getRegex ( ) , x . _label = /(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/ , x . _href = /<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/ , x . _title = /"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/ , x . link = h ( x . link ) . replace ( "label" , x . _label ) . replace ( "href" , x . _href ) . replace ( "title" , x . _title ) . getRegex ( ) , x . reflink = h ( x . reflink ) . replace ( "label" , x . _label ) . replace ( "ref" , k . _label ) . getRegex ( ) , x . nolink = h ( x . nolink ) . replace ( "ref" , k . _label ) . getRegex ( ) , x . reflinkSearch = h ( x . reflinkSearch , "g" ) . replace ( "reflink" , x . reflink ) . replace ( "nolink" , x . nolink ) . getRegex ( ) , x . normal = De ( { } , x ) , x . pedantic = De ( { } , x . normal , { strong : { start : /^__|\*\*/ , middle : /^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/ , endAst : /\*\*(?!\*)/g , endUnd : /__(?!_)/g } , em : { start : /^_|\*/ , middle : /^()\*(?=\S)([\s\S]*?\S)\*(?!\*)|^_(?=\S)([\s\S]*?\S)_(?!_)/ , endAst : /\*(?!\*)/g , endUnd : /_(?!_)/g } , link : h ( /^!?\[(label)\]\((.*?)\)/ ) . replace ( "label" , x . _label ) . getRegex ( ) , reflink : h ( /^!?\[(label)\]\s*\[([^\]]*)\]/ ) . replace ( "label" , x . _label ) . getRegex ( ) } ) , x . gfm = De ( { } , x . normal , { escape : h ( x . 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~])\1(?=[^~]|$)/ , text : / ^ ( [ ` ~ ] + | [ ^ ` ~ ] ) ( ? : ( ? =
` ).replace(/ \t /g," "),this.blockTokens(a,this.tokens);s=this.inlineQueue.shift();)this.inlineTokens(s.src,s.tokens);return this.tokens}blockTokens(a,s=[]){let o,g,T,I;for(this.options.pedantic&&(a=a.replace(/^ + $ /gm,""));a;)if(!(this.options.extensions&&this.options.extensions.block&&this.options.extensions.block.some(L=>!!(o=L.call({lexer:this},a,s))&&(a=a.substring(o.raw.length),s.push(o),!0))))if(o=this.tokenizer.space(a))a=a.substring(o.raw.length),o.raw.length===1&&s.length>0?s[s.length-1].raw+= `
` :s.push(o);else if(o=this.tokenizer.code(a))a=a.substring(o.raw.length),g=s[s.length-1],!g||g.type!=="paragraph"&&g.type!=="text"?s.push(o):(g.raw+= `
` +o.raw,g.text+= `
` +o.text,this.inlineQueue[this.inlineQueue.length-1].src=g.text);else if(o=this.tokenizer.fences(a))a=a.substring(o.raw.length),s.push(o);else if(o=this.tokenizer.heading(a))a=a.substring(o.raw.length),s.push(o);else if(o=this.tokenizer.hr(a))a=a.substring(o.raw.length),s.push(o);else if(o=this.tokenizer.blockquote(a))a=a.substring(o.raw.length),s.push(o);else if(o=this.tokenizer.list(a))a=a.substring(o.raw.length),s.push(o);else if(o=this.tokenizer.html(a))a=a.substring(o.raw.length),s.push(o);else if(o=this.tokenizer.def(a))a=a.substring(o.raw.length),g=s[s.length-1],!g||g.type!=="paragraph"&&g.type!=="text"?this.tokens.links[o.tag]||(this.tokens.links[o.tag]={href:o.href,title:o.title}):(g.raw+= `
` +o.raw,g.text+= `
` +o.raw,this.inlineQueue[this.inlineQueue.length-1].src=g.text);else if(o=this.tokenizer.table(a))a=a.substring(o.raw.length),s.push(o);else if(o=this.tokenizer.lheading(a))a=a.substring(o.raw.length),s.push(o);else{if(T=a,this.options.extensions&&this.options.extensions.startBlock){let L=1/0;const H=a.slice(1);let P;this.options.extensions.startBlock.forEach(function(W){P=W.call({lexer:this},H),typeof P=="number"&&P>=0&&(L=Math.min(L,P))}),L<1/0&&L>=0&&(T=a.substring(0,L+1))}if(this.state.top&&(o=this.tokenizer.paragraph(T)))g=s[s.length-1],I&&g.type==="paragraph"?(g.raw+= `
` +o.raw,g.text+= `
` +o.text,this.inlineQueue.pop(),this.inlineQueue[this.inlineQueue.length-1].src=g.text):s.push(o),I=T.length!==a.length,a=a.substring(o.raw.length);else if(o=this.tokenizer.text(a))a=a.substring(o.raw.length),g=s[s.length-1],g&&g.type==="text"?(g.raw+= `
` +o.raw,g.text+= `
` +o.text,this.inlineQueue.pop(),this.inlineQueue[this.inlineQueue.length-1].src=g.text):s.push(o);else if(a){const L="Infinite loop on byte: "+a.charCodeAt(0);if(this.options.silent){console.error(L);break}throw new Error(L)}}return this.state.top=!0,s}inline(a,s){this.inlineQueue.push({src:a,tokens:s})}inlineTokens(a,s=[]){let o,g,T,I,L,H,P=a;if(this.tokens.links){const W=Object.keys(this.tokens.links);if(W.length>0)for(;(I=this.tokenizer.rules.inline.reflinkSearch.exec(P))!=null;)W.includes(I[0].slice(I[0].lastIndexOf("[")+1,-1))&&(P=P.slice(0,I.index)+"["+Be("a",I[0].length-2)+"]"+P.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;(I=this.tokenizer.rules.inline.blockSkip.exec(P))!=null;)P=P.slice(0,I.index)+"["+Be("a",I[0].length-2)+"]"+P.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);for(;(I=this.tokenizer.rules.inline.escapedEmSt.exec(P))!=null;)P=P.slice(0,I.index)+"++"+P.slice(this.tokenizer.rules.inline.escapedEmSt.lastIndex);for(;a;)if(L||(H=""),L=!1,!(this.options.extensions&&this.options.extensions.inline&&this.options.extensions.inline.some(W=>!!(o=W.call({lexer:this},a,s))&&(a=a.substring(o.raw.length),s.push(o),!0))))if(o=this.tokenizer.escape(a))a=a.substring(o.raw.length),s.push(o);else if(o=this.tokenizer.tag(a))a=a.substring(o.raw.length),g=s[s.length-1],g&&o.type==="text"&&g.type==="text"?(g.raw+=o.raw,g.text+=o.text):s.push(o);else if(o=this.tokenizer.link(a))a=a.substring(o.raw.length),s.push(o);else if(o=this.tokenizer.reflink(a,this.tokens.links))a=a.substring(o.raw.length),g=s[s.length-1],g&&o.type==="text"&&g.type==="text"?(g.raw+=o.raw,g.text+=o.text):s.push(o);else if(o=this.tokenizer.emStrong(a,P,H))a=a.substring(o.raw.length),s.push(o);else if(o=this.tokenizer.codespan(a))a=a.substring(o.raw.length),s.push(o);else if(o=this.tokenizer.br(a))a=a.substring(o.raw.length),s.push(o);else if(o=this.tokenizer.del(a))a=a.substring(o.raw.length),s.push(o);else if(o=this.tokenizer.autolink(a,st))a=a.substring(o.raw.length),s.push(o);else if(this.state.inLink||!(o=this.tokenizer.url(a,st))){if(T=a,this.options.extensions&&this.options.extensions.startInline){let W=1/0;const G=a.slice(1);let Q;this.options.extensions.startInline.forEach(function(le){Q=le.call({lexer:this},G),typeof Q=="number"&&Q>=0&&(W=Math.min(W,Q))}),W<1/0&&W>=0&&(T=a.substring(0,W+1))}if(o=this.tokenizer.inlineText(T,lt))a=a.substring(o.raw.length),o.raw.slice(-1)!=="_"&&(H=o.raw.slice(-1)),L=!0,g=s[s.length-1],g&&g.type==="text"?(g.raw+=o.raw,g.text+=o.text):s.push(o);else if(a){const W="Infinite loop on byte: "+a.charCodeAt(0);if(this.options.silent){console.error(W);break}throw new Error(W)}}else a=a.substring(o.raw.length),s.push(o);return s}}class nt{constructor(a){this.options=a||d}code(a,s,o){const g=(s||"").match(/ \S */)[0];if(this.options.highlight){const T=this.options.highlight(a,g);T!=null&&T!==a&&(o=!0,a=T)}return a=a.replace(/ \n $ /,"")+ `
` ,g?'<pre><code class="'+this.options.langPrefix+j(g,!0)+'">'+(o?a:j(a,!0))+ ` < / c o d e > < / p r e >
` :"<pre><code>"+(o?a:j(a,!0))+ ` < / c o d e > < / p r e >
` }blockquote(a){return ` < blockquote >
` +a+ ` < / b l o c k q u o t e >
` }html(a){return a}heading(a,s,o,g){return this.options.headerIds?"<h"+s+' id="'+this.options.headerPrefix+g.slug(o)+'">'+a+"</h"+s+ ` >
` :"<h"+s+">"+a+"</h"+s+ ` >
` }hr(){return this.options.xhtml? ` < hr / >
` : ` < hr >
` }list(a,s,o){const g=s?"ol":"ul";return"<"+g+(s&&o!==1?' start="'+o+'"':"")+ ` >
` +a+"</"+g+ ` >
` }listitem(a){return"<li>"+a+ ` < / l i >
` }checkbox(a){return"<input "+(a?'checked="" ':"")+'disabled="" type="checkbox"'+(this.options.xhtml?" /":"")+"> "}paragraph(a){return"<p>"+a+ ` < / p >
` }table(a,s){return s&&(s="<tbody>"+s+"</tbody>"), ` < table >
< thead >
` +a+ ` < / t h e a d >
` +s+ ` < / t a b l e >
` }tablerow(a){return ` < tr >
` +a+ ` < / t r >
` }tablecell(a,s){const o=s.header?"th":"td";return(s.align?"<"+o+' align="'+s.align+'">':"<"+o+">")+a+"</"+o+ ` >
` }strong(a){return"<strong>"+a+"</strong>"}em(a){return"<em>"+a+"</em>"}codespan(a){return"<code>"+a+"</code>"}br(){return this.options.xhtml?"<br/>":"<br>"}del(a){return"<del>"+a+"</del>"}link(a,s,o){if((a=tt(this.options.sanitize,this.options.baseUrl,a))===null)return o;let g='<a href="'+j(a)+'"';return s&&(g+=' title="'+s+'"'),g+=">"+o+"</a>",g}image(a,s,o){if((a=tt(this.options.sanitize,this.options.baseUrl,a))===null)return o;let g='<img src="'+a+'" alt="'+o+'"';return s&&(g+=' title="'+s+'"'),g+=this.options.xhtml?"/>":">",g}text(a){return a}}class ot{strong(a){return a}em(a){return a}codespan(a){return a}del(a){return a}html(a){return a}text(a){return a}link(a,s,o){return""+o}image(a,s,o){return""+o}br(){return""}}class It{constructor(){this.seen={}}serialize(a){return a.toLowerCase().trim().replace(/<[! \/ a-z].*?>/gi,"").replace(/[ \u 2000- \u 206F \u 2E00- \u 2E7F \\ '!"# $ %&()*+,./:;<=>?@[ \] ^ ` { | } ~ ] / g , "" ) . replace ( /\s/g , "-" ) } getNextSafeSlug ( a , s ) { let o = a , g = 0 ; if ( this . seen . hasOwnProperty ( o ) ) { g = this . seen [ a ] ; do g ++ , o = a + "-" + g ; while ( this . seen . hasOwnProperty ( o ) ) } return s || ( this . seen [ a ] = g , this . seen [ o ] = 0 ) , o } slug ( a , s = { } ) { const o = this . serialize ( a ) ; return this . getNextSafeSlug ( o , s . dryrun ) } } class at { constructor ( a ) { this . options = a || d , this . options . renderer = this . options . renderer || new nt , this . renderer = this . options . renderer , this . renderer . options = this . options , this . textRenderer = new ot , this . slugger = new It } static parse ( a , s ) { return new at ( s ) . parse ( a ) } static parseInline ( a , s ) { return new at ( s ) . parseInline ( a ) } parse ( a , s = ! 0 ) { let o , g , T , I , L , H , P , W , G , Q , le , ce , ue , Te , se , Oe , ge , Ae , Ge , Ue = "" ; const Ct = a . length ; for ( o = 0 ; o < Ct ; o ++ ) if ( Q = a [ o ] , this . options . extensions && this . options . extensions . renderers && this . options . extensions . renderers [ Q . type ] && ( Ge = this . options . extensions . renderers [ Q . type ] . call ( { parser : this } , Q ) , Ge !== ! 1 || ! [ "space" , "hr" , "heading" , "code" , "table" , "blockquote" , "list" , "html" , "paragraph" , "text" ] . includes ( Q . type ) ) ) Ue += Ge || "" ; else switch ( Q . type ) { case "space" : continue ; case "hr" : Ue += this . renderer . hr ( ) ; continue ; case "heading" : Ue += this . renderer . heading ( this . parseInline ( Q . tokens ) , Q . depth , X ( this . parseInline ( Q . tokens , this . textRenderer ) ) , this . slugger ) ; continue ; case "code" : Ue += this . renderer . code ( Q . text , Q . lang , Q . escaped ) ; continue ; case "table" : for ( W = "" , P = "" , I = Q . header . length , g = 0 ; g < I ; g ++ ) P += this . renderer . tablecell ( this . parseInline ( Q . header [ g ] . tokens ) , { header : ! 0 , align : Q . align [ g ] } ) ; for ( W += this . renderer . tablerow ( P ) , G = "" , I = Q . rows . length , g = 0 ; g < I ; g ++ ) { for ( H = Q . rows [ g ] , P = "" , L = H . length , T = 0 ; T < L ; T ++ ) P += this . renderer . tablecell ( this . parseInline ( H [ T ] . tokens ) , { header : ! 1 , align : Q . align [ T ] } ) ; G += this . renderer . tablerow ( P ) } Ue += this . renderer . table ( W , G ) ; continue ; case "blockquote" : G = this . parse ( Q . tokens ) , Ue += this . renderer . blockquote ( G ) ; continue ; case "list" : for ( le = Q . ordered , ce = Q . start , ue = Q . loose , I = Q . items . length , G = "" , g = 0 ; g < I ; g ++ ) se = Q . items [ g ] , Oe = se . checked , ge = se . task , Te = "" , se . task && ( Ae = this . renderer . checkbox ( Oe ) , ue ? se . tokens . length > 0 && se . tokens [ 0 ] . type === "paragraph" ? ( se . tokens [ 0 ] . text = Ae + " " + se . tokens [ 0 ] . text , se . tokens [ 0 ] . tokens && se . tokens [ 0 ] . tokens . length > 0 && se . tokens [ 0 ] . tokens [ 0 ] . type === "text" && ( se . tokens [ 0 ] . tokens [ 0 ] . text = Ae + " " + se . tokens [ 0 ] . tokens [ 0 ] . text ) ) : se . tokens . unshift ( { type : "text" , text : Ae } ) : Te += Ae ) , Te += this . parse ( se . tokens , ue ) , G += this . renderer . listitem ( Te , ge , Oe ) ; Ue += this . renderer . list ( G , le , ce ) ; continue ; case "html" : Ue += this . renderer . html ( Q . text ) ; continue ; case "paragraph" : Ue += this . renderer . paragraph ( this . parseInline ( Q . tokens ) ) ; continue ; case "text" : for ( G = Q . tokens ? this . parseInline ( Q . tokens ) : Q . text ; o + 1 < Ct && a [ o + 1 ] . type === "text" ; ) Q = a [ ++ o ] , G += `
` +(Q.tokens?this.parseInline(Q.tokens):Q.text);Ue+=s?this.renderer.paragraph(G):G;continue;default:{const Ot='Token with "'+Q.type+'" type was not found.';if(this.options.silent)return void console.error(Ot);throw new Error(Ot)}}return Ue}parseInline(a,s){s=s||this.renderer;let o,g,T,I="";const L=a.length;for(o=0;o<L;o++)if(g=a[o],this.options.extensions&&this.options.extensions.renderers&&this.options.extensions.renderers[g.type]&&(T=this.options.extensions.renderers[g.type].call({parser:this},g),T!==!1||!["escape","html","link","image","strong","em","codespan","br","del","text"].includes(g.type)))I+=T||"";else switch(g.type){case"escape":case"text":I+=s.text(g.text);break;case"html":I+=s.html(g.text);break;case"link":I+=s.link(g.href,g.title,this.parseInline(g.tokens,s));break;case"image":I+=s.image(g.href,g.title,g.text);break;case"strong":I+=s.strong(this.parseInline(g.tokens,s));break;case"em":I+=s.em(this.parseInline(g.tokens,s));break;case"codespan":I+=s.codespan(g.text);break;case"br":I+=s.br();break;case"del":I+=s.del(this.parseInline(g.tokens,s));break;default:{const H='Token with "'+g.type+'" type was not found.';if(this.options.silent)return void console.error(H);throw new Error(H)}}return I}}function J(c,a,s){if(c==null)throw new Error("marked(): input parameter is undefined or null");if(typeof c!="string")throw new Error("marked(): input parameter is of type "+Object.prototype.toString.call(c)+", string expected");if(typeof a=="function"&&(s=a,a=null),Ne(a=De({},J.defaults,a||{})),s){const o=a.highlight;let g;try{g=Le.lex(c,a)}catch(L){return s(L)}const T=function(L){let H;if(!L)try{a.walkTokens&&J.walkTokens(g,a.walkTokens),H=at.parse(g,a)}catch(P){L=P}return a.highlight=o,L?s(L):s(null,H)};if(!o||o.length<3||(delete a.highlight,!g.length))return T();let I=0;return J.walkTokens(g,function(L){L.type==="code"&&(I++,setTimeout(()=>{o(L.text,L.lang,function(H,P){if(H)return T(H);P!=null&&P!==L.text&&(L.text=P,L.escaped=!0),I--,I===0&&T()})},0))}),void(I===0&&T())}try{const o=Le.lex(c,a);return a.walkTokens&&J.walkTokens(o,a.walkTokens),at.parse(o,a)}catch(o){if(o.message+= `
Please report this to https : //github.com/markedjs/marked.`,a.silent)return"<p>An error occurred:</p><pre>"+j(o.message+"",!0)+"</pre>";throw o}}J.options=J.setOptions=function(c){var a;return De(J.defaults,c),a=J.defaults,d=a,J},J.getDefaults=r,J.defaults=d,J.use=function(...c){const a=De({},...c),s=J.defaults.extensions||{renderers:{},childTokens:{}};let o;c.forEach(g=>{if(g.extensions&&(o=!0,g.extensions.forEach(T=>{if(!T.name)throw new Error("extension name required");if(T.renderer){const I=s.renderers?s.renderers[T.name]:null;s.renderers[T.name]=I?function(...L){let H=T.renderer.apply(this,L);return H===!1&&(H=I.apply(this,L)),H}:T.renderer}if(T.tokenizer){if(!T.level||T.level!=="block"&&T.level!=="inline")throw new Error("extension level must be 'block' or 'inline'");s[T.level]?s[T.level].unshift(T.tokenizer):s[T.level]=[T.tokenizer],T.start&&(T.level==="block"?s.startBlock?s.startBlock.push(T.start):s.startBlock=[T.start]:T.level==="inline"&&(s.startInline?s.startInline.push(T.start):s.startInline=[T.start]))}T.childTokens&&(s.childTokens[T.name]=T.childTokens)})),g.renderer){const T=J.defaults.renderer||new nt;for(const I in g.renderer){const L=T[I];T[I]=(...H)=>{let P=g.renderer[I].apply(T,H);return P===!1&&(P=L.apply(T,H)),P}}a.renderer=T}if(g.tokenizer){const T=J.defaults.tokenizer||new z;for(const I in g.tokenizer){const L=T[I];T[I]=(...H)=>{let P=g.tokenizer[I].apply(T,H);return P===!1&&(P=L.apply(T,H)),P}}a.tokenizer=T}if(g.walkTokens){const T=J.defaults.walkTokens;a.walkTokens=function(I){g.walkTokens.call(this,I),T&&T.call(this,I)}}o&&(a.extensions=s),J.setOptions(a)})},J.walkTokens=function(c,a){for(const s of c)switch(a.call(J,s),s.type){case"table":for(const o of s.header)J.walkTokens(o.tokens,a);for(const o of s.rows)for(const g of o)J.walkTokens(g.tokens,a);break;case"list":J.walkTokens(s.items,a);break;default:J.defaults.extensions&&J.defaults.extensions.childTokens&&J.defaults.extensions.childTokens[s.type]?J.defaults.extensions.childTokens[s.type].forEach(function(o){J.walkTokens(s[o],a)}):s.tokens&&J.walkTokens(s.tokens,a)}},J.parseInline=function(c,a){if(c==null)throw new Error("marked.parseInline(): input parameter is undefined or null");if(typeof c!="string")throw new Error("marked.parseInline(): input parameter is of type "+Object.prototype.toString.call(c)+", string expected");Ne(a=De({},J.defaults,a||{}));try{const s=Le.lexInline(c,a);return a.walkTokens&&J.walkTokens(s,a.walkTokens),at.parseInline(s,a)}catch(s){if(s.message+=`
Please report this to https : //github.com/markedjs/marked.`,a.silent)return"<p>An error occurred:</p><pre>"+j(s.message+"",!0)+"</pre>";throw s}},J.Parser=at,J.parser=at.parse,J.Renderer=nt,J.TextRenderer=ot,J.Lexer=Le,J.lexer=Le.lex,J.Tokenizer=z,J.Slugger=It,J.parse=J;/*!
* The reveal . js markdown plugin . Handles parsing of
* markdown inside of presentations as well as loading
* of external markdown documents .
* /const ae="__SCRIPT_END__",_=/ \ [ \ s * ( ( \ d * ) : ) ? \ s * ( [ \ s \ d , | - ] * ) \ ] / , u = { "&" : "&" , "<" : "<" , ">" : ">" , '"' : """ , "'" : "'" } ; return ( ) => { let c ; function a ( W ) { let G = ( W . querySelector ( "[data-template]" ) || W . querySelector ( "script" ) || W ) . textContent ; G = G . replace ( new RegExp ( ae , "g" ) , "<\/script>" ) ; const Q = G . match ( /^\n?(\s*)/ ) [ 1 ] . length , le = G . match ( /^\n?(\t*)/ ) [ 1 ] . length ; return le > 0 ? G = G . replace ( new RegExp ( "\\n?\\t{" + le + "}(.*)" , "g" ) , function ( ce , ue ) { return `
` +ue}):Q>1&&(G=G.replace(new RegExp(" \\ n? {"+Q+"}(.*)","g"),function(ce,ue){return `
` +ue})),G}function s(W){const G=W.attributes,Q=[];for(let le=0,ce=G.length;le<ce;le++){const ue=G[le].name,Te=G[le].value;/data \- (markdown|separator|vertical|notes)/gi.test(ue)||(Te?Q.push(ue+'="'+Te+'"'):Q.push(ue))}return Q.join(" ")}function o(W){const G=c.getConfig().markdown;return(W=W||{}).separator=W.separator||(G==null?void 0:G.separator)|| ` \ r ?
-- - \ r ?
` ,W.verticalSeparator=W.verticalSeparator||(G==null?void 0:G.verticalSeparator)||null,W.notesSeparator=W.notesSeparator||(G==null?void 0:G.notesSeparator)||"^s*notes?:",W.attributes=W.attributes||"",W}function g(W,G){G=o(G);const Q=W.split(new RegExp(G.notesSeparator,"mgi"));return Q.length===2&&(W=Q[0]+'<aside class="notes">'+J(Q[1].trim())+"</aside>"),'<script type="text/template">'+(W=W.replace(/< \/ script>/g,ae))+"< \/ script>"}function T(W,G){G=o(G);const Q=new RegExp(G.separator+(G.verticalSeparator?"|"+G.verticalSeparator:""),"mg"),le=new RegExp(G.separator);let ce,ue,Te,se=0,Oe=!0,ge=[];for(;ce=Q.exec(W);)ue=le.test(ce[0]),!ue&&Oe&&ge.push([]),Te=W.substring(se,ce.index),ue&&Oe?ge.push(Te):ge[ge.length-1].push(Te),se=Q.lastIndex,Oe=ue;(Oe?ge:ge[ge.length-1]).push(W.substring(se));let Ae="";for(let Ge=0,Ue=ge.length;Ge<Ue;Ge++)ge[Ge]instanceof Array?(Ae+="<section "+G.attributes+">",ge[Ge].forEach(function(Ct){Ae+="<section data-markdown>"+g(Ct,G)+"</section>"}),Ae+="</section>"):Ae+="<section "+G.attributes+" data-markdown>"+g(ge[Ge],G)+"</section>";return Ae}function I(W){return new Promise(function(G){const Q=[];[].slice.call(W.querySelectorAll("section[data-markdown]:not([data-markdown-parsed])")).forEach(function(le,ce){le.getAttribute("data-markdown").length?Q.push(function(ue){return new Promise(function(Te,se){const Oe=new XMLHttpRequest,ge=ue.getAttribute("data-markdown"),Ae=ue.getAttribute("data-charset");Ae!==null&&Ae!==""&&Oe.overrideMimeType("text/html; charset="+Ae),Oe.onreadystatechange=function(Ge,Ue){Ue.readyState===4&&(Ue.status>=200&&Ue.status<300||Ue.status===0?Te(Ue,ge):se(Ue,ge))}.bind(this,ue,Oe),Oe.open("GET",ge,!0);try{Oe.send()}catch(Ge){console.warn("Failed to get the Markdown file "+ge+". Make sure that the presentation and the file are served by a HTTP server and the file can be found there. "+Ge),Te(Oe,ge)}})}(le).then(function(ue,Te){le.outerHTML=T(ue.responseText,{separator:le.getAttribute("data-separator"),verticalSeparator:le.getAttribute("data-separator-vertical"),notesSeparator:le.getAttribute("data-separator-notes"),attributes:s(le)})},function(ue,Te){le.outerHTML='<section data-state="alert">ERROR: The attempt to fetch '+Te+" failed with HTTP status "+ue.status+".Check your browser's JavaScript console for more details.<p>Remember that you need to serve the presentation HTML from a HTTP server.</p></section>"})):le.outerHTML=T(a(le),{separator:le.getAttribute("data-separator"),verticalSeparator:le.getAttribute("data-separator-vertical"),notesSeparator:le.getAttribute("data-separator-notes"),attributes:s(le)})}),Promise.all(Q).then(G)})}function L(W,G,Q){const le=new RegExp(Q,"mg"),ce=new RegExp('([^"= ]+?)="([^"]+?)"|(data-[^"= ]+?)(?=[" ])',"mg");let ue,Te,se=W.nodeValue;if(ue=le.exec(se)){const Oe=ue[1];for(se=se.substring(0,ue.index)+se.substring(le.lastIndex),W.nodeValue=se;Te=ce.exec(Oe);)Te[2]?G.setAttribute(Te[1],Te[2]):G.setAttribute(Te[3],"");return!0}return!1}function H(W,G,Q,le,ce){if(G!==null&&G.childNodes!==void 0&&G.childNodes.length>0){let ue=G;for(let Te=0;Te<G.childNodes.length;Te++){const se=G.childNodes[Te];if(Te>0){let ge=Te-1;for(;ge>=0;){const Ae=G.childNodes[ge];if(typeof Ae.setAttribute=="function"&&Ae.tagName!=="BR"){ue=Ae;break}ge-=1}}let Oe=W;se.nodeName==="section"&&(Oe=se,ue=se),typeof se.setAttribute!="function"&&se.nodeType!==Node.COMMENT_NODE||H(Oe,se,ue,le,ce)}}G.nodeType===Node.COMMENT_NODE&&L(G,Q,le)===!1&&L(G,W,ce)}function P(){const W=c.getRevealElement().querySelectorAll("[data-markdown]:not([data-markdown-parsed])");return[].slice.call(W).forEach(function(G){G.setAttribute("data-markdown-parsed",!0);const Q=G.querySelector("aside.notes"),le=a(G);G.innerHTML=J(le),H(G,G,null,G.getAttribute("data-element-attributes")||G.parentNode.getAttribute("data-element-attributes")||" \\ .element \\ s*?(.+?) $ ",G.getAttribute("data-attributes")||G.parentNode.getAttribute("data-attributes")||" \\ .slide: \\ s*?( \\ S.+?) $ "),Q&&G.appendChild(Q)}),Promise.resolve()}return{id:"markdown",init:function(W){c=W;let{renderer:G,animateLists:Q,...le}=c.getConfig().markdown||{
` )}}}fences(_){const u=this.rules.block.fences.exec(_);if(u){const c=u[0],a=function(s,o){const g=s.match(/^( \s +)(?: ` ` ` ) / ) ; if ( g === null ) return o ; const T = g [ 1 ] ; return o . split ( `
` ).map(I=>{const L=I.match(/^ \s +/);if(L===null)return I;const[H]=L;return H.length>=T.length?I.slice(T.length):I}).join( `
` )}(c,u[3]||"");return{type:"code",raw:c,lang:u[2]?u[2].trim():u[2],text:a}}}heading(_){const u=this.rules.block.heading.exec(_);if(u){let c=u[2].trim();if(/# $ /.test(c)){const s=me(c,"#");this.options.pedantic?c=s.trim():s&&!/ $ /.test(s)||(c=s.trim())}const a={type:"heading",raw:u[0],depth:u[1].length,text:c,tokens:[]};return this.lexer.inline(a.text,a.tokens),a}}hr(_){const u=this.rules.block.hr.exec(_);if(u)return{type:"hr",raw:u[0]}}blockquote(_){const u=this.rules.block.blockquote.exec(_);if(u){const c=u[0].replace(/^ *> ?/gm,"");return{type:"blockquote",raw:u[0],tokens:this.lexer.blockTokens(c,[]),text:c}}}list(_){let u=this.rules.block.list.exec(_);if(u){let c,a,s,o,g,T,I,L,H,P,W,G,Q=u[1].trim();const le=Q.length>1,ce={type:"list",raw:"",ordered:le,start:le?+Q.slice(0,-1):"",loose:!1,items:[]};Q=le? ` \ \ d { 1 , 9 } \ \ $ { Q . slice ( - 1 ) } ` : ` \ \ $ { Q } ` ,this.options.pedantic&&(Q=le?Q:"[*+-]");const ue=new RegExp( ` ^ ( { 0 , 3 } $ { Q } ) ( ( ? : [ ^ \ \ n ] * ) ? ( ? : \ \ n | $ ) ) ` );for(;_&&(G=!1,u=ue.exec(_))&&!this.rules.block.hr.test(_);){if(c=u[0],_=_.substring(c.length),L=u[2].split( `
` ,1)[0],H=_.split( `
` ,1)[0],this.options.pedantic?(o=2,W=L.trimLeft()):(o=u[2].search(/[^ ]/),o=o>4?1:o,W=L.slice(o),o+=u[1].length),T=!1,!L&&/^ * $ /.test(H)&&(c+=H+ `
` ,_=_.substring(H.length+1),G=!0),!G){const se=new RegExp( ` ^ { 0 , $ { Math . min ( 3 , o - 1 ) } } ( ? : [ * + - ] | \ \ d { 1 , 9 } [ . ) ] ) ` );for(;_&&(P=_.split( `
` ,1)[0],L=P,this.options.pedantic&&(L=L.replace(/^ {1,4}(?=( {4})*[^ ])/g," ")),!se.test(L));){if(L.search(/[^ ]/)>=o||!L.trim())W+= `
` +L.slice(o);else{if(T)break;W+= `
` +L}T||L.trim()||(T=!0),c+=P+ `
` ,_=_.substring(P.length+1)}}ce.loose||(I?ce.loose=!0:/ \n * \n * $ /.test(c)&&(I=!0)),this.options.gfm&&(a=/^ \[ [ xX] \] /.exec(W),a&&(s=a[0]!=="[ ] ",W=W.replace(/^ \[ [ xX] \] +/,""))),ce.items.push({type:"list_item",raw:c,task:!!a,checked:s,loose:!1,text:W}),ce.raw+=c}ce.items[ce.items.length-1].raw=c.trimRight(),ce.items[ce.items.length-1].text=W.trimRight(),ce.raw=ce.raw.trimRight();const Te=ce.items.length;for(g=0;g<Te;g++){this.lexer.state.top=!1,ce.items[g].tokens=this.lexer.blockTokens(ce.items[g].text,[]);const se=ce.items[g].tokens.filter(ge=>ge.type==="space"),Oe=se.every(ge=>{const Ae=ge.raw.split("");let Ge=0;for(const Ue of Ae)if(Ue=== `
` &&(Ge+=1),Ge>1)return!0;return!1});!ce.loose&&se.length&&Oe&&(ce.loose=!0,ce.items[g].loose=!0)}return ce}}html(_){const u=this.rules.block.html.exec(_);if(u){const c={type:"html",raw:u[0],pre:!this.options.sanitizer&&(u[1]==="pre"||u[1]==="script"||u[1]==="style"),text:u[0]};return this.options.sanitize&&(c.type="paragraph",c.text=this.options.sanitizer?this.options.sanitizer(u[0]):j(u[0]),c.tokens=[],this.lexer.inline(c.text,c.tokens)),c}}def(_){const u=this.rules.block.def.exec(_);if(u)return u[3]&&(u[3]=u[3].substring(1,u[3].length-1)),{type:"def",tag:u[1].toLowerCase().replace(/ \s +/g," "),raw:u[0],href:u[2],title:u[3]}}table(_){const u=this.rules.block.table.exec(_);if(u){const c={type:"table",header:Pe(u[1]).map(a=>({text:a})),align:u[2].replace(/^ *| \| * $ /g,"").split(/ * \| */),rows:u[3]&&u[3].trim()?u[3].replace(/ \n [ \t ]* $ /,"").split( `
` ):[]};if(c.header.length===c.align.length){c.raw=u[0];let a,s,o,g,T=c.align.length;for(a=0;a<T;a++)/^ *-+: * $ /.test(c.align[a])?c.align[a]="right":/^ *:-+: * $ /.test(c.align[a])?c.align[a]="center":/^ *:-+ * $ /.test(c.align[a])?c.align[a]="left":c.align[a]=null;for(T=c.rows.length,a=0;a<T;a++)c.rows[a]=Pe(c.rows[a],c.header.length).map(I=>({text:I}));for(T=c.header.length,s=0;s<T;s++)c.header[s].tokens=[],this.lexer.inlineTokens(c.header[s].text,c.header[s].tokens);for(T=c.rows.length,s=0;s<T;s++)for(g=c.rows[s],o=0;o<g.length;o++)g[o].tokens=[],this.lexer.inlineTokens(g[o].text,g[o].tokens);return c}}}lheading(_){const u=this.rules.block.lheading.exec(_);if(u){const c={type:"heading",raw:u[0],depth:u[2].charAt(0)==="="?1:2,text:u[1],tokens:[]};return this.lexer.inline(c.text,c.tokens),c}}paragraph(_){const u=this.rules.block.paragraph.exec(_);if(u){const c={type:"paragraph",raw:u[0],text:u[1].charAt(u[1].length-1)=== `
` ?u[1].slice(0,-1):u[1],tokens:[]};return this.lexer.inline(c.text,c.tokens),c}}text(_){const u=this.rules.block.text.exec(_);if(u){const c={type:"text",raw:u[0],text:u[0],tokens:[]};return this.lexer.inline(c.text,c.tokens),c}}escape(_){const u=this.rules.inline.escape.exec(_);if(u)return{type:"escape",raw:u[0],text:j(u[1])}}tag(_){const u=this.rules.inline.tag.exec(_);if(u)return!this.lexer.state.inLink&&/^<a /i.test(u[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&/^< \/ a>/i.test(u[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&/^<(pre|code|kbd|script)( \s |>)/i.test(u[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&/^< \/ (pre|code|kbd|script)( \s |>)/i.test(u[0])&&(this.lexer.state.inRawBlock=!1),{type:this.options.sanitize?"text":"html",raw:u[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,text:this.options.sanitize?this.options.sanitizer?this.options.sanitizer(u[0]):j(u[0]):u[0]}}link(_){const u=this.rules.inline.link.exec(_);if(u){const c=u[2].trim();if(!this.options.pedantic&&/^</.test(c)){if(!/> $ /.test(c))return;const o=me(c.slice(0,-1)," \\ ");if((c.length-o.length)%2==0)return}else{const o=function(g,T){if(g.indexOf(T[1])===-1)return-1;const I=g.length;let L=0,H=0;for(;H<I;H++)if(g[H]===" \\ ")H++;else if(g[H]===T[0])L++;else if(g[H]===T[1]&&(L--,L<0))return H;return-1}(u[2],"()");if(o>-1){const g=(u[0].indexOf("!")===0?5:4)+u[1].length+o;u[2]=u[2].substring(0,o),u[0]=u[0].substring(0,g).trim(),u[3]=""}}let a=u[2],s="";if(this.options.pedantic){const o=/^([^'"]*[^ \s ]) \s +(['"])(.*) \2 /.exec(a);o&&(a=o[1],s=o[3])}else s=u[3]?u[3].slice(1,-1):"";return a=a.trim(),/^</.test(a)&&(a=this.options.pedantic&&!/> $ /.test(c)?a.slice(1):a.slice(1,-1)),Ke(u,{href:a&&a.replace(this.rules.inline._escapes," $ 1"),title:s&&s.replace(this.rules.inline._escapes," $ 1")},u[0],this.lexer)}}reflink(_,u){let c;if((c=this.rules.inline.reflink.exec(_))||(c=this.rules.inline.nolink.exec(_))){let a=(c[2]||c[1]).replace(/ \s +/g," ");if(a=u[a.toLowerCase()],!a||!a.href){const s=c[0].charAt(0);return{type:"text",raw:s,text:s}}return Ke(c,a,c[0],this.lexer)}}emStrong(_,u,c=""){let a=this.rules.inline.emStrong.lDelim.exec(_);if(!a||a[3]&&c.match(/[ \p {L} \p {N}]/u))return;const s=a[1]||a[2]||"";if(!s||s&&(c===""||this.rules.inline.punctuation.exec(c))){const o=a[0].length-1;let g,T,I=o,L=0;const H=a[0][0]==="*"?this.rules.inline.emStrong.rDelimAst:this.rules.inline.emStrong.rDelimUnd;for(H.lastIndex=0,u=u.slice(-1*_.length+o);(a=H.exec(u))!=null;){if(g=a[1]||a[2]||a[3]||a[4]||a[5]||a[6],!g)continue;if(T=g.length,a[3]||a[4]){I+=T;continue}if((a[5]||a[6])&&o%3&&!((o+T)%3)){L+=T;continue}if(I-=T,I>0)continue;if(T=Math.min(T,T+I+L),Math.min(o,T)%2){const W=_.slice(1,o+a.index+T);return{type:"em",raw:_.slice(0,o+a.index+T+1),text:W,tokens:this.lexer.inlineTokens(W,[])}}const P=_.slice(2,o+a.index+T-1);return{type:"strong",raw:_.slice(0,o+a.index+T+1),text:P,tokens:this.lexer.inlineTokens(P,[])}}}}codespan(_){const u=this.rules.inline.code.exec(_);if(u){let c=u[2].replace(/ \n /g," ");const a=/[^ ]/.test(c),s=/^ /.test(c)&&/ $ /.test(c);return a&&s&&(c=c.substring(1,c.length-1)),c=j(c,!0),{type:"codespan",raw:u[0],text:c}}}br(_){const u=this.rules.inline.br.exec(_);if(u)return{type:"br",raw:u[0]}}del(_){const u=this.rules.inline.del.exec(_);if(u)return{type:"del",raw:u[0],text:u[2],tokens:this.lexer.inlineTokens(u[2],[])}}autolink(_,u){const c=this.rules.inline.autolink.exec(_);if(c){let a,s;return c[2]==="@"?(a=j(this.options.mangle?u(c[1]):c[1]),s="mailto:"+a):(a=j(c[1]),s=a),{type:"link",raw:c[0],text:a,href:s,tokens:[{type:"text",raw:a,text:a}]}}}url(_,u){let c;if(c=this.rules.inline.url.exec(_)){let a,s;if(c[2]==="@")a=j(this.options.mangle?u(c[0]):c[0]),s="mailto:"+a;else{let o;do o=c[0],c[0]=this.rules.inline._backpedal.exec(c[0])[0];while(o!==c[0]);a=j(c[0]),s=c[1]==="www."?"http://"+a:a}return{type:"link",raw:c[0],text:a,href:s,tokens:[{type:"text",raw:a,text:a}]}}}inlineText(_,u){const c=this.rules.inline.text.exec(_);if(c){let a;return a=this.lexer.state.inRawBlock?this.options.sanitize?this.
] ` ).replace("lheading",k.lheading).replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").getRegex()});const x={escape:/^ \\ ([!"# $ %&'()*+, \- ./:;<=>?@ \[ \] \\ ^_ ` { | } ~ ] ) / , autolink : /^<(scheme:[^\s\x00-\x1f<>]*|email)>/ , url : Re , tag : "^comment|^</[a-zA-Z][\\w:-]*\\s*>|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^<![a-zA-Z]+\\s[\\s\\S]*?>|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>" , link : /^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/ , reflink : /^!?\[(label)\]\[(ref)\]/ , nolink : /^!?\[(ref)\](?:\[\])?/ , reflinkSearch : "reflink|nolink(?!\\()" , emStrong : { lDelim : /^(?:\*+(?:([punct_])|[^\s*]))|^_+(?:([punct*])|([^\s_]))/ , rDelimAst : /^[^_*]*?\_\_[^_*]*?\*[^_*]*?(?=\_\_)|[punct_](\*+)(?=[\s]|$)|[^punct*_\s](\*+)(?=[punct_\s]|$)|[punct_\s](\*+)(?=[^punct*_\s])|[\s](\*+)(?=[punct_])|[punct_](\*+)(?=[punct_])|[^punct*_\s](\*+)(?=[^punct*_\s])/ , rDelimUnd : /^[^_*]*?\*\*[^_*]*?\_[^_*]*?(?=\*\*)|[punct*](\_+)(?=[\s]|$)|[^punct*_\s](\_+)(?=[punct*\s]|$)|[punct*\s](\_+)(?=[^punct*_\s])|[\s](\_+)(?=[punct*])|[punct*](\_+)(?=[punct*])/ } , code : /^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/ , br : /^( {2,}|\\)\n(?!\s*$)/ , del : Re , text : /^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/ , punctuation : /^([\spunctuation])/ } ; function lt ( ae ) { return ae . replace ( /---/g , "\u2014" ) . replace ( /--/g , "\u2013" ) . replace ( /(^|[-\u2014/(\[{"\s])'/g , "$1\u2018" ) . replace ( /'/g , "\u2019" ) . replace ( /(^|[-\u2014/(\[{\u2018\s])"/g , "$1\u201C" ) . replace ( /"/g , "\u201D" ) . replace ( /\.{3}/g , "\u2026" ) } function st ( ae ) { let _ , u , c = "" ; const a = ae . length ; for ( _ = 0 ; _ < a ; _ ++ ) u = ae . charCodeAt ( _ ) , Math . random ( ) > . 5 && ( u = "x" + u . toString ( 16 ) ) , c += "&#" + u + ";" ; return c } x . _punctuation = "!\"#$%&'()+\\-.,/:;<=>?@\\[\\]`^{|}~" , x . punctuation = h ( x . punctuation ) . replace ( /punctuation/g , x . _punctuation ) . getRegex ( ) , x . blockSkip = /\[[^\]]*?\]\([^\)]*?\)|`[^`]*?`|<[^>]*?>/g , x . escapedEmSt = /\\\*|\\_/g , x . _comment = h ( k . _comment ) . replace ( "(?:-->|$)" , "-->" ) . getRegex ( ) , x . emStrong . lDelim = h ( x . emStrong . lDelim ) . replace ( /punct/g , x . _punctuation ) . getRegex ( ) , x . emStrong . rDelimAst = h ( x . emStrong . rDelimAst , "g" ) . replace ( /punct/g , x . _punctuation ) . getRegex ( ) , x . emStrong . rDelimUnd = h ( x . emStrong . rDelimUnd , "g" ) . replace ( /punct/g , x . _punctuation ) . getRegex ( ) , x . _escapes = /\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/g , x . _scheme = /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/ , x . _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])?)+(?![-_])/ , x . autolink = h ( x . autolink ) . replace ( "scheme" , x . _scheme ) . replace ( "email" , x . _email ) . getRegex ( ) , x . _attribute = /\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/ , x . tag = h ( x . tag ) . replace ( "comment" , x . _comment ) . replace ( "attribute" , x . _attribute ) . getRegex ( ) , x . _label = /(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/ , x . _href = /<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/ , x . _title = /"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/ , x . link = h ( x . link ) . replace ( "label" , x . _label ) . replace ( "href" , x . _href ) . replace ( "title" , x . _title ) . getRegex ( ) , x . reflink = h ( x . reflink ) . replace ( "label" , x . _label ) . replace ( "ref" , k . _label ) . getRegex ( ) , x . nolink = h ( x . nolink ) . replace ( "ref" , k . _label ) . getRegex ( ) , x . reflinkSearch = h ( x . reflinkSearch , "g" ) . replace ( "reflink" , x . reflink ) . replace ( "nolink" , x . nolink ) . getRegex ( ) , x . normal = De ( { } , x ) , x . pedantic = De ( { } , x . normal , { strong : { start : /^__|\*\*/ , middle : /^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/ , endAst : /\*\*(?!\*)/g , endUnd : /__(?!_)/g } , em : { start : /^_|\*/ , middle : /^()\*(?=\S)([\s\S]*?\S)\*(?!\*)|^_(?=\S)([\s\S]*?\S)_(?!_)/ , endAst : /\*(?!\*)/g , endUnd : /_(?!_)/g } , link : h ( /^!?\[(label)\]\((.*?)\)/ ) . replace ( "label" , x . _label ) . getRegex ( ) , reflink : h ( /^!?\[(label)\]\s*\[([^\]]*)\]/ ) . replace ( "label" , x . _label ) . getRegex ( ) } ) , x . gfm = De ( { } , x . normal , { escape : h ( x . 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~])\1(?=[^~]|$)/ , text : / ^ ( [ ` ~ ] + | [ ^ ` ~ ] ) ( ?
` ).replace(/ \t /g," "),this.blockTokens(_,this.tokens);u=this.inlineQueue.shift();)this.inlineTokens(u.src,u.tokens);return this.tokens}blockTokens(_,u=[]){let c,a,s,o;for(this.options.pedantic&&(_=_.replace(/^ + $ /gm,""));_;)if(!(this.options.extensions&&this.options.extensions.block&&this.options.extensions.block.some(g=>!!(c=g.call({lexer:this},_,u))&&(_=_.substring(c.raw.length),u.push(c),!0))))if(c=this.tokenizer.space(_))_=_.substring(c.raw.length),c.raw.length===1&&u.length>0?u[u.length-1].raw+= `
` :u.push(c);else if(c=this.tokenizer.code(_))_=_.substring(c.raw.length),a=u[u.length-1],!a||a.type!=="paragraph"&&a.type!=="text"?u.push(c):(a.raw+= `
` +c.raw,a.text+= `
` +c.text,this.inlineQueue[this.inlineQueue.length-1].src=a.text);else if(c=this.tokenizer.fences(_))_=_.substring(c.raw.length),u.push(c);else if(c=this.tokenizer.heading(_))_=_.substring(c.raw.length),u.push(c);else if(c=this.tokenizer.hr(_))_=_.substring(c.raw.length),u.push(c);else if(c=this.tokenizer.blockquote(_))_=_.substring(c.raw.length),u.push(c);else if(c=this.tokenizer.list(_))_=_.substring(c.raw.length),u.push(c);else if(c=this.tokenizer.html(_))_=_.substring(c.raw.length),u.push(c);else if(c=this.tokenizer.def(_))_=_.substring(c.raw.length),a=u[u.length-1],!a||a.type!=="paragraph"&&a.type!=="text"?this.tokens.links[c.tag]||(this.tokens.links[c.tag]={href:c.href,title:c.title}):(a.raw+= `
` +c.raw,a.text+= `
` +c.raw,this.inlineQueue[this.inlineQueue.length-1].src=a.text);else if(c=this.tokenizer.table(_))_=_.substring(c.raw.length),u.push(c);else if(c=this.tokenizer.lheading(_))_=_.substring(c.raw.length),u.push(c);else{if(s=_,this.options.extensions&&this.options.extensions.startBlock){let g=1/0;const T=_.slice(1);let I;this.options.extensions.startBlock.forEach(function(L){I=L.call({lexer:this},T),typeof I=="number"&&I>=0&&(g=Math.min(g,I))}),g<1/0&&g>=0&&(s=_.substring(0,g+1))}if(this.state.top&&(c=this.tokenizer.paragraph(s)))a=u[u.length-1],o&&a.type==="paragraph"?(a.raw+= `
` +c.raw,a.text+= `
` +c.text,this.inlineQueue.pop(),this.inlineQueue[this.inlineQueue.length-1].src=a.text):u.push(c),o=s.length!==_.length,_=_.substring(c.raw.length);else if(c=this.tokenizer.text(_))_=_.substring(c.raw.length),a=u[u.length-1],a&&a.type==="text"?(a.raw+= `
` +c.raw,a.text+= `
` +c.text,this.inlineQueue.pop(),this.inlineQueue[this.inlineQueue.length-1].src=a.text):u.push(c);else if(_){const g="Infinite loop on byte: "+_.charCodeAt(0);if(this.options.silent){console.error(g);break}throw new Error(g)}}return this.state.top=!0,u}inline(_,u){this.inlineQueue.push({src:_,tokens:u})}inlineTokens(_,u=[]){let c,a,s,o,g,T,I=_;if(this.tokens.links){const L=Object.keys(this.tokens.links);if(L.length>0)for(;(o=this.tokenizer.rules.inline.reflinkSearch.exec(I))!=null;)L.includes(o[0].slice(o[0].lastIndexOf("[")+1,-1))&&(I=I.slice(0,o.index)+"["+Be("a",o[0].length-2)+"]"+I.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;(o=this.tokenizer.rules.inline.blockSkip.exec(I))!=null;)I=I.slice(0,o.index)+"["+Be("a",o[0].length-2)+"]"+I.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);for(;(o=this.tokenizer.rules.inline.escapedEmSt.exec(I))!=null;)I=I.slice(0,o.index)+"++"+I.slice(this.tokenizer.rules.inline.escapedEmSt.lastIndex);for(;_;)if(g||(T=""),g=!1,!(this.options.extensions&&this.options.extensions.inline&&this.options.extensions.inline.some(L=>!!(c=L.call({lexer:this},_,u))&&(_=_.substring(c.raw.length),u.push(c),!0))))if(c=this.tokenizer.escape(_))_=_.substring(c.raw.length),u.push(c);else if(c=this.tokenizer.tag(_))_=_.substring(c.raw.length),a=u[u.length-1],a&&c.type==="text"&&a.type==="text"?(a.raw+=c.raw,a.text+=c.text):u.push(c);else if(c=this.tokenizer.link(_))_=_.substring(c.raw.length),u.push(c);else if(c=this.tokenizer.reflink(_,this.tokens.links))_=_.substring(c.raw.length),a=u[u.length-1],a&&c.type==="text"&&a.type==="text"?(a.raw+=c.raw,a.text+=c.text):u.push(c);else if(c=this.tokenizer.emStrong(_,I,T))_=_.substring(c.raw.length),u.push(c);else if(c=this.tokenizer.codespan(_))_=_.substring(c.raw.length),u.push(c);else if(c=this.tokenizer.br(_))_=_.substring(c.raw.length),u.push(c);else if(c=this.tokenizer.del(_))_=_.substring(c.raw.length),u.push(c);else if(c=this.tokenizer.autolink(_,st))_=_.substring(c.raw.length),u.push(c);else if(this.state.inLink||!(c=this.tokenizer.url(_,st))){if(s=_,this.options.extensions&&this.options.extensions.startInline){let L=1/0;const H=_.slice(1);let P;this.options.extensions.startInline.forEach(function(W){P=W.call({lexer:this},H),typeof P=="number"&&P>=0&&(L=Math.min(L,P))}),L<1/0&&L>=0&&(s=_.substring(0,L+1))}if(c=this.tokenizer.inlineText(s,lt))_=_.substring(c.raw.length),c.raw.slice(-1)!=="_"&&(T=c.raw.slice(-1)),g=!0,a=u[u.length-1],a&&a.type==="text"?(a.raw+=c.raw,a.text+=c.text):u.push(c);else if(_){const L="Infinite loop on byte: "+_.charCodeAt(0);if(this.options.silent){console.error(L);break}throw new Error(L)}}else _=_.substring(c.raw.length),u.push(c);return u}}class nt{constructor(_){this.options=_||d}code(_,u,c){const a=(u||"").match(/ \S */)[0];if(this.options.highlight){const s=this.options.highlight(_,a);s!=null&&s!==_&&(c=!0,_=s)}return _=_.replace(/ \n $ /,"")+ `
` ,a?'<pre><code class="'+this.options.langPrefix+j(a,!0)+'">'+(c?_:j(_,!0))+ ` < / c o d e > < / p r e >
` :"<pre><code>"+(c?_:j(_,!0))+ ` < / c o d e > < / p r e >
` }blockquote(_){return ` < blockquote >
` +_+ ` < / b l o c k q u o t e >
` }html(_){return _}heading(_,u,c,a){return this.options.headerIds?"<h"+u+' id="'+this.options.headerPrefix+a.slug(c)+'">'+_+"</h"+u+ ` >
` :"<h"+u+">"+_+"</h"+u+ ` >
` }hr(){return this.options.xhtml? ` < hr / >
` : ` < hr >
` }list(_,u,c){const a=u?"ol":"ul";return"<"+a+(u&&c!==1?' start="'+c+'"':"")+ ` >
` +_+"</"+a+ ` >
` }listitem(_){return"<li>"+_+ ` < / l i >
` }checkbox(_){return"<input "+(_?'checked="" ':"")+'disabled="" type="checkbox"'+(this.options.xhtml?" /":"")+"> "}paragraph(_){return"<p>"+_+ ` < / p >
` }table(_,u){return u&&(u="<tbody>"+u+"</tbody>"), ` < table >
< thead >
` +_+ ` < / t h e a d >
` +u+ ` < / t a b l e >
` }tablerow(_){return ` < tr >
` +_+ ` < / t r >
` }tablecell(_,u){const c=u.header?"th":"td";return(u.align?"<"+c+' align="'+u.align+'">':"<"+c+">")+_+"</"+c+ ` >
` }strong(_){return"<strong>"+_+"</strong>"}em(_){return"<em>"+_+"</em>"}codespan(_){return"<code>"+_+"</code>"}br(){return this.options.xhtml?"<br/>":"<br>"}del(_){return"<del>"+_+"</del>"}link(_,u,c){if((_=tt(this.options.sanitize,this.options.baseUrl,_))===null)return c;let a='<a href="'+j(_)+'"';return u&&(a+=' title="'+u+'"'),a+=">"+c+"</a>",a}image(_,u,c){if((_=tt(this.options.sanitize,this.options.baseUrl,_))===null)return c;let a='<img src="'+_+'" alt="'+c+'"';return u&&(a+=' title="'+u+'"'),a+=this.options.xhtml?"/>":">",a}text(_){return _}}class ot{strong(_){return _}em(_){return _}codespan(_){return _}del(_){return _}html(_){return _}text(_){return _}link(_,u,c){return""+c}image(_,u,c){return""+c}br(){return""}}class It{constructor(){this.seen={}}serialize(_){return _.toLowerCase().trim().replace(/<[! \/ a-z].*?>/gi,"").replace(/[ \u 2000- \u 206F \u 2E00- \u 2E7F \\ '!"# $ %&()*+,./:;<=>?@[ \] ^ ` { | } ~ ] / g , "" ) . replace ( /\s/g , "-" ) } getNextSafeSlug ( _ , u ) { let c = _ , a = 0 ; if ( this . seen . hasOwnProperty ( c ) ) { a = this . seen [ _ ] ; do a ++ , c = _ + "-" + a ; while ( this . seen . hasOwnProperty ( c ) ) } return u || ( this . seen [ _ ] = a , this . seen [ c ] = 0 ) , c } slug ( _ , u = { } ) { const c = this . serialize ( _ ) ; return this . getNextSafeSlug ( c , u . dryrun ) } } class at { constructor ( _ ) { this . options = _ || d , this . options . renderer = this . options . renderer || new nt , this . renderer = this . options . renderer , this . renderer . options = this . options , this . textRenderer = new ot , this . slugger = new It } static parse ( _ , u ) { return new at ( u ) . parse ( _ ) } static parseInline ( _ , u ) { return new at ( u ) . parseInline ( _ ) } parse ( _ , u = ! 0 ) { let c , a , s , o , g , T , I , L , H , P , W , G , Q , le , ce , ue , Te , se , Oe , ge = "" ; const Ae = _ . length ; for ( c = 0 ; c < Ae ; c ++ ) if ( P = _ [ c ] , this . options . extensions && this . options . extensions . renderers && this . options . extensions . renderers [ P . type ] && ( Oe = this . options . extensions . renderers [ P . type ] . call ( { parser : this } , P ) , Oe !== ! 1 || ! [ "space" , "hr" , "heading" , "code" , "table" , "blockquote" , "list" , "html" , "paragraph" , "text" ] . includes ( P . type ) ) ) ge += Oe || "" ; else switch ( P . type ) { case "space" : continue ; case "hr" : ge += this . renderer . hr ( ) ; continue ; case "heading" : ge += this . renderer . heading ( this . parseInline ( P . tokens ) , P . depth , X ( this . parseInline ( P . tokens , this . textRenderer ) ) , this . slugger ) ; continue ; case "code" : ge += this . renderer . code ( P . text , P . lang , P . escaped ) ; continue ; case "table" : for ( L = "" , I = "" , o = P . header . length , a = 0 ; a < o ; a ++ ) I += this . renderer . tablecell ( this . parseInline ( P . header [ a ] . tokens ) , { header : ! 0 , align : P . align [ a ] } ) ; for ( L += this . renderer . tablerow ( I ) , H = "" , o = P . rows . length , a = 0 ; a < o ; a ++ ) { for ( T = P . rows [ a ] , I = "" , g = T . length , s = 0 ; s < g ; s ++ ) I += this . renderer . tablecell ( this . parseInline ( T [ s ] . tokens ) , { header : ! 1 , align : P . align [ s ] } ) ; H += this . renderer . tablerow ( I ) } ge += this . renderer . table ( L , H ) ; continue ; case "blockquote" : H = this . parse ( P . tokens ) , ge += this . renderer . blockquote ( H ) ; continue ; case "list" : for ( W = P . ordered , G = P . start , Q = P . loose , o = P . items . length , H = "" , a = 0 ; a < o ; a ++ ) ce = P . items [ a ] , ue = ce . checked , Te = ce . task , le = "" , ce . task && ( se = this . renderer . checkbox ( ue ) , Q ? ce . tokens . length > 0 && ce . tokens [ 0 ] . type === "paragraph" ? ( ce . tokens [ 0 ] . text = se + " " + ce . tokens [ 0 ] . text , ce . tokens [ 0 ] . tokens && ce . tokens [ 0 ] . tokens . length > 0 && ce . tokens [ 0 ] . tokens [ 0 ] . type === "text" && ( ce . tokens [ 0 ] . tokens [ 0 ] . text = se + " " + ce . tokens [ 0 ] . tokens [ 0 ] . text ) ) : ce . tokens . unshift ( { type : "text" , text : se } ) : le += se ) , le += this . parse ( ce . tokens , Q ) , H += this . renderer . listitem ( le , Te , ue ) ; ge += this . renderer . list ( H , W , G ) ; continue ; case "html" : ge += this . renderer . html ( P . text ) ; continue ; case "paragraph" : ge += this . renderer . paragraph ( this . parseInline ( P . tokens ) ) ; continue ; case "text" : for ( H = P . tokens ? this . parseInline ( P . tokens ) : P . text ; c + 1 < Ae && _ [ c + 1 ] . type === "text" ; ) P = _ [ ++ c ] , H += `
` +(P.tokens?this.parseInline(P.tokens):P.text);ge+=u?this.renderer.paragraph(H):H;continue;default:{const Ge='Token with "'+P.type+'" type was not found.';if(this.options.silent)return void console.error(Ge);throw new Error(Ge)}}return ge}parseInline(_,u){u=u||this.renderer;let c,a,s,o="";const g=_.length;for(c=0;c<g;c++)if(a=_[c],this.options.extensions&&this.options.extensions.renderers&&this.options.extensions.renderers[a.type]&&(s=this.options.extensions.renderers[a.type].call({parser:this},a),s!==!1||!["escape","html","link","image","strong","em","codespan","br","del","text"].includes(a.type)))o+=s||"";else switch(a.type){case"escape":case"text":o+=u.text(a.text);break;case"html":o+=u.html(a.text);break;case"link":o+=u.link(a.href,a.title,this.parseInline(a.tokens,u));break;case"image":o+=u.image(a.href,a.title,a.text);break;case"strong":o+=u.strong(this.parseInline(a.tokens,u));break;case"em":o+=u.em(this.parseInline(a.tokens,u));break;case"codespan":o+=u.codespan(a.text);break;case"br":o+=u.br();break;case"del":o+=u.del(this.parseInline(a.tokens,u));break;default:{const T='Token with "'+a.type+'" type was not found.';if(this.options.silent)return void console.error(T);throw new Error(T)}}return o}}function J(ae,_,u){if(ae==null)throw new Error("marked(): input parameter is undefined or null");if(typeof ae!="string")throw new Error("marked(): input parameter is of type "+Object.prototype.toString.call(ae)+", string expected");if(typeof _=="function"&&(u=_,_=null),Ne(_=De({},J.defaults,_||{})),u){const c=_.highlight;let a;try{a=Le.lex(ae,_)}catch(g){return u(g)}const s=function(g){let T;if(!g)try{_.walkTokens&&J.walkTokens(a,_.walkTokens),T=at.parse(a,_)}catch(I){g=I}return _.highlight=c,g?u(g):u(null,T)};if(!c||c.length<3||(delete _.highlight,!a.length))return s();let o=0;return J.walkTokens(a,function(g){g.type==="code"&&(o++,setTimeout(()=>{c(g.text,g.lang,function(T,I){if(T)return s(T);I!=null&&I!==g.text&&(g.text=I,g.escaped=!0),o--,o===0&&s()})},0))}),void(o===0&&s())}try{const c=Le.lex(ae,_);return _.walkTokens&&J.walkTokens(c,_.walkTokens),at.parse(c,_)}catch(c){if(c.message+= `
Please report this to https : //github.com/markedjs/marked.`,_.silent)return"<p>An error occurred:</p><pre>"+j(c.message+"",!0)+"</pre>";throw c}}return J.options=J.setOptions=function(ae){var _;return De(J.defaults,ae),_=J.defaults,d=_,J},J.getDefaults=r,J.defaults=d,J.use=function(...ae){const _=De({},...ae),u=J.defaults.extensions||{renderers:{},childTokens:{}};let c;ae.forEach(a=>{if(a.extensions&&(c=!0,a.extensions.forEach(s=>{if(!s.name)throw new Error("extension name required");if(s.renderer){const o=u.renderers?u.renderers[s.name]:null;u.renderers[s.name]=o?function(...g){let T=s.renderer.apply(this,g);return T===!1&&(T=o.apply(this,g)),T}:s.renderer}if(s.tokenizer){if(!s.level||s.level!=="block"&&s.level!=="inline")throw new Error("extension level must be 'block' or 'inline'");u[s.level]?u[s.level].unshift(s.tokenizer):u[s.level]=[s.tokenizer],s.start&&(s.level==="block"?u.startBlock?u.startBlock.push(s.start):u.startBlock=[s.start]:s.level==="inline"&&(u.startInline?u.startInline.push(s.start):u.startInline=[s.start]))}s.childTokens&&(u.childTokens[s.name]=s.childTokens)})),a.renderer){const s=J.defaults.renderer||new nt;for(const o in a.renderer){const g=s[o];s[o]=(...T)=>{let I=a.renderer[o].apply(s,T);return I===!1&&(I=g.apply(s,T)),I}}_.renderer=s}if(a.tokenizer){const s=J.defaults.tokenizer||new z;for(const o in a.tokenizer){const g=s[o];s[o]=(...T)=>{let I=a.tokenizer[o].apply(s,T);return I===!1&&(I=g.apply(s,T)),I}}_.tokenizer=s}if(a.walkTokens){const s=J.defaults.walkTokens;_.walkTokens=function(o){a.walkTokens.call(this,o),s&&s.call(this,o)}}c&&(_.extensions=u),J.setOptions(_)})},J.walkTokens=function(ae,_){for(const u of ae)switch(_.call(J,u),u.type){case"table":for(const c of u.header)J.walkTokens(c.tokens,_);for(const c of u.rows)for(const a of c)J.walkTokens(a.tokens,_);break;case"list":J.walkTokens(u.items,_);break;default:J.defaults.extensions&&J.defaults.extensions.childTokens&&J.defaults.extensions.childTokens[u.type]?J.defaults.extensions.childTokens[u.type].forEach(function(c){J.walkTokens(u[c],_)}):u.tokens&&J.walkTokens(u.tokens,_)}},J.parseInline=function(ae,_){if(ae==null)throw new Error("marked.parseInline(): input parameter is undefined or null");if(typeof ae!="string")throw new Error("marked.parseInline(): input parameter is of type "+Object.prototype.toString.call(ae)+", string expected");Ne(_=De({},J.defaults,_||{}));try{const u=Le.lexInline(ae,_);return _.walkTokens&&J.walkTokens(u,_.walkTokens),at.parseInline(u,_)}catch(u){if(u.message+=`
Please report this to https : //github.com/markedjs/marked.`,_.silent)return"<p>An error occurred:</p><pre>"+j(u.message+"",!0)+"</pre>";throw u}},J.Parser=at,J.parser=at.parse,J.Renderer=nt,J.TextRenderer=ot,J.Lexer=Le,J.lexer=Le.lex,J.Tokenizer=z,J.Slugger=It,J.parse=J,()=>{let ae,_,u=null;function c(){if(u&&!u.closed)u.focus();else{if(u=window.open("about:blank","reveal.js - Notes","width=1100,height=700"),u.marked=J,u.document.write(`<!--
NOTE : You need to build the notes plugin after making changes to this file .
-- >
< html lang = "en" >
< head >
< meta charset = "utf-8" >
< title > reveal . js - Speaker View < / t i t l e >
< style >
body {
font - family : Helvetica ;
font - size : 18 px ;
}
# current - slide ,
# upcoming - slide ,
# speaker - controls {
padding : 6 px ;
box - sizing : border - box ;
- moz - box - sizing : border - box ;
}
# current - slide iframe ,
# upcoming - slide iframe {
width : 100 % ;
height : 100 % ;
border : 1 px solid # ddd ;
}
# current - slide . label ,
# upcoming - slide . label {
position : absolute ;
top : 10 px ;
left : 10 px ;
z - index : 2 ;
}
# connection - status {
position : absolute ;
top : 0 ;
left : 0 ;
width : 100 % ;
height : 100 % ;
z - index : 20 ;
padding : 30 % 20 % 20 % 20 % ;
font - size : 18 px ;
color : # 222 ;
background : # fff ;
text - align : center ;
box - sizing : border - box ;
line - height : 1.4 ;
}
. overlay - element {
height : 34 px ;
line - height : 34 px ;
padding : 0 10 px ;
text - shadow : none ;
background : rgba ( 220 , 220 , 220 , 0.8 ) ;
color : # 222 ;
font - size : 14 px ;
}
. overlay - element . interactive : hover {
background : rgba ( 220 , 220 , 220 , 1 ) ;
}
# current - slide {
position : absolute ;
width : 60 % ;
height : 100 % ;
top : 0 ;
left : 0 ;
padding - right : 0 ;
}
# upcoming - slide {
position : absolute ;
width : 40 % ;
height : 40 % ;
right : 0 ;
top : 0 ;
}
/* Speaker controls */
# speaker - controls {
position : absolute ;
top : 40 % ;
right : 0 ;
width : 40 % ;
height : 60 % ;
overflow : auto ;
font - size : 18 px ;
}
. speaker - controls - time . hidden ,
. speaker - controls - notes . hidden {
display : none ;
}
. speaker - controls - time . label ,
. speaker - controls - pace . label ,
. speaker - controls - notes . label {
text - transform : uppercase ;
font - weight : normal ;
font - size : 0.66 em ;
color : # 666 ;
margin : 0 ;
}
. speaker - controls - time , . speaker - controls - pace {
border - bottom : 1 px solid rgba ( 200 , 200 , 200 , 0.5 ) ;
margin - bottom : 10 px ;
padding : 10 px 16 px ;
padding - bottom : 20 px ;
cursor : pointer ;
}
. speaker - controls - time . reset - button {
opacity : 0 ;
float : right ;
color : # 666 ;
text - decoration : none ;
}
. speaker - controls - time : hover . reset - button {
opacity : 1 ;
}
. speaker - controls - time . timer ,
. speaker - controls - time . clock {
width : 50 % ;
}
. speaker - controls - time . timer ,
. speaker - controls - time . clock ,
. speaker - controls - time . pacing . hours - value ,
. speaker - controls - time . pacing . minutes - value ,
. speaker - controls - time . pacing . seconds - value {
font - size : 1.9 em ;
}
. speaker - controls - time . timer {
float : left ;
}
. speaker - controls - time . clock {
float : right ;
text - align : right ;
}
. speaker - controls - time span . mute {
opacity : 0.3 ;
}
. speaker - controls - time . pacing - title {
margin - top : 5 px ;
}
. speaker - controls - time . pacing . ahead {
color : blue ;
}
. speaker - controls - time . pacing . on - track {
color : green ;
}
. speaker - controls - time . pacing . behind {
color : red ;
}
. speaker - controls - notes {
padding : 10 px 16 px ;
}
. speaker - controls - notes . value {
margin - top : 5 px ;
line - height : 1.4 ;
font - size : 1.2 em ;
}
/* Layout selector\xA0*/
# speaker - layout {
position : absolute ;
top : 10 px ;
right : 10 px ;
color : # 222 ;
z - index : 10 ;
}
# speaker - layout select {
position : absolute ;
width : 100 % ;
height : 100 % ;
top : 0 ;
left : 0 ;
border : 0 ;
box - shadow : 0 ;
cursor : pointer ;
opacity : 0 ;
font - size : 1 em ;
background - color : transparent ;
- moz - appearance : none ;
- webkit - appearance : none ;
- webkit - tap - highlight - color : rgba ( 0 , 0 , 0 , 0 ) ;
}
# speaker - layout select : focus {
outline : none ;
box - shadow : none ;
}
. clear {
clear : both ;
}
/* Speaker layout: Wide */
body [ data - speaker - layout = "wide" ] # current - slide ,
body [ data - speaker - layout = "wide" ] # upcoming - slide {
width : 50 % ;
height : 45 % ;
padding : 6 px ;
}
body [ data - speaker - layout = "wide" ] # current - slide {
top : 0 ;
left : 0 ;
}
body [ data - speaker - layout = "wide" ] # upcoming - slide {
top : 0 ;
left : 50 % ;
}
body [ data - speaker - layout = "wide" ] # speaker - controls {
top : 45 % ;
left : 0 ;
width : 100 % ;
height : 50 % ;
font - size : 1.25 em ;
}
/* Speaker layout: Tall */
body [ data - speaker - layout = "tall" ] # current - slide ,
body [ data - speaker - layout = "tall" ] # upcoming - slide {
width : 45 % ;
height : 50 % ;
padding : 6 px ;
}
body [ data - speaker - layout = "tall" ] # current - slide {
top : 0 ;
left : 0 ;
}
body [ data - speaker - layout = "tall" ] # upcoming - slide {
top : 50 % ;
left : 0 ;
}
body [ data - speaker - layout = "tall" ] # speaker - controls {
padding - top : 40 px ;
top : 0 ;
left : 45 % ;
width : 55 % ;
height : 100 % ;
font - size : 1.25 em ;
}
/* Speaker layout: Notes only */
body [ data - speaker - layout = "notes-only" ] # current - slide ,
body [ data - speaker - layout = "notes-only" ] # upcoming - slide {
display : none ;
}
body [ data - speaker - layout = "notes-only" ] # speaker - controls {
padding - top : 40 px ;
top : 0 ;
left : 0 ;
width : 100 % ;
height : 100 % ;
font - size : 1.25 em ;
}
@ media screen and ( max - width : 1080 px ) {
body [ data - speaker - layout = "default" ] # speaker - controls {
font - size : 16 px ;
}
}
@ media screen and ( max - width : 900 px ) {
body [ data - speaker - layout = "default" ] # speaker - controls {
font - size : 14 px ;
}
}
@ media screen and ( max - width : 800 px ) {
body [ data - speaker - layout = "default" ] # speaker - controls {
font - size : 12 px ;
}
}
< / s t y l e >
< / h e a d >
< body >
< div id = "connection-status" > Loading speaker view ... < / d i v >
< div id = "current-slide" > < / d i v >
< div id = "upcoming-slide" > < span class = "overlay-element label" > Upcoming < / s p a n > < / d i v >
< div id = "speaker-controls" >
< div class = "speaker-controls-time" >
< h4 class = "label" > Time < span class = "reset-button" > Click to Reset < / s p a n > < / h 4 >
< div class = "clock" >
< span class = "clock-value" > 0 : 00 AM < / s p a n >
< / d i v >
< div class = "timer" >
< span class = "hours-value" > 00 < / s p a n > < s p a n c l a s s = " m i n u t e s - v a l u e " > : 0 0 < / s p a n > < s p a n c l a s s = " s e c o n d s - v a l u e " > : 0 0 < / s p a n >
< / d i v >
< div class = "clear" > < / d i v >
< h4 class = "label pacing-title" style = "display: none" > Pacing \u2013 Time to finish current slide < / h 4 >
< div class = "pacing" style = "display: none" >
< span class = "hours-value" > 00 < / s p a n > < s p a n c l a s s = " m i n u t e s - v a l u e " > : 0 0 < / s p a n > < s p a n c l a s s = " s e c o n d s - v a l u e " > : 0 0 < / s p a n >
< / d i v >
< / d i v >
< div class = "speaker-controls-notes hidden" >
< h4 class = "label" > Notes < / h 4 >
< div class = "value" > < / d i v >
< / d i v >
< / d i v >
< div id = "speaker-layout" class = "overlay-element interactive" >
< span class = "speaker-layout-label" > < / s p a n >
< select class = "speaker-layout-dropdown" > < / s e l e c t >
< / d i v >
< script >
( function ( ) {
var notes ,
notesValue ,
currentState ,
currentSlide ,
upcomingSlide ,
layoutLabel ,
layoutDropdown ,
pendingCalls = { } ,
lastRevealApiCallId = 0 ,
connected = false
var connectionStatus = document . querySelector ( '#connection-status' ) ;
var SPEAKER _LAYOUTS = {
'default' : 'Default' ,
'wide' : 'Wide' ,
'tall' : 'Tall' ,
'notes-only' : 'Notes only'
} ;
setupLayout ( ) ;
let openerOrigin ;
try {
openerOrigin = window . opener . location . origin ;
}
catch ( error ) { console . warn ( error ) }
// In order to prevent XSS, the speaker view will only run if its
// opener has the same origin as itself
if ( window . location . origin !== openerOrigin ) {
connectionStatus . innerHTML = 'Cross origin error.<br>The speaker window can only be opened from the same origin.' ;
return ;
}
var connectionTimeout = setTimeout ( function ( ) {
connectionStatus . innerHTML = 'Error connecting to main window.<br>Please try closing and reopening the speaker view.' ;
} , 5000 ) ;
window . addEventListener ( 'message' , function ( event ) {
clearTimeout ( connectionTimeout ) ;
connectionStatus . style . display = 'none' ;
var data = JSON . parse ( event . data ) ;
// The overview mode is only useful to the reveal.js instance
// where navigation occurs so we don't sync it
if ( data . state ) delete data . state . overview ;
// Messages sent by the notes plugin inside of the main window
if ( data && data . namespace === 'reveal-notes' ) {
if ( data . type === 'connect' ) {
handleConnectMessage ( data ) ;
}
else if ( data . type === 'state' ) {
handleStateMessage ( data ) ;
}
else if ( data . type === 'return' ) {
pendingCalls [ data . callId ] ( data . result ) ;
delete pendingCalls [ data . callId ] ;
}
}
// Messages sent by the reveal.js inside of the current slide preview
else if ( data && data . namespace === 'reveal' ) {
if ( /ready/ . test ( data . eventName ) ) {
// Send a message back to notify that the handshake is complete
window . opener . postMessage ( JSON . stringify ( { namespace : 'reveal-notes' , type : 'connected' } ) , '*' ) ;
}
else if ( /slidechanged|fragmentshown|fragmenthidden|paused|resumed/ . test ( data . eventName ) && currentState !== JSON . stringify ( data . state ) ) {
dispatchStateToMainWindow ( data . state ) ;
}
}
} ) ;
/ * *
* Updates the presentation in the main window to match the state
* of the presentation in the notes window .
* /
const dispatchStateToMainWindow = debounce ( ( state ) => {
window . opener . postMessage ( JSON . stringify ( { method : 'setState' , args : [ state ] } ) , '*' ) ;
} , 500 ) ;
/ * *
* Asynchronously calls the Reveal . js API of the main frame .
* /
function callRevealApi ( methodName , methodArguments , callback ) {
var callId = ++ lastRevealApiCallId ;
pendingCalls [ callId ] = callback ;
window . opener . postMessage ( JSON . stringify ( {
namespace : 'reveal-notes' ,
type : 'call' ,
callId : callId ,
methodName : methodName ,
arguments : methodArguments
} ) , '*' ) ;
}
/ * *
* Called when the main window is trying to establish a
* connection .
* /
function handleConnectMessage ( data ) {
if ( connected === false ) {
connected = true ;
setupIframes ( data ) ;
setupKeyboard ( ) ;
setupNotes ( ) ;
setupTimer ( ) ;
setupHeartbeat ( ) ;
}
}
/ * *
* Called when the main window sends an updated state .
* /
function handleStateMessage ( data ) {
// Store the most recently set state to avoid circular loops
// applying the same state
currentState = JSON . stringify ( data . state ) ;
// No need for updating the notes in case of fragment changes
if ( data . notes ) {
notes . classList . remove ( 'hidden' ) ;
notesValue . style . whiteSpace = data . whitespace ;
if ( data . markdown ) {
notesValue . innerHTML = marked ( data . notes ) ;
}
else {
notesValue . innerHTML = data . notes ;
}
}
else {
notes . classList . add ( 'hidden' ) ;
}
// Update the note slides
currentSlide . contentWindow . postMessage ( JSON . stringify ( { method : 'setState' , args : [ data . state ] } ) , '*' ) ;
upcomingSlide . contentWindow . postMessage ( JSON . stringify ( { method : 'setState' , args : [ data . state ] } ) , '*' ) ;
upcomingSlide . contentWindow . postMessage ( JSON . stringify ( { method : 'next' } ) , '*' ) ;
}
// Limit to max one state update per X ms
handleStateMessage = debounce ( handleStateMessage , 200 ) ;
/ * *
* Forward keyboard events to the current slide window .
* This enables keyboard events to work even if focus
* isn ' t set on the current slide iframe .
*
* Block F5 default handling , it reloads and disconnects
* the speaker notes window .
* /
function setupKeyboard ( ) {
document . addEventListener ( 'keydown' , function ( event ) {
if ( event . keyCode === 116 || ( event . metaKey && event . keyCode === 82 ) ) {
event . preventDefault ( ) ;
return false ;
}
currentSlide . contentWindow . postMessage ( JSON . stringify ( { method : 'triggerKey' , args : [ event . keyCode ] } ) , '*' ) ;
} ) ;
}
/ * *
* Creates the preview iframes .
* /
function setupIframes ( data ) {
var params = [
'receiver' ,
'progress=false' ,
'history=false' ,
'transition=none' ,
'autoSlide=0' ,
'backgroundTransition=none'
] . join ( '&' ) ;
var urlSeparator = /\\?/ . test ( data . url ) ? '&' : '?' ;
var hash = '#/' + data . state . indexh + '/' + data . state . indexv ;
var currentURL = data . url + urlSeparator + params + '&postMessageEvents=true' + hash ;
var upcomingURL = data . url + urlSeparator + params + '&controls=false' + hash ;
currentSlide = document . createElement ( 'iframe' ) ;
currentSlide . setAttribute ( 'width' , 1280 ) ;
currentSlide . setAttribute ( 'height' , 1024 ) ;
currentSlide . setAttribute ( 'src' , currentURL ) ;
document . querySelector ( '#current-slide' ) . appendChild ( currentSlide ) ;
upcomingSlide = document . createElement ( 'iframe' ) ;
upcomingSlide . setAttribute ( 'width' , 640 ) ;
upcomingSlide . setAttribute ( 'height' , 512 ) ;
upcomingSlide . setAttribute ( 'src' , upcomingURL ) ;
document . querySelector ( '#upcoming-slide' ) . appendChild ( upcomingSlide ) ;
}
/ * *
* Setup the notes UI .
* /
function setupNotes ( ) {
notes = document . querySelector ( '.speaker-controls-notes' ) ;
notesValue = document . querySelector ( '.speaker-controls-notes .value' ) ;
}
/ * *
* We send out a heartbeat at all times to ensure we can
* reconnect with the main presentation window after reloads .
* /
function setupHeartbeat ( ) {
setInterval ( ( ) => {
window . opener . postMessage ( JSON . stringify ( { namespace : 'reveal-notes' , type : 'heartbeat' } ) , '*' ) ;
} , 1000 ) ;
}
function getTimings ( callback ) {
callRevealApi ( 'getSlidesAttributes' , [ ] , function ( slideAttributes ) {
callRevealApi ( 'getConfig' , [ ] , function ( config ) {
var totalTime = config . totalTime ;
var minTimePerSlide = config . minimumTimePerSlide || 0 ;
var defaultTiming = config . defaultTiming ;
if ( ( defaultTiming == null ) && ( totalTime == null ) ) {
callback ( null ) ;
return ;
}
// Setting totalTime overrides defaultTiming
if ( totalTime ) {
defaultTiming = 0 ;
}
var timings = [ ] ;
for ( var i in slideAttributes ) {
var slide = slideAttributes [ i ] ;
var timing = defaultTiming ;
if ( slide . hasOwnProperty ( 'data-timing' ) ) {
var t = slide [ 'data-timing' ] ;
timing = parseInt ( t ) ;
if ( isNaN ( timing ) ) {
console . warn ( "Could not parse timing '" + t + "' of slide " + i + "; using default of " + defaultTiming ) ;
timing = defaultTiming ;
}
}
timings . push ( timing ) ;
}
if ( totalTime ) {
// After we've allocated time to individual slides, we summarize it and
// subtract it from the total time
var remainingTime = totalTime - timings . reduce ( function ( a , b ) { return a + b ; } , 0 ) ;
// The remaining time is divided by the number of slides that have 0 seconds
// allocated at the moment, giving the average time-per-slide on the remaining slides
var remainingSlides = ( timings . filter ( function ( x ) { return x == 0 } ) ) . length
var timePerSlide = Math . round ( remainingTime / remainingSlides , 0 )
// And now we replace every zero-value timing with that average
timings = timings . map ( function ( x ) { return ( x == 0 ? timePerSlide : x ) } ) ;
}
var slidesUnderMinimum = timings . filter ( function ( x ) { return ( x < minTimePerSlide ) } ) . length
if ( slidesUnderMinimum ) {
message = "The pacing time for " + slidesUnderMinimum + " slide(s) is under the configured minimum of " + minTimePerSlide + " seconds. Check the data-timing attribute on individual slides, or consider increasing the totalTime or minimumTimePerSlide configuration options (or removing some slides)." ;
alert ( message ) ;
}
callback ( timings ) ;
} ) ;
} ) ;
}
/ * *
* Return the number of seconds allocated for presenting
* all slides up to and including this one .
* /
function getTimeAllocated ( timings , callback ) {
callRevealApi ( 'getSlidePastCount' , [ ] , function ( currentSlide ) {
var allocated = 0 ;
for ( var i in timings . slice ( 0 , currentSlide + 1 ) ) {
allocated += timings [ i ] ;
}
callback ( allocated ) ;
} ) ;
}
/ * *
* Create the timer and clock and start updating them
* at an interval .
* /
function setupTimer ( ) {
var start = new Date ( ) ,
timeEl = document . querySelector ( '.speaker-controls-time' ) ,
clockEl = timeEl . querySelector ( '.clock-value' ) ,
hoursEl = timeEl . querySelector ( '.hours-value' ) ,
minutesEl = timeEl . querySelector ( '.minutes-value' ) ,
secondsEl = timeEl . querySelector ( '.seconds-value' ) ,
pacingTitleEl = timeEl . querySelector ( '.pacing-title' ) ,
pacingEl = timeEl . querySelector ( '.pacing' ) ,
pacingHoursEl = pacingEl . querySelector ( '.hours-value' ) ,
pacingMinutesEl = pacingEl . querySelector ( '.minutes-value' ) ,
pacingSecondsEl = pacingEl . querySelector ( '.seconds-value' ) ;
var timings = null ;
getTimings ( function ( _timings ) {
timings = _timings ;
if ( _timings !== null ) {
pacingTitleEl . style . removeProperty ( 'display' ) ;
pacingEl . style . removeProperty ( 'display' ) ;
}
// Update once directly
_updateTimer ( ) ;
// Then update every second
setInterval ( _updateTimer , 1000 ) ;
} ) ;
function _resetTimer ( ) {
if ( timings == null ) {
start = new Date ( ) ;
_updateTimer ( ) ;
}
else {
// Reset timer to beginning of current slide
getTimeAllocated ( timings , function ( slideEndTimingSeconds ) {
var slideEndTiming = slideEndTimingSeconds * 1000 ;
callRevealApi ( 'getSlidePastCount' , [ ] , function ( currentSlide ) {
var currentSlideTiming = timings [ currentSlide ] * 1000 ;
var previousSlidesTiming = slideEndTiming - currentSlideTiming ;
var now = new Date ( ) ;
start = new Date ( now . getTime ( ) - previousSlidesTiming ) ;
_updateTimer ( ) ;
} ) ;
} ) ;
}
}
timeEl . addEventListener ( 'click' , function ( ) {
_resetTimer ( ) ;
return false ;
} ) ;
function _displayTime ( hrEl , minEl , secEl , time ) {
var sign = Math . sign ( time ) == - 1 ? "-" : "" ;
time = Math . abs ( Math . round ( time / 1000 ) ) ;
var seconds = time % 60 ;
var minutes = Math . floor ( time / 60 ) % 60 ;
var hours = Math . floor ( time / ( 60 * 60 ) ) ;
hrEl . innerHTML = sign + zeroPadInteger ( hours ) ;
if ( hours == 0 ) {
hrEl . classList . add ( 'mute' ) ;
}
else {
hrEl . classList . remove ( 'mute' ) ;
}
minEl . innerHTML = ':' + zeroPadInteger ( minutes ) ;
if ( hours == 0 && minutes == 0 ) {
minEl . classList . add ( 'mute' ) ;
}
else {
minEl . classList . remove ( 'mute' ) ;
}
secEl . innerHTML = ':' + zeroPadInteger ( seconds ) ;
}
function _updateTimer ( ) {
var diff , hours , minutes , seconds ,
now = new Date ( ) ;
diff = now . getTime ( ) - start . getTime ( ) ;
clockEl . innerHTML = now . toLocaleTimeString ( 'en-US' , { hour12 : true , hour : '2-digit' , minute : '2-digit' } ) ;
_displayTime ( hoursEl , minutesEl , secondsEl , diff ) ;
if ( timings !== null ) {
_updatePacing ( diff ) ;
}
}
function _updatePacing ( diff ) {
getTimeAllocated ( timings , function ( slideEndTimingSeconds ) {
var slideEndTiming = slideEndTimingSeconds * 1000 ;
callRevealApi ( 'getSlidePastCount' , [ ] , function ( currentSlide ) {
var currentSlideTiming = timings [ currentSlide ] * 1000 ;
var timeLeftCurrentSlide = slideEndTiming - diff ;
if ( timeLeftCurrentSlide < 0 ) {
pacingEl . className = 'pacing behind' ;
}
else if ( timeLeftCurrentSlide < currentSlideTiming ) {
pacingEl . className = 'pacing on-track' ;
}
else {
pacingEl . className = 'pacing ahead' ;
}
_displayTime ( pacingHoursEl , pacingMinutesEl , pacingSecondsEl , timeLeftCurrentSlide ) ;
} ) ;
} ) ;
}
}
/ * *
* Sets up the speaker view layout and layout selector .
* /
function setupLayout ( ) {
layoutDropdown = document . querySelector ( '.speaker-layout-dropdown' ) ;
layoutLabel = document . querySelector ( '.speaker-layout-label' ) ;
// Render the list of available layouts
for ( var id in SPEAKER _LAYOUTS ) {
var option = document . createElement ( 'option' ) ;
option . setAttribute ( 'value' , id ) ;
option . textContent = SPEAKER _LAYOUTS [ id ] ;
layoutDropdown . appendChild ( option ) ;
}
// Monitor the dropdown for changes
layoutDropdown . addEventListener ( 'change' , function ( event ) {
setLayout ( layoutDropdown . value ) ;
} , false ) ;
// Restore any currently persisted layout
setLayout ( getLayout ( ) ) ;
}
/ * *
* Sets a new speaker view layout . The layout is persisted
* in local storage .
* /
function setLayout ( value ) {
var title = SPEAKER _LAYOUTS [ value ] ;
layoutLabel . innerHTML = 'Layout' + ( title ? ( ': ' + title ) : '' ) ;
layoutDropdown . value = value ;
document . body . setAttribute ( 'data-speaker-layout' , value ) ;
// Persist locally
if ( supportsLocalStorage ( ) ) {
window . localStorage . setItem ( 'reveal-speaker-layout' , value ) ;
}
}
/ * *
* Returns the ID of the most recently set speaker layout
* or our default layout if none has been set .
* /
function getLayout ( ) {
if ( supportsLocalStorage ( ) ) {
var layout = window . localStorage . getItem ( 'reveal-speaker-layout' ) ;
if ( layout ) {
return layout ;
}
}
// Default to the first record in the layouts hash
for ( var id in SPEAKER _LAYOUTS ) {
return id ;
}
}
function supportsLocalStorage ( ) {
try {
localStorage . setItem ( 'test' , 'test' ) ;
localStorage . removeItem ( 'test' ) ;
return true ;
}
catch ( e ) {
return false ;
}
}
function zeroPadInteger ( num ) {
var str = '00' + parseInt ( num ) ;
return str . substring ( str . length - 2 ) ;
}
/ * *
* Limits the frequency at which a function can be called .
* /
function debounce ( fn , ms ) {
var lastTime = 0 ,
timeout ;
return function ( ) {
var args = arguments ;
var context = this ;
clearTimeout ( timeout ) ;
var timeSinceLastCall = Date . now ( ) - lastTime ;
if ( timeSinceLastCall > ms ) {
fn . apply ( context , args ) ;
lastTime = Date . now ( ) ;
}
else {
timeout = setTimeout ( function ( ) {
fn . apply ( context , args ) ;
lastTime = Date . now ( ) ;
} , ms - timeSinceLastCall ) ;
}
}
}
} ) ( ) ;
< \ / script >
< / b o d y >
< /html>`),!u)return void alert("Speaker view popup failed to open. Please make sure popups are allowed and reopen the speaker view.");(function(){const g=_.getConfig().url,T=typeof g=="string"?g:window.location.protocol+"/ / "+window.location.host+window.location.pathname+window.location.search;ae=setInterval(function(){u.postMessage(JSON.stringify({namespace:" reveal - notes ",type:" connect ",state:_.getState(),url:T})," * ")},500),window.addEventListener(" message ",s)})()}}function a(g){let T=_.getCurrentSlide(),I=T.querySelectorAll(" aside . notes "),L=T.querySelector(" . current - fragment "),H={namespace:" reveal - notes ",type:" state ",notes:" ",markdown:!1,whitespace:" normal ",state:_.getState()};if(T.hasAttribute(" data - notes ")&&(H.notes=T.getAttribute(" data - notes "),H.whitespace=" pre - wrap "),L){let P=L.querySelector(" aside . notes ");P?(H.notes=P.innerHTML,H.markdown=typeof P.getAttribute(" data - markdown ")==" string ",I=null):L.hasAttribute(" data - notes ")&&(H.notes=L.getAttribute(" data - notes "),H.whitespace=" pre - wrap " , I = null ) } I && ( H . notes = Array . from ( I ) . map ( P => P . innerHTML ) . join ( `
` ),H.markdown=I[0]&&typeof I[0].getAttribute("data-markdown")=="string"),u.postMessage(JSON.stringify(H),"*")}function s(g){if(function(T){try{return window.location.origin===T.source.location.origin}catch{return!1}}(g)){let T=JSON.parse(g.data);T&&T.namespace==="reveal-notes"&&T.type==="connected"?(clearInterval(ae),o()):T&&T.namespace==="reveal-notes"&&T.type==="call"&&function(I,L,H){let P=_[I].apply(_,L);u.postMessage(JSON.stringify({namespace:"reveal-notes",type:"return",result:P,callId:H}),"*")}(T.methodName,T.arguments,T.callId)}}function o(){_.on("slidechanged",a),_.on("fragmentshown",a),_.on("fragmenthidden",a),_.on("overviewhidden",a),_.on("overviewshown",a),_.on("paused",a),_.on("resumed",a),a()}return{id:"notes",init:function(g){_=g,/receiver/i.test(window.location.search)||(window.location.search.match(/( \? | \& )notes/gi)!==null?c():window.addEventListener("message",T=>{if(!u&&typeof T.data=="string"){let L;try{L=JSON.parse(T.data)}catch{}L&&L.namespace==="reveal-notes"&&L.type==="heartbeat"&&(I=T.source,u&&!u.closed?u.focus():(u=I,window.addEventListener("message",s),o()))}var I}),_.addKeyBinding({keyCode:83,key:"S",description:"Speaker notes view"},function(){c()}))},open:c}}})})(xi);const wl=xi.exports;const xl={app:{name:"WRITE AN ASYNC RUNTIME FOR RUST \u {1F980}"},reveal:{plugins:[Il,Dl,hi.MathJax2,hi.KaTeX,wl],hash:!0,mathjax2:{config:"TeX-AMS_HTML-full",TeX:{Macros:{R:" \\ mathbb{R}",set:[" \\ left \\ {#1 \\ ; ; \\ ; #2 \\ right \\ }",2]}}}}};new Al({target:document.getElementById("app"),props:xl});