diff --git a/docs/assets/favicon.png b/docs/assets/favicon.png index c4b8dd43b..011c8e351 100644 Binary files a/docs/assets/favicon.png and b/docs/assets/favicon.png differ diff --git a/docs/assets/images/material.png b/docs/assets/images/material.png index db42030ae..25feb091f 100644 Binary files a/docs/assets/images/material.png and b/docs/assets/images/material.png differ diff --git a/material/assets/images/favicon.png b/material/assets/images/favicon.png index 23ccc2bac..00025610d 100644 Binary files a/material/assets/images/favicon.png and b/material/assets/images/favicon.png differ diff --git a/material/assets/javascripts/bundle.8ceb0d66.min.js b/material/assets/javascripts/bundle.8ceb0d66.min.js deleted file mode 100644 index f4bacb81b..000000000 --- a/material/assets/javascripts/bundle.8ceb0d66.min.js +++ /dev/null @@ -1,2 +0,0 @@ -!function(t,e){for(var n in e)t[n]=e[n]}(window,function(t){function e(e){for(var r,o,i=e[0],u=e[1],b=e[2],s=0,O=[];s0})),Object(l.a)())}function w(t){return t.location$.pipe(Object(b.a)("pathname"),Object(f.a)(1),Object(s.a)((function(t){return Object(u.a)({url:t.href,responseType:"document",withCredentials:!0}).pipe(Object(O.a)("response"),Object(j.a)((function(){return function(t){location.href=t.href}(t),a.a})))})),Object(l.a)())}function $(t){var e=(void 0===t?{}:t).location$;return Object(r.a)(Object(c.a)(document,"DOMContentLoaded").pipe(Object(o.a)(document)),void 0!==e?w({location$:e}):a.a).pipe(Object(i.a)(1))}function x(t,e){return void 0===e&&(e=document),e.querySelector(t)||void 0}function S(t,e){void 0===e&&(e=document);var n=x(t,e);if(void 0===n)throw new ReferenceError('Missing element: expected "'+t+'" to be present');return n}function T(){return document.activeElement instanceof HTMLElement?document.activeElement:void 0}function k(t,e){return void 0===e&&(e=document),Array.from(e.querySelectorAll(t))}function C(t,e){void 0===e&&(e=!0),e?t.focus():t.blur()}function _(t){var e=Object(c.a)(t,"focus"),n=Object(c.a)(t,"blur");return Object(r.a)(e.pipe(Object(o.a)(!0)),n.pipe(Object(o.a)(!1))).pipe(Object(h.a)(t===T()),Object(i.a)(1))}function L(t){return{x:t.scrollLeft,y:t.scrollTop}}function A(t){return Object(r.a)(Object(c.a)(t,"scroll"),Object(c.a)(window,"resize")).pipe(Object(v.a)((function(){return L(t)})),Object(h.a)(L(t)),Object(i.a)(1))}function N(t){if(!(t instanceof HTMLInputElement))throw new Error("Not implemented");t.select()}function E(t){switch(t.tagName){case"INPUT":case"SELECT":case"TEXTAREA":return!0;default:return t.isContentEditable}}function R(){return Object(c.a)(window,"keydown").pipe(Object(m.a)((function(t){return!(t.metaKey||t.ctrlKey)})),Object(v.a)((function(t){return{type:t.key,claim:function(){t.preventDefault(),t.stopPropagation()}}})),Object(l.a)())}var M=n(107);function P(t){var e=matchMedia(t);return Object(M.a)((function(t){return e.addListener((function(){return t(e.matches)}))})).pipe(Object(h.a)(e.matches),Object(i.a)(1))}var H=n(0),U=n(62);function q(){return{x:Math.max(0,pageXOffset),y:Math.max(0,pageYOffset)}}function Q(t){var e=t.x,n=t.y;window.scrollTo(e||0,n||0)}function z(){return{width:innerWidth,height:innerHeight}}function I(){return Object(U.a)([Object(r.a)(Object(c.a)(window,"scroll"),Object(c.a)(window,"resize")).pipe(Object(v.a)(q),Object(h.a)(q())),Object(c.a)(window,"resize").pipe(Object(v.a)(z),Object(h.a)(z()))]).pipe(Object(v.a)((function(t){var e=Object(H.c)(t,2);return{offset:e[0],size:e[1]}})),Object(i.a)(1))}function D(t,e){var n=e.header$,r=e.viewport$,c=r.pipe(Object(b.a)("size"),Object(v.a)((function(){return{x:t.offsetLeft,y:t.offsetTop}})));return Object(U.a)([n,r,c]).pipe(Object(v.a)((function(t){var e=Object(H.c)(t,3),n=e[0].height,r=e[1],c=r.offset,a=r.size,o=e[2],i=o.x,u=o.y;return{offset:{x:c.x-i,y:c.y-u+n},size:a}})),Object(i.a)(1))}var W=n(108),J=n(58),F=n(109);function B(t,e){var n=e.tx$,r=Object(M.a)((function(e){return t.addEventListener("message",e)})).pipe(Object(O.a)("data"));return n.pipe(Object(W.a)((function(){return r}),{leading:!0,trailing:!0}),Object(J.a)((function(e){return t.postMessage(e)})),Object(F.a)(r),Object(l.a)())}var K,Y=n(45),V=n(115),X=n(36);function G(t,e){var n=e.document$;K=n.pipe(Object(V.a)(1),Object(v.a)((function(e){return t.reduce((function(t,n){var r,c=x("[data-md-toggle="+n+"]",e);return Object(H.a)(Object(H.a)({},t),void 0!==c?((r={})[n]=c,r):{})}),{})})),Object(i.a)(1))}function Z(t){return K.pipe(Object(s.a)((function(e){return void 0!==e[t]?Object(Y.a)(e[t]):a.a})),Object(X.a)())}function tt(t,e){t.checked!==e&&t.click()}function et(t){return Object(c.a)(t,"change").pipe(Object(v.a)((function(){return t.checked})),Object(h.a)(t.checked))}n.d(e,"l",(function(){return $})),n.d(e,"e",(function(){return E})),n.d(e,"o",(function(){return R})),n.d(e,"r",(function(){return P})),n.d(e,"v",(function(){return B})),n.d(e,"b",(function(){return x})),n.d(e,"c",(function(){return S})),n.d(e,"a",(function(){return T})),n.d(e,"d",(function(){return k})),n.d(e,"f",(function(){return C})),n.d(e,"m",(function(){return _})),n.d(e,"n",(function(){return A})),n.d(e,"g",(function(){return N})),n.d(e,"p",(function(){return p})),n.d(e,"q",(function(){return g})),n.d(e,"t",(function(){return I})),n.d(e,"u",(function(){return D})),n.d(e,"i",(function(){return Q})),n.d(e,"j",(function(){return G})),n.d(e,"k",(function(){return Z})),n.d(e,"h",(function(){return tt})),n.d(e,"s",(function(){return et}))},,,,function(t,e,n){"use strict";function r(t){return"object"==typeof t&&"string"==typeof t.base&&"object"==typeof t.worker&&"string"==typeof t.worker.search}var c=n(0),a=n(86);function o(t,e,n){switch(e){case"xmlns":break;case"viewBox":case"d":"boolean"!=typeof n?t.setAttributeNS(null,e,n):n&&t.setAttributeNS(null,e,"");break;default:"boolean"!=typeof n?t.setAttribute(e,n):n&&t.setAttribute(e,"")}}function i(t,e){var n,r;if("string"==typeof e||"number"==typeof e)t.innerHTML+=e.toString();else if(e instanceof Node)t.appendChild(e);else if(Array.isArray(e))try{for(var a=Object(c.f)(e),o=a.next();!o.done;o=a.next()){i(t,o.value)}}catch(t){n={error:t}}finally{try{o&&!o.done&&(r=a.return)&&r.call(a)}finally{if(n)throw n.error}}}function u(t,e){for(var n,r,u,b,f=[],s=2;sn){for(;" "!==t[n]&&--n>0;);return t.substring(0,n)+"..."}return t}function p(t){return t>999?((t+1)/1e3).toFixed(+((t-950)%1e3>99))+"k":t.toString()}function v(t){for(var e=0,n=0,r=t.length;n=e[2].offset+c})),Object(i.a)());return Object(c.a)([s,O]).pipe(Object(o.a)((function(t){var e=Object(r.c)(t,2);return{height:e[0],lock:e[1]}})))}},function(t,e){},function(t,e,n){"use strict";n.d(e,"a",(function(){return O}));var r=n(0),c=n(35),a=n(59),o=n(46),i=n(58),u=n(98),b=n(65),f=n(1),s=n(39);function O(t){return Object(c.a)(Object(o.b)(a.a),Object(i.a)((function(t){var e=t.prev;e&&Object(s.a)(e)})),Object(u.a)(250),Object(o.b)(a.a),Object(i.a)((function(t){var e=t.next;Object(s.b)(e)})),Object(b.a)((function(){var e,n;try{for(var c=Object(r.f)(t),a=c.next();!a.done;a=c.next()){var o=a.value;Object(s.a)(Object(f.c)(".md-nav__list",o))}}catch(t){e={error:t}}finally{try{a&&!a.done&&(n=c.return)&&n.call(c)}finally{if(e)throw e.error}}})))}},function(t,e,n){"use strict";n.d(e,"a",(function(){return f}));var r=n(0),c=n(95),a=n(93),o=n(92),i=n(8),u=n(64),b=n(1);function f(t){var e,n,f=new Map;try{for(var s=Object(r.f)(t),O=s.next();!O.done;O=s.next()){var j=O.value,l=Object(b.b)("label",j);if(void 0!==l){var d=Object(b.c)("#"+l.htmlFor);f.set(d,j)}}}catch(t){e={error:t}}finally{try{O&&!O.done&&(n=s.return)&&n.call(s)}finally{if(e)throw e.error}}return a.a.apply(void 0,Object(r.e)(Object(r.e)(f.keys()).map((function(t){return Object(o.a)(t,"change")})))).pipe(Object(i.a)((function(){return Object(b.c)(".md-nav__list",f.get(Object(c.a)((function(t){return t.checked}),Object(r.e)(f.keys()))))}))).pipe(Object(i.a)((function(t){return{next:t}})),Object(u.a)((function(t,e){return{prev:t.next,next:e.next}})))}},function(t,e,n){"use strict";var r=n(76);n.d(e,"mountTableOfContents",(function(){return r.a}));var c=n(49);n.o(c,"mountNavigation")&&n.d(e,"mountNavigation",(function(){return c.mountNavigation}))},function(t,e,n){"use strict";n.d(e,"a",(function(){return O}));var r=n(0),c=n(35),a=n(62),o=n(45),i=n(24),u=n(8),b=n(1),f=n(30),s=n(49);function O(t){var e=t.header$,n=t.main$,O=t.viewport$,j=t.tablet$;return Object(c.a)(Object(i.a)((function(t){return j.pipe(Object(i.a)((function(c){if(c){var i=Object(b.d)(".md-nav__link",t),j=Object(f.watchSidebar)(t,{main$:n,viewport$:O}).pipe(Object(f.paintSidebar)(t,{header$:e})),l=Object(s.watchAnchorList)(i,{header$:e,viewport$:O}).pipe(Object(s.paintAnchorList)(i));return Object(a.a)([j,l]).pipe(Object(u.a)((function(t){var e=Object(r.c)(t,2);return{sidebar:e[0],anchors:e[1]}})))}return Object(o.a)({})})))})))}},function(t,e){},function(t,e,n){"use strict";n.d(e,"a",(function(){return f}));var r=n(0),c=n(35),a=n(59),o=n(46),i=n(58),u=n(65),b=n(23);function f(t){return Object(c.a)(Object(o.b)(a.a),Object(i.a)((function(t){var e,n,c,a,o=t.prev,i=t.next;try{for(var u=Object(r.f)(i),f=u.next();!f.done;f=u.next()){var s=Object(r.c)(f.value,1)[0];Object(b.a)(s),Object(b.b)(s)}}catch(t){e={error:t}}finally{try{f&&!f.done&&(n=u.return)&&n.call(u)}finally{if(e)throw e.error}}try{for(var O=Object(r.f)(o.entries()),j=O.next();!j.done;j=O.next()){var l=Object(r.c)(j.value,2),d=l[0];s=Object(r.c)(l[1],1)[0];Object(b.c)(s,d===o.length-1),Object(b.d)(s,!0)}}catch(t){c={error:t}}finally{try{j&&!j.done&&(a=O.return)&&a.call(O)}finally{if(c)throw c.error}}})),Object(u.a)((function(){var e,n;try{for(var c=Object(r.f)(t),a=c.next();!a.done;a=c.next()){var o=a.value;Object(b.a)(o),Object(b.b)(o)}}catch(t){e={error:t}}finally{try{a&&!a.done&&(n=c.return)&&n.call(c)}finally{if(e)throw e.error}}})))}},function(t,e,n){"use strict";n.d(e,"a",(function(){return l}));var r=n(0),c=n(99),a=n(62),o=n(8),i=n(87),u=n(24),b=n(64),f=n(36),s=n(97),O=n(94),j=n(1);function l(t,e){var n,l,d=e.header$,p=e.viewport$,v=new Map;try{for(var h=Object(r.f)(t),m=h.next();!m.done;m=h.next()){var y=m.value,g=decodeURIComponent(y.hash.substring(1)),w=Object(j.b)('[id="'+g+'"]');void 0!==w&&v.set(y,w)}}catch(t){n={error:t}}finally{try{m&&!m.done&&(l=h.return)&&l.call(h)}finally{if(n)throw n.error}}var $=d.pipe(Object(o.a)((function(t){return 18+t.height})));return p.pipe(Object(i.a)("size"),Object(o.a)((function(){var t=[];return Object(r.e)(v).reduce((function(e,n){for(var a=Object(r.c)(n,2),o=a[0],i=a[1];t.length;){if(!(v.get(t[t.length-1]).tagName>=i.tagName))break;t.pop()}for(var u=i.offsetTop;!u&&i.parentElement;)u=(i=i.parentElement).offsetTop;return e.set(Object(c.a)(t=Object(r.e)(t,[o])),u)}),new Map)})),Object(u.a)((function(t){return Object(a.a)([$,p]).pipe(Object(b.a)((function(t,e){for(var n=Object(r.c)(t,2),c=n[0],a=n[1],o=Object(r.c)(e,2),i=o[0],u=o[1].offset.y;a.length;){if(!(Object(r.c)(a[0],2)[1]-i=u))break;a=Object(r.e)([c.pop()],a)}return[c,a]}),[[],Object(r.e)(t)]),Object(f.a)((function(t,e){return t[0]===e[0]&&t[1]===e[1]})))}))).pipe(Object(o.a)((function(t){var e=Object(r.c)(t,2),n=e[0],c=e[1];return{prev:n.map((function(t){return Object(r.c)(t,1)[0]})),next:c.map((function(t){return Object(r.c)(t,1)[0]}))}})),Object(s.a)({prev:[],next:[]}),Object(O.a)(2,1),Object(o.a)((function(t){var e=Object(r.c)(t,2),n=e[0],c=e[1];return n.prev.length16)););return n}),0),Object(w.a)(e),Object(A.a)((function(){!function(t){t.innerHTML=""}(u)})))})))}function P(t,e){var n=t.rx$,r=e.query$;return Object(c.a)(Object(o.a)((function(t){var e=t.parentElement,c=Object(s.n)(e).pipe(Object(i.a)((function(t){return t.y>=e.scrollHeight-e.offsetHeight-16})),Object(v.a)(),Object(T.a)(S.a));return n.pipe(Object(T.a)(O.b),Object(k.a)("data"),M(t,{query$:r,fetch$:c}))})))}n.d(e,"a",(function(){return u})),n.d(e,"b",(function(){return m})),n.d(e,"c",(function(){return x})),n.d(e,"d",(function(){return P}))},function(t,e,n){"use strict";var r=n(0),c=n(35),a=n(62),o=n(24),i=n(8),u=n(101),b=n(63),f=n(36),s=n(97),O=n(96),j=n(1),l=n(21),d=n(59),p=n(46),v=n(58),h=n(65);var m=n(45),y=n(87);function g(t){var e=t.viewport$;return Object(c.a)(Object(o.a)((function(t){var n=function(t,e){return e.viewport$.pipe(Object(y.a)("size"),Object(o.a)((function(){var e=getComputedStyle(t),n=["sticky","-webkit-sticky"].includes(e.position);return Object(m.a)({sticky:n,height:n?t.offsetHeight:0})})))}(t,{viewport$:e}),g=Object(l.b)("main").pipe(Object(i.a)((function(t){return Object(j.b)("h1, h2, h3, h4, h5, h6",t)})),Object(u.a)((function(t){return void 0!==t})),Object(b.a)(Object(l.b)("header-title")),Object(o.a)((function(t){var a=Object(r.c)(t,2),o=a[0],u=a[1];return Object(j.u)(o,{header$:n,viewport$:e}).pipe(Object(i.a)((function(t){return t.offset.y>=o.offsetHeight?"page":"site"})),Object(f.a)(),function(t){return Object(c.a)(Object(p.b)(d.a),Object(v.a)((function(e){!function(t,e){t.setAttribute("data-md-state",e?"active":"")}(t,"page"===e)})),Object(h.a)((function(){!function(t){t.removeAttribute("data-md-state")}(t)})))}(u))})),Object(s.a)("site"));return Object(a.a)([n,g]).pipe(Object(i.a)((function(t){var e=Object(r.c)(t,2),n=e[0],c=e[1];return Object(r.a)({type:c},n)})),Object(O.a)(1))})))}n.d(e,"a",(function(){return g}))},function(t,e,n){"use strict";var r=n(25),c=n(35),a=n(24),o=n(87),i=n(58),u=n(21),b=n(59),f=n(46),s=n(65);var O=n(0),j=n(62),l=n(103),d=n(8),p=n(36);function v(t){var e=t.header$,n=t.viewport$,v=new r.a;return Object(u.b)("header").pipe(Object(a.a)((function(t){return v.pipe(Object(o.a)("active"),(e=t,Object(c.a)(Object(f.b)(b.a),Object(i.a)((function(t){var n=t.active;!function(t,e){t.setAttribute("data-md-state",e?"shadow":"")}(e,n)})),Object(s.a)((function(){!function(t){t.removeAttribute("data-md-state")}(e)})))));var e}))).subscribe(),Object(c.a)(Object(a.a)((function(t){return function(t,e){var n=e.header$,r=e.viewport$,c=n.pipe(Object(l.a)("height")),a=Object(j.a)([c,r]).pipe(Object(d.a)((function(e){var n=Object(O.c)(e,2),r=n[0],c=n[1],a=c.offset.y,o=c.size.height,i=t.offsetTop,u=t.offsetHeight+i;return o-Math.max(0,i-a,r)-Math.max(0,o+a-u)})),Object(d.a)((function(t){return Math.max(0,t)})),Object(p.a)()),o=Object(j.a)([c,r]).pipe(Object(d.a)((function(e){var n=Object(O.c)(e,2),r=n[0];return n[1].offset.y>=t.offsetTop-r})),Object(p.a)());return Object(j.a)([c,a,o]).pipe(Object(d.a)((function(e){var n=Object(O.c)(e,3),r=n[0],c=n[1],a=n[2];return{offset:t.offsetTop-r,height:c,active:a}})))}(t,{header$:e,viewport$:n})})),Object(i.a)((function(t){return v.next(t)})))}n.d(e,"a",(function(){return v}))},function(t,e,n){"use strict";var r=n(35),c=n(24),a=n(8),o=n(36),i=n(1),u=n(59),b=n(46),f=n(58),s=n(65);function O(t){var e=t.header$,n=t.viewport$;return Object(r.a)(Object(c.a)((function(t){return Object(i.u)(t,{header$:e,viewport$:n}).pipe(Object(a.a)((function(t){return{hidden:t.offset.y>=20}})),Object(o.a)(),function(t){return Object(r.a)(Object(b.b)(u.a),Object(f.a)((function(e){var n=e.hidden;!function(t,e){t.setAttribute("data-md-state",e?"hidden":"")}(t,n)})),Object(s.a)((function(){!function(t){t.removeAttribute("data-md-state")}(t)})))}(t))})))}n.d(e,"a",(function(){return O}))},function(t,e,n){"use strict";var r=n(35),c=n(45),a=n(24),o=n(8),i=n(36),u=n(1),b=n(59),f=n(46),s=n(58),O=n(65);function j(t){var e=t.header$,n=t.viewport$,j=t.screen$;return Object(r.a)(Object(a.a)((function(t){return j.pipe(Object(a.a)((function(a){return a?Object(u.u)(t,{header$:e,viewport$:n}).pipe(Object(o.a)((function(t){return{hidden:t.offset.y>=10}})),Object(i.a)(),function(t){return Object(r.a)(Object(f.b)(b.a),Object(s.a)((function(e){var n=e.hidden;!function(t,e){t.setAttribute("data-md-state",e?"hidden":"")}(t,n)})),Object(O.a)((function(){!function(t){t.removeAttribute("data-md-state")}(t)})))}(t)):Object(c.a)({hidden:!0})})))})))}n.d(e,"a",(function(){return j}))},,,,,,,function(t,e,n){"use strict";n.r(e);var r=n(0),c=n(113),a=n(62),o=n(59),i=n(92),u=n(45),b=n(105),f=n(93),s=n(96),O=n(24),j=n(101),l=n(58),d=n(98),p=n(106),v=n(63),h=n(46),m=n(36),y=n(8),g=n(114),w=n(103),$=n(94),x=n(111),S=n(87),T=n(112),k=n(115),C=n(1),_=n(41),L=n(7),A=n(61),N=n(107),E=n(31),R=n(5);var M=n(116),P=n(109);var H=n(102);var U=n(110);function q(){return/(iPad|iPhone|iPod)/.test(navigator.userAgent)}var Q=n(104),z=n(117);function I(t){switch(Object(r.c)(t.match(/(git(?:hub|lab))/i)||[],1)[0].toLowerCase()){case"github":var e=Object(r.c)(t.match(/^.+github\.com\/([^\/]+)\/?([^\/]+)/i),3);return function(t,e){return Object(z.a)({url:void 0!==e?"https://api.github.com/repos/"+t+"/"+e:"https://api.github.com/users/"+t,responseType:"json"}).pipe(Object(j.a)((function(t){return 200===t.status})),Object(w.a)("response"),Object(O.a)((function(t){if(void 0!==e){var n=t.stargazers_count,r=t.forks_count;return Object(u.a)([Object(R.e)(n||0)+" Stars",Object(R.e)(r||0)+" Forks"])}var c=t.public_repos;return Object(u.a)([Object(R.e)(c||0)+" Repositories"])})))}(e[1],e[2]);case"gitlab":var n=Object(r.c)(t.match(/^.+?([^\/]*gitlab[^\/]+)\/(.+)/i),3);return function(t,e){return Object(z.a)({url:"https://"+t+"/api/v4/projects/"+encodeURIComponent(e),responseType:"json"}).pipe(Object(j.a)((function(t){return 200===t.status})),Object(w.a)("response"),Object(y.a)((function(t){var e=t.star_count,n=t.forks_count;return[Object(R.e)(e)+" Stars",Object(R.e)(n)+" Forks"]})))}(n[1],n[2]);default:return b.a}}var D=n(25);function W(t,e){t.setAttribute("data-md-state","lock"),t.style.top="-"+e+"px"}function J(t){var e=-1*parseInt(t.style.top,10);t.removeAttribute("data-md-state"),t.style.top="",e&&window.scrollTo(0,e)}function F(t){var e,n,z,F;if(!Object(R.d)(t))throw new SyntaxError("Invalid configuration: "+JSON.stringify(t));var B=Object(C.p)(),K=Object(C.q)(),Y=Object(C.t)(),V=Object(C.r)("(min-width: 960px)"),X=Object(C.r)("(min-width: 1220px)"),G=t.feature.instant?Object(C.l)({location$:B}):Object(C.l)();Object(C.j)(["drawer","search"],{document$:G}),Object(L.setupComponents)(["container","header","header-title","hero","main","navigation","search","search-query","search-reset","search-result","tabs","toc"],{document$:G});var Z=Object(_.c)(t.worker.search,{base:t.base,location$:B}),tt=Object(L.useComponent)("header").pipe(Object(L.mountHeader)({viewport$:Y}),Object(s.a)(1)),et=Object(L.useComponent)("main").pipe(Object(L.mountMain)({header$:tt,viewport$:Y}),Object(s.a)(1)),nt=Object(L.useComponent)("search-query").pipe(Object(L.mountSearchQuery)(Z),Object(s.a)(1)),rt=Object(L.useComponent)("search-reset").pipe(Object(L.mountSearchReset)(),Object(s.a)(1)),ct=Object(L.useComponent)("search-result").pipe(Object(L.mountSearchResult)(Z,{query$:nt}),Object(s.a)(1)),at=Object(L.useComponent)("search").pipe(Object(L.mountSearch)({query$:nt,reset$:rt,result$:ct}),Object(s.a)(1)),ot=Object(L.useComponent)("navigation").pipe(Object(L.mountNavigation)({header$:tt,main$:et,viewport$:Y,screen$:X}),Object(s.a)(1)),it=Object(L.useComponent)("toc").pipe(Object(L.mountTableOfContents)({header$:tt,main$:et,viewport$:Y,tablet$:V}),Object(s.a)(1)),ut=Object(L.useComponent)("tabs").pipe(Object(L.mountTabs)({header$:tt,viewport$:Y,screen$:X}),Object(s.a)(1)),bt=Object(L.useComponent)("hero").pipe(Object(L.mountHero)({header$:tt,viewport$:Y}),Object(s.a)(1)),ft=function(){var t=Object(C.k)("search"),e=t.pipe(Object(O.a)(C.s)),n=Object(C.o)().pipe(Object(v.a)(e),Object(y.a)((function(t){var e=Object(r.c)(t,2),n=e[0],c=e[1];return Object(r.a)({mode:c?"search":"global"},n)})),Object(g.a)());return n.pipe(Object(j.a)((function(t){return"search"===t.mode})),Object(v.a)(t,Object(L.useComponent)("search-query"),Object(L.useComponent)("search-result"))).subscribe((function(t){var e=Object(r.c)(t,4),n=e[0],c=e[1],a=e[2],o=e[3],i=Object(C.a)();switch(n.type){case"Enter":i===a&&n.claim();break;case"Escape":case"Tab":Object(C.h)(c,!1),Object(C.f)(a,!1);break;case"ArrowUp":case"ArrowDown":if(void 0===i)Object(C.f)(a);else{var u=Object(r.e)([a],Object(C.d)("[href]",o)),b=Math.max(0,(Math.max(0,u.indexOf(i))+u.length+("ArrowUp"===n.type?-1:1))%u.length);Object(C.f)(u[b])}n.claim();break;default:a!==Object(C.a)()&&Object(C.f)(a)}})),n.pipe(Object(j.a)((function(t){if("global"===t.mode){var e=Object(C.a)();if(void 0!==e)return!Object(C.e)(e)}return!1})),Object(v.a)(Object(L.useComponent)("search-query"))).subscribe((function(t){var e=Object(r.c)(t,2),n=e[0],c=e[1];switch(n.type){case"f":case"s":Object(C.f)(c),Object(C.g)(c),n.claim();break;case"p":case",":var a=Object(C.b)("[href][rel=prev]");void 0!==a&&a.click();break;case"n":case".":var o=Object(C.b)("[href][rel=next]");void 0!==o&&o.click()}})),n}();!function(t){var e=t.document$,n=t.hash$,c=e.pipe(Object(y.a)((function(){return Object(C.d)("details")})));Object(f.a)(Object(C.r)("print").pipe(Object(j.a)(M.a)),Object(i.a)(window,"beforeprint")).pipe(Object(P.a)(c)).subscribe((function(t){var e,n;try{for(var c=Object(r.f)(t),a=c.next();!a.done;a=c.next()){a.value.setAttribute("open","")}}catch(t){e={error:t}}finally{try{a&&!a.done&&(n=c.return)&&n.call(c)}finally{if(e)throw e.error}}})),n.pipe(Object(y.a)((function(t){return Object(C.b)('[id="'+t+'"]')})),Object(j.a)((function(t){return void 0!==t})),Object(l.a)((function(t){var e=t.closest("details");e&&!e.open&&e.setAttribute("open","")}))).subscribe((function(t){return t.scrollIntoView()}))}({document$:G,hash$:K}),function(t){t.document$.pipe(Object(H.a)(1),Object(v.a)(Object(L.useComponent)("container")),Object(y.a)((function(t){var e=Object(r.c)(t,2)[1];return Object(C.d)("script",e)}))).subscribe((function(t){var e,n;try{for(var c=Object(r.f)(t),a=c.next();!a.done;a=c.next()){var o=a.value;if(o.src||/(^|\/javascript)$/i.test(o.type)){var i=document.createElement("script"),u=o.src?"src":"innerText";i[u]=o[u],o.replaceWith(i)}}}catch(t){e={error:t}}finally{try{a&&!a.done&&(n=c.return)&&n.call(c)}finally{if(e)throw e.error}}}))}({document$:G}),function(t){t.document$.pipe(Object(y.a)((function(){return Object(C.c)(".md-source[href]")})),Object(O.a)((function(t){var e=t.href;return Object(R.a)(""+Object(R.c)(e),(function(){return I(e)}))})),Object(Q.a)((function(){return b.a}))).subscribe((function(t){var e,n;try{for(var c=Object(r.f)(Object(C.d)(".md-source__repository")),a=c.next();!a.done;a=c.next()){var o=a.value;o.hasAttribute("data-md-state")||(o.setAttribute("data-md-state","done"),o.appendChild(Object(E.c)(t)))}}catch(t){e={error:t}}finally{try{a&&!a.done&&(n=c.return)&&n.call(c)}finally{if(e)throw e.error}}}))}({document$:G}),function(t){var e=t.document$,n=document.createElement("table");e.pipe(Object(y.a)((function(){return Object(C.d)("table:not([class])")}))).subscribe((function(t){var e,c;try{for(var a=Object(r.f)(t),o=a.next();!o.done;o=a.next()){var i=o.value;i.replaceWith(n),n.replaceWith(Object(E.d)(i))}}catch(t){e={error:t}}finally{try{o&&!o.done&&(c=a.return)&&c.call(a)}finally{if(e)throw e.error}}}))}({document$:G}),function(t){var e=t.document$.pipe(Object(y.a)((function(){return Object(C.d)("[data-md-scrollfix]")})),Object(s.a)(1));e.subscribe((function(t){var e,n;try{for(var c=Object(r.f)(t),a=c.next();!a.done;a=c.next()){a.value.removeAttribute("data-md-scrollfix")}}catch(t){e={error:t}}finally{try{a&&!a.done&&(n=c.return)&&n.call(c)}finally{if(e)throw e.error}}})),Object(U.a)(q,e,b.a).pipe(Object(O.a)((function(t){return f.a.apply(void 0,Object(r.e)(t.map((function(t){return Object(i.a)(t,"touchstart").pipe(Object(p.a)(t))}))))}))).subscribe((function(t){var e=t.scrollTop;0===e?t.scrollTop=1:e+t.offsetHeight===t.scrollHeight&&(t.scrollTop=e-1)}))}({document$:G});var st=function(t){var e=(void 0===t?{}:t).duration,n=new D.a,r=document.createElement("div");return r.classList.add("md-dialog","md-typeset"),n.pipe(Object(O.a)((function(t){return Object(u.a)(document.body).pipe(Object(y.a)((function(t){return t.appendChild(r)})),Object(h.b)(o.a),Object(d.a)(1),Object(l.a)((function(e){e.innerHTML=t,e.setAttribute("data-md-state","open")})),Object(d.a)(e||2e3),Object(l.a)((function(t){return t.removeAttribute("data-md-state")})),Object(d.a)(400),Object(l.a)((function(t){t.innerHTML="",t.remove()})))}))).subscribe(),n}(),Ot=function(t){var e=t.document$,n=t.dialog$;if(!A.isSupported())return b.a;e.subscribe((function(){var t,e,n=Object(C.d)("pre > code");try{for(var c=Object(r.f)(n.entries()),a=c.next();!a.done;a=c.next()){var o=Object(r.c)(a.value,2),i=o[0],u=o[1],b=u.parentElement;b.id="__code_"+i,b.insertBefore(Object(E.a)(b.id),u)}}catch(e){t={error:e}}finally{try{a&&!a.done&&(e=c.return)&&e.call(c)}finally{if(t)throw t.error}}}));var c=Object(N.a)((function(t){new A(".md-clipboard").on("success",t)})).pipe(Object(g.a)());return c.pipe(Object(l.a)((function(t){return t.clearSelection()})),Object(p.a)(Object(R.f)("clipboard.copied"))).subscribe(n),c}({document$:G,dialog$:st});K.subscribe((function(){Object(C.k)("drawer").subscribe((function(t){Object(C.h)(t,!1)}))})),K.pipe(Object(O.a)((function(t){return Object(C.k)("search").pipe(Object(j.a)((function(t){return t.checked})),Object(l.a)((function(t){return Object(C.h)(t,!1)})),Object(d.a)(125),Object(p.a)(t))}))).subscribe((function(t){Object(C.b)('[id="'+t+'"]').scrollIntoView()}));var jt=Object(C.k)("search");function lt(t){return t.pathname===location.pathname&&t.hash.length>0}if(Object(a.a)([jt.pipe(Object(O.a)(C.s)),V]).pipe(Object(v.a)(Y),Object(O.a)((function(t){var e=Object(r.c)(t,2),n=Object(r.c)(e[0],2),c=n[0],a=n[1],i=e[1].offset.y,u=c&&!a;return G.pipe(Object(d.a)(u?400:100),Object(h.b)(o.a),Object(l.a)((function(t){var e=t.body;return u?W(e,i):J(e)})))}))).subscribe(),t.feature.instant){"scrollRestoration"in history&&(history.scrollRestoration="manual");try{for(var dt=Object(r.f)(['link[rel="shortcut icon"]','link[rel="stylesheet"]']),pt=dt.next();!pt.done;pt=dt.next()){var vt=pt.value;try{for(var ht=(z=void 0,Object(r.f)(Object(C.d)(vt))),mt=ht.next();!mt.done;mt=ht.next()){var yt=mt.value;yt.href=yt.href}}catch(t){z={error:t}}finally{try{mt&&!mt.done&&(F=ht.return)&&F.call(ht)}finally{if(z)throw z.error}}}}catch(t){e={error:t}}finally{try{pt&&!pt.done&&(n=dt.return)&&n.call(dt)}finally{if(e)throw e.error}}var gt=Object(i.a)(document.body,"click").pipe(Object(j.a)((function(t){return!(t.metaKey||t.ctrlKey)})),Object(O.a)((function(t){if(t.target instanceof HTMLElement){var e=t.target.closest("a");if(e&&function(t){return t.host===location.host&&(!t.pathname||"/"===t.pathname||/\/[\w-]+(?:\/?|\.html)$/i.test(t.pathname))}(e))return lt(e)||t.preventDefault(),Object(u.a)(e.href)}return b.a})),Object(m.a)(),Object(y.a)((function(t){return{url:new URL(t)}})),Object(g.a)()),wt=gt.pipe(Object(j.a)((function(t){return!lt(t.url)})),Object(g.a)()),$t=Object(i.a)(window,"popstate").pipe(Object(j.a)((function(t){return null!==t.state})),Object(y.a)((function(t){return{url:new URL(location.href),data:t.state}})),Object(g.a)());Object(f.a)(wt,$t).pipe(Object(w.a)("url")).subscribe(B),gt.pipe(Object(m.a)((function(t,e){var n=t.url,r=e.url;return n.href===r.href})),Object(j.a)((function(t){return!lt(t.url)}))).subscribe((function(t){var e=t.url;history.pushState({},"",e.toString())})),Object(f.a)(gt,$t).pipe(Object($.a)(2,1)).subscribe((function(t){var e=Object(r.c)(t,2),n=e[0],c=e[1];console.log("<- "+n.url),console.log("-> "+c.url),null!==n.url.href.match(c.url.href)&<(n.url)&&Object(C.i)(c.data||{y:0})})),Y.pipe(Object(x.a)(250),Object(S.a)("offset")).subscribe((function(t){var e=t.offset;history.replaceState(e,"")})),Object(f.a)(wt,$t).pipe(Object(T.a)(G),Object(v.a)(G)).subscribe((function(t){var e,n,c=Object(r.c)(t,2),a=c[0],o=a.url,i=a.data,u=c[1],b=u.title,f=u.head;console.log("Done",o.href,i),document.dispatchEvent(new CustomEvent("DOMContentSwitch")),document.title=b;try{for(var s=Object(r.f)(['link[rel="canonical"]','meta[name="author"]','meta[name="description"]']),O=s.next();!O.done;O=s.next()){var j=O.value,l=Object(C.b)(j,f),d=Object(C.b)(j,document.head);void 0!==l&&void 0!==d&&d.replaceWith(l)}}catch(t){e={error:t}}finally{try{O&&!O.done&&(n=s.return)&&n.call(s)}finally{if(e)throw e.error}}if(Object(C.k)("search").subscribe((function(t){Object(C.h)(t,!1)})),o.hash){console.log("hash data?",i);var p=document.createElement("a");p.href=o.hash,p.click()}else Object(C.i)(i||{y:0})})),$t.subscribe((function(t){var e=t.url;console.log("Popstate "+e.href,e)}))}ft.pipe(Object(j.a)((function(t){return"global"===t.mode&&["Tab"].includes(t.type)})),Object(k.a)(1)).subscribe((function(){var t,e;try{for(var n=Object(r.f)(Object(C.d)(".headerlink")),c=n.next();!c.done;c=n.next()){c.value.style.visibility="visible"}}catch(e){t={error:e}}finally{try{c&&!c.done&&(e=n.return)&&e.call(n)}finally{if(t)throw t.error}}}));var xt={search$:at,clipboard$:Ot,location$:B,hash$:K,keyboard$:ft,dialog$:st,main$:et,navigation$:ot,toc$:it,tabs$:ut,hero$:bt},St=Object(r.d)(xt,[]);return f.a.apply(void 0,Object(r.e)(Object(c.a)(St))).subscribe(),{state:xt}}n.d(e,"setScrollLock",(function(){return W})),n.d(e,"resetScrollLock",(function(){return J})),n.d(e,"initialize",(function(){return F})),document.documentElement.classList.remove("no-js"),document.documentElement.classList.add("js"),navigator.userAgent.match(/(iPad|iPhone|iPod)/g)&&document.documentElement.classList.add("ios")}])); -//# sourceMappingURL=bundle.8ceb0d66.min.js.map \ No newline at end of file diff --git a/material/assets/javascripts/bundle.8ceb0d66.min.js.map b/material/assets/javascripts/bundle.8ceb0d66.min.js.map deleted file mode 100644 index 03b87d5c4..000000000 --- a/material/assets/javascripts/bundle.8ceb0d66.min.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/assets/javascripts/observables/agent/location/_/index.ts","webpack:///./src/assets/javascripts/observables/agent/location/hash/index.ts","webpack:///./src/assets/javascripts/observables/agent/document/switch/index.ts","webpack:///./src/assets/javascripts/observables/agent/document/_/index.ts","webpack:///./src/assets/javascripts/observables/agent/element/_/index.ts","webpack:///./src/assets/javascripts/observables/agent/element/focus/index.ts","webpack:///./src/assets/javascripts/observables/agent/element/offset/index.ts","webpack:///./src/assets/javascripts/observables/agent/element/select/index.ts","webpack:///./src/assets/javascripts/observables/agent/keyboard/index.ts","webpack:///./src/assets/javascripts/observables/agent/media/index.ts","webpack:///./src/assets/javascripts/observables/agent/viewport/offset/index.ts","webpack:///./src/assets/javascripts/observables/agent/viewport/size/index.ts","webpack:///./src/assets/javascripts/observables/agent/viewport/_/index.ts","webpack:///./src/assets/javascripts/observables/agent/worker/index.ts","webpack:///./src/assets/javascripts/observables/toggle/index.ts","webpack:///./src/assets/javascripts/observables/index.ts","webpack:///./src/assets/javascripts/utilities/config/index.ts","webpack:///./src/assets/javascripts/utilities/jsx/index.ts","webpack:///./src/assets/javascripts/utilities/rxjs/index.ts","webpack:///./src/assets/javascripts/utilities/string/index.ts","webpack:///./src/assets/javascripts/utilities/index.ts","webpack:///./src/assets/javascripts/components/index.ts","webpack:///./src/assets/javascripts/components/shared/sidebar/apply/index.ts","webpack:///./src/assets/javascripts/components/_/index.ts","webpack:///./src/assets/javascripts/components/toc/anchor/apply/index.ts","webpack:///./src/assets/javascripts/components/shared/index.ts","webpack:///./src/assets/javascripts/templates/clipboard/index.tsx","webpack:///./src/assets/javascripts/templates/search/index.tsx","webpack:///./src/assets/javascripts/templates/source/index.tsx","webpack:///./src/assets/javascripts/templates/table/index.tsx","webpack:///./src/assets/javascripts/templates/index.ts","webpack:///./src/assets/javascripts/components/navigation/layer/apply/index.ts","webpack:///./src/assets/javascripts/workers/search/message/index.ts","webpack:///./src/assets/javascripts/workers/search/_/index.ts","webpack:///./src/assets/javascripts/workers/index.ts","webpack:///./src/assets/javascripts/components/navigation/layer/index.ts","webpack:///./src/assets/javascripts/components/toc/anchor/index.ts","webpack:///./src/assets/javascripts/components/navigation/index.ts","webpack:///./src/assets/javascripts/components/navigation/_/index.ts","webpack:///./src/assets/javascripts/components/shared/sidebar/index.ts","webpack:///./src/assets/javascripts/components/shared/sidebar/paint/index.ts","webpack:///./src/assets/javascripts/components/shared/sidebar/watch/index.ts","webpack:///./src/assets/javascripts/components/navigation/layer/paint/index.ts","webpack:///./src/assets/javascripts/components/navigation/layer/watch/index.ts","webpack:///./src/assets/javascripts/components/toc/index.ts","webpack:///./src/assets/javascripts/components/toc/_/index.ts","webpack:///./src/assets/javascripts/components/toc/anchor/paint/index.ts","webpack:///./src/assets/javascripts/components/toc/anchor/watch/index.ts","webpack:///./src/assets/javascripts/components/search/_/index.ts","webpack:///./src/assets/javascripts/components/search/query/watch/index.ts","webpack:///./src/assets/javascripts/components/search/query/_/index.ts","webpack:///./src/assets/javascripts/components/search/reset/_/index.ts","webpack:///./src/assets/javascripts/components/search/reset/watch/index.ts","webpack:///./src/assets/javascripts/components/search/result/apply/index.ts","webpack:///./src/assets/javascripts/components/search/result/paint/index.ts","webpack:///./src/assets/javascripts/components/search/result/_/index.ts","webpack:///./src/assets/javascripts/components/search/index.ts","webpack:///./src/assets/javascripts/components/header/_/index.ts","webpack:///./src/assets/javascripts/components/header/watch/index.ts","webpack:///./src/assets/javascripts/components/header/paint/index.ts","webpack:///./src/assets/javascripts/components/header/apply/index.ts","webpack:///./src/assets/javascripts/components/header/index.ts","webpack:///./src/assets/javascripts/components/main/_/index.ts","webpack:///./src/assets/javascripts/components/main/paint/index.ts","webpack:///./src/assets/javascripts/components/main/apply/index.ts","webpack:///./src/assets/javascripts/components/main/watch/index.ts","webpack:///./src/assets/javascripts/components/main/index.ts","webpack:///./src/assets/javascripts/components/hero/_/index.ts","webpack:///./src/assets/javascripts/components/hero/paint/index.ts","webpack:///./src/assets/javascripts/components/hero/apply/index.ts","webpack:///./src/assets/javascripts/components/hero/index.ts","webpack:///./src/assets/javascripts/components/tabs/_/index.ts","webpack:///./src/assets/javascripts/components/tabs/paint/index.ts","webpack:///./src/assets/javascripts/components/tabs/apply/index.ts","webpack:///./src/assets/javascripts/components/tabs/index.ts","webpack:///./src/assets/javascripts/patches/scrollfix/index.ts","webpack:///./src/assets/javascripts/patches/source/index.ts","webpack:///./src/assets/javascripts/patches/source/github/index.ts","webpack:///./src/assets/javascripts/patches/source/gitlab/index.ts","webpack:///./src/assets/javascripts/index.ts","webpack:///./src/assets/javascripts/integrations/keyboard/index.ts","webpack:///./src/assets/javascripts/patches/details/index.ts","webpack:///./src/assets/javascripts/patches/script/index.ts","webpack:///./src/assets/javascripts/patches/table/index.ts","webpack:///./src/assets/javascripts/integrations/dialog/index.ts","webpack:///./src/assets/javascripts/integrations/clipboard/index.ts"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","0","exports","module","l","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","jsonpArray","window","oldJsonpFunction","slice","watchLocation","BehaviorSubject","URL","location","href","getLocationHash","hash","substring","watchLocationHash","fromEvent","pipe","map","startWith","filter","share","watchDocumentSwitch","location$","distinctUntilKeyChanged","skip","switchMap","url","ajax","responseType","withCredentials","pluck","catchError","setLocation","watchDocument","merge","document","mapTo","shareReplay","getElement","selector","node","querySelector","undefined","getElementOrThrow","el","ReferenceError","getActiveElement","activeElement","HTMLElement","getElements","Array","from","querySelectorAll","setElementFocus","focus","blur","watchElementFocus","focus$","blur$","getElementOffset","x","scrollLeft","y","scrollTop","watchElementOffset","setElementSelection","HTMLInputElement","Error","select","isSusceptibleToKeyboard","tagName","isContentEditable","watchKeyboard","ev","metaKey","ctrlKey","type","claim","preventDefault","stopPropagation","watchMedia","query","media","matchMedia","fromEventPattern","next","addListener","matches","getViewportOffset","Math","max","pageXOffset","pageYOffset","setViewportOffset","scrollTo","getViewportSize","width","innerWidth","height","innerHeight","watchViewport","combineLatest","offset","size","watchViewportAt","header$","viewport$","offset$","offsetLeft","offsetTop","watchWorker","worker","tx$","rx$","addEventListener","throttle","leading","trailing","tap","message","postMessage","switchMapTo","toggles$","setupToggles","names","document$","take","reduce","toggles","useToggle","of","distinctUntilChanged","setToggle","checked","click","watchToggle","isConfig","config","base","search","setAttribute","setAttributeNS","appendChild","child","innerHTML","toString","Node","isArray","h","tag","attributes","createElementNS","createElement","keys","attr","children","cache","factory","defer","sessionStorage","getItem","JSON","parse","value$","subscribe","setItem","stringify","err","lang","translate","innerText","replace","truncate","round","toFixed","len","charCodeAt","setSidebarOffset","style","top","resetSidebarOffset","setSidebarHeight","resetSidebarHeight","setSidebarLock","resetSidebarLock","removeAttribute","components$","setupComponents","components","prev","replaceWith","useComponent","setAnchorBlur","resetAnchorBlur","setAnchorActive","classList","toggle","resetAnchorActive","remove","css","container","renderClipboard","id","path","class","title","xmlns","viewBox","item","link","article","section","teaser","renderSearchResult","sections","text","tabIndex","facts","fact","renderSource","wrapper","table","renderTable","setOverflowScrolling","webkitOverflowScrolling","resetOverflowScrolling","SearchMessageType","isSearchResultMessage","RESULT","setupSearchWorker","index","Worker","origin$","Subject","withLatestFrom","origin","SETUP","mountNavigation","main$","screen$","screen","sidebar","els","layer","paintSidebar","lock","watchSidebar","adjust$","parseFloat","getComputedStyle","parentElement","getPropertyValue","height$","adjust","min","lock$","paintNavigationLayer","watchNavigationLayer","Map","label","input","htmlFor","set","mountTableOfContents","tablet$","tablet","sidebar$","anchors$","anchors","paintAnchorList","entries","watchAnchorList","decodeURIComponent","target","header","anchor","pop","a","b","mountSearch","query$","reset$","result$","defaultTransform","trim","mountSearchQuery","options","toggle$","fn","transform","delay","watchSearchQuery","QUERY","mountSearchReset","watchSearchReset","addToSearchResultList","paintSearchResult","fetch$","list","meta","textContent","setSearchResultMeta","resetSearchResultMeta","observeOn","animationFrame","scan","scrollHeight","offsetHeight","finalize","resetSearchResultList","mountSearchResult","identity","mountHeader","styles","sticky","includes","position","watchHeader","type$","main","hx","setHeaderTitleActive","resetHeaderTitleActive","paintHeaderType","mountMain","active","setHeaderShadow","resetHeaderShadow","bottom","active$","watchMain","mountHero","hidden","setHeroHidden","resetHeroHidden","paintHero","mountTabs","setTabsHidden","resetTabsHidden","paintTabs","isAppleDevice","test","navigator","userAgent","fetchSourceFacts","toLowerCase","user","repo","status","stargazers_count","forks_count","public_repos","fetchSourceFactsFromGitHub","project","encodeURIComponent","star_count","fetchSourceFactsFromGitLab","setScrollLock","resetScrollLock","parseInt","initialize","SyntaxError","hash$","feature","instant","search$","navigation$","toc$","tabs$","hero$","keyboard$","indexOf","setupKeyboard","els$","details","closest","open","scrollIntoView","patchDetails","src","script","patchScripts","hasAttribute","patchSource","sentinel","patchTables","iif","patchScrollfix","dialog$","duration","dialog","add","body","setupDialog","clipboard$","blocks","block","parent","insertBefore","on","clearSelection","setupClipboard","isAnchorLink","pathname","history","scrollRestoration","internal$","host","isInternalLink","dispatch$","popstate$","state","pushState","bufferCount","console","log","match","debounceTime","replaceState","sample","head","dispatchEvent","CustomEvent","visibility","values","rest","documentElement"],"mappings":"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","file":"assets/javascripts/bundle.8ceb0d66.min.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t0: 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([91,1]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { BehaviorSubject } from \"rxjs\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve location\n *\n * This function will return a `URL` object (and not `Location`) in order to\n * normalize typings across the application. Furthermore, locations need to be\n * tracked without setting them and `Location` is a singleton which represents\n * the current location.\n *\n * @return URL\n */\nexport function getLocation(): URL {\n return new URL(location.href)\n}\n\n/**\n * Set location\n *\n * @param url - URL to change to\n */\nexport function setLocation(url: URL): void {\n location.href = url.href\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch location\n *\n * @return Location subject\n */\nexport function watchLocation(): BehaviorSubject {\n return new BehaviorSubject(getLocation())\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, fromEvent } from \"rxjs\"\nimport { filter, map, share, startWith } from \"rxjs/operators\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve location hash\n *\n * @return Location hash\n */\nexport function getLocationHash(): string {\n return location.hash.substring(1)\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch location hash\n *\n * @return Location hash observable\n */\nexport function watchLocationHash(): Observable {\n return fromEvent(window, \"hashchange\")\n .pipe(\n map(getLocationHash),\n startWith(getLocationHash()),\n filter(hash => hash.length > 0),\n share()\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { NEVER, Observable } from \"rxjs\"\nimport { ajax } from \"rxjs/ajax\"\nimport {\n catchError,\n distinctUntilKeyChanged,\n pluck,\n share,\n skip,\n switchMap\n} from \"rxjs/operators\"\n\nimport { setLocation } from \"../../location\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n location$: Observable /* Location observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch document switch\n *\n * This function returns an observables that fetches a document if the provided\n * location observable emits a new value (i.e. URL). If the emitted URL points\n * to the same page, the request is effectively ignored (i.e. when only the\n * fragment identifier changes).\n *\n * In case the request fails, the location change is dispatched regularly.\n *\n * @param options - Options\n *\n * @return Document switch observable\n */\nexport function watchDocumentSwitch(\n { location$ }: WatchOptions\n): Observable {\n return location$\n .pipe(\n distinctUntilKeyChanged(\"pathname\"),\n skip(1),\n\n /* Fetch document */\n switchMap(url => ajax({\n url: url.href,\n responseType: \"document\",\n withCredentials: true\n })\n .pipe(\n pluck(\"response\"),\n catchError(() => {\n setLocation(url)\n return NEVER\n })\n )\n ),\n share()\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { NEVER, Observable, fromEvent, merge } from \"rxjs\"\nimport { mapTo, shareReplay } from \"rxjs/operators\"\n\nimport { watchDocumentSwitch } from \"../switch\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n location$?: Observable /* Location observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch document\n *\n * If the location observable is passed, instant loading will be enabled which\n * means that new values will be emitted every time the location changes.\n *\n * @return Document observable\n */\nexport function watchDocument(\n { location$ }: WatchOptions = {}\n): Observable {\n return merge(\n fromEvent(document, \"DOMContentLoaded\")\n .pipe(\n mapTo(document)\n ),\n typeof location$ !== \"undefined\"\n ? watchDocumentSwitch({ location$ })\n : NEVER\n )\n .pipe(\n shareReplay(1)\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve an element matching the query selector\n *\n * @template T - Element type\n *\n * @param selector - Query selector\n * @param node - Node of reference\n *\n * @return Element or nothing\n */\nexport function getElement(\n selector: string, node: ParentNode = document\n): T | undefined {\n return node.querySelector(selector) || undefined\n}\n\n/**\n * Retrieve an element matching a query selector or throw a reference error\n *\n * @template T - Element type\n *\n * @param selector - Query selector\n * @param node - Node of reference\n *\n * @return Element\n */\nexport function getElementOrThrow(\n selector: string, node: ParentNode = document\n): T {\n const el = getElement(selector, node)\n if (typeof el === \"undefined\")\n throw new ReferenceError(\n `Missing element: expected \"${selector}\" to be present`\n )\n return el\n}\n\n/**\n * Retrieve the currently active element\n *\n * @return Element\n */\nexport function getActiveElement(): HTMLElement | undefined {\n return document.activeElement instanceof HTMLElement\n ? document.activeElement\n : undefined\n}\n\n/**\n * Retrieve all elements matching the query selector\n *\n * @template T - Element type\n *\n * @param selector - Query selector\n * @param node - Node of reference\n *\n * @return Elements\n */\nexport function getElements(\n selector: string, node: ParentNode = document\n): T[] {\n return Array.from(node.querySelectorAll(selector))\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, fromEvent, merge } from \"rxjs\"\nimport { mapTo, shareReplay, startWith } from \"rxjs/operators\"\n\nimport { getActiveElement } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set element focus\n *\n * @param el - Element\n * @param value - Whether the element should be focused\n *\n * @return Element offset\n */\nexport function setElementFocus(\n el: HTMLElement, value: boolean = true\n): void {\n if (value)\n el.focus()\n else\n el.blur()\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch element focus\n *\n * @param el - Element\n *\n * @return Element focus observable\n */\nexport function watchElementFocus(\n el: HTMLElement\n): Observable {\n const focus$ = fromEvent(el, \"focus\")\n const blur$ = fromEvent(el, \"blur\")\n\n /* Map events to boolean state */\n return merge(\n focus$.pipe(mapTo(true)),\n blur$.pipe(mapTo(false))\n )\n .pipe(\n startWith(el === getActiveElement()),\n shareReplay(1)\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, fromEvent, merge } from \"rxjs\"\nimport { map, shareReplay, startWith } from \"rxjs/operators\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Element offset\n */\nexport interface ElementOffset {\n x: number /* Horizontal offset */\n y: number /* Vertical offset */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve element offset\n *\n * @param el - Element\n *\n * @return Element offset\n */\nexport function getElementOffset(el: HTMLElement): ElementOffset {\n return {\n x: el.scrollLeft,\n y: el.scrollTop\n }\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch element offset\n *\n * @param el - Element\n *\n * @return Element offset observable\n */\nexport function watchElementOffset(\n el: HTMLElement\n): Observable {\n return merge(\n fromEvent(el, \"scroll\"),\n fromEvent(window, \"resize\")\n )\n .pipe(\n map(() => getElementOffset(el)),\n startWith(getElementOffset(el)),\n shareReplay(1)\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set element text selection\n *\n * @param el - Element\n */\nexport function setElementSelection(\n el: HTMLElement\n): void {\n if (el instanceof HTMLInputElement)\n el.select()\n else\n throw new Error(\"Not implemented\")\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, fromEvent } from \"rxjs\"\nimport { filter, map, share } from \"rxjs/operators\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Key\n */\nexport interface Key {\n type: string /* Key type */\n claim(): void /* Key claim */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Check whether an element may receive keyboard input\n *\n * @param el - Element\n *\n * @return Test result\n */\nexport function isSusceptibleToKeyboard(el: HTMLElement) {\n switch (el.tagName) {\n\n /* Form elements */\n case \"INPUT\":\n case \"SELECT\":\n case \"TEXTAREA\":\n return true\n\n /* Everything else */\n default:\n return el.isContentEditable\n }\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch keyboard\n *\n * @return Keyboard observable\n */\nexport function watchKeyboard(): Observable {\n return fromEvent(window, \"keydown\")\n .pipe(\n filter(ev => !(ev.metaKey || ev.ctrlKey)),\n map(ev => ({\n type: ev.key,\n claim() {\n ev.preventDefault()\n ev.stopPropagation()\n }\n })),\n share()\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, fromEventPattern } from \"rxjs\"\nimport { shareReplay, startWith } from \"rxjs/operators\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch media query\n *\n * @param query - Media query\n *\n * @return Media observable\n */\nexport function watchMedia(query: string): Observable {\n const media = matchMedia(query)\n return fromEventPattern(next =>\n media.addListener(() => next(media.matches))\n )\n .pipe(\n startWith(media.matches),\n shareReplay(1)\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, fromEvent, merge } from \"rxjs\"\nimport { map, startWith } from \"rxjs/operators\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Viewport offset\n */\nexport interface ViewportOffset {\n x: number /* Horizontal offset */\n y: number /* Vertical offset */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve viewport offset\n *\n * On iOS Safari, viewport offset can be negative due to overflow scrolling.\n * As this may induce strange behaviors downstream, we'll just limit it to 0.\n *\n * @return Viewport offset\n */\nexport function getViewportOffset(): ViewportOffset {\n return {\n x: Math.max(0, pageXOffset),\n y: Math.max(0, pageYOffset)\n }\n}\n\n/**\n * Set viewport offset\n *\n * @param offset - Viewport offset\n */\nexport function setViewportOffset(\n { x, y }: Partial\n): void {\n window.scrollTo(x || 0, y || 0)\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch viewport offset\n *\n * @return Viewport offset observable\n */\nexport function watchViewportOffset(): Observable {\n return merge(\n fromEvent(window, \"scroll\"),\n fromEvent(window, \"resize\")\n )\n .pipe(\n map(getViewportOffset),\n startWith(getViewportOffset())\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, fromEvent } from \"rxjs\"\nimport { map, startWith } from \"rxjs/operators\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Viewport size\n */\nexport interface ViewportSize {\n width: number /* Viewport width */\n height: number /* Viewport height */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve viewport size\n *\n * @return Viewport size\n */\nexport function getViewportSize(): ViewportSize {\n return {\n width: innerWidth,\n height: innerHeight\n }\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch viewport size\n *\n * @return Viewport size observable\n */\nexport function watchViewportSize(): Observable {\n return fromEvent(window, \"resize\")\n .pipe(\n map(getViewportSize),\n startWith(getViewportSize())\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, combineLatest } from \"rxjs\"\nimport {\n distinctUntilKeyChanged,\n map,\n shareReplay\n} from \"rxjs/operators\"\n\nimport { Header } from \"../../../header\"\nimport {\n ViewportOffset,\n watchViewportOffset\n} from \"../offset\"\nimport {\n ViewportSize,\n watchViewportSize\n} from \"../size\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Viewport\n */\nexport interface Viewport {\n offset: ViewportOffset /* Viewport offset */\n size: ViewportSize /* Viewport size */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch relative options\n */\ninterface WatchRelativeOptions {\n header$: Observable
/* Header observable */\n viewport$: Observable /* Viewport observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch viewport\n *\n * @return Viewport observable\n */\nexport function watchViewport(): Observable {\n return combineLatest([\n watchViewportOffset(),\n watchViewportSize()\n ])\n .pipe(\n map(([offset, size]) => ({ offset, size })),\n shareReplay(1)\n )\n}\n\n/**\n * Watch viewport relative to element\n *\n * @param el - Element\n * @param options - Options\n *\n * @return Viewport observable\n */\nexport function watchViewportAt(\n el: HTMLElement, { header$, viewport$ }: WatchRelativeOptions\n): Observable {\n const offset$ = viewport$\n .pipe(\n distinctUntilKeyChanged(\"size\"),\n map((): ViewportOffset => ({\n x: el.offsetLeft,\n y: el.offsetTop\n }))\n )\n\n /* Compute relative viewport, return hot observable */\n return combineLatest([header$, viewport$, offset$])\n .pipe(\n map(([{ height }, { offset, size }, { x, y }]) => ({\n offset: {\n x: offset.x - x,\n y: offset.y - y + height\n },\n size\n })),\n shareReplay(1)\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, Subject, fromEventPattern } from \"rxjs\"\nimport {\n pluck,\n share,\n switchMapTo,\n tap,\n throttle\n} from \"rxjs/operators\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Worker message\n */\nexport interface WorkerMessage {\n type: unknown /* Message type */\n data: unknown /* Message data */\n}\n\n/**\n * Worker handler\n *\n * @template T - Message type\n */\nexport interface WorkerHandler<\n T extends WorkerMessage\n> {\n tx$: Subject /* Message transmission subject */\n rx$: Observable /* Message receive observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n *\n * @template T - Worker message type\n */\ninterface WatchOptions {\n tx$: Observable /* Message transmission observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch a web worker\n *\n * This function returns an observable that will send all values emitted by the\n * message observable to the web worker. Web worker communication is expected\n * to be bidirectional (request-response) and synchronous. Messages that are\n * emitted during a pending request are throttled, the last one is emitted.\n *\n * @param worker - Web worker\n * @param options - Options\n *\n * @return Worker message observable\n */\nexport function watchWorker(\n worker: Worker, { tx$ }: WatchOptions\n): Observable {\n\n /* Intercept messages from worker-like objects */\n const rx$ = fromEventPattern(next =>\n worker.addEventListener(\"message\", next)\n )\n .pipe(\n pluck(\"data\")\n )\n\n /* Send and receive messages, return hot observable */\n return tx$\n .pipe(\n throttle(() => rx$, { leading: true, trailing: true }),\n tap(message => worker.postMessage(message)),\n switchMapTo(rx$),\n share()\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { NEVER, Observable, fromEvent, of } from \"rxjs\"\nimport {\n distinctUntilChanged,\n map,\n shareReplay,\n startWith,\n switchMap,\n take\n} from \"rxjs/operators\"\n\nimport { getElement } from \"../agent\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Toggle\n */\nexport type Toggle =\n | \"drawer\" /* Toggle for drawer */\n | \"search\" /* Toggle for search */\n\n/**\n * Toggle map\n */\nexport type ToggleMap = {\n [P in Toggle]?: HTMLInputElement\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n document$: Observable /* Document observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * Toggle map observable\n */\nlet toggles$: Observable\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup bindings to toggles with given names\n *\n * @param names - Toggle names\n * @param options - Options\n */\nexport function setupToggles(\n names: Toggle[], { document$ }: WatchOptions\n): void {\n toggles$ = document$\n .pipe(\n\n /* Ignore document switches */\n take(1),\n\n /* Build toggle map */\n map(document => names.reduce((toggles, name) => {\n const el = getElement(`[data-md-toggle=${name}]`, document)\n return {\n ...toggles,\n ...typeof el !== \"undefined\" ? { [name]: el } : {}\n }\n }, {})),\n\n /* Convert to hot observable */\n shareReplay(1)\n )\n}\n\n/**\n * Retrieve a toggle\n *\n * The returned observable will only re-emit if the element changed, i.e. if\n * it was replaced from a document which was switched to.\n *\n * @param name - Toggle name\n *\n * @return Element observable\n */\nexport function useToggle(\n name: Toggle\n): Observable {\n return toggles$\n .pipe(\n switchMap(toggles => (\n typeof toggles[name] !== \"undefined\"\n ? of(toggles[name]!)\n : NEVER\n )),\n distinctUntilChanged()\n )\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Set toggle\n *\n * Simulating a click event seems to be the most cross-browser compatible way\n * of changing the value while also emitting a `change` event. Before, Material\n * used `CustomEvent` to programmatically change the value of a toggle, but this\n * is a much simpler and cleaner solution which doesn't require a polyfill.\n *\n * @param el - Toggle element\n * @param value - Toggle value\n */\nexport function setToggle(\n el: HTMLInputElement, value: boolean\n): void {\n if (el.checked !== value)\n el.click()\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch toggle\n *\n * @param el - Toggle element\n *\n * @return Toggle observable\n */\nexport function watchToggle(\n el: HTMLInputElement\n): Observable {\n return fromEvent(el, \"change\")\n .pipe(\n map(() => el.checked),\n startWith(el.checked)\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./agent\"\nexport * from \"./toggle\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Configuration\n */\nexport interface Config {\n base: string /* Base URL */\n worker: {\n search: string /* Search worker URL */\n }\n feature: {\n instant: true /* Instant loading */\n }\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Ensure that the given value is a valid configuration\n *\n * We could use `jsonschema` or any other schema validation framework, but that\n * would just add more bloat to the bundle, so we'll keep it plain and simple.\n *\n * @param config - Configuration\n *\n * @return Test result\n */\nexport function isConfig(config: any): config is Config {\n return typeof config === \"object\"\n && typeof config.base === \"string\"\n && typeof config.worker === \"object\"\n && typeof config.worker.search === \"string\"\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n// tslint:disable no-null-keyword\n\nimport { JSX as JSXInternal } from \"preact\"\nimport { keys } from \"ramda\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * HTML and SVG attributes\n */\ntype Attributes =\n & JSXInternal.HTMLAttributes\n & JSXInternal.SVGAttributes\n & Record\n\n/**\n * Child element\n */\ntype Child =\n | HTMLElement\n | SVGElement\n | Text\n | string\n | number\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Create an element\n *\n * @param tag - HTML or SVG tag\n *\n * @return Element\n */\nfunction createElement(tag: string): HTMLElement | SVGElement {\n switch (tag) {\n\n /* SVG elements */\n case \"svg\":\n case \"path\":\n return document.createElementNS(\"http://www.w3.org/2000/svg\", tag)\n\n /* HTML elements */\n default:\n return document.createElement(tag)\n }\n}\n\n/**\n * Set an attribute\n *\n * @param el - Element\n * @param name - Attribute name\n * @param value - Attribute value\n */\nfunction setAttribute(\n el: HTMLElement | SVGElement, name: string, value: string) {\n switch (name) {\n\n /* Attributes to be ignored */\n case \"xmlns\":\n break\n\n /* Attributes of SVG elements */\n case \"viewBox\":\n case \"d\":\n if (typeof value !== \"boolean\")\n el.setAttributeNS(null, name, value)\n else if (value)\n el.setAttributeNS(null, name, \"\")\n break\n\n /* Attributes of HTML elements */\n default:\n if (typeof value !== \"boolean\")\n el.setAttribute(name, value)\n else if (value)\n el.setAttribute(name, \"\")\n }\n}\n\n/**\n * Append a child node to an element\n *\n * @param el - Element\n * @param child - Child node(s)\n */\nfunction appendChild(\n el: HTMLElement | SVGElement, child: Child | Child[]\n): void {\n\n /* Handle primitive types (including raw HTML) */\n if (typeof child === \"string\" || typeof child === \"number\") {\n el.innerHTML += child.toString()\n\n /* Handle nodes */\n } else if (child instanceof Node) {\n el.appendChild(child)\n\n /* Handle nested children */\n } else if (Array.isArray(child)) {\n for (const node of child)\n appendChild(el, node)\n }\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * JSX factory\n *\n * @param tag - HTML or SVG tag\n * @param attributes - HTML attributes\n * @param children - Child elements\n *\n * @return Element\n */\nexport function h(\n tag: string, attributes: Attributes | null, ...children: Child[]\n): HTMLElement | SVGElement {\n const el = createElement(tag)\n\n /* Set attributes, if any */\n if (attributes)\n for (const attr of keys(attributes))\n setAttribute(el, attr, attributes[attr])\n\n /* Append child nodes */\n for (const child of children)\n appendChild(el, child)\n\n /* Return element */\n return el\n}\n\n/* ----------------------------------------------------------------------------\n * Namespace\n * ------------------------------------------------------------------------- */\n\nexport declare namespace h {\n namespace JSX {\n type Element = HTMLElement | SVGElement\n type IntrinsicElements = JSXInternal.IntrinsicElements\n }\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, defer, of } from \"rxjs\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Cache the last value emitted by an observable in session storage\n *\n * If the key is not found in session storage, the factory is executed and the\n * latest value emitted will automatically be persisted to sessions storage.\n * Note that the values emitted by the returned observable must be serializable\n * as `JSON`, or data will be lost.\n *\n * @template T - Value type\n *\n * @param key - Cache key\n * @param factory - Observable factory\n *\n * @return Value observable\n */\nexport function cache(\n key: string, factory: () => Observable\n): Observable {\n return defer(() => {\n const data = sessionStorage.getItem(key)\n if (data) {\n return of(JSON.parse(data) as T)\n\n /* Retrieve value from observable factory and write to storage */\n } else {\n const value$ = factory()\n value$.subscribe(value => {\n try {\n sessionStorage.setItem(key, JSON.stringify(value))\n } catch (err) {\n /* Uncritical, just swallow */\n }\n })\n\n /* Return value */\n return value$\n }\n })\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { getElementOrThrow } from \"observables\"\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * Translations\n */\nlet lang: Record\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Translate the given key\n *\n * @param key - Key to be translated\n * @param value - Value to be replaced\n *\n * @return Translation\n */\nexport function translate(key: string, value?: string): string {\n if (typeof lang === \"undefined\") {\n const el = getElementOrThrow(\"#__lang\")\n lang = JSON.parse(el.innerText)\n }\n if (typeof lang[key] === \"undefined\") {\n throw new ReferenceError(`Invalid translation: ${key}`)\n }\n return typeof value !== \"undefined\"\n ? lang[key].replace(\"#\", value)\n : lang[key]\n}\n\n/**\n * Truncate a string after the given number of characters\n *\n * This is not a very reasonable approach, since the summaries kind of suck.\n * It would be better to create something more intelligent, highlighting the\n * search occurrences and making a better summary out of it, but this note was\n * written three years ago, so who knows if we'll ever fix it.\n *\n * @param value - Value to be truncated\n * @param n - Number of characters\n *\n * @return Truncated value\n */\nexport function truncate(value: string, n: number): string {\n let i = n\n if (value.length > i) {\n while (value[i] !== \" \" && --i > 0); // tslint:disable-line\n return `${value.substring(0, i)}...`\n }\n return value\n}\n\n/**\n * Round a number for display with source facts\n *\n * This is a reverse engineered version of GitHub's weird rounding algorithm\n * for stars, forks and all other numbers. While all numbers below `1,000` are\n * returned as-is, bigger numbers are converted to fixed numbers:\n *\n * - `1,049` => `1k`\n * - `1,050` => `1.1k`\n * - `1,949` => `1.9k`\n * - `1,950` => `2k`\n *\n * @param value - Original value\n *\n * @return Rounded value\n */\nexport function round(value: number): string {\n if (value > 999) {\n const digits = +((value - 950) % 1000 > 99)\n return `${((value + 1) / 1000).toFixed(digits)}k`\n } else {\n return value.toString()\n }\n}\n\n/**\n * Simple hash function\n *\n * @see https://bit.ly/2wsVjJ4 - Original source\n *\n * @param value - Value to be hashed\n *\n * @return Hash as 32bit integer\n */\nexport function hash(value: string): number {\n let h = 0\n for (let i = 0, len = value.length; i < len; i++) {\n h = ((h << 5) - h) + value.charCodeAt(i)\n h |= 0 // Convert to 32bit integer\n }\n return h\n }\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./config\"\nexport * from \"./jsx\"\nexport * from \"./rxjs\"\nexport * from \"./string\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./header\"\nexport * from \"./hero\"\nexport * from \"./main\"\nexport * from \"./navigation\"\nexport * from \"./search\"\nexport * from \"./shared\"\nexport * from \"./tabs\"\nexport * from \"./toc\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set sidebar offset\n *\n * @param el - Sidebar element\n * @param value - Sidebar offset\n */\nexport function setSidebarOffset(\n el: HTMLElement, value: number\n): void {\n el.style.top = `${value}px`\n}\n\n/**\n * Reset sidebar offset\n *\n * @param el - Sidebar element\n */\nexport function resetSidebarOffset(\n el: HTMLElement\n): void {\n el.style.top = \"\"\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Set sidebar height\n *\n * @param el - Sidebar element\n * @param value - Sidebar height\n */\nexport function setSidebarHeight(\n el: HTMLElement, value: number\n): void {\n el.style.height = `${value}px`\n}\n\n/**\n * Reset sidebar height\n *\n * @param el - Sidebar element\n */\nexport function resetSidebarHeight(\n el: HTMLElement\n): void {\n el.style.height = \"\"\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Set sidebar lock\n *\n * @param el - Sidebar element\n * @param value - Whether the sidebar is locked\n */\nexport function setSidebarLock(\n el: HTMLElement, value: boolean\n): void {\n el.setAttribute(\"data-md-state\", value ? \"lock\" : \"\")\n}\n\n/**\n * Reset sidebar lock\n *\n * @param el - Sidebar element\n */\nexport function resetSidebarLock(\n el: HTMLElement\n): void {\n el.removeAttribute(\"data-md-state\")\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { EMPTY, Observable, of } from \"rxjs\"\nimport {\n distinctUntilChanged,\n map,\n scan,\n shareReplay,\n switchMap\n} from \"rxjs/operators\"\n\nimport { getElement } from \"observables\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Component\n */\nexport type Component =\n | \"container\" /* Container */\n | \"header\" /* Header */\n | \"header-title\" /* Header title */\n | \"hero\" /* Hero */\n | \"main\" /* Main area */\n | \"navigation\" /* Navigation */\n | \"search\" /* Search */\n | \"search-query\" /* Search input */\n | \"search-reset\" /* Search reset */\n | \"search-result\" /* Search results */\n | \"tabs\" /* Tabs */\n | \"toc\" /* Table of contents */\n\n/**\n * Component map\n */\nexport type ComponentMap = {\n [P in Component]?: HTMLElement\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n document$: Observable /* Document observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * Component map observable\n */\nlet components$: Observable\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup bindings to components with given names\n *\n * This function will maintain bindings to the elements identified by the given\n * names in-between document switches and update the elements in-place.\n *\n * @param names - Component names\n * @param options - Options\n */\nexport function setupComponents(\n names: Component[], { document$ }: WatchOptions\n): void {\n components$ = document$\n .pipe(\n\n /* Build component map */\n map(document => names.reduce((components, name) => {\n const el = getElement(`[data-md-component=${name}]`, document)\n return {\n ...components,\n ...typeof el !== \"undefined\" ? { [name]: el } : {}\n }\n }, {})),\n\n /* Re-compute component map on document switch */\n scan((prev, next) => {\n for (const name of names) {\n switch (name) {\n\n /* Top-level components: update */\n case \"header-title\":\n case \"container\":\n if (name in prev && typeof prev[name] !== \"undefined\") {\n prev[name]!.replaceWith(next[name]!)\n prev[name] = next[name]\n }\n break\n\n /* All other components: rebind */\n default:\n if (typeof next[name] !== \"undefined\")\n prev[name] = getElement(`[data-md-component=${name}]`)\n else\n delete prev[name]\n }\n }\n return prev\n }),\n\n /* Convert to hot observable */\n shareReplay(1)\n )\n}\n\n/**\n * Retrieve a component\n *\n * The returned observable will only re-emit if the element changed, i.e. if\n * it was replaced from a document which was switched to.\n *\n * @template T - Element type\n *\n * @param name - Component name\n *\n * @return Element observable\n */\nexport function useComponent(\n name: \"search-query\"\n): Observable\nexport function useComponent(\n name: Component\n): Observable\nexport function useComponent(\n name: Component\n): Observable {\n return components$\n .pipe(\n switchMap(components => (\n typeof components[name] !== \"undefined\"\n ? of(components[name] as T)\n : EMPTY\n )),\n distinctUntilChanged()\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set anchor blur\n *\n * @param el - Anchor element\n * @param value - Whether the anchor is blurred\n */\nexport function setAnchorBlur(\n el: HTMLElement, value: boolean\n): void {\n el.setAttribute(\"data-md-state\", value ? \"blur\" : \"\")\n}\n\n/**\n * Reset anchor blur\n *\n * @param el - Anchor element\n */\nexport function resetAnchorBlur(\n el: HTMLElement\n): void {\n el.removeAttribute(\"data-md-state\")\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Set anchor active\n *\n * @param el - Anchor element\n * @param value - Whether the anchor is active\n */\nexport function setAnchorActive(\n el: HTMLElement, value: boolean\n): void {\n el.classList.toggle(\"md-nav__link--active\", value)\n}\n\n/**\n * Reset anchor active\n *\n * @param el - Anchor element\n */\nexport function resetAnchorActive(\n el: HTMLElement\n): void {\n el.classList.remove(\"md-nav__link--active\")\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./sidebar\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { h, translate } from \"utilities\"\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * CSS classes\n */\nconst css = {\n container: \"md-clipboard md-icon\"\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Render a 'copy-to-clipboard' button\n *\n * @param id - Unique identifier\n *\n * @return Element\n */\nexport function renderClipboard(\n id: string\n) {\n const path = require(\"material-design-icons-svg/paths/content-copy.json\")\n return (\n \n \n \n \n \n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { SearchResult } from \"integrations/search\"\nimport { h, truncate } from \"utilities\"\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * CSS classes\n */\nconst css = {\n item: \"md-search-result__item\",\n link: \"md-search-result__link\",\n article: \"md-search-result__article md-search-result__article--document\",\n section: \"md-search-result__article\",\n title: \"md-search-result__title\",\n teaser: \"md-search-result__teaser\"\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Render a search result\n *\n * @param result - Search result\n *\n * @return Element\n */\nexport function renderSearchResult(\n { article, sections }: SearchResult\n) {\n\n // create page with icon\n const path = require(\"material-design-icons-svg/paths/file-search-outline.json\")\n\n const children = [article, ...sections].map(document => {\n const { location, title, text } = document\n return (\n \n
\n {!(\"parent\" in document)\n ?
\n \n \n \n
\n : null\n }\n

{title}

\n {text.length\n ?

{truncate(text, 320)}

\n : undefined\n }\n
\n
\n )\n })\n return (\n
  • \n {children}\n
  • \n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { SourceFacts } from \"patches/source\"\nimport { h } from \"utilities\"\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * CSS classes\n */\nconst css = {\n facts: \"md-source__facts\",\n fact: \"md-source__fact\"\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Render source facts\n *\n * @param facts - Source facts\n *\n * @return Element\n */\nexport function renderSource(\n facts: SourceFacts\n) {\n const children = facts.map(fact => (\n
  • {fact}
  • \n ))\n return (\n
      \n {children}\n
    \n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { h } from \"utilities\"\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * CSS classes\n */\nconst css = {\n wrapper: \"md-typeset__scrollwrap\",\n table: \"md-typeset__table\"\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Render a table inside a wrapper to improve scrolling on mobile\n *\n * @param table - Table element\n *\n * @return Element\n */\nexport function renderTable(\n table: HTMLTableElement\n) {\n return (\n
    \n
    \n {table}\n
    \n
    \n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./clipboard\"\nexport * from \"./search\"\nexport * from \"./source\"\nexport * from \"./table\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Global augmentations\n */\ndeclare global {\n interface CSSStyleDeclaration {\n webkitOverflowScrolling: \"touch\" | \"\"\n }\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set overflow scrolling\n *\n * @param el - Scrollable element\n */\nexport function setOverflowScrolling(\n el: HTMLElement\n): void {\n el.style.webkitOverflowScrolling = \"touch\"\n}\n\n/**\n * Reset overflow scrolling\n *\n * @param el - Scrollable element\n */\nexport function resetOverflowScrolling(\n el: HTMLElement\n): void {\n el.style.webkitOverflowScrolling = \"\"\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A RTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { SearchIndexOptions, SearchResult } from \"integrations/search\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Search message type\n */\nexport const enum SearchMessageType {\n SETUP, /* Search index setup */\n DUMP, /* Search index dump */\n QUERY, /* Search query */\n RESULT /* Search results */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * A message containing the data necessary to setup the search index\n */\nexport interface SearchSetupMessage {\n type: SearchMessageType.SETUP /* Message type */\n data: SearchIndexOptions /* Message data */\n}\n\n/**\n * A message containing the a dump of the search index\n */\nexport interface SearchDumpMessage {\n type: SearchMessageType.DUMP /* Message type */\n data: string /* Message data */\n}\n\n/**\n * A message containing a search query\n */\nexport interface SearchQueryMessage {\n type: SearchMessageType.QUERY /* Message type */\n data: string /* Message data */\n}\n\n/**\n * A message containing results for a search query\n */\nexport interface SearchResultMessage {\n type: SearchMessageType.RESULT /* Message type */\n data: SearchResult[] /* Message data */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * A message exchanged with the search worker\n */\nexport type SearchMessage =\n | SearchSetupMessage\n | SearchDumpMessage\n | SearchQueryMessage\n | SearchResultMessage\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Type guard for search setup messages\n *\n * @param message - Search worker message\n *\n * @return Test result\n */\nexport function isSearchSetupMessage(\n message: SearchMessage\n): message is SearchSetupMessage {\n return message.type === SearchMessageType.SETUP\n}\n\n/**\n * Type guard for search dump messages\n *\n * @param message - Search worker message\n *\n * @return Test result\n */\nexport function isSearchDumpMessage(\n message: SearchMessage\n): message is SearchDumpMessage {\n return message.type === SearchMessageType.DUMP\n}\n\n/**\n * Type guard for search query messages\n *\n * @param message - Search worker message\n *\n * @return Test result\n */\nexport function isSearchQueryMessage(\n message: SearchMessage\n): message is SearchQueryMessage {\n return message.type === SearchMessageType.QUERY\n}\n\n/**\n * Type guard for search result messages\n *\n * @param message - Search worker message\n *\n * @return Test result\n */\nexport function isSearchResultMessage(\n message: SearchMessage\n): message is SearchResultMessage {\n return message.type === SearchMessageType.RESULT\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A RTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, Subject, from } from \"rxjs\"\nimport { ajax } from \"rxjs/ajax\"\nimport {\n map,\n pluck,\n shareReplay,\n switchMap,\n take,\n withLatestFrom\n} from \"rxjs/operators\"\n\nimport { SearchIndexOptions } from \"integrations/search\"\nimport {\n WorkerHandler,\n watchWorker\n} from \"observables\"\n\nimport {\n SearchMessage,\n SearchMessageType,\n SearchSetupMessage,\n isSearchResultMessage\n} from \"../message\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup options\n */\ninterface SetupOptions {\n base: string /* Base url */\n index?: Promise /* Promise resolving with index */\n location$: Observable /* Location observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup search web worker\n *\n * This function will create a web worker to setup and query the search index\n * which is done using `lunr`. The index can be passed explicitly in order to\n * enable hacks like _localsearch_ via search index embedding as JSON. If no\n * index is given, this function will load it from the default location.\n *\n * @param url - Worker url\n * @param options - Options\n *\n * @return Worker handler\n */\nexport function setupSearchWorker(\n url: string, { base, index, location$ }: SetupOptions\n): WorkerHandler {\n const worker = new Worker(url)\n\n /* Ensure stable base URL */\n const origin$ = location$\n .pipe(\n take(1),\n map(({ href }) => new URL(base, href)\n .toString()\n .replace(/\\/$/, \"\")\n )\n )\n\n /* Create communication channels and resolve relative links */\n const tx$ = new Subject()\n const rx$ = watchWorker(worker, { tx$ })\n .pipe(\n withLatestFrom(origin$),\n map(([message, origin]) => {\n if (isSearchResultMessage(message)) {\n for (const { article, sections } of message.data) {\n article.location = `${origin}/${article.location}`\n for (const section of sections)\n section.location = `${origin}/${section.location}`\n }\n }\n return message\n }),\n shareReplay(1)\n )\n\n /* Fetch index if it wasn't passed explicitly */\n const index$ = typeof index !== \"undefined\"\n ? from(index)\n : origin$\n .pipe(\n switchMap(origin => ajax({\n url: `${origin}/search/search_index.json`,\n responseType: \"json\",\n withCredentials: true\n })\n .pipe(\n pluck(\"response\")\n ))\n )\n\n /* Send index to worker */\n index$\n .pipe(\n map(data => ({\n type: SearchMessageType.SETUP,\n data\n }))\n )\n .subscribe(tx$.next.bind(tx$))\n\n /* Return worker handler */\n return { tx$, rx$ }\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./search\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./apply\"\nexport * from \"./paint\"\nexport * from \"./watch\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./apply\"\nexport * from \"./paint\"\nexport * from \"./watch\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./layer\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, OperatorFunction, pipe } from \"rxjs\"\nimport { map, switchMap } from \"rxjs/operators\"\n\nimport { Viewport, getElements } from \"observables\"\n\nimport { Header } from \"../../header\"\nimport { Main } from \"../../main\"\nimport {\n Sidebar,\n paintSidebar,\n watchSidebar\n} from \"../../shared\"\nimport {\n NavigationLayer,\n paintNavigationLayer,\n watchNavigationLayer\n} from \"../layer\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Navigation for [screen -]\n */\ninterface NavigationBelowScreen {\n layer: NavigationLayer /* Active layer */\n}\n\n/**\n * Navigation for [screen +]\n */\ninterface NavigationAboveScreen {\n sidebar: Sidebar /* Sidebar */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Navigation\n */\nexport type Navigation =\n | NavigationBelowScreen\n | NavigationAboveScreen\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n header$: Observable
    /* Header observable */\n main$: Observable
    /* Main area observable */\n viewport$: Observable /* Viewport observable */\n screen$: Observable /* Screen media observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount navigation from source observable\n *\n * @param options - Options\n *\n * @return Operator function\n */\nexport function mountNavigation(\n { header$, main$, viewport$, screen$ }: MountOptions\n): OperatorFunction {\n return pipe(\n switchMap(el => screen$\n .pipe(\n switchMap(screen => {\n\n /* [screen +]: Mount navigation in sidebar */\n if (screen) {\n return watchSidebar(el, { main$, viewport$ })\n .pipe(\n paintSidebar(el, { header$ }),\n map(sidebar => ({ sidebar }))\n )\n\n /* [screen -]: Mount navigation in drawer */\n } else {\n const els = getElements(\"nav\", el)\n return watchNavigationLayer(els)\n .pipe(\n paintNavigationLayer(els),\n map(layer => ({ layer }))\n )\n }\n })\n )\n )\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./apply\"\nexport * from \"./paint\"\nexport * from \"./watch\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n MonoTypeOperatorFunction,\n Observable,\n animationFrameScheduler,\n pipe\n} from \"rxjs\"\nimport {\n finalize,\n map,\n observeOn,\n tap,\n withLatestFrom\n} from \"rxjs/operators\"\n\nimport { Header } from \"../../../header\"\nimport { Sidebar } from \"../_\"\nimport {\n resetSidebarHeight,\n resetSidebarLock,\n resetSidebarOffset,\n setSidebarHeight,\n setSidebarLock,\n setSidebarOffset\n} from \"../apply\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Paint options\n */\ninterface PaintOptions {\n header$: Observable
    /* Header observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Paint sidebar\n *\n * @param el - Sidebar element\n * @param options - Options\n *\n * @return Operator function\n */\nexport function paintSidebar(\n el: HTMLElement, { header$ }: PaintOptions\n): MonoTypeOperatorFunction {\n return pipe(\n\n /* Defer repaint to next animation frame */\n observeOn(animationFrameScheduler),\n withLatestFrom(header$),\n tap(([{ height, lock }, { height: offset }]) => {\n setSidebarHeight(el, height)\n setSidebarLock(el, lock)\n\n /* Set offset in locked state depending on header height */\n if (lock)\n setSidebarOffset(el, offset)\n else\n resetSidebarOffset(el)\n }),\n\n /* Re-map to sidebar */\n map(([sidebar]) => sidebar),\n\n /* Reset on complete or error */\n finalize(() => {\n resetSidebarOffset(el)\n resetSidebarHeight(el)\n resetSidebarLock(el)\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, combineLatest } from \"rxjs\"\nimport {\n distinctUntilChanged,\n distinctUntilKeyChanged,\n map,\n withLatestFrom\n} from \"rxjs/operators\"\n\nimport { Viewport } from \"observables\"\n\nimport { Main } from \"../../../main\"\nimport { Sidebar } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n main$: Observable
    /* Main area observable */\n viewport$: Observable /* Viewport observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch sidebar\n *\n * This function returns an observable that computes the visual parameters of\n * the sidebar which depends on the vertical viewport offset, as well as the\n * height of the main area. When the page is scrolled beyond the header, the\n * sidebar is locked and fills the remaining space.\n *\n * @param el - Sidebar element\n * @param options - Options\n *\n * @return Sidebar observable\n */\nexport function watchSidebar(\n el: HTMLElement, { main$, viewport$ }: WatchOptions\n): Observable {\n\n /* Adjust for internal main area offset */\n const adjust$ = viewport$\n .pipe(\n distinctUntilKeyChanged(\"size\"),\n map(() => parseFloat(\n getComputedStyle(el.parentElement!)\n .getPropertyValue(\"padding-top\")\n )),\n distinctUntilChanged()\n )\n\n /* Compute the sidebar's available height */\n const height$ = viewport$\n .pipe(\n withLatestFrom(adjust$, main$),\n map(([{ offset: { y } }, adjust, { offset, height }]) => (\n height\n + Math.min(adjust, Math.max(0, y - offset))\n - adjust\n )),\n distinctUntilChanged()\n )\n\n /* Compute whether the sidebar should be locked */\n const lock$ = viewport$\n .pipe(\n withLatestFrom(adjust$, main$),\n map(([{ offset: { y } }, adjust, { offset }]) => (\n y >= offset + adjust\n )),\n distinctUntilChanged()\n )\n\n /* Combine into single observable */\n return combineLatest([height$, lock$])\n .pipe(\n map(([height, lock]) => ({ height, lock }))\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n MonoTypeOperatorFunction,\n animationFrameScheduler,\n pipe\n} from \"rxjs\"\nimport {\n delay,\n finalize,\n observeOn,\n tap\n} from \"rxjs/operators\"\n\nimport { getElementOrThrow } from \"observables\"\n\nimport { NavigationLayer } from \"../_\"\nimport {\n resetOverflowScrolling,\n setOverflowScrolling\n} from \"../apply\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Paint navigation layer\n *\n * @param els - Navigation elements\n *\n * @return Operator function\n */\nexport function paintNavigationLayer(\n els: HTMLElement[]\n): MonoTypeOperatorFunction {\n return pipe(\n\n /* Defer repaint to next animation frame */\n observeOn(animationFrameScheduler),\n tap(({ prev }) => {\n if (prev)\n resetOverflowScrolling(prev)\n }),\n\n /* Wait until transition has finished */\n delay(250),\n\n /* Defer repaint to next animation frame */\n observeOn(animationFrameScheduler),\n tap(({ next }) => {\n setOverflowScrolling(next)\n }),\n\n /* Reset on complete or error */\n finalize(() => {\n for (const el of els)\n resetOverflowScrolling(\n getElementOrThrow(\".md-nav__list\", el)\n )\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { findLast } from \"ramda\"\nimport { Observable, fromEvent, merge } from \"rxjs\"\nimport { map, scan } from \"rxjs/operators\"\n\nimport {\n getElement,\n getElementOrThrow\n} from \"observables\"\n\nimport { NavigationLayer } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch navigation layer\n *\n * On iOS we want to add `-webkit-overflow-scrolling: touch` for the menus\n * contained in the drawer, but as the navigational layers are nested, we can\n * only add it to the topmost layer or extremely weird cropping will occur.\n * This implementation keeps track of the previous and current layer.\n *\n * @param els - Navigation elements\n *\n * @return Navigation layer observable\n */\nexport function watchNavigationLayer(\n els: HTMLElement[]\n): Observable {\n const table = new Map()\n for (const el of els) {\n const label = getElement(\"label\", el)\n if (typeof label !== \"undefined\") {\n const input = getElementOrThrow(`#${label.htmlFor}`)\n table.set(input, el)\n }\n }\n\n /* Determine topmost layer */\n const layer$ = merge(...[...table.keys()].map(input => (\n fromEvent(input, \"change\")\n )))\n .pipe(\n map(() => getElementOrThrow(\".md-nav__list\", table.get(\n findLast(({ checked }) => checked, [...table.keys()])!\n )))\n )\n\n /* Return previous and next layer */\n return layer$\n .pipe(\n map(next => ({ next })),\n scan(({ next: prev }, { next }) => ({ prev, next }))\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./anchor\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n OperatorFunction,\n combineLatest,\n of,\n pipe\n} from \"rxjs\"\nimport { map, switchMap } from \"rxjs/operators\"\n\nimport { Viewport, getElements } from \"observables\"\n\nimport { Header } from \"../../header\"\nimport { Main } from \"../../main\"\nimport {\n Sidebar,\n paintSidebar,\n watchSidebar\n} from \"../../shared\"\nimport {\n AnchorList,\n paintAnchorList,\n watchAnchorList\n} from \"../anchor\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Table of contents for [tablet -]\n */\ninterface TableOfContentsBelowTablet {} // tslint:disable-line\n\n/**\n * Table of contents for [tablet +]\n */\ninterface TableOfContentsAboveTablet {\n sidebar: Sidebar /* Sidebar */\n anchors: AnchorList /* Anchor list */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Table of contents\n */\nexport type TableOfContents =\n | TableOfContentsBelowTablet\n | TableOfContentsAboveTablet\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n header$: Observable
    /* Header observable */\n main$: Observable
    /* Main area observable */\n viewport$: Observable /* Viewport observable */\n tablet$: Observable /* Tablet media observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount table of contents from source observable\n *\n * @param options - Options\n *\n * @return Operator function\n */\nexport function mountTableOfContents(\n { header$, main$, viewport$, tablet$}: MountOptions\n): OperatorFunction {\n return pipe(\n switchMap(el => tablet$\n .pipe(\n switchMap(tablet => {\n\n /* [tablet +]: Mount table of contents in sidebar */\n if (tablet) {\n const els = getElements(\".md-nav__link\", el)\n\n /* Watch and paint sidebar */\n const sidebar$ = watchSidebar(el, { main$, viewport$ })\n .pipe(\n paintSidebar(el, { header$ })\n )\n\n /* Watch and paint anchor list (scroll spy) */\n const anchors$ = watchAnchorList(els, { header$, viewport$ })\n .pipe(\n paintAnchorList(els)\n )\n\n /* Combine into a single hot observable */\n return combineLatest([sidebar$, anchors$])\n .pipe(\n map(([sidebar, anchors]) => ({ sidebar, anchors }))\n )\n\n /* [tablet -]: Unmount table of contents */\n } else {\n return of({})\n }\n })\n )\n )\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n MonoTypeOperatorFunction,\n animationFrameScheduler,\n pipe\n} from \"rxjs\"\nimport { finalize, observeOn, tap } from \"rxjs/operators\"\n\nimport { AnchorList } from \"../_\"\nimport {\n resetAnchorActive,\n resetAnchorBlur,\n setAnchorActive,\n setAnchorBlur\n} from \"../apply\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Paint anchor list\n *\n * @param els - Anchor elements\n *\n * @return Operator function\n */\nexport function paintAnchorList(\n els: HTMLAnchorElement[]\n): MonoTypeOperatorFunction {\n return pipe(\n\n /* Defer repaint to next animation frame */\n observeOn(animationFrameScheduler),\n tap(({ prev, next }) => {\n\n /* Look forward */\n for (const [el] of next) {\n resetAnchorActive(el)\n resetAnchorBlur(el)\n }\n\n /* Look backward */\n for (const [index, [el]] of prev.entries()) {\n setAnchorActive(el, index === prev.length - 1)\n setAnchorBlur(el, true)\n }\n }),\n\n /* Reset on complete or error */\n finalize(() => {\n for (const el of els) {\n resetAnchorActive(el)\n resetAnchorBlur(el)\n }\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { reverse } from \"ramda\"\nimport { Observable, combineLatest } from \"rxjs\"\nimport {\n bufferCount,\n distinctUntilChanged,\n distinctUntilKeyChanged,\n map,\n scan,\n startWith,\n switchMap\n} from \"rxjs/operators\"\n\nimport { Viewport, getElement } from \"observables\"\n\nimport { Header } from \"../../../header\"\nimport { AnchorList } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n header$: Observable
    /* Header observable */\n viewport$: Observable /* Viewport observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch anchor list\n *\n * This is effectively a scroll-spy implementation which will account for the\n * fixed header and automatically re-calculate anchor offsets when the viewport\n * is resized. The returned observable will only emit if the anchor list needs\n * to be repainted.\n *\n * This implementation tracks an anchor element's entire path starting from its\n * level up to the top-most anchor element, e.g. `[h3, h2, h1]`. Although the\n * Material theme currently doesn't make use of this information, it enables\n * the styling of the entire hierarchy through customization.\n *\n * Note that the current anchor is the last item of the `prev` anchor list.\n *\n * @param els - Anchor elements\n * @param options - Options\n *\n * @return Anchor list observable\n */\nexport function watchAnchorList(\n els: HTMLAnchorElement[], { header$, viewport$ }: WatchOptions\n): Observable {\n const table = new Map()\n for (const el of els) {\n const id = decodeURIComponent(el.hash.substring(1))\n const target = getElement(`[id=\"${id}\"]`)\n if (typeof target !== \"undefined\")\n table.set(el, target)\n }\n\n /* Compute necessary adjustment for header */\n const adjust$ = header$\n .pipe(\n map(header => 18 + header.height)\n )\n\n /* Compute partition of previous and next anchors */\n const partition$ = viewport$\n .pipe(\n distinctUntilKeyChanged(\"size\"),\n\n /* Build index to map anchor paths to vertical offsets */\n map(() => {\n let path: HTMLAnchorElement[] = []\n return [...table].reduce((index, [anchor, target]) => {\n while (path.length) {\n const last = table.get(path[path.length - 1])!\n if (last.tagName >= target.tagName) {\n path.pop()\n } else {\n break\n }\n }\n\n /* If the current anchor is hidden, continue with its parent */\n let offset = target.offsetTop\n while (!offset && target.parentElement) {\n target = target.parentElement\n offset = target.offsetTop\n }\n\n /* Map reversed anchor path to vertical offset */\n return index.set(\n reverse(path = [...path, anchor]),\n offset\n )\n }, new Map())\n }),\n\n /* Re-compute partition when viewport offset changes */\n switchMap(index => combineLatest([adjust$, viewport$])\n .pipe(\n scan(([prev, next], [adjust, { offset: { y } }]) => {\n\n /* Look forward */\n while (next.length) {\n const [, offset] = next[0]\n if (offset - adjust < y) {\n prev = [...prev, next.shift()!]\n } else {\n break\n }\n }\n\n /* Look backward */\n while (prev.length) {\n const [, offset] = prev[prev.length - 1]\n if (offset - adjust >= y) {\n next = [prev.pop()!, ...next]\n } else {\n break\n }\n }\n\n /* Return partition */\n return [prev, next]\n }, [[], [...index]]),\n distinctUntilChanged((a, b) => {\n return a[0] === b[0]\n && a[1] === b[1]\n })\n )\n )\n )\n\n /* Compute and return anchor list migrations */\n return partition$\n .pipe(\n map(([prev, next]) => ({\n prev: prev.map(([path]) => path),\n next: next.map(([path]) => path)\n })),\n\n /* Extract anchor list migrations */\n startWith({ prev: [], next: [] }),\n bufferCount(2, 1),\n map(([a, b]) => {\n\n /* Moving down */\n if (a.prev.length < b.prev.length) {\n return {\n prev: b.prev.slice(Math.max(0, a.prev.length - 1), b.prev.length),\n next: []\n }\n\n /* Moving up */\n } else {\n return {\n prev: b.prev.slice(-1),\n next: b.next.slice(0, b.next.length - a.next.length)\n }\n }\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, OperatorFunction, combineLatest, pipe } from \"rxjs\"\nimport { map, switchMap } from \"rxjs/operators\"\n\nimport { SearchResult } from \"integrations/search\"\n\nimport { SearchQuery } from \"../query\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Search\n */\nexport interface Search {\n query: SearchQuery /* Search query */\n result: SearchResult[] /* Search result list */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n query$: Observable /* Search query observable */\n reset$: Observable /* Search reset observable */\n result$: Observable /* Search result observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount search from source observable\n *\n * @param options - Options\n *\n * @return Operator function\n */\nexport function mountSearch(\n { query$, reset$, result$ }: MountOptions\n): OperatorFunction {\n return pipe(\n switchMap(() => combineLatest([query$, result$, reset$])\n .pipe(\n map(([query, result]) => ({ query, result }))\n )\n )\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, combineLatest, fromEvent, merge } from \"rxjs\"\nimport {\n delay,\n distinctUntilChanged,\n map,\n startWith\n} from \"rxjs/operators\"\n\nimport { watchElementFocus } from \"observables\"\n\nimport { SearchQuery } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n transform?(value: string): string /* Transformation function */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Default transformation function\n *\n * Rogue control characters are filtered before handing the query to the\n * search index, as `lunr` will throw otherwise.\n *\n * @param value - Query value\n *\n * @return Transformed query value\n */\nfunction defaultTransform(value: string): string {\n return value\n .replace(/(?:^|\\s+)[*+-:^~]+(?=\\s+|$)/g, \"\")\n .trim()\n .replace(/\\s+|\\b$/g, \"* \")\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch search query\n *\n * Note that the focus event which triggers re-reading the current query value\n * is delayed by `1ms` so the input's empty state is allowed to propagate.\n *\n * @param el - Search query element\n * @param options - Options\n *\n * @return Search query observable\n */\nexport function watchSearchQuery(\n el: HTMLInputElement, { transform }: WatchOptions = {}\n): Observable {\n const fn = transform || defaultTransform\n\n /* Intercept keyboard events */\n const value$ = merge(\n fromEvent(el, \"keyup\"),\n fromEvent(el, \"focus\").pipe(delay(1))\n )\n .pipe(\n map(() => fn(el.value)),\n startWith(fn(el.value)),\n distinctUntilChanged()\n )\n\n /* Intercept focus events */\n const focus$ = watchElementFocus(el)\n\n /* Combine into a single observable */\n return combineLatest([value$, focus$])\n .pipe(\n map(([value, focus]) => ({ value, focus }))\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { OperatorFunction, pipe } from \"rxjs\"\nimport {\n distinctUntilKeyChanged,\n map,\n switchMap,\n withLatestFrom\n} from \"rxjs/operators\"\n\nimport {\n WorkerHandler,\n setToggle,\n useToggle\n} from \"observables\"\nimport {\n SearchMessage,\n SearchMessageType,\n SearchQueryMessage\n} from \"workers\"\n\nimport { watchSearchQuery } from \"../watch\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Search query\n */\nexport interface SearchQuery {\n value: string /* Query value */\n focus: boolean /* Query focus */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n transform?(value: string): string /* Transformation function */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount search query from source observable\n *\n * @param handler - Worker handler\n * @param options - Options\n *\n * @return Operator function\n */\nexport function mountSearchQuery(\n { tx$ }: WorkerHandler, options: MountOptions = {}\n): OperatorFunction {\n const toggle$ = useToggle(\"search\")\n return pipe(\n switchMap(el => {\n const query$ = watchSearchQuery(el, options)\n\n /* Subscribe worker to search query */\n query$\n .pipe(\n distinctUntilKeyChanged(\"value\"),\n map(({ value }): SearchQueryMessage => ({\n type: SearchMessageType.QUERY,\n data: value\n }))\n )\n .subscribe(tx$.next.bind(tx$))\n\n /* Toggle search on focus */\n query$\n .pipe(\n distinctUntilKeyChanged(\"focus\"),\n withLatestFrom(toggle$)\n )\n .subscribe(([{ focus }, toggle]) => {\n if (focus)\n setToggle(toggle, focus)\n })\n\n /* Return search query */\n return query$\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { OperatorFunction, pipe } from \"rxjs\"\nimport {\n mapTo,\n startWith,\n switchMap,\n switchMapTo,\n tap\n} from \"rxjs/operators\"\n\nimport { setElementFocus } from \"observables\"\n\nimport { useComponent } from \"../../../_\"\nimport { watchSearchReset } from \"../watch\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount search reset from source observable\n *\n * @return Operator function\n */\nexport function mountSearchReset(): OperatorFunction {\n return pipe(\n switchMap(el => watchSearchReset(el)\n .pipe(\n switchMapTo(useComponent(\"search-query\")),\n tap(setElementFocus),\n mapTo(undefined)\n )\n ),\n startWith(undefined)\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, fromEvent } from \"rxjs\"\nimport { mapTo } from \"rxjs/operators\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch search reset\n *\n * @param el - Search reset element\n *\n * @return Search reset observable\n */\nexport function watchSearchReset(\n el: HTMLElement\n): Observable {\n return fromEvent(el, \"click\")\n .pipe(\n mapTo(undefined)\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { translate } from \"utilities\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set number of search results\n *\n * @param el - Search result metadata element\n * @param value - Number of results\n */\nexport function setSearchResultMeta(\n el: HTMLElement, value: number\n): void {\n switch (value) {\n\n /* No results */\n case 0:\n el.textContent = translate(\"search.result.none\")\n break\n\n /* One result */\n case 1:\n el.textContent = translate(\"search.result.one\")\n break\n\n /* Multiple result */\n default:\n el.textContent = translate(\"search.result.other\", value.toString())\n }\n}\n\n/**\n * Reset number of search results\n *\n * @param el - Search result metadata element\n */\nexport function resetSearchResultMeta(\n el: HTMLElement\n): void {\n el.textContent = translate(\"search.result.placeholder\")\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Add an element to the search result list\n *\n * @param el - Search result list element\n * @param child - Search result element\n */\nexport function addToSearchResultList(\n el: HTMLElement, child: HTMLElement\n): void {\n el.appendChild(child)\n}\n\n/**\n * Reset search result list\n *\n * @param el - Search result list element\n */\nexport function resetSearchResultList(\n el: HTMLElement\n): void {\n el.innerHTML = \"\"\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n MonoTypeOperatorFunction,\n Observable,\n animationFrameScheduler,\n pipe\n} from \"rxjs\"\nimport {\n finalize,\n map,\n mapTo,\n observeOn,\n scan,\n switchMap,\n withLatestFrom\n} from \"rxjs/operators\"\n\nimport { SearchResult } from \"integrations/search\"\nimport { getElementOrThrow } from \"observables\"\nimport { renderSearchResult } from \"templates\"\n\nimport { SearchQuery } from \"../../query\"\nimport {\n addToSearchResultList,\n resetSearchResultList,\n resetSearchResultMeta,\n setSearchResultMeta\n} from \"../apply\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Paint options\n */\ninterface PaintOptions {\n query$: Observable /* Search query observable */\n fetch$: Observable /* Result fetch observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Paint search results\n *\n * This function will perform a lazy rendering of the search results, depending\n * on the vertical offset of the search result container. When the scroll offset\n * reaches the bottom of the element, more results are fetched and rendered.\n *\n * @param el - Search result element\n * @param options - Options\n *\n * @return Operator function\n */\nexport function paintSearchResult(\n el: HTMLElement, { query$, fetch$ }: PaintOptions\n): MonoTypeOperatorFunction {\n const list = getElementOrThrow(\".md-search-result__list\", el)\n const meta = getElementOrThrow(\".md-search-result__meta\", el)\n return pipe(\n\n /* Paint search result metadata */\n withLatestFrom(query$),\n map(([result, query]) => {\n if (query.value) {\n setSearchResultMeta(meta, result.length)\n } else {\n resetSearchResultMeta(meta)\n }\n return result\n }),\n\n /* Paint search result list */\n switchMap(result => fetch$\n .pipe(\n\n /* Defer repaint to next animation frame */\n observeOn(animationFrameScheduler),\n scan(index => {\n const container = el.parentElement!\n while (index < result.length) {\n addToSearchResultList(list, renderSearchResult(result[index++]))\n if (container.scrollHeight - container.offsetHeight > 16)\n break\n }\n return index\n }, 0),\n\n /* Re-map to search result */\n mapTo(result),\n\n /* Reset on complete or error */\n finalize(() => {\n resetSearchResultList(list)\n })\n )\n )\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { identity } from \"ramda\"\nimport { Observable, OperatorFunction, pipe } from \"rxjs\"\nimport {\n distinctUntilChanged,\n filter,\n map,\n pluck,\n switchMap\n} from \"rxjs/operators\"\n\nimport { SearchResult } from \"integrations/search\"\nimport {\n WorkerHandler,\n watchElementOffset\n} from \"observables\"\nimport {\n SearchMessage,\n isSearchResultMessage\n} from \"workers\"\n\nimport { SearchQuery } from \"../../query\"\nimport { paintSearchResult } from \"../paint\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n query$: Observable /* Search query observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount search result from source observable\n *\n * @param handler - Worker handler\n * @param options - Options\n *\n * @return Operator function\n */\nexport function mountSearchResult(\n { rx$ }: WorkerHandler, { query$ }: MountOptions\n): OperatorFunction {\n return pipe(\n switchMap(el => {\n const container = el.parentElement!\n\n /* Compute whether there are more search results to fetch */\n const fetch$ = watchElementOffset(container)\n .pipe(\n map(({ y }) => {\n return y >= container.scrollHeight - container.offsetHeight - 16\n }),\n distinctUntilChanged(),\n filter(identity)\n )\n\n /* Paint search results */\n return rx$\n .pipe(\n filter(isSearchResultMessage),\n pluck(\"data\"),\n paintSearchResult(el, { query$, fetch$ })\n )\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./query\"\nexport * from \"./reset\"\nexport * from \"./result\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, OperatorFunction, combineLatest, pipe } from \"rxjs\"\nimport {\n distinctUntilChanged,\n filter,\n map,\n shareReplay,\n startWith,\n switchMap,\n withLatestFrom\n} from \"rxjs/operators\"\n\nimport {\n Viewport,\n getElement,\n watchViewportAt\n} from \"observables\"\n\nimport { useComponent } from \"../../_\"\nimport { paintHeaderType } from \"../paint\"\nimport { watchHeader } from \"../watch\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Header type\n */\nexport type HeaderType =\n | \"site\" /* Header shows site title */\n | \"page\" /* Header shows page title */\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Header\n */\nexport interface Header {\n type: HeaderType /* Header type */\n sticky: boolean /* Header stickyness */\n height: number /* Header visible height */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n viewport$: Observable /* Viewport observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount header from source observable\n *\n * @param options - Options\n *\n * @return Operator function\n */\nexport function mountHeader(\n { viewport$ }: MountOptions\n): OperatorFunction {\n return pipe(\n switchMap(el => {\n const header$ = watchHeader(el, { viewport$ })\n\n /* Compute whether the header should switch to page header */\n const type$ = useComponent(\"main\")\n .pipe(\n map(main => getElement(\"h1, h2, h3, h4, h5, h6\", main)!),\n filter(hx => typeof hx !== \"undefined\"),\n withLatestFrom(useComponent(\"header-title\")),\n switchMap(([hx, title]) => watchViewportAt(hx, { header$, viewport$ })\n .pipe(\n map(({ offset: { y } }) => {\n return y >= hx.offsetHeight ? \"page\" : \"site\"\n }),\n distinctUntilChanged(),\n paintHeaderType(title)\n )\n ),\n startWith(\"site\")\n )\n\n /* Combine into single observable */\n return combineLatest([header$, type$])\n .pipe(\n map(([header, type]): Header => ({ type, ...header })),\n shareReplay(1)\n )\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, of } from \"rxjs\"\nimport { distinctUntilKeyChanged, switchMap } from \"rxjs/operators\"\n\nimport { Viewport } from \"observables\"\n\nimport { Header } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n viewport$: Observable /* Viewport observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch header\n *\n * The header is wrapped in an observable to pave the way for auto-hiding or\n * other dynamic behaviors that may be implemented later on.\n *\n * @param el - Header element\n * @param options - Options\n *\n * @return Header observable\n */\nexport function watchHeader(\n el: HTMLElement, { viewport$ }: WatchOptions\n): Observable> {\n return viewport$\n .pipe(\n distinctUntilKeyChanged(\"size\"),\n switchMap(() => {\n const styles = getComputedStyle(el)\n const sticky = [\n \"sticky\", /* Modern browsers */\n \"-webkit-sticky\" /* Old Safari */\n ].includes(styles.position)\n return of({\n sticky,\n height: sticky ? el.offsetHeight : 0\n })\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n MonoTypeOperatorFunction,\n animationFrameScheduler,\n pipe\n} from \"rxjs\"\nimport { finalize, observeOn, tap } from \"rxjs/operators\"\n\nimport { HeaderType } from \"../_\"\nimport {\n resetHeaderTitleActive,\n setHeaderTitleActive\n} from \"../apply\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Paint header title type\n *\n * @param el - Header title element\n *\n * @return Operator function\n */\nexport function paintHeaderType(\n el: HTMLElement\n): MonoTypeOperatorFunction {\n return pipe(\n\n /* Defer repaint to next animation frame */\n observeOn(animationFrameScheduler),\n tap(type => {\n setHeaderTitleActive(el, type === \"page\")\n }),\n\n /* Reset on complete or error */\n finalize(() => {\n resetHeaderTitleActive(el)\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set header title active\n *\n * @param el - Header title element\n * @param value - Whether the title is shown\n */\nexport function setHeaderTitleActive(\n el: HTMLElement, value: boolean\n): void {\n el.setAttribute(\"data-md-state\", value ? \"active\" : \"\")\n}\n\n/**\n * Reset header title active\n *\n * @param el - Header title element\n */\nexport function resetHeaderTitleActive(\n el: HTMLElement\n): void {\n el.removeAttribute(\"data-md-state\")\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./apply\"\nexport * from \"./paint\"\nexport * from \"./watch\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, OperatorFunction, Subject, pipe } from \"rxjs\"\nimport { distinctUntilKeyChanged, switchMap, tap } from \"rxjs/operators\"\n\nimport { Viewport } from \"observables\"\n\nimport { useComponent } from \"../../_\"\nimport { Header } from \"../../header\"\nimport { paintHeaderShadow } from \"../paint\"\nimport { watchMain } from \"../watch\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Main area\n */\nexport interface Main {\n offset: number /* Main area top offset */\n height: number /* Main area visible height */\n active: boolean /* Scrolled past top offset */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n header$: Observable
    /* Header observable */\n viewport$: Observable /* Viewport observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount main area from source observable\n *\n * The header must be connected to the main area observable outside of the\n * operator function, as the header will persist in-between document switches\n * while the main area is replaced. However, the header observable must be\n * passed to this function, so we connect both via a long-living subject.\n *\n * @param options - Options\n *\n * @return Operator function\n */\nexport function mountMain(\n { header$, viewport$ }: MountOptions\n): OperatorFunction {\n const main$ = new Subject
    ()\n\n /* Connect to main area observable via long-living subject */\n useComponent(\"header\")\n .pipe(\n switchMap(header => main$\n .pipe(\n distinctUntilKeyChanged(\"active\"),\n paintHeaderShadow(header)\n )\n )\n )\n .subscribe()\n\n /* Return operator */\n return pipe(\n switchMap(el => watchMain(el, { header$, viewport$ })),\n tap(main => main$.next(main))\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n MonoTypeOperatorFunction,\n animationFrameScheduler,\n pipe\n} from \"rxjs\"\nimport { finalize, observeOn, tap } from \"rxjs/operators\"\n\nimport { Main } from \"../_\"\nimport {\n resetHeaderShadow,\n setHeaderShadow\n} from \"../apply\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Paint header shadow\n *\n * @param el - Header element\n *\n * @return Operator function\n */\nexport function paintHeaderShadow(\n el: HTMLElement\n): MonoTypeOperatorFunction
    {\n return pipe(\n\n /* Defer repaint to next animation frame */\n observeOn(animationFrameScheduler),\n tap(({ active }) => {\n setHeaderShadow(el, active)\n }),\n\n /* Reset on complete or error */\n finalize(() => {\n resetHeaderShadow(el)\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set header shadow\n *\n * @param el - Header element\n * @param value - Whether the shadow is shown\n */\nexport function setHeaderShadow(\n el: HTMLElement, value: boolean\n): void {\n el.setAttribute(\"data-md-state\", value ? \"shadow\" : \"\")\n}\n\n/**\n * Reset header shadow\n *\n * @param el - Header element\n */\nexport function resetHeaderShadow(\n el: HTMLElement\n): void {\n el.removeAttribute(\"data-md-state\")\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, combineLatest } from \"rxjs\"\nimport { distinctUntilChanged, map, pluck } from \"rxjs/operators\"\n\nimport { Viewport } from \"observables\"\n\nimport { Header } from \"../../header\"\nimport { Main } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n header$: Observable
    /* Header observable */\n viewport$: Observable /* Viewport observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch main area\n *\n * This function returns an observable that computes the visual parameters of\n * the main area which depends on the viewport vertical offset and height, as\n * well as the height of the header element, if the header is fixed.\n *\n * @param el - Main area element\n * @param options - Options\n *\n * @return Main area observable\n */\nexport function watchMain(\n el: HTMLElement, { header$, viewport$ }: WatchOptions\n): Observable
    {\n\n /* Compute necessary adjustment for header */\n const adjust$ = header$\n .pipe(\n pluck(\"height\")\n )\n\n /* Compute the main area's visible height */\n const height$ = combineLatest([adjust$, viewport$])\n .pipe(\n map(([adjust, { offset: { y }, size: { height } }]) => {\n const top = el.offsetTop\n const bottom = el.offsetHeight + top\n return height\n - Math.max(0, top - y, adjust)\n - Math.max(0, height + y - bottom)\n }),\n map(height => Math.max(0, height)),\n distinctUntilChanged()\n )\n\n /* Compute whether the viewport offset is past the main area's top */\n const active$ = combineLatest([adjust$, viewport$])\n .pipe(\n map(([adjust, { offset: { y } }]) => y >= el.offsetTop - adjust),\n distinctUntilChanged()\n )\n\n /* Combine into a single observable */\n return combineLatest([adjust$, height$, active$])\n .pipe(\n map(([adjust, height, active]) => ({\n offset: el.offsetTop - adjust,\n height,\n active\n }))\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./apply\"\nexport * from \"./paint\"\nexport * from \"./watch\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, OperatorFunction, pipe } from \"rxjs\"\nimport { distinctUntilChanged, map, switchMap } from \"rxjs/operators\"\n\nimport { Viewport, watchViewportAt } from \"observables\"\n\nimport { Header } from \"../../header\"\nimport { paintHero } from \"../paint\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Hero\n */\nexport interface Hero {\n hidden: boolean /* Whether the hero is hidden */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n header$: Observable
    /* Header observable */\n viewport$: Observable /* Viewport observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount hero from source observable\n *\n * @param options - Options\n *\n * @return Operator function\n */\nexport function mountHero(\n { header$, viewport$ }: MountOptions\n): OperatorFunction {\n return pipe(\n switchMap(el => watchViewportAt(el, { header$, viewport$ })\n .pipe(\n map(({ offset: { y } }) => ({ hidden: y >= 20 })),\n distinctUntilChanged(),\n paintHero(el)\n )\n )\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n MonoTypeOperatorFunction,\n animationFrameScheduler,\n pipe\n} from \"rxjs\"\nimport { finalize, observeOn, tap } from \"rxjs/operators\"\n\nimport { Hero } from \"../_\"\nimport {\n resetHeroHidden,\n setHeroHidden\n} from \"../apply\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Paint hero\n *\n * @param el - Hero element\n *\n * @return Operator function\n */\nexport function paintHero(\n el: HTMLElement\n): MonoTypeOperatorFunction {\n return pipe(\n\n /* Defer repaint to next animation frame */\n observeOn(animationFrameScheduler),\n tap(({ hidden }) => {\n setHeroHidden(el, hidden)\n }),\n\n /* Reset on complete or error */\n finalize(() => {\n resetHeroHidden(el)\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set hero hidden\n *\n * @param el - Hero element\n * @param value - Whether the element is hidden\n */\nexport function setHeroHidden(\n el: HTMLElement, value: boolean\n): void {\n el.setAttribute(\"data-md-state\", value ? \"hidden\" : \"\")\n}\n\n/**\n * Reset hero hidden\n *\n * @param el - Hero element\n */\nexport function resetHeroHidden(\n el: HTMLElement\n): void {\n el.removeAttribute(\"data-md-state\")\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./apply\"\nexport * from \"./paint\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, OperatorFunction, of, pipe } from \"rxjs\"\nimport { distinctUntilChanged, map, switchMap } from \"rxjs/operators\"\n\nimport { Viewport, watchViewportAt } from \"observables\"\n\nimport { Header } from \"../../header\"\nimport { paintTabs } from \"../paint\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Tabs\n */\nexport interface Tabs {\n hidden: boolean /* Whether the tabs are hidden */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n header$: Observable
    /* Header observable */\n viewport$: Observable /* Viewport observable */\n screen$: Observable /* Media screen observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount tabs from source observable\n *\n * @param options - Options\n *\n * @return Operator function\n */\nexport function mountTabs(\n { header$, viewport$, screen$ }: MountOptions\n): OperatorFunction {\n return pipe(\n switchMap(el => screen$\n .pipe(\n switchMap(screen => {\n\n /* [screen +]: Mount tabs above screen breakpoint */\n if (screen) {\n return watchViewportAt(el, { header$, viewport$ })\n .pipe(\n map(({ offset: { y } }) => ({ hidden: y >= 10 })),\n distinctUntilChanged(),\n paintTabs(el)\n )\n\n /* [screen -]: Unmount tabs below screen breakpoint */\n } else {\n return of({ hidden: true })\n }\n })\n )\n )\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n MonoTypeOperatorFunction,\n animationFrameScheduler,\n pipe\n} from \"rxjs\"\nimport { finalize, observeOn, tap } from \"rxjs/operators\"\n\nimport { Tabs } from \"../_\"\nimport {\n resetTabsHidden,\n setTabsHidden\n} from \"../apply\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Paint tabs\n *\n * @param el - Tabs element\n *\n * @return Operator function\n */\nexport function paintTabs(\n el: HTMLElement\n): MonoTypeOperatorFunction {\n return pipe(\n\n /* Defer repaint to next animation frame */\n observeOn(animationFrameScheduler),\n tap(({ hidden }) => {\n setTabsHidden(el, hidden)\n }),\n\n /* Reset on complete or error */\n finalize(() => {\n resetTabsHidden(el)\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set tabs hidden\n *\n * @param el - Tabs element\n * @param value - Whether the element is hidden\n */\nexport function setTabsHidden(\n el: HTMLElement, value: boolean\n): void {\n el.setAttribute(\"data-md-state\", value ? \"hidden\" : \"\")\n}\n\n/**\n * Reset tabs hidden\n *\n * @param el - Tabs element\n */\nexport function resetTabsHidden(\n el: HTMLElement\n): void {\n el.removeAttribute(\"data-md-state\")\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./apply\"\nexport * from \"./paint\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { NEVER, Observable, fromEvent, iif, merge } from \"rxjs\"\nimport { map, mapTo, shareReplay, switchMap } from \"rxjs/operators\"\n\nimport { getElements } from \"observables\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch options\n */\ninterface PatchOptions {\n document$: Observable /* Document observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Check whether the given device is an Apple device\n *\n * @return Test result\n */\nfunction isAppleDevice(): boolean {\n return /(iPad|iPhone|iPod)/.test(navigator.userAgent)\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch all elements with `data-md-scrollfix` attributes\n *\n * This is a year-old patch which ensures that overflow scrolling works at the\n * top and bottom of containers on iOS by ensuring a `1px` scroll offset upon\n * the start of a touch event.\n *\n * @see https://bit.ly/2SCtAOO - Original source\n *\n * @param options - Options\n */\nexport function patchScrollfix(\n { document$ }: PatchOptions\n): void {\n const els$ = document$\n .pipe(\n map(() => getElements(\"[data-md-scrollfix]\")),\n shareReplay(1)\n )\n\n /* Remove marker attribute, so we'll only add the fix once */\n els$.subscribe(els => {\n for (const el of els)\n el.removeAttribute(\"data-md-scrollfix\")\n })\n\n /* Patch overflow scrolling on touch start */\n iif(isAppleDevice, els$, NEVER)\n .pipe(\n switchMap(els => merge(...els.map(el => (\n fromEvent(el, \"touchstart\")\n .pipe(\n mapTo(el)\n )\n ))))\n )\n .subscribe(el => {\n const top = el.scrollTop\n\n /* We're at the top of the container */\n if (top === 0) {\n el.scrollTop = 1\n\n /* We're at the bottom of the container */\n } else if (top + el.offsetHeight === el.scrollHeight) {\n el.scrollTop = top - 1\n }\n })\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { NEVER, Observable } from \"rxjs\"\nimport { catchError, map, switchMap } from \"rxjs/operators\"\n\nimport { getElementOrThrow, getElements } from \"observables\"\nimport { renderSource } from \"templates\"\nimport { cache, hash } from \"utilities\"\n\nimport { fetchSourceFactsFromGitHub } from \"./github\"\nimport { fetchSourceFactsFromGitLab } from \"./gitlab\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Source facts\n */\nexport type SourceFacts = string[]\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch options\n */\ninterface PatchOptions {\n document$: Observable /* Document observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Fetch source facts\n *\n * @param url - Source repository URL\n *\n * @return Source facts observable\n */\nfunction fetchSourceFacts(\n url: string\n): Observable {\n const [type] = url.match(/(git(?:hub|lab))/i) || []\n switch (type.toLowerCase()) {\n\n /* GitHub repository */\n case \"github\":\n const [, user, repo] = url.match(/^.+github\\.com\\/([^\\/]+)\\/?([^\\/]+)/i)\n return fetchSourceFactsFromGitHub(user, repo)\n\n /* GitLab repository */\n case \"gitlab\":\n const [, base, project] = url.match(/^.+?([^\\/]*gitlab[^\\/]+)\\/(.+)/i)\n return fetchSourceFactsFromGitLab(base, project)\n\n /* Everything else */\n default:\n return NEVER\n }\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch elements containing repository information\n *\n * This function will retrieve the URL from the repository link and try to\n * query data from integrated source code platforms like GitHub or GitLab.\n *\n * @param options - Options\n */\nexport function patchSource(\n { document$ }: PatchOptions\n): void {\n document$\n .pipe(\n map(() => getElementOrThrow(\".md-source[href]\")),\n switchMap(({ href }) => (\n cache(`${hash(href)}`, () => fetchSourceFacts(href))\n )),\n catchError(() => NEVER)\n )\n .subscribe(facts => {\n for (const el of getElements(\".md-source__repository\")) {\n if (!el.hasAttribute(\"data-md-state\")) {\n el.setAttribute(\"data-md-state\", \"done\")\n el.appendChild(renderSource(facts))\n }\n }\n })\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Repo, User } from \"github-types\"\nimport { Observable, of } from \"rxjs\"\nimport { ajax } from \"rxjs/ajax\"\nimport { filter, pluck, switchMap } from \"rxjs/operators\"\n\nimport { round } from \"utilities\"\n\nimport { SourceFacts } from \"..\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Fetch GitHub source facts\n *\n * @param user - GitHub user\n * @param repo - GitHub repository\n *\n * @return Source facts observable\n */\nexport function fetchSourceFactsFromGitHub(\n user: string, repo?: string\n): Observable {\n return ajax({\n url: typeof repo !== \"undefined\"\n ? `https://api.github.com/repos/${user}/${repo}`\n : `https://api.github.com/users/${user}`,\n responseType: \"json\"\n })\n .pipe(\n filter(({ status }) => status === 200),\n pluck(\"response\"),\n switchMap(data => {\n\n /* GitHub repository */\n if (typeof repo !== \"undefined\") {\n const { stargazers_count, forks_count }: Repo = data\n return of([\n `${round(stargazers_count || 0)} Stars`,\n `${round(forks_count || 0)} Forks`\n ])\n\n /* GitHub user/organization */\n } else {\n const { public_repos }: User = data\n return of([\n `${round(public_repos || 0)} Repositories`\n ])\n }\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { ProjectSchema } from \"gitlab\"\nimport { Observable } from \"rxjs\"\nimport { ajax } from \"rxjs/ajax\"\nimport { filter, map, pluck } from \"rxjs/operators\"\n\nimport { round } from \"utilities\"\n\nimport { SourceFacts } from \"..\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Fetch GitLab source facts\n *\n * @param base - GitLab base\n * @param project - GitLab project\n *\n * @return Source facts observable\n */\nexport function fetchSourceFactsFromGitLab(\n base: string, project: string\n): Observable {\n return ajax({\n url: `https://${base}/api/v4/projects/${encodeURIComponent(project)}`,\n responseType: \"json\"\n })\n .pipe(\n filter(({ status }) => status === 200),\n pluck(\"response\"),\n map(({ star_count, forks_count }: ProjectSchema) => ([\n `${round(star_count)} Stars`,\n `${round(forks_count)} Forks`\n ]))\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n// TODO: remove this after we finished refactoring\n// tslint:disable\n\nimport \"../stylesheets/main.scss\"\nimport \"../stylesheets/palette.scss\"\n\nimport { values } from \"ramda\"\nimport {\n merge,\n combineLatest,\n animationFrameScheduler,\n fromEvent,\n of,\n NEVER\n} from \"rxjs\"\nimport {\n delay,\n switchMap,\n tap,\n filter,\n withLatestFrom,\n observeOn,\n take,\n mapTo,\n shareReplay,\n sample,\n share,\n map,\n pluck,\n debounceTime,\n distinctUntilKeyChanged,\n distinctUntilChanged,\n bufferCount\n} from \"rxjs/operators\"\n\nimport {\n watchToggle,\n setToggle,\n getElements,\n watchMedia,\n watchDocument,\n watchLocation,\n watchLocationHash,\n watchViewport,\n setupToggles,\n useToggle,\n getElement,\n setViewportOffset,\n ViewportOffset\n} from \"./observables\"\nimport { setupSearchWorker } from \"./workers\"\n\nimport {\n mountHeader,\n mountHero,\n mountMain,\n mountNavigation,\n mountSearch,\n mountTableOfContents,\n mountTabs,\n useComponent,\n setupComponents,\n mountSearchQuery,\n mountSearchReset,\n mountSearchResult\n} from \"components\"\nimport { setupClipboard } from \"./integrations/clipboard\"\nimport { setupKeyboard } from \"./integrations/keyboard\"\nimport {\n patchTables,\n patchDetails,\n patchScrollfix,\n patchSource,\n patchScripts\n} from \"patches\"\nimport { isConfig } from \"utilities\"\nimport { setupDialog } from \"integrations/dialog\"\n\n/* ------------------------------------------------------------------------- */\n\ndocument.documentElement.classList.remove(\"no-js\")\ndocument.documentElement.classList.add(\"js\")\n\n/* Test for iOS */\nif (navigator.userAgent.match(/(iPad|iPhone|iPod)/g))\n document.documentElement.classList.add(\"ios\")\n\n/**\n * Set scroll lock\n *\n * @param el - Scrollable element\n * @param value - Vertical offset\n */\nexport function setScrollLock(\n el: HTMLElement, value: number\n): void {\n el.setAttribute(\"data-md-state\", \"lock\")\n el.style.top = `-${value}px`\n}\n\n/**\n * Reset scroll lock\n *\n * @param el - Scrollable element\n */\nexport function resetScrollLock(\n el: HTMLElement\n): void {\n const value = -1 * parseInt(el.style.top, 10)\n el.removeAttribute(\"data-md-state\")\n el.style.top = \"\"\n if (value)\n window.scrollTo(0, value)\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Initialize Material for MkDocs\n *\n * @param config - Configuration\n */\nexport function initialize(config: unknown) {\n if (!isConfig(config))\n throw new SyntaxError(`Invalid configuration: ${JSON.stringify(config)}`)\n\n /* Setup user interface observables */\n const location$ = watchLocation()\n const hash$ = watchLocationHash()\n const viewport$ = watchViewport()\n const tablet$ = watchMedia(\"(min-width: 960px)\")\n const screen$ = watchMedia(\"(min-width: 1220px)\")\n\n /* Setup document observable */\n const document$ = config.feature.instant\n ? watchDocument({ location$ })\n : watchDocument()\n\n /* Setup toggle bindings */\n setupToggles([\n \"drawer\", /* Toggle for drawer */\n \"search\" /* Toggle for search */\n ], { document$ })\n\n /* Setup component bindings */\n setupComponents([\n \"container\", /* Container */\n \"header\", /* Header */\n \"header-title\", /* Header title */\n \"hero\", /* Hero */\n \"main\", /* Main area */\n \"navigation\", /* Navigation */\n \"search\", /* Search */\n \"search-query\", /* Search input */\n \"search-reset\", /* Search reset */\n \"search-result\", /* Search results */\n \"tabs\", /* Tabs */\n \"toc\" /* Table of contents */\n ], { document$ })\n\n /* ----------------------------------------------------------------------- */\n\n const worker = setupSearchWorker(config.worker.search, {\n base: config.base, location$\n })\n\n /* ----------------------------------------------------------------------- */\n\n /* Create header observable */\n const header$ = useComponent(\"header\")\n .pipe(\n mountHeader({ viewport$ }),\n shareReplay(1)\n )\n\n const main$ = useComponent(\"main\")\n .pipe(\n mountMain({ header$, viewport$ }),\n shareReplay(1)\n )\n\n /* ----------------------------------------------------------------------- */\n\n /* Mount search query */\n const query$ = useComponent(\"search-query\")\n .pipe(\n mountSearchQuery(worker),\n shareReplay(1) // TODO: this must be put onto EVERY component!\n )\n\n /* Mount search reset */\n const reset$ = useComponent(\"search-reset\")\n .pipe(\n mountSearchReset(),\n shareReplay(1)\n )\n\n /* Mount search result */\n const result$ = useComponent(\"search-result\")\n .pipe(\n mountSearchResult(worker, { query$ }),\n shareReplay(1)\n )\n\n /* ----------------------------------------------------------------------- */\n\n const search$ = useComponent(\"search\")\n .pipe(\n mountSearch({ query$, reset$, result$ }),\n shareReplay(1)\n )\n\n /* ----------------------------------------------------------------------- */\n\n const navigation$ = useComponent(\"navigation\")\n .pipe(\n mountNavigation({ header$, main$, viewport$, screen$ }),\n shareReplay(1) // shareReplay because there might be late subscribers\n )\n\n const toc$ = useComponent(\"toc\")\n .pipe(\n mountTableOfContents({ header$, main$, viewport$, tablet$ }),\n shareReplay(1)\n )\n\n const tabs$ = useComponent(\"tabs\")\n .pipe(\n mountTabs({ header$, viewport$, screen$ }),\n shareReplay(1)\n )\n\n const hero$ = useComponent(\"hero\")\n .pipe(\n mountHero({ header$, viewport$ }),\n shareReplay(1)\n )\n\n /* ----------------------------------------------------------------------- */\n\n const keyboard$ = setupKeyboard()\n\n patchDetails({ document$, hash$ })\n patchScripts({ document$ })\n patchSource({ document$ })\n patchTables({ document$ })\n\n /* Force 1px scroll offset to trigger overflow scrolling */\n patchScrollfix({ document$ })\n\n /* Setup clipboard and dialog */\n const dialog$ = setupDialog()\n const clipboard$ = setupClipboard({ document$, dialog$ })\n\n /* ----------------------------------------------------------------------- */\n\n // Close drawer and search on hash change\n // put into navigation...\n // TODO: replace with popstate?\n hash$.subscribe(() => {\n useToggle(\"drawer\").subscribe(el => {\n setToggle(el, false)\n })\n })\n\n // put into search...\n hash$\n .pipe(\n switchMap(hash => useToggle(\"search\")\n .pipe(\n filter(x => x.checked), // only active\n tap(toggle => setToggle(toggle, false)),\n delay(125), // ensure that it runs after the body scroll reset...\n mapTo(hash)\n )\n )\n )\n .subscribe(hash => {\n getElement(`[id=\"${hash}\"]`)!.scrollIntoView()\n })\n\n // Scroll lock // document -> document$ => { body } !?\n // put into search...\n const toggle$ = useToggle(\"search\")\n combineLatest([\n toggle$.pipe(switchMap(watchToggle)),\n tablet$,\n ])\n .pipe(\n withLatestFrom(viewport$),\n switchMap(([[toggle, tablet], { offset: { y }}]) => {\n const active = toggle && !tablet\n return document$\n .pipe(\n delay(active ? 400 : 100), // TOOD: directly combine this with the hash!\n observeOn(animationFrameScheduler),\n tap(({ body }) => active\n ? setScrollLock(body, y)\n : resetScrollLock(body)\n )\n )\n })\n )\n .subscribe()\n\n /* ----------------------------------------------------------------------- */\n\n /**\n * Location change\n */\n interface State {\n url: URL\n data?: ViewportOffset\n }\n\n function isInternalLink(el: HTMLAnchorElement | URL) {\n return el.host === location.host && (\n // TODO: Improve regex\n !el.pathname || el.pathname === \"/\" || /\\/[\\w-]+(?:\\/?|\\.html)$/i.test(el.pathname) // TODO: provide some test cases\n )\n }\n\n // on same page!\n function isAnchorLink(el: HTMLAnchorElement | URL) {\n return el.pathname === location.pathname && el.hash.length > 0\n }\n\n function compareState(\n { url: a }: State, { url: b }: State\n ) {\n return a.href === b.href\n }\n\n // instant loading\n if (config.feature.instant) {\n\n /* Disable automatic scroll restoration, as it doesn't work nicely */\n if (\"scrollRestoration\" in history)\n history.scrollRestoration = \"manual\"\n\n /* Resolve relative links for stability */\n for (const selector of [\n `link[rel=\"shortcut icon\"]`,\n `link[rel=\"stylesheet\"]`\n ])\n for (const el of getElements(selector))\n el.href = el.href\n\n /* Intercept internal link clicks */\n const internal$ = fromEvent(document.body, \"click\")\n .pipe(\n filter(ev => !(ev.metaKey || ev.ctrlKey)),\n switchMap(ev => {\n if (ev.target instanceof HTMLElement) {\n const el = ev.target.closest(\"a\")\n if (el && isInternalLink(el)) {\n if (!isAnchorLink(el))\n ev.preventDefault()\n return of(el.href)\n }\n }\n return NEVER\n }),\n distinctUntilChanged(),\n map(href => ({ url: new URL(href) })),\n share()\n )\n\n /* Intercept internal links to dispatch */\n const dispatch$ = internal$\n .pipe(\n filter(({ url }) => !isAnchorLink(url)),\n share()\n )\n\n /* Intercept popstate events (history back and forward) */\n const popstate$ = fromEvent(window, \"popstate\")\n .pipe(\n filter(ev => ev.state !== null),\n map(ev => ({\n url: new URL(location.href),\n data: ev.state\n })),\n share()\n )\n\n /* Emit location change */\n merge(dispatch$, popstate$)\n .pipe(\n pluck(\"url\")\n )\n .subscribe(location$)\n\n /* Add dispatched link to history */\n internal$\n .pipe(\n // TODO: must start with the current location and ignore the first emission\n distinctUntilChanged(compareState),\n filter(({ url }) => !isAnchorLink(url))\n )\n .subscribe(({ url }) => {\n // console.log(`History.Push ${url}`)\n history.pushState({}, \"\", url.toString())\n })\n\n // special case\n merge(internal$, popstate$)\n .pipe(\n bufferCount(2, 1),\n // filter(([prev, next]) => {\n // return prev.url.href.match(next.url.href) !== null\n // && isAnchorLink(prev.url)\n // })\n )\n .subscribe(([prev, next]) => {\n console.log(`<- ${prev.url}`)\n console.log(`-> ${next.url}`)\n\n if (\n prev.url.href.match(next.url.href) !== null &&\n isAnchorLink(prev.url)\n ) {\n // dialog$.next(`Potential Candidate: ${JSON.stringify(next.data)}`, ) // awesome debugging.\n setViewportOffset(next.data || { y: 0 })\n }\n // console.log(\"Potential Candidate\")\n })\n // .subscribe((x) => console.log(x[0].url.toString(), x[1].url.toString()))\n // filter(([prev, next]) => {\n // return prev.url.href.match(next.url.href) !== null\n // && isAnchorLink(prev.url)\n // }),\n // map(([, next]) => next)\n // // distinctUntilChanged(compareLocationChange),\n // // filter(({ url }) => !isAnchorLink(url))\n // )\n // .subscribe(({ url }) => {\n // console.log(`Restore ${url}`)\n // })\n\n /* Persist viewport offset in history before hash change */\n viewport$\n .pipe(\n debounceTime(250),\n distinctUntilKeyChanged(\"offset\"),\n )\n .subscribe(({ offset }) => {\n // console.log(\"Update\", offset)\n history.replaceState(offset, \"\")\n })\n\n /* */\n merge(dispatch$, popstate$)\n .pipe(\n sample(document$),\n withLatestFrom(document$),\n )\n .subscribe(([{ url, data }, { title, head }]) => {\n console.log(\"Done\", url.href, data)\n\n // trigger custom event\n document.dispatchEvent(new CustomEvent(\"DOMContentSwitch\"))\n\n // setDocumentTitle\n document.title = title\n\n // replace meta tags\n for (const selector of [\n `link[rel=\"canonical\"]`,\n `meta[name=\"author\"]`,\n `meta[name=\"description\"]`\n ]) {\n const next = getElement(selector, head)\n const prev = getElement(selector, document.head)\n if (\n typeof next !== \"undefined\" &&\n typeof prev !== \"undefined\"\n ) {\n prev.replaceWith(next)\n }\n }\n\n // search drawer close\n useToggle(\"search\").subscribe(el => {\n setToggle(el, false)\n })\n\n // // TODO: this doesnt work as expected\n if (url.hash) {\n console.log(\"hash data?\", data)\n const a = document.createElement(\"a\")\n a.href = url.hash\n a.click()\n } else {\n setViewportOffset(data || { y: 0 }) // push state!\n }\n })\n\n // internal$.subscribe(({ url }) => {\n // console.log(`Internal ${url}`)\n // })\n\n // dispatch$.subscribe(({ url }) => {\n // console.log(`Dispatch ${url}`)\n // })\n\n popstate$.subscribe(({ url }) => {\n console.log(`Popstate ${url.href}`, url)\n })\n }\n\n /* ----------------------------------------------------------------------- */\n\n // if we use a single tab outside of search, unhide all permalinks.\n // TODO: experimental. necessary!?\n keyboard$\n .pipe(\n filter(key => key.mode === \"global\" && [\"Tab\"].includes(key.type)),\n take(1)\n )\n .subscribe(() => {\n for (const link of getElements(\".headerlink\"))\n link.style.visibility = \"visible\"\n })\n\n /* ----------------------------------------------------------------------- */\n\n const state = {\n search$,\n clipboard$,\n location$,\n hash$,\n keyboard$,\n dialog$,\n main$,\n navigation$,\n toc$,\n tabs$,\n hero$,\n // title$ // TODO: header title\n }\n\n const { ...rest } = state\n merge(...values(rest))\n .subscribe() // potential memleak <-- use takeUntil\n\n return {\n // agent,\n state\n }\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable } from \"rxjs\"\nimport {\n filter,\n map,\n share,\n switchMap,\n withLatestFrom\n} from \"rxjs/operators\"\n\nimport { useComponent } from \"components\"\nimport {\n Key,\n getActiveElement,\n getElement,\n getElements,\n isSusceptibleToKeyboard,\n setElementFocus,\n setElementSelection,\n setToggle,\n useToggle,\n watchKeyboard,\n watchToggle\n} from \"observables\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Keyboard mode\n */\nexport type KeyboardMode =\n | \"global\" /* Global */\n | \"search\" /* Search is open */\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Keyboard\n */\nexport interface Keyboard extends Key {\n mode: KeyboardMode /* Keyboard mode */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup keyboard\n *\n * This function will setup the keyboard handlers and ensure that keys are\n * correctly propagated. Currently there are two modes:\n *\n * - `global`: This mode is active when the search is closed. It is intended\n * to assign hotkeys to specific functions of the site. Currently the search,\n * previous and next page can be triggered.\n *\n * - `search`: This mode is active when the search is open. It maps certain\n * navigational keys to offer search results that can be entirely navigated\n * through keyboard input.\n *\n * The keyboard observable is returned and can be used to monitor the keyboard\n * in order toassign further hotkeys to custom functions.\n *\n * @return Keyboard observable\n */\nexport function setupKeyboard(): Observable {\n const toggle$ = useToggle(\"search\")\n const search$ = toggle$\n .pipe(\n switchMap(watchToggle)\n )\n\n /* Setup keyboard and determine mode */\n const keyboard$ = watchKeyboard()\n .pipe(\n withLatestFrom(search$),\n map(([key, toggle]): Keyboard => ({\n mode: toggle ? \"search\" : \"global\",\n ...key\n })),\n share()\n )\n\n /* Setup search keyboard handlers */\n keyboard$\n .pipe(\n filter(({ mode }) => mode === \"search\"),\n withLatestFrom(\n toggle$,\n useComponent(\"search-query\"),\n useComponent(\"search-result\")\n )\n )\n .subscribe(([key, toggle, query, result]) => {\n const active = getActiveElement()\n switch (key.type) {\n\n /* Enter: prevent form submission */\n case \"Enter\":\n if (active === query)\n key.claim()\n break\n\n /* Escape or Tab: close search */\n case \"Escape\":\n case \"Tab\":\n setToggle(toggle, false)\n setElementFocus(query, false)\n break\n\n /* Vertical arrows: select previous or next search result */\n case \"ArrowUp\":\n case \"ArrowDown\":\n if (typeof active === \"undefined\") {\n setElementFocus(query)\n } else {\n const els = [query, ...getElements(\"[href]\", result)]\n const i = Math.max(0, (\n Math.max(0, els.indexOf(active)) + els.length + (\n key.type === \"ArrowUp\" ? -1 : +1\n )\n ) % els.length)\n setElementFocus(els[i])\n }\n\n /* Prevent scrolling of page */\n key.claim()\n break\n\n /* All other keys: hand to search query */\n default:\n if (query !== getActiveElement())\n setElementFocus(query)\n }\n })\n\n /* Setup global keyboard handlers */\n keyboard$\n .pipe(\n filter(({ mode }) => {\n if (mode === \"global\") {\n const active = getActiveElement()\n if (typeof active !== \"undefined\")\n return !isSusceptibleToKeyboard(active)\n }\n return false\n }),\n withLatestFrom(useComponent(\"search-query\"))\n )\n .subscribe(([key, query]) => {\n switch (key.type) {\n\n /* Open search and select query */\n case \"f\":\n case \"s\":\n setElementFocus(query)\n setElementSelection(query)\n key.claim()\n break\n\n /* Go to previous page */\n case \"p\":\n case \",\":\n const prev = getElement(\"[href][rel=prev]\")\n if (typeof prev !== \"undefined\")\n prev.click()\n break\n\n /* Go to next page */\n case \"n\":\n case \".\":\n const next = getElement(\"[href][rel=next]\")\n if (typeof next !== \"undefined\")\n next.click()\n break\n }\n })\n\n /* Return keyboard */\n return keyboard$\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { identity } from \"ramda\"\nimport { Observable, fromEvent, merge } from \"rxjs\"\nimport {\n filter,\n map,\n switchMapTo,\n tap\n} from \"rxjs/operators\"\n\nimport {\n getElement,\n getElements,\n watchMedia\n} from \"observables\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch options\n */\ninterface PatchOptions {\n document$: Observable /* Document observable */\n hash$: Observable /* Location hash observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch all `details` elements\n *\n * This function will ensure that all `details` tags are opened prior to\n * printing, so the whole content of the page is included, and on anchor jumps.\n *\n * @param options - Options\n */\nexport function patchDetails(\n { document$, hash$ }: PatchOptions\n): void {\n const els$ = document$\n .pipe(\n map(() => getElements(\"details\"))\n )\n\n /* Open all details before printing */\n merge(\n watchMedia(\"print\").pipe(filter(identity)), /* Webkit */\n fromEvent(window, \"beforeprint\") /* IE, FF */\n )\n .pipe(\n switchMapTo(els$)\n )\n .subscribe(els => {\n for (const el of els)\n el.setAttribute(\"open\", \"\")\n })\n\n /* Open parent details and fix anchor jump */\n hash$\n .pipe(\n map(id => getElement(`[id=\"${id}\"]`)!),\n filter(el => typeof el !== \"undefined\"),\n tap(el => {\n const details = el.closest(\"details\")\n if (details && !details.open)\n details.setAttribute(\"open\", \"\")\n })\n )\n .subscribe(el => el.scrollIntoView())\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable } from \"rxjs\"\nimport { map, skip, withLatestFrom } from \"rxjs/operators\"\n\nimport { useComponent } from \"components\"\nimport { getElements } from \"observables\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch options\n */\ninterface PatchOptions {\n document$: Observable /* Document observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch all `script` elements\n *\n * This function must be run after a document switch, which means the first\n * emission must be ignored.\n *\n * @param options - Options\n */\nexport function patchScripts(\n { document$ }: PatchOptions\n): void {\n const els$ = document$\n .pipe(\n skip(1),\n withLatestFrom(useComponent(\"container\")),\n map(([, el]) => getElements(\"script\", el))\n )\n\n /* Evaluate all scripts via replacement */\n els$.subscribe(els => {\n for (const el of els) {\n if (el.src || /(^|\\/javascript)$/i.test(el.type)) {\n const script = document.createElement(\"script\")\n const key = el.src ? \"src\" : \"innerText\"\n script[key] = el[key]\n el.replaceWith(script)\n }\n }\n })\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable } from \"rxjs\"\nimport { map } from \"rxjs/operators\"\n\nimport { getElements } from \"observables\"\nimport { renderTable } from \"templates\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n document$: Observable /* Document observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch all `table` elements\n *\n * This function will re-render all tables by wrapping them to improve overflow\n * scrolling on smaller screen sizes.\n *\n * @param options - Options\n */\nexport function patchTables(\n { document$ }: MountOptions\n): void {\n const sentinel = document.createElement(\"table\")\n document$\n .pipe(\n map(() => getElements(\"table:not([class])\"))\n )\n .subscribe(els => {\n for (const el of els) {\n el.replaceWith(sentinel)\n sentinel.replaceWith(renderTable(el))\n }\n })\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Subject, animationFrameScheduler, of } from \"rxjs\"\nimport {\n delay,\n map,\n observeOn,\n switchMap,\n tap\n} from \"rxjs/operators\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup options\n */\ninterface SetupOptions {\n duration?: number /* Display duration (default: 2s) */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup dialog\n *\n * @param options - Options\n *\n * @return Dialog observable\n */\nexport function setupDialog(\n { duration }: SetupOptions = {}\n): Subject {\n const dialog$ = new Subject()\n\n /* Create dialog */\n const dialog = document.createElement(\"div\") // TODO: improve scoping\n dialog.classList.add(\"md-dialog\", \"md-typeset\")\n\n /* Display dialog */\n dialog$\n .pipe(\n switchMap(text => of(document.body) // useComponent(\"container\")\n .pipe(\n map(container => container.appendChild(dialog)),\n observeOn(animationFrameScheduler),\n delay(1), // Strangley it doesnt work when we push things to the new animation frame...\n tap(el => {\n el.innerHTML = text\n el.setAttribute(\"data-md-state\", \"open\")\n }),\n delay(duration || 2000),\n tap(el => el.removeAttribute(\"data-md-state\")),\n delay(400),\n tap(el => {\n el.innerHTML = \"\"\n el.remove()\n })\n )\n )\n )\n .subscribe()\n\n /* Return dialog subject */\n return dialog$\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport * as ClipboardJS from \"clipboard\"\nimport { NEVER, Observable, Subject, fromEventPattern } from \"rxjs\"\nimport { mapTo, share, tap } from \"rxjs/operators\"\n\nimport { getElements } from \"observables\"\nimport { renderClipboard } from \"templates\"\nimport { translate } from \"utilities\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup options\n */\ninterface SetupOptions {\n document$: Observable /* Document observable */\n dialog$: Subject /* Dialog subject */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup clipboard\n *\n * This function implements the Clipboard.js integration and injects a button\n * into all code blocks when the document changes.\n *\n * @param options - Options\n *\n * @return Clipboard observable\n */\nexport function setupClipboard(\n { document$, dialog$ }: SetupOptions\n): Observable {\n if (!ClipboardJS.isSupported())\n return NEVER\n\n /* Inject 'copy-to-clipboard' buttons */\n document$.subscribe(() => {\n const blocks = getElements(\"pre > code\")\n for (const [index, block] of blocks.entries()) {\n const parent = block.parentElement!\n parent.id = `__code_${index}`\n parent.insertBefore(renderClipboard(parent.id), block)\n }\n })\n\n /* Initialize and setup clipboard */\n const clipboard$ = fromEventPattern(next => {\n new ClipboardJS(\".md-clipboard\").on(\"success\", next)\n })\n .pipe(\n share()\n )\n\n /* Display notification for clipboard event */\n clipboard$\n .pipe(\n tap(ev => ev.clearSelection()),\n mapTo(translate(\"clipboard.copied\"))\n )\n .subscribe(dialog$)\n\n /* Return clipboard */\n return clipboard$\n}\n"],"sourceRoot":""} \ No newline at end of file diff --git a/material/assets/javascripts/bundle.9330522f.min.js b/material/assets/javascripts/bundle.9330522f.min.js new file mode 100644 index 000000000..958639cb9 --- /dev/null +++ b/material/assets/javascripts/bundle.9330522f.min.js @@ -0,0 +1,2 @@ +!function(t,e){for(var n in e)t[n]=e[n]}(window,function(t){function e(e){for(var r,o,i=e[0],u=e[1],b=e[2],s=0,l=[];s0}function h(){return new d.a(new URL(location.href))}var m=n(8),y=n(94),g=n(98);function w(){return location.hash.substring(1)}function $(t){var e=document.createElement("a");e.href=t,e.click()}function x(){return Object(c.a)(window,"hashchange").pipe(Object(m.a)(w),Object(y.a)(w()),Object(g.a)((function(t){return t.length>0})),Object(j.a)())}function S(t){return t.location$.pipe(Object(b.a)("pathname"),Object(f.a)(1),Object(s.a)((function(t){return Object(u.a)({url:t.href,responseType:"document",withCredentials:!0}).pipe(Object(l.a)("response"),Object(O.a)((function(){return function(t){location.href=t.href}(t),a.a})))})),Object(j.a)())}function T(t){var e=(void 0===t?{}:t).location$;return Object(r.a)(Object(c.a)(document,"DOMContentLoaded").pipe(Object(o.a)(document)),void 0!==e?S({location$:e}):a.a).pipe(Object(i.a)(1))}function k(t,e){return void 0===e&&(e=document),e.querySelector(t)||void 0}function C(t,e){void 0===e&&(e=document);var n=k(t,e);if(void 0===n)throw new ReferenceError('Missing element: expected "'+t+'" to be present');return n}function _(){return document.activeElement instanceof HTMLElement?document.activeElement:void 0}function L(t,e){return void 0===e&&(e=document),Array.from(e.querySelectorAll(t))}function A(t,e){void 0===e&&(e=!0),e?t.focus():t.blur()}function N(t){var e=Object(c.a)(t,"focus"),n=Object(c.a)(t,"blur");return Object(r.a)(e.pipe(Object(o.a)(!0)),n.pipe(Object(o.a)(!1))).pipe(Object(y.a)(t===_()),Object(i.a)(1))}function E(t){return{x:t.scrollLeft,y:t.scrollTop}}function R(t){return Object(r.a)(Object(c.a)(t,"scroll"),Object(c.a)(window,"resize")).pipe(Object(m.a)((function(){return E(t)})),Object(y.a)(E(t)),Object(i.a)(1))}function M(t){if(!(t instanceof HTMLInputElement))throw new Error("Not implemented");t.select()}function H(t){switch(t.tagName){case"INPUT":case"SELECT":case"TEXTAREA":return!0;default:return t.isContentEditable}}function P(){return Object(c.a)(window,"keydown").pipe(Object(g.a)((function(t){return!(t.metaKey||t.ctrlKey)})),Object(m.a)((function(t){return{type:t.key,claim:function(){t.preventDefault(),t.stopPropagation()}}})),Object(j.a)())}var U=n(104);function q(t){var e=matchMedia(t);return Object(U.a)((function(t){return e.addListener((function(){return t(e.matches)}))})).pipe(Object(y.a)(e.matches),Object(i.a)(1))}var Q={drawer:C("[data-md-toggle=drawer]"),search:C("[data-md-toggle=search]")};function z(t){return Q[t].checked}function I(t,e){Q[t].checked!==e&&Q[t].click()}function D(t){var e=Q[t];return Object(c.a)(e,"change").pipe(Object(m.a)((function(){return e.checked})),Object(y.a)(e.checked))}var W=n(0),J=n(62);function B(){return{x:Math.max(0,pageXOffset),y:Math.max(0,pageYOffset)}}function F(t){var e=t.x,n=t.y;window.scrollTo(e||0,n||0)}function K(){return{width:innerWidth,height:innerHeight}}function Y(){return Object(J.a)([Object(r.a)(Object(c.a)(window,"scroll"),Object(c.a)(window,"resize")).pipe(Object(m.a)(B),Object(y.a)(B())),Object(c.a)(window,"resize").pipe(Object(m.a)(K),Object(y.a)(K()))]).pipe(Object(m.a)((function(t){var e=Object(W.c)(t,2);return{offset:e[0],size:e[1]}})),Object(i.a)(1))}function V(t,e){var n=e.header$,r=e.viewport$,c=r.pipe(Object(b.a)("size"),Object(m.a)((function(){return{x:t.offsetLeft,y:t.offsetTop}})));return Object(J.a)([n,r,c]).pipe(Object(m.a)((function(t){var e=Object(W.c)(t,3),n=e[0].height,r=e[1],c=r.offset,a=r.size,o=e[2],i=o.x,u=o.y;return{offset:{x:c.x-i,y:c.y-u+n},size:a}})),Object(i.a)(1))}var X=n(105),G=n(58),Z=n(106);function tt(t,e){var n=e.tx$,r=Object(U.a)((function(e){return t.addEventListener("message",e)})).pipe(Object(l.a)("data"));return n.pipe(Object(X.a)((function(){return r}),{leading:!0,trailing:!0}),Object(G.a)((function(e){return t.postMessage(e)})),Object(Z.a)(r),Object(j.a)())}n.d(e,"n",(function(){return T})),n.d(e,"b",(function(){return k})),n.d(e,"c",(function(){return C})),n.d(e,"a",(function(){return _})),n.d(e,"d",(function(){return L})),n.d(e,"i",(function(){return A})),n.d(e,"o",(function(){return N})),n.d(e,"p",(function(){return R})),n.d(e,"j",(function(){return M})),n.d(e,"h",(function(){return H})),n.d(e,"q",(function(){return P})),n.d(e,"g",(function(){return p})),n.d(e,"f",(function(){return v})),n.d(e,"r",(function(){return h})),n.d(e,"k",(function(){return $})),n.d(e,"s",(function(){return x})),n.d(e,"t",(function(){return q})),n.d(e,"e",(function(){return z})),n.d(e,"l",(function(){return I})),n.d(e,"u",(function(){return D})),n.d(e,"v",(function(){return Y})),n.d(e,"w",(function(){return V})),n.d(e,"m",(function(){return F})),n.d(e,"x",(function(){return tt}))},,,function(t,e,n){"use strict";function r(t){return"object"==typeof t&&"object"==typeof t.url&&"string"==typeof t.url.base&&"object"==typeof t.url.worker&&"string"==typeof t.url.worker.search}var c=n(0),a=n(83);function o(t,e,n){switch(e){case"xmlns":break;case"viewBox":case"d":"boolean"!=typeof n?t.setAttributeNS(null,e,n):n&&t.setAttributeNS(null,e,"");break;default:"boolean"!=typeof n?t.setAttribute(e,n):n&&t.setAttribute(e,"")}}function i(t,e){var n,r;if("string"==typeof e||"number"==typeof e)t.innerHTML+=e.toString();else if(e instanceof Node)t.appendChild(e);else if(Array.isArray(e))try{for(var a=Object(c.f)(e),o=a.next();!o.done;o=a.next()){i(t,o.value)}}catch(t){n={error:t}}finally{try{o&&!o.done&&(r=a.return)&&r.call(a)}finally{if(n)throw n.error}}}function u(t,e){for(var n,r,u,b,f=[],s=2;sn){for(;" "!==t[n]&&--n>0;);return t.substring(0,n)+"..."}return t}function p(t){return t>999?((t+1)/1e3).toFixed(+((t-950)%1e3>99))+"k":t.toString()}function v(t){for(var e=0,n=0,r=t.length;n=e[2].offset+c})),Object(b.a)());return Object(c.a)([s,l]).pipe(Object(u.a)((function(t){var e=Object(r.c)(t,2);return{height:e[0],lock:e[1]}})))}function p(t,e){var n=e.header$;return Object(a.a)(Object(s.b)(o.a),Object(f.a)(n),Object(l.a)((function(e){var n=Object(r.c)(e,2),c=n[0],a=c.height,o=c.lock,i=n[1].height;Object(j.d)(t,a),Object(j.e)(t,o),o?Object(j.f)(t,i):Object(j.c)(t)})),Object(u.a)((function(t){return Object(r.c)(t,1)[0]})),Object(O.a)((function(){Object(j.c)(t),Object(j.a)(t),Object(j.b)(t)})))}},function(t,e){},function(t,e,n){"use strict";n.d(e,"b",(function(){return v})),n.d(e,"a",(function(){return h}));var r=n(0),c=n(92),a=n(90),o=n(89),i=n(35),u=n(59),b=n(8),f=n(64),s=n(46),l=n(58),O=n(95),j=n(65),d=n(1),p=n(39);function v(t){var e,n,i=new Map;try{for(var u=Object(r.f)(t),s=u.next();!s.done;s=u.next()){var l=s.value,O=Object(d.b)("label",l);if(void 0!==O){var j=Object(d.c)("#"+O.htmlFor);i.set(j,l)}}}catch(t){e={error:t}}finally{try{s&&!s.done&&(n=u.return)&&n.call(u)}finally{if(e)throw e.error}}return a.a.apply(void 0,Object(r.e)(Object(r.e)(i.keys()).map((function(t){return Object(o.a)(t,"change")})))).pipe(Object(b.a)((function(){return Object(d.c)(".md-nav__list",i.get(Object(c.a)((function(t){return t.checked}),Object(r.e)(i.keys()))))}))).pipe(Object(b.a)((function(t){return{next:t}})),Object(f.a)((function(t,e){return{prev:t.next,next:e.next}})))}function h(t){return Object(i.a)(Object(s.b)(u.a),Object(l.a)((function(t){var e=t.prev;e&&Object(p.a)(e)})),Object(O.a)(250),Object(s.b)(u.a),Object(l.a)((function(t){var e=t.next;Object(p.b)(e)})),Object(j.a)((function(){var e,n;try{for(var c=Object(r.f)(t),a=c.next();!a.done;a=c.next()){var o=a.value;Object(p.a)(Object(d.c)(".md-nav__list",o))}}catch(t){e={error:t}}finally{try{a&&!a.done&&(n=c.return)&&n.call(c)}finally{if(e)throw e.error}}})))}},function(t,e,n){"use strict";var r=n(74);n.d(e,"mountTableOfContents",(function(){return r.a}));var c=n(49);n.o(c,"mountNavigation")&&n.d(e,"mountNavigation",(function(){return c.mountNavigation}))},function(t,e,n){"use strict";n.d(e,"a",(function(){return l}));var r=n(0),c=n(35),a=n(62),o=n(45),i=n(24),u=n(8),b=n(1),f=n(30),s=n(49);function l(t){var e=t.header$,n=t.main$,l=t.viewport$,O=t.tablet$;return Object(c.a)(Object(i.a)((function(t){return O.pipe(Object(i.a)((function(c){if(c){var i=Object(b.d)(".md-nav__link",t),O=Object(f.watchSidebar)(t,{main$:n,viewport$:l}).pipe(Object(f.applySidebar)(t,{header$:e})),j=Object(s.watchAnchorList)(i,{header$:e,viewport$:l}).pipe(Object(s.applyAnchorList)(i));return Object(a.a)([O,j]).pipe(Object(u.a)((function(t){var e=Object(r.c)(t,2);return{sidebar:e[0],anchors:e[1]}})))}return Object(o.a)({})})))})))}},function(t,e){},function(t,e,n){"use strict";n.d(e,"b",(function(){return y})),n.d(e,"a",(function(){return g}));var r=n(0),c=n(96),a=n(62),o=n(35),i=n(59),u=n(8),b=n(84),f=n(24),s=n(64),l=n(36),O=n(94),j=n(91),d=n(46),p=n(58),v=n(65),h=n(1),m=n(23);function y(t,e){var n,o,i=e.header$,d=e.viewport$,p=new Map;try{for(var v=Object(r.f)(t),m=v.next();!m.done;m=v.next()){var y=m.value,g=decodeURIComponent(y.hash.substring(1)),w=Object(h.b)('[id="'+g+'"]');void 0!==w&&p.set(y,w)}}catch(t){n={error:t}}finally{try{m&&!m.done&&(o=v.return)&&o.call(v)}finally{if(n)throw n.error}}var $=i.pipe(Object(u.a)((function(t){return 18+t.height})));return d.pipe(Object(b.a)("size"),Object(u.a)((function(){var t=[];return Object(r.e)(p).reduce((function(e,n){for(var a=Object(r.c)(n,2),o=a[0],i=a[1];t.length;){if(!(p.get(t[t.length-1]).tagName>=i.tagName))break;t.pop()}for(var u=i.offsetTop;!u&&i.parentElement;)u=(i=i.parentElement).offsetTop;return e.set(Object(c.a)(t=Object(r.e)(t,[o])),u)}),new Map)})),Object(f.a)((function(t){return Object(a.a)([$,d]).pipe(Object(s.a)((function(t,e){for(var n=Object(r.c)(t,2),c=n[0],a=n[1],o=Object(r.c)(e,2),i=o[0],u=o[1].offset.y;a.length;){if(!(Object(r.c)(a[0],2)[1]-i=u))break;a=Object(r.e)([c.pop()],a)}return[c,a]}),[[],Object(r.e)(t)]),Object(l.a)((function(t,e){return t[0]===e[0]&&t[1]===e[1]})))}))).pipe(Object(u.a)((function(t){var e=Object(r.c)(t,2),n=e[0],c=e[1];return{prev:n.map((function(t){return Object(r.c)(t,1)[0]})),next:c.map((function(t){return Object(r.c)(t,1)[0]}))}})),Object(O.a)({prev:[],next:[]}),Object(j.a)(2,1),Object(u.a)((function(t){var e=Object(r.c)(t,2),n=e[0],c=e[1];return n.prev.length16)););return n}),0),Object(g.a)(e),Object(A.a)((function(){!function(t){t.innerHTML=""}(u)})))})))}function H(t,e){var n=t.rx$,r=e.query$;return Object(c.a)(Object(o.a)((function(t){var e=t.parentElement,c=Object(f.p)(e).pipe(Object(i.a)((function(t){return t.y>=e.scrollHeight-e.offsetHeight-16})),Object(p.a)(),Object(S.a)(x.a));return n.pipe(Object(S.a)(s.b),Object(T.a)("data"),M(t,{query$:r,fetch$:c}))})))}n.d(e,"a",(function(){return u})),n.d(e,"b",(function(){return h})),n.d(e,"c",(function(){return $})),n.d(e,"d",(function(){return H}))},function(t,e,n){"use strict";var r=n(0),c=n(35),a=n(62),o=n(24),i=n(8),u=n(98),b=n(63),f=n(36),s=n(94),l=n(93),O=n(1),j=n(21),d=n(45),p=n(59),v=n(84),h=n(46),m=n(58),y=n(65);function g(t){var e=t.viewport$;return Object(c.a)(Object(o.a)((function(t){var n=function(t,e){return e.viewport$.pipe(Object(v.a)("size"),Object(o.a)((function(){var e=getComputedStyle(t),n=["sticky","-webkit-sticky"].includes(e.position);return Object(d.a)({sticky:n,height:n?t.offsetHeight:0})})))}(t,{viewport$:e}),g=Object(j.b)("main").pipe(Object(i.a)((function(t){return Object(O.b)("h1, h2, h3, h4, h5, h6",t)})),Object(u.a)((function(t){return void 0!==t})),Object(b.a)(Object(j.b)("header-title")),Object(o.a)((function(t){var a=Object(r.c)(t,2),o=a[0],u=a[1];return Object(O.w)(o,{header$:n,viewport$:e}).pipe(Object(i.a)((function(t){return t.offset.y>=o.offsetHeight?"page":"site"})),Object(f.a)(),function(t){return Object(c.a)(Object(h.b)(p.a),Object(m.a)((function(e){!function(t,e){t.setAttribute("data-md-state",e?"active":"")}(t,"page"===e)})),Object(y.a)((function(){!function(t){t.removeAttribute("data-md-state")}(t)})))}(u))})),Object(s.a)("site"));return Object(a.a)([n,g]).pipe(Object(i.a)((function(t){var e=Object(r.c)(t,2),n=e[0],c=e[1];return Object(r.a)({type:c},n)})),Object(l.a)(1))})))}n.d(e,"a",(function(){return g}))},function(t,e,n){"use strict";var r=n(35),c=n(24),a=n(8),o=n(36),i=n(1),u=n(59),b=n(46),f=n(58),s=n(65);function l(t){var e=t.header$,n=t.viewport$;return Object(r.a)(Object(c.a)((function(t){return Object(i.w)(t,{header$:e,viewport$:n}).pipe(Object(a.a)((function(t){return{hidden:t.offset.y>=20}})),Object(o.a)(),function(t){return Object(r.a)(Object(b.b)(u.a),Object(f.a)((function(e){var n=e.hidden;!function(t,e){t.setAttribute("data-md-state",e?"hidden":"")}(t,n)})),Object(s.a)((function(){!function(t){t.removeAttribute("data-md-state")}(t)})))}(t))})))}n.d(e,"a",(function(){return l}))},function(t,e,n){"use strict";var r=n(25),c=n(35),a=n(24),o=n(84),i=n(58),u=n(21),b=n(0),f=n(62),s=n(59),l=n(100),O=n(8),j=n(36),d=n(46),p=n(65);function v(t){var e=t.header$,n=t.viewport$,v=new r.a;return Object(u.b)("header").pipe(Object(a.a)((function(t){return v.pipe(Object(o.a)("active"),(e=t,Object(c.a)(Object(d.b)(s.a),Object(i.a)((function(t){var n=t.active;!function(t,e){t.setAttribute("data-md-state",e?"shadow":"")}(e,n)})),Object(p.a)((function(){!function(t){t.removeAttribute("data-md-state")}(e)})))));var e}))).subscribe(),Object(c.a)(Object(a.a)((function(t){return function(t,e){var n=e.header$,r=e.viewport$,c=n.pipe(Object(l.a)("height")),a=Object(f.a)([c,r]).pipe(Object(O.a)((function(e){var n=Object(b.c)(e,2),r=n[0],c=n[1],a=c.offset.y,o=c.size.height,i=t.offsetTop,u=t.offsetHeight+i;return o-Math.max(0,i-a,r)-Math.max(0,o+a-u)})),Object(O.a)((function(t){return Math.max(0,t)})),Object(j.a)()),o=Object(f.a)([c,r]).pipe(Object(O.a)((function(e){var n=Object(b.c)(e,2),r=n[0];return n[1].offset.y>=t.offsetTop-r})),Object(j.a)());return Object(f.a)([c,a,o]).pipe(Object(O.a)((function(e){var n=Object(b.c)(e,3),r=n[0],c=n[1],a=n[2];return{offset:t.offsetTop-r,height:c,active:a}})))}(t,{header$:e,viewport$:n})})),Object(i.a)((function(t){return v.next(t)})))}n.d(e,"a",(function(){return v}))},function(t,e,n){"use strict";var r=n(35),c=n(45),a=n(24),o=n(8),i=n(36),u=n(1),b=n(59),f=n(46),s=n(58),l=n(65);function O(t){var e=t.header$,n=t.viewport$,O=t.screen$;return Object(r.a)(Object(a.a)((function(t){return O.pipe(Object(a.a)((function(a){return a?Object(u.w)(t,{header$:e,viewport$:n}).pipe(Object(o.a)((function(t){return{hidden:t.offset.y>=10}})),Object(i.a)(),function(t){return Object(r.a)(Object(f.b)(b.a),Object(s.a)((function(e){var n=e.hidden;!function(t,e){t.setAttribute("data-md-state",e?"hidden":"")}(t,n)})),Object(l.a)((function(){!function(t){t.removeAttribute("data-md-state")}(t)})))}(t)):Object(c.a)({hidden:!0})})))})))}n.d(e,"a",(function(){return O}))},,,,,,,function(t,e,n){"use strict";n.r(e);var r=n(0),c=n(110),a=n(62),o=n(59),i=n(89),u=n(45),b=n(102),f=n(90),s=n(93),l=n(63),O=n(24),j=n(95),d=n(46),p=n(58),v=n(98),h=n(111),m=n(112),y=n(1),g=n(41),w=n(7),$=n(61),x=n(104),S=n(103),T=n(31),k=n(4);var C=n(25),_=n(8);var L=n(36),A=n(100),N=n(107),E=n(84),R=n(91),M=n(108);var H=n(113),P=n(106);var U=n(99);var q=n(109);function Q(){return/(iPad|iPhone|iPod)/.test(navigator.userAgent)}var z=n(101),I=n(114);function D(t){switch(Object(r.c)(t.match(/(git(?:hub|lab))/i)||[],1)[0].toLowerCase()){case"github":var e=Object(r.c)(t.match(/^.+github\.com\/([^\/]+)\/?([^\/]+)/i),3);return function(t,e){return Object(I.a)({url:void 0!==e?"https://api.github.com/repos/"+t+"/"+e:"https://api.github.com/users/"+t,responseType:"json"}).pipe(Object(v.a)((function(t){return 200===t.status})),Object(A.a)("response"),Object(O.a)((function(t){if(void 0!==e){var n=t.stargazers_count,r=t.forks_count;return Object(u.a)([Object(k.e)(n||0)+" Stars",Object(k.e)(r||0)+" Forks"])}var c=t.public_repos;return Object(u.a)([Object(k.e)(c||0)+" Repositories"])})))}(e[1],e[2]);case"gitlab":var n=Object(r.c)(t.match(/^.+?([^\/]*gitlab[^\/]+)\/(.+)/i),3);return function(t,e){return Object(I.a)({url:"https://"+t+"/api/v4/projects/"+encodeURIComponent(e),responseType:"json"}).pipe(Object(v.a)((function(t){return 200===t.status})),Object(A.a)("response"),Object(_.a)((function(t){var e=t.star_count,n=t.forks_count;return[Object(k.e)(e)+" Stars",Object(k.e)(n)+" Forks"]})))}(n[1],n[2]);default:return b.a}}function W(t,e){t.setAttribute("data-md-state","lock"),t.style.top="-"+e+"px"}function J(t){var e=-1*parseInt(t.style.top,10);t.removeAttribute("data-md-state"),t.style.top="",e&&window.scrollTo(0,e)}function B(t){var e,n,I,B;if(!Object(k.d)(t))throw new SyntaxError("Invalid configuration: "+JSON.stringify(t));var F=Object(y.r)(),K=Object(y.s)(),Y=Object(y.v)(),V=Object(y.t)("(min-width: 960px)"),X=Object(y.t)("(min-width: 1220px)"),G=t.features.includes("instant")?Object(y.n)({location$:F}):Object(y.n)();Object(w.setupComponents)(["container","header","header-title","hero","main","navigation","search","search-query","search-reset","search-result","skip","tabs","toc"],{document$:G});var Z=t.search&&t.search.index?t.search.index:void 0,tt=Object(g.c)(t.url.worker.search,{base:t.url.base,index:Z,location$:F}),et=Object(w.useComponent)("header").pipe(Object(w.mountHeader)({viewport$:Y}),Object(s.a)(1)),nt=Object(w.useComponent)("main").pipe(Object(w.mountMain)({header$:et,viewport$:Y}),Object(s.a)(1)),rt=Object(w.useComponent)("search-query").pipe(Object(w.mountSearchQuery)(tt),Object(s.a)(1)),ct=Object(w.useComponent)("search-reset").pipe(Object(w.mountSearchReset)(),Object(s.a)(1)),at=Object(w.useComponent)("search-result").pipe(Object(w.mountSearchResult)(tt,{query$:rt}),Object(s.a)(1)),ot=Object(w.useComponent)("search").pipe(Object(w.mountSearch)({query$:rt,reset$:ct,result$:at}),Object(s.a)(1)),it=Object(w.useComponent)("navigation").pipe(Object(w.mountNavigation)({header$:et,main$:nt,viewport$:Y,screen$:X}),Object(s.a)(1)),ut=Object(w.useComponent)("toc").pipe(Object(w.mountTableOfContents)({header$:et,main$:nt,viewport$:Y,tablet$:V}),Object(s.a)(1)),bt=Object(w.useComponent)("tabs").pipe(Object(w.mountTabs)({header$:et,viewport$:Y,screen$:X}),Object(s.a)(1)),ft=Object(w.useComponent)("hero").pipe(Object(w.mountHero)({header$:et,viewport$:Y}),Object(s.a)(1)),st=function(){var t=Object(y.q)().pipe(Object(_.a)((function(t){return Object(r.a)({mode:Object(y.e)("search")?"search":"global"},t)})),Object(h.a)());return t.pipe(Object(v.a)((function(t){return"search"===t.mode})),Object(l.a)(Object(w.useComponent)("search-query"),Object(w.useComponent)("search-result"))).subscribe((function(t){var e=Object(r.c)(t,3),n=e[0],c=e[1],a=e[2],o=Object(y.a)();switch(n.type){case"Enter":o===c&&n.claim();break;case"Escape":case"Tab":Object(y.l)("search",!1),Object(y.i)(c,!1);break;case"ArrowUp":case"ArrowDown":if(void 0===o)Object(y.i)(c);else{var i=Object(r.e)([c],Object(y.d)("[href]",a)),u=Math.max(0,(Math.max(0,i.indexOf(o))+i.length+("ArrowUp"===n.type?-1:1))%i.length);Object(y.i)(i[u])}n.claim();break;default:c!==Object(y.a)()&&Object(y.i)(c)}})),t.pipe(Object(v.a)((function(t){if("global"===t.mode){var e=Object(y.a)();if(void 0!==e)return!Object(y.h)(e)}return!1})),Object(l.a)(Object(w.useComponent)("search-query"))).subscribe((function(t){var e=Object(r.c)(t,2),n=e[0],c=e[1];switch(n.type){case"f":case"s":Object(y.i)(c),Object(y.j)(c),n.claim();break;case"p":case",":var a=Object(y.b)("[href][rel=prev]");void 0!==a&&a.click();break;case"n":case".":var o=Object(y.b)("[href][rel=next]");void 0!==o&&o.click()}})),t}();!function(t){var e=t.document$,n=t.hash$,c=e.pipe(Object(_.a)((function(){return Object(y.d)("details")})));Object(f.a)(Object(y.t)("print").pipe(Object(v.a)(H.a)),Object(i.a)(window,"beforeprint")).pipe(Object(P.a)(c)).subscribe((function(t){var e,n;try{for(var c=Object(r.f)(t),a=c.next();!a.done;a=c.next()){a.value.setAttribute("open","")}}catch(t){e={error:t}}finally{try{a&&!a.done&&(n=c.return)&&n.call(c)}finally{if(e)throw e.error}}})),n.pipe(Object(_.a)((function(t){return Object(y.b)('[id="'+t+'"]')})),Object(v.a)((function(t){return void 0!==t})),Object(p.a)((function(t){var e=t.closest("details");e&&!e.open&&e.setAttribute("open","")}))).subscribe((function(t){return t.scrollIntoView()}))}({document$:G,hash$:K}),function(t){t.document$.pipe(Object(U.a)(1),Object(l.a)(Object(w.useComponent)("container")),Object(_.a)((function(t){var e=Object(r.c)(t,2)[1];return Object(y.d)("script",e)}))).subscribe((function(t){var e,n;try{for(var c=Object(r.f)(t),a=c.next();!a.done;a=c.next()){var o=a.value;if(o.src||/(^|\/javascript)$/i.test(o.type)){var i=document.createElement("script"),u=o.src?"src":"innerText";i[u]=o[u],o.replaceWith(i)}}}catch(t){e={error:t}}finally{try{a&&!a.done&&(n=c.return)&&n.call(c)}finally{if(e)throw e.error}}}))}({document$:G}),function(t){t.document$.pipe(Object(_.a)((function(){return Object(y.c)(".md-source[href]")})),Object(O.a)((function(t){var e=t.href;return Object(k.a)(""+Object(k.c)(e),(function(){return D(e)}))})),Object(z.a)((function(){return b.a}))).subscribe((function(t){var e,n;try{for(var c=Object(r.f)(Object(y.d)(".md-source__repository")),a=c.next();!a.done;a=c.next()){var o=a.value;o.hasAttribute("data-md-state")||(o.setAttribute("data-md-state","done"),o.appendChild(Object(T.c)(t)))}}catch(t){e={error:t}}finally{try{a&&!a.done&&(n=c.return)&&n.call(c)}finally{if(e)throw e.error}}}))}({document$:G}),function(t){var e=t.document$,n=document.createElement("table");e.pipe(Object(_.a)((function(){return Object(y.d)("table:not([class])")}))).subscribe((function(t){var e,c;try{for(var a=Object(r.f)(t),o=a.next();!o.done;o=a.next()){var i=o.value;i.replaceWith(n),n.replaceWith(Object(T.d)(i))}}catch(t){e={error:t}}finally{try{o&&!o.done&&(c=a.return)&&c.call(a)}finally{if(e)throw e.error}}}))}({document$:G}),function(t){var e=t.document$.pipe(Object(_.a)((function(){return Object(y.d)("[data-md-scrollfix]")})),Object(s.a)(1));e.subscribe((function(t){var e,n;try{for(var c=Object(r.f)(t),a=c.next();!a.done;a=c.next()){a.value.removeAttribute("data-md-scrollfix")}}catch(t){e={error:t}}finally{try{a&&!a.done&&(n=c.return)&&n.call(c)}finally{if(e)throw e.error}}})),Object(q.a)(Q,e,b.a).pipe(Object(O.a)((function(t){return f.a.apply(void 0,Object(r.e)(t.map((function(t){return Object(i.a)(t,"touchstart").pipe(Object(S.a)(t))}))))}))).subscribe((function(t){var e=t.scrollTop;0===e?t.scrollTop=1:e+t.offsetHeight===t.scrollHeight&&(t.scrollTop=e-1)}))}({document$:G});var lt=function(t){var e=(void 0===t?{}:t).duration,n=new C.a,r=document.createElement("div");return r.classList.add("md-dialog","md-typeset"),n.pipe(Object(O.a)((function(t){return Object(u.a)(document.body).pipe(Object(_.a)((function(t){return t.appendChild(r)})),Object(d.b)(o.a),Object(j.a)(1),Object(p.a)((function(e){e.innerHTML=t,e.setAttribute("data-md-state","open")})),Object(j.a)(e||2e3),Object(p.a)((function(t){return t.removeAttribute("data-md-state")})),Object(j.a)(400),Object(p.a)((function(t){t.innerHTML="",t.remove()})))}))).subscribe(),n}(),Ot=function(t){var e=t.document$,n=t.dialog$;if(!$.isSupported())return b.a;e.subscribe((function(){Object(y.d)("pre > code").forEach((function(t,e){var n=t.parentElement;n.id="__code_"+e,n.insertBefore(Object(T.a)(n.id),t)}))}));var r=Object(x.a)((function(t){new $(".md-clipboard").on("success",t)})).pipe(Object(h.a)());return r.pipe(Object(p.a)((function(t){return t.clearSelection()})),Object(S.a)(Object(k.f)("clipboard.copied"))).subscribe(n),r}({document$:G,dialog$:lt});Object(a.a)([Object(y.u)("search"),V]).pipe(Object(l.a)(Y),Object(O.a)((function(t){var e=Object(r.c)(t,2),n=Object(r.c)(e[0],2),c=n[0],a=n[1],i=e[1].offset.y,u=c&&!a;return G.pipe(Object(j.a)(u?400:100),Object(d.b)(o.a),Object(p.a)((function(t){var e=t.body;return u?W(e,i):J(e)})))}))).subscribe();var jt=Object(i.a)(document.body,"click").pipe(Object(v.a)((function(t){return!(t.metaKey||t.ctrlKey)})),Object(O.a)((function(t){if(t.target instanceof HTMLElement){var e=t.target.closest("a");if(e&&Object(y.g)(e))return Object(y.f)(e)||t.preventDefault(),Object(u.a)(e)}return b.a})),Object(h.a)());if(jt.subscribe((function(){Object(y.l)("drawer",!1)})),t.features.includes("instant")){"scrollRestoration"in history&&(history.scrollRestoration="manual");try{for(var dt=Object(r.f)(['link[rel="shortcut icon"]','link[rel="stylesheet"]']),pt=dt.next();!pt.done;pt=dt.next()){var vt=pt.value;try{for(var ht=(I=void 0,Object(r.f)(Object(y.d)(vt))),mt=ht.next();!mt.done;mt=ht.next()){var yt=mt.value;yt.href=yt.href}}catch(t){I={error:t}}finally{try{mt&&!mt.done&&(B=ht.return)&&B.call(ht)}finally{if(I)throw I.error}}}}catch(t){e={error:t}}finally{try{pt&&!pt.done&&(n=dt.return)&&n.call(dt)}finally{if(e)throw e.error}}!function(t){var e=t.document$,n=t.viewport$,c=t.link$,a=t.location$,o=c.pipe(Object(_.a)((function(t){return{url:new URL(t.href)}})),Object(h.a)()),u=o.pipe(Object(L.a)((function(t,e){return t.url.href===e.url.href})),Object(v.a)((function(t){var e=t.url;return!Object(y.f)(e)})),Object(h.a)()),b=Object(i.a)(window,"popstate").pipe(Object(v.a)((function(t){return null!==t.state})),Object(_.a)((function(t){return{url:new URL(location.href),offset:t.state}})),Object(h.a)());Object(f.a)(u,b).pipe(Object(A.a)("url")).subscribe(a),u.subscribe((function(t){var e=t.url;history.pushState({},"",e.toString())})),n.pipe(Object(N.a)(250),Object(E.a)("offset")).subscribe((function(t){var e=t.offset;history.replaceState(e,"")})),Object(f.a)(o,b).pipe(Object(R.a)(2,1),Object(v.a)((function(t){var e=Object(r.c)(t,2),n=e[0],c=e[1];return n.url.pathname===c.url.pathname&&!Object(y.f)(c.url)})),Object(_.a)((function(t){return Object(r.c)(t,2)[1]}))).subscribe((function(t){var e=t.offset;Object(y.m)(e||{y:0})}));var s=Object(f.a)(u,b).pipe(Object(M.a)(e));s.subscribe((function(t){var e=t.url,n=t.offset;e.hash&&!n?(console.log("set hash!"),Object(y.k)(e.hash)):Object(y.m)(n||{y:0})})),s.pipe(Object(l.a)(e)).subscribe((function(t){var e,n,c=Object(r.c)(t,2)[1],a=c.title,o=c.head;document.dispatchEvent(new CustomEvent("DOMContentSwitch")),document.title=a;try{for(var i=Object(r.f)(['link[rel="canonical"]','meta[name="author"]','meta[name="description"]']),u=i.next();!u.done;u=i.next()){var b=u.value,f=Object(y.b)(b,o),s=Object(y.b)(b,document.head);void 0!==f&&void 0!==s&&s.replaceWith(f)}}catch(t){e={error:t}}finally{try{u&&!u.done&&(n=i.return)&&n.call(i)}finally{if(e)throw e.error}}}))}({document$:G,link$:jt,location$:F,viewport$:Y})}st.pipe(Object(v.a)((function(t){return"global"===t.mode&&["Tab"].includes(t.type)})),Object(m.a)(1)).subscribe((function(){var t,e;try{for(var n=Object(r.f)(Object(y.d)(".headerlink")),c=n.next();!c.done;c=n.next()){c.value.style.visibility="visible"}}catch(e){t={error:e}}finally{try{c&&!c.done&&(e=n.return)&&e.call(n)}finally{if(t)throw t.error}}}));var gt={document$:G,viewport$:Y,header$:et,hero$:ft,main$:nt,navigation$:it,search$:ot,tabs$:bt,toc$:ut,clipboard$:Ot,keyboard$:st,dialog$:lt};return f.a.apply(void 0,Object(r.e)(Object(c.a)(gt))).subscribe(),gt}n.d(e,"setScrollLock",(function(){return W})),n.d(e,"resetScrollLock",(function(){return J})),n.d(e,"initialize",(function(){return B})),document.documentElement.classList.remove("no-js"),document.documentElement.classList.add("js"),navigator.userAgent.match(/(iPad|iPhone|iPod)/g)&&document.documentElement.classList.add("ios")}])); +//# sourceMappingURL=bundle.9330522f.min.js.map \ No newline at end of file diff --git a/material/assets/javascripts/bundle.9330522f.min.js.map b/material/assets/javascripts/bundle.9330522f.min.js.map new file mode 100644 index 000000000..0473223c3 --- /dev/null +++ b/material/assets/javascripts/bundle.9330522f.min.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/assets/javascripts/browser/location/_/index.ts","webpack:///./src/assets/javascripts/browser/location/hash/index.ts","webpack:///./src/assets/javascripts/browser/document/switch/index.ts","webpack:///./src/assets/javascripts/browser/document/_/index.ts","webpack:///./src/assets/javascripts/browser/element/_/index.ts","webpack:///./src/assets/javascripts/browser/element/focus/index.ts","webpack:///./src/assets/javascripts/browser/element/offset/index.ts","webpack:///./src/assets/javascripts/browser/element/select/index.ts","webpack:///./src/assets/javascripts/browser/keyboard/index.ts","webpack:///./src/assets/javascripts/browser/media/index.ts","webpack:///./src/assets/javascripts/browser/toggle/index.ts","webpack:///./src/assets/javascripts/browser/viewport/offset/index.ts","webpack:///./src/assets/javascripts/browser/viewport/size/index.ts","webpack:///./src/assets/javascripts/browser/viewport/_/index.ts","webpack:///./src/assets/javascripts/browser/worker/index.ts","webpack:///./src/assets/javascripts/browser/index.ts","webpack:///./src/assets/javascripts/utilities/config/index.ts","webpack:///./src/assets/javascripts/utilities/jsx/index.ts","webpack:///./src/assets/javascripts/utilities/rxjs/index.ts","webpack:///./src/assets/javascripts/utilities/string/index.ts","webpack:///./src/assets/javascripts/utilities/index.ts","webpack:///./src/assets/javascripts/components/index.ts","webpack:///./src/assets/javascripts/components/shared/sidebar/set/index.ts","webpack:///./src/assets/javascripts/components/_/index.ts","webpack:///./src/assets/javascripts/components/toc/anchor/set/index.ts","webpack:///./src/assets/javascripts/components/shared/index.ts","webpack:///./src/assets/javascripts/templates/clipboard/index.tsx","webpack:///./src/assets/javascripts/templates/search/index.tsx","webpack:///./src/assets/javascripts/templates/source/index.tsx","webpack:///./src/assets/javascripts/templates/table/index.tsx","webpack:///./src/assets/javascripts/templates/index.ts","webpack:///./src/assets/javascripts/components/navigation/layer/set/index.ts","webpack:///./src/assets/javascripts/workers/search/message/index.ts","webpack:///./src/assets/javascripts/workers/search/_/index.ts","webpack:///./src/assets/javascripts/workers/index.ts","webpack:///./src/assets/javascripts/components/navigation/layer/index.ts","webpack:///./src/assets/javascripts/components/toc/anchor/index.ts","webpack:///./src/assets/javascripts/components/navigation/index.ts","webpack:///./src/assets/javascripts/components/navigation/_/index.ts","webpack:///./src/assets/javascripts/components/shared/sidebar/index.ts","webpack:///./src/assets/javascripts/components/shared/sidebar/react/index.ts","webpack:///./src/assets/javascripts/components/navigation/layer/react/index.ts","webpack:///./src/assets/javascripts/components/toc/index.ts","webpack:///./src/assets/javascripts/components/toc/_/index.ts","webpack:///./src/assets/javascripts/components/toc/anchor/react/index.ts","webpack:///./src/assets/javascripts/components/search/_/index.ts","webpack:///./src/assets/javascripts/components/search/query/react/index.ts","webpack:///./src/assets/javascripts/components/search/query/_/index.ts","webpack:///./src/assets/javascripts/components/search/reset/_/index.ts","webpack:///./src/assets/javascripts/components/search/reset/react/index.ts","webpack:///./src/assets/javascripts/components/search/result/set/index.ts","webpack:///./src/assets/javascripts/components/search/result/react/index.ts","webpack:///./src/assets/javascripts/components/search/result/_/index.ts","webpack:///./src/assets/javascripts/components/search/index.ts","webpack:///./src/assets/javascripts/components/header/_/index.ts","webpack:///./src/assets/javascripts/components/header/react/index.ts","webpack:///./src/assets/javascripts/components/header/set/index.ts","webpack:///./src/assets/javascripts/components/header/index.ts","webpack:///./src/assets/javascripts/components/hero/_/index.ts","webpack:///./src/assets/javascripts/components/hero/react/index.ts","webpack:///./src/assets/javascripts/components/hero/set/index.ts","webpack:///./src/assets/javascripts/components/hero/index.ts","webpack:///./src/assets/javascripts/components/main/_/index.ts","webpack:///./src/assets/javascripts/components/main/react/index.ts","webpack:///./src/assets/javascripts/components/main/set/index.ts","webpack:///./src/assets/javascripts/components/main/index.ts","webpack:///./src/assets/javascripts/components/tabs/_/index.ts","webpack:///./src/assets/javascripts/components/tabs/react/index.ts","webpack:///./src/assets/javascripts/components/tabs/set/index.ts","webpack:///./src/assets/javascripts/components/tabs/index.ts","webpack:///./src/assets/javascripts/patches/scrollfix/index.ts","webpack:///./src/assets/javascripts/patches/source/index.ts","webpack:///./src/assets/javascripts/patches/source/github/index.ts","webpack:///./src/assets/javascripts/patches/source/gitlab/index.ts","webpack:///./src/assets/javascripts/index.ts","webpack:///./src/assets/javascripts/integrations/keyboard/index.ts","webpack:///./src/assets/javascripts/patches/details/index.ts","webpack:///./src/assets/javascripts/patches/script/index.ts","webpack:///./src/assets/javascripts/patches/table/index.ts","webpack:///./src/assets/javascripts/integrations/dialog/index.ts","webpack:///./src/assets/javascripts/integrations/clipboard/index.ts","webpack:///./src/assets/javascripts/integrations/instant/index.ts"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","0","exports","module","l","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","jsonpArray","window","oldJsonpFunction","slice","isLocationInternal","url","ref","host","test","pathname","isLocationAnchor","hash","watchLocation","BehaviorSubject","URL","location","href","getLocationHash","substring","setLocationHash","el","document","createElement","click","watchLocationHash","fromEvent","pipe","map","startWith","filter","share","watchDocumentSwitch","location$","distinctUntilKeyChanged","skip","switchMap","ajax","responseType","withCredentials","pluck","catchError","setLocation","watchDocument","merge","mapTo","shareReplay","getElement","selector","node","querySelector","undefined","getElementOrThrow","ReferenceError","getActiveElement","activeElement","HTMLElement","getElements","Array","from","querySelectorAll","setElementFocus","focus","blur","watchElementFocus","focus$","blur$","getElementOffset","x","scrollLeft","y","scrollTop","watchElementOffset","setElementSelection","HTMLInputElement","Error","select","isSusceptibleToKeyboard","tagName","isContentEditable","watchKeyboard","ev","metaKey","ctrlKey","type","claim","preventDefault","stopPropagation","watchMedia","query","media","matchMedia","fromEventPattern","next","addListener","matches","toggles","drawer","search","getToggle","checked","setToggle","watchToggle","getViewportOffset","Math","max","pageXOffset","pageYOffset","setViewportOffset","scrollTo","getViewportSize","width","innerWidth","height","innerHeight","watchViewport","combineLatest","offset","size","watchViewportAt","header$","viewport$","offset$","offsetLeft","offsetTop","watchWorker","worker","tx$","rx$","addEventListener","throttle","leading","trailing","tap","message","postMessage","switchMapTo","isConfig","config","base","setAttribute","setAttributeNS","appendChild","child","innerHTML","toString","Node","isArray","h","tag","attributes","createElementNS","keys","attr","children","cache","factory","defer","sessionStorage","getItem","of","JSON","parse","value$","subscribe","setItem","stringify","err","lang","translate","innerText","replace","truncate","round","toFixed","len","charCodeAt","setSidebarOffset","style","top","resetSidebarOffset","setSidebarHeight","resetSidebarHeight","setSidebarLock","resetSidebarLock","removeAttribute","components$","setupComponents","names","document$","reduce","components","prev","replaceWith","useComponent","setAnchorBlur","resetAnchorBlur","setAnchorActive","classList","toggle","resetAnchorActive","remove","css","container","renderClipboard","id","path","class","title","xmlns","viewBox","item","link","article","section","teaser","renderSearchResult","sections","text","tabIndex","facts","fact","renderSource","wrapper","table","renderTable","setOverflowScrolling","webkitOverflowScrolling","resetOverflowScrolling","SearchMessageType","isSearchResultMessage","RESULT","setupSearchWorker","index","Worker","origin$","take","Subject","withLatestFrom","origin","index$","isConfigDefaultLang","isConfigDefaultSeparator","separator","pipeline","split","Boolean","rest","console","log","SETUP","mountNavigation","main$","screen$","screen","sidebar","els","layer","watchSidebar","adjust$","parseFloat","getComputedStyle","parentElement","getPropertyValue","height$","adjust","min","lock$","lock","applySidebar","watchNavigationLayer","Map","label","input","htmlFor","set","applyNavigationLayer","mountTableOfContents","tablet$","tablet","sidebar$","anchors$","anchors","watchAnchorList","decodeURIComponent","target","header","anchor","pop","a","b","applyAnchorList","forEach","mountSearch","query$","reset$","result$","defaultTransform","trim","mountSearchQuery","options","fn","transform","delay","distinctUntilChanged","watchSearchQuery","QUERY","mountSearchReset","watchSearchReset","addToSearchResultList","applySearchResult","fetch$","list","meta","textContent","setSearchResultMeta","resetSearchResultMeta","observeOn","animationFrame","scan","scrollHeight","offsetHeight","finalize","resetSearchResultList","mountSearchResult","identity","mountHeader","styles","sticky","includes","position","watchHeader","type$","main","hx","setHeaderTitleActive","resetHeaderTitleActive","applyHeaderType","mountHero","hidden","setHeroHidden","resetHeroHidden","applyHero","mountMain","active","setHeaderShadow","resetHeaderShadow","bottom","active$","watchMain","mountTabs","setTabsHidden","resetTabsHidden","applyTabs","isAppleDevice","navigator","userAgent","fetchSourceFacts","toLowerCase","user","repo","status","stargazers_count","forks_count","public_repos","fetchSourceFactsFromGitHub","project","encodeURIComponent","star_count","fetchSourceFactsFromGitLab","setScrollLock","resetScrollLock","parseInt","initialize","SyntaxError","hash$","features","search$","navigation$","toc$","tabs$","hero$","keyboard$","indexOf","setupKeyboard","els$","details","closest","open","scrollIntoView","patchDetails","src","script","patchScripts","hasAttribute","patchSource","sentinel","patchTables","iif","patchScrollfix","dialog$","duration","dialog","add","body","setupDialog","clipboard$","block","parent","insertBefore","on","clearSelection","setupClipboard","link$","history","scrollRestoration","state$","push$","pop$","state","pushState","debounceTime","replaceState","bufferCount","instant$","sample","head","dispatchEvent","CustomEvent","setupInstantLoading","visibility","values","documentElement","match"],"mappings":"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","file":"assets/javascripts/bundle.9330522f.min.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t0: 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([88,1]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { BehaviorSubject } from \"rxjs\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve location\n *\n * This function will return a `URL` object (and not `Location`) in order to\n * normalize typings across the application. Furthermore, locations need to be\n * tracked without setting them and `Location` is a singleton which represents\n * the current location.\n *\n * @return URL\n */\nexport function getLocation(): URL {\n return new URL(location.href)\n}\n\n/**\n * Set location\n *\n * @param url - URL to change to\n */\nexport function setLocation(url: URL): void {\n location.href = url.href\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Check whether a URL is an internal link or a file (except `.html`)\n *\n * @param url - URL or HTML anchor element\n * @param ref - Reference URL\n *\n * @return Test result\n */\nexport function isLocationInternal(\n url: URL | HTMLAnchorElement,\n ref: URL | Location = location\n): boolean {\n return url.host === ref.host\n && /^(?:\\/[\\w-]+)*(?:\\/?|\\.html)$/i.test(url.pathname)\n}\n\n/**\n * Check whether a URL is an anchor link on the current page\n *\n * @param url - URL or HTML anchor element\n * @param ref - Reference URL\n *\n * @return Test result\n */\nexport function isLocationAnchor(\n url: URL | HTMLAnchorElement,\n ref: URL | Location = location\n): boolean {\n return url.pathname === ref.pathname\n && url.hash.length > 0\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch location\n *\n * @return Location subject\n */\nexport function watchLocation(): BehaviorSubject {\n return new BehaviorSubject(getLocation())\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, fromEvent } from \"rxjs\"\nimport { filter, map, share, startWith } from \"rxjs/operators\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve location hash\n *\n * @return Location hash\n */\nexport function getLocationHash(): string {\n return location.hash.substring(1)\n}\n\n/**\n * Set location hash\n *\n * Setting a new fragment identifier via `location.hash` will have no effect\n * if the value doesn't change. However, when a new fragment identifier is set,\n * we want the browser to target the respective element at all times, which is\n * why we use this dirty little trick.\n *\n * @param hash - Location hash\n */\nexport function setLocationHash(hash: string): void {\n const el = document.createElement(\"a\")\n el.href = hash\n el.click()\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch location hash\n *\n * @return Location hash observable\n */\nexport function watchLocationHash(): Observable {\n return fromEvent(window, \"hashchange\")\n .pipe(\n map(getLocationHash),\n startWith(getLocationHash()),\n filter(hash => hash.length > 0),\n share()\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { NEVER, Observable } from \"rxjs\"\nimport { ajax } from \"rxjs/ajax\"\nimport {\n catchError,\n distinctUntilKeyChanged,\n pluck,\n share,\n skip,\n switchMap\n} from \"rxjs/operators\"\n\nimport { setLocation } from \"../../location\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n location$: Observable /* Location observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch document switch\n *\n * This function returns an observables that fetches a document if the provided\n * location observable emits a new value (i.e. URL). If the emitted URL points\n * to the same page, the request is effectively ignored (i.e. when only the\n * fragment identifier changes).\n *\n * In case the request fails, the location change is dispatched regularly.\n *\n * @param options - Options\n *\n * @return Document observable\n */\nexport function watchDocumentSwitch(\n { location$ }: WatchOptions\n): Observable {\n return location$\n .pipe(\n distinctUntilKeyChanged(\"pathname\"),\n skip(1),\n\n /* Fetch document */\n switchMap(url => ajax({\n url: url.href,\n responseType: \"document\",\n withCredentials: true\n })\n .pipe(\n pluck(\"response\"),\n catchError(() => {\n setLocation(url)\n return NEVER\n })\n )\n ),\n share()\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { NEVER, Observable, fromEvent, merge } from \"rxjs\"\nimport { mapTo, shareReplay } from \"rxjs/operators\"\n\nimport { watchDocumentSwitch } from \"../switch\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n location$?: Observable /* Location observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch document\n *\n * If the location observable is passed, instant loading will be enabled which\n * means that new values will be emitted every time the location changes.\n *\n * @return Document observable\n */\nexport function watchDocument(\n { location$ }: WatchOptions = {}\n): Observable {\n return merge(\n fromEvent(document, \"DOMContentLoaded\")\n .pipe(\n mapTo(document)\n ),\n typeof location$ !== \"undefined\"\n ? watchDocumentSwitch({ location$ })\n : NEVER\n )\n .pipe(\n shareReplay(1)\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve an element matching the query selector\n *\n * @template T - Element type\n *\n * @param selector - Query selector\n * @param node - Node of reference\n *\n * @return Element or nothing\n */\nexport function getElement(\n selector: string, node: ParentNode = document\n): T | undefined {\n return node.querySelector(selector) || undefined\n}\n\n/**\n * Retrieve an element matching a query selector or throw a reference error\n *\n * @template T - Element type\n *\n * @param selector - Query selector\n * @param node - Node of reference\n *\n * @return Element\n */\nexport function getElementOrThrow(\n selector: string, node: ParentNode = document\n): T {\n const el = getElement(selector, node)\n if (typeof el === \"undefined\")\n throw new ReferenceError(\n `Missing element: expected \"${selector}\" to be present`\n )\n return el\n}\n\n/**\n * Retrieve the currently active element\n *\n * @return Element or nothing\n */\nexport function getActiveElement(): HTMLElement | undefined {\n return document.activeElement instanceof HTMLElement\n ? document.activeElement\n : undefined\n}\n\n/**\n * Retrieve all elements matching the query selector\n *\n * @template T - Element type\n *\n * @param selector - Query selector\n * @param node - Node of reference\n *\n * @return Elements\n */\nexport function getElements(\n selector: string, node: ParentNode = document\n): T[] {\n return Array.from(node.querySelectorAll(selector))\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, fromEvent, merge } from \"rxjs\"\nimport { mapTo, shareReplay, startWith } from \"rxjs/operators\"\n\nimport { getActiveElement } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set element focus\n *\n * @param el - Element\n * @param value - Whether the element should be focused\n */\nexport function setElementFocus(\nel: HTMLElement, value: boolean = true\n): void {\n if (value)\n el.focus()\n else\n el.blur()\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch element focus\n *\n * @param el - Element\n *\n * @return Element focus observable\n */\nexport function watchElementFocus(\n el: HTMLElement\n): Observable {\n const focus$ = fromEvent(el, \"focus\")\n const blur$ = fromEvent(el, \"blur\")\n\n /* Map events to boolean state */\n return merge(\n focus$.pipe(mapTo(true)),\n blur$.pipe(mapTo(false))\n )\n .pipe(\n startWith(el === getActiveElement()),\n shareReplay(1)\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, fromEvent, merge } from \"rxjs\"\nimport { map, shareReplay, startWith } from \"rxjs/operators\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Element offset\n */\nexport interface ElementOffset {\n x: number /* Horizontal offset */\n y: number /* Vertical offset */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve element offset\n *\n * @param el - Element\n *\n * @return Element offset\n */\nexport function getElementOffset(el: HTMLElement): ElementOffset {\n return {\n x: el.scrollLeft,\n y: el.scrollTop\n }\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch element offset\n *\n * @param el - Element\n *\n * @return Element offset observable\n */\nexport function watchElementOffset(\n el: HTMLElement\n): Observable {\n return merge(\n fromEvent(el, \"scroll\"),\n fromEvent(window, \"resize\")\n )\n .pipe(\n map(() => getElementOffset(el)),\n startWith(getElementOffset(el)),\n shareReplay(1)\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set element text selection\n *\n * @param el - Element\n */\nexport function setElementSelection(\n el: HTMLElement\n): void {\n if (el instanceof HTMLInputElement)\n el.select()\n else\n throw new Error(\"Not implemented\")\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, fromEvent } from \"rxjs\"\nimport { filter, map, share } from \"rxjs/operators\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Key\n */\nexport interface Key {\n type: string /* Key type */\n claim(): void /* Key claim */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Check whether an element may receive keyboard input\n *\n * @param el - Element\n *\n * @return Test result\n */\nexport function isSusceptibleToKeyboard(el: HTMLElement): boolean {\n switch (el.tagName) {\n\n /* Form elements */\n case \"INPUT\":\n case \"SELECT\":\n case \"TEXTAREA\":\n return true\n\n /* Everything else */\n default:\n return el.isContentEditable\n }\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch keyboard\n *\n * @return Keyboard observable\n */\nexport function watchKeyboard(): Observable {\n return fromEvent(window, \"keydown\")\n .pipe(\n filter(ev => !(ev.metaKey || ev.ctrlKey)),\n map(ev => ({\n type: ev.key,\n claim() {\n ev.preventDefault()\n ev.stopPropagation()\n }\n })),\n share()\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, fromEventPattern } from \"rxjs\"\nimport { shareReplay, startWith } from \"rxjs/operators\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch media query\n *\n * @param query - Media query\n *\n * @return Media observable\n */\nexport function watchMedia(query: string): Observable {\n const media = matchMedia(query)\n return fromEventPattern(next =>\n media.addListener(() => next(media.matches))\n )\n .pipe(\n startWith(media.matches),\n shareReplay(1)\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, fromEvent } from \"rxjs\"\nimport { map, startWith } from \"rxjs/operators\"\n\nimport { getElementOrThrow } from \"../element\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Toggle\n */\nexport type Toggle =\n | \"drawer\" /* Toggle for drawer */\n | \"search\" /* Toggle for search */\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * Toggle map\n */\nconst toggles: Record = {\n drawer: getElementOrThrow(`[data-md-toggle=drawer]`),\n search: getElementOrThrow(`[data-md-toggle=search]`)\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve the value of a toggle\n *\n * @param name - Toggle\n *\n * @return Toggle value\n */\nexport function getToggle(name: Toggle): boolean {\n return toggles[name].checked\n}\n\n/**\n * Set toggle\n *\n * Simulating a click event seems to be the most cross-browser compatible way\n * of changing the value while also emitting a `change` event. Before, Material\n * used `CustomEvent` to programmatically change the value of a toggle, but this\n * is a much simpler and cleaner solution which doesn't require a polyfill.\n *\n * @param name - Toggle\n * @param value - Toggle value\n */\nexport function setToggle(name: Toggle, value: boolean): void {\n if (toggles[name].checked !== value)\n toggles[name].click()\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch toggle\n *\n * @param name - Toggle\n *\n * @return Toggle value observable\n */\nexport function watchToggle(name: Toggle): Observable {\n const el = toggles[name]\n return fromEvent(el, \"change\")\n .pipe(\n map(() => el.checked),\n startWith(el.checked)\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, fromEvent, merge } from \"rxjs\"\nimport { map, startWith } from \"rxjs/operators\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Viewport offset\n */\nexport interface ViewportOffset {\n x: number /* Horizontal offset */\n y: number /* Vertical offset */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve viewport offset\n *\n * On iOS Safari, viewport offset can be negative due to overflow scrolling.\n * As this may induce strange behaviors downstream, we'll just limit it to 0.\n *\n * @return Viewport offset\n */\nexport function getViewportOffset(): ViewportOffset {\n return {\n x: Math.max(0, pageXOffset),\n y: Math.max(0, pageYOffset)\n }\n}\n\n/**\n * Set viewport offset\n *\n * @param offset - Viewport offset\n */\nexport function setViewportOffset(\n { x, y }: Partial\n): void {\n window.scrollTo(x || 0, y || 0)\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch viewport offset\n *\n * @return Viewport offset observable\n */\nexport function watchViewportOffset(): Observable {\n return merge(\n fromEvent(window, \"scroll\"),\n fromEvent(window, \"resize\")\n )\n .pipe(\n map(getViewportOffset),\n startWith(getViewportOffset())\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, fromEvent } from \"rxjs\"\nimport { map, startWith } from \"rxjs/operators\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Viewport size\n */\nexport interface ViewportSize {\n width: number /* Viewport width */\n height: number /* Viewport height */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve viewport size\n *\n * @return Viewport size\n */\nexport function getViewportSize(): ViewportSize {\n return {\n width: innerWidth,\n height: innerHeight\n }\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch viewport size\n *\n * @return Viewport size observable\n */\nexport function watchViewportSize(): Observable {\n return fromEvent(window, \"resize\")\n .pipe(\n map(getViewportSize),\n startWith(getViewportSize())\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, combineLatest } from \"rxjs\"\nimport {\n distinctUntilKeyChanged,\n map,\n shareReplay\n} from \"rxjs/operators\"\n\nimport { Header } from \"components\"\n\nimport {\n ViewportOffset,\n watchViewportOffset\n} from \"../offset\"\nimport {\n ViewportSize,\n watchViewportSize\n} from \"../size\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Viewport\n */\nexport interface Viewport {\n offset: ViewportOffset /* Viewport offset */\n size: ViewportSize /* Viewport size */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch at options\n */\ninterface WatchAtOptions {\n header$: Observable
    /* Header observable */\n viewport$: Observable /* Viewport observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch viewport\n *\n * @return Viewport observable\n */\nexport function watchViewport(): Observable {\n return combineLatest([\n watchViewportOffset(),\n watchViewportSize()\n ])\n .pipe(\n map(([offset, size]) => ({ offset, size })),\n shareReplay(1)\n )\n}\n\n/**\n * Watch viewport relative to element\n *\n * @param el - Element\n * @param options - Options\n *\n * @return Viewport observable\n */\nexport function watchViewportAt(\n el: HTMLElement, { header$, viewport$ }: WatchAtOptions\n): Observable {\n const offset$ = viewport$\n .pipe(\n distinctUntilKeyChanged(\"size\"),\n map((): ViewportOffset => ({\n x: el.offsetLeft,\n y: el.offsetTop\n }))\n )\n\n /* Compute relative viewport, return hot observable */\n return combineLatest([header$, viewport$, offset$])\n .pipe(\n map(([{ height }, { offset, size }, { x, y }]) => ({\n offset: {\n x: offset.x - x,\n y: offset.y - y + height\n },\n size\n })),\n shareReplay(1)\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, Subject, fromEventPattern } from \"rxjs\"\nimport {\n pluck,\n share,\n switchMapTo,\n tap,\n throttle\n} from \"rxjs/operators\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Worker message\n */\nexport interface WorkerMessage {\n type: unknown /* Message type */\n data: unknown /* Message data */\n}\n\n/**\n * Worker handler\n *\n * @template T - Message type\n */\nexport interface WorkerHandler<\n T extends WorkerMessage\n> {\n tx$: Subject /* Message transmission subject */\n rx$: Observable /* Message receive observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n *\n * @template T - Worker message type\n */\ninterface WatchOptions {\n tx$: Observable /* Message transmission observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch a web worker\n *\n * This function returns an observable that will send all values emitted by the\n * message observable to the web worker. Web worker communication is expected\n * to be bidirectional (request-response) and synchronous. Messages that are\n * emitted during a pending request are throttled, the last one is emitted.\n *\n * @param worker - Web worker\n * @param options - Options\n *\n * @return Worker message observable\n */\nexport function watchWorker(\n worker: Worker, { tx$ }: WatchOptions\n): Observable {\n\n /* Intercept messages from worker-like objects */\n const rx$ = fromEventPattern(next =>\n worker.addEventListener(\"message\", next)\n )\n .pipe(\n pluck(\"data\")\n )\n\n /* Send and receive messages, return hot observable */\n return tx$\n .pipe(\n throttle(() => rx$, { leading: true, trailing: true }),\n tap(message => worker.postMessage(message)),\n switchMapTo(rx$),\n share()\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./document\"\nexport * from \"./element\"\nexport * from \"./keyboard\"\nexport * from \"./location\"\nexport * from \"./media\"\nexport * from \"./toggle\"\nexport * from \"./viewport\"\nexport * from \"./worker\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { SearchIndexConfig, SearchIndexOptions } from \"integrations/search\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Feature flags\n */\nexport type Feature =\n | \"tabs\" /* Tabs navigation */\n | \"instant\" /* Instant loading\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * URL configuration\n */\nexport interface UrlConfig {\n base: string /* Base URL */\n worker: {\n search: string /* Search worker URL */\n }\n}\n\n/**\n * Search configuration\n */\nexport interface SearchConfig {\n index?: Promise\n query?: (value: string) => string\n}\n\n/**\n * Configuration\n */\nexport interface Config {\n url: UrlConfig\n features: Feature[] /* Feature flags */\n search?: SearchConfig\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Ensure that the given value is a valid configuration\n *\n * We could use `jsonschema` or any other schema validation framework, but that\n * would just add more bloat to the bundle, so we'll keep it plain and simple.\n *\n * @param config - Configuration\n *\n * @return Test result\n */\nexport function isConfig(config: any): config is Config {\n return typeof config === \"object\"\n && typeof config.url === \"object\"\n && typeof config.url.base === \"string\"\n && typeof config.url.worker === \"object\"\n && typeof config.url.worker.search === \"string\"\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n// tslint:disable no-null-keyword\n\nimport { JSX as JSXInternal } from \"preact\"\nimport { keys } from \"ramda\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * HTML and SVG attributes\n */\ntype Attributes =\n & JSXInternal.HTMLAttributes\n & JSXInternal.SVGAttributes\n & Record\n\n/**\n * Child element\n */\ntype Child =\n | HTMLElement\n | SVGElement\n | Text\n | string\n | number\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Create an element\n *\n * @param tag - HTML or SVG tag\n *\n * @return Element\n */\nfunction createElement(tag: string): HTMLElement | SVGElement {\n switch (tag) {\n\n /* SVG elements */\n case \"svg\":\n case \"path\":\n return document.createElementNS(\"http://www.w3.org/2000/svg\", tag)\n\n /* HTML elements */\n default:\n return document.createElement(tag)\n }\n}\n\n/**\n * Set an attribute\n *\n * @param el - Element\n * @param name - Attribute name\n * @param value - Attribute value\n */\nfunction setAttribute(\n el: HTMLElement | SVGElement, name: string, value: string) {\n switch (name) {\n\n /* Attributes to be ignored */\n case \"xmlns\":\n break\n\n /* Attributes of SVG elements */\n case \"viewBox\":\n case \"d\":\n if (typeof value !== \"boolean\")\n el.setAttributeNS(null, name, value)\n else if (value)\n el.setAttributeNS(null, name, \"\")\n break\n\n /* Attributes of HTML elements */\n default:\n if (typeof value !== \"boolean\")\n el.setAttribute(name, value)\n else if (value)\n el.setAttribute(name, \"\")\n }\n}\n\n/**\n * Append a child node to an element\n *\n * @param el - Element\n * @param child - Child node(s)\n */\nfunction appendChild(\n el: HTMLElement | SVGElement, child: Child | Child[]\n): void {\n\n /* Handle primitive types (including raw HTML) */\n if (typeof child === \"string\" || typeof child === \"number\") {\n el.innerHTML += child.toString()\n\n /* Handle nodes */\n } else if (child instanceof Node) {\n el.appendChild(child)\n\n /* Handle nested children */\n } else if (Array.isArray(child)) {\n for (const node of child)\n appendChild(el, node)\n }\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * JSX factory\n *\n * @param tag - HTML or SVG tag\n * @param attributes - HTML attributes\n * @param children - Child elements\n *\n * @return Element\n */\nexport function h(\n tag: string, attributes: Attributes | null, ...children: Child[]\n): HTMLElement | SVGElement {\n const el = createElement(tag)\n\n /* Set attributes, if any */\n if (attributes)\n for (const attr of keys(attributes))\n setAttribute(el, attr, attributes[attr])\n\n /* Append child nodes */\n for (const child of children)\n appendChild(el, child)\n\n /* Return element */\n return el\n}\n\n/* ----------------------------------------------------------------------------\n * Namespace\n * ------------------------------------------------------------------------- */\n\nexport declare namespace h {\n namespace JSX {\n type Element = HTMLElement | SVGElement\n type IntrinsicElements = JSXInternal.IntrinsicElements\n }\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, defer, of } from \"rxjs\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Cache the last value emitted by an observable in session storage\n *\n * If the key is not found in session storage, the factory is executed and the\n * latest value emitted will automatically be persisted to sessions storage.\n * Note that the values emitted by the returned observable must be serializable\n * as `JSON`, or data will be lost.\n *\n * @template T - Value type\n *\n * @param key - Cache key\n * @param factory - Observable factory\n *\n * @return Value observable\n */\nexport function cache(\n key: string, factory: () => Observable\n): Observable {\n return defer(() => {\n const data = sessionStorage.getItem(key)\n if (data) {\n return of(JSON.parse(data) as T)\n\n /* Retrieve value from observable factory and write to storage */\n } else {\n const value$ = factory()\n value$.subscribe(value => {\n try {\n sessionStorage.setItem(key, JSON.stringify(value))\n } catch (err) {\n /* Uncritical, just swallow */\n }\n })\n\n /* Return value */\n return value$\n }\n })\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { getElementOrThrow } from \"browser\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Translation keys\n */\ntype TranslateKey =\n | \"clipboard.copy\" /* Copy to clipboard */\n | \"clipboard.copied\" /* Copied to clipboard */\n | \"search.config.lang\" /* Search language */\n | \"search.config.pipeline\" /* Search pipeline */\n | \"search.config.separator\" /* Search separator */\n | \"search.result.placeholder\" /* Type to start searching */\n | \"search.result.none\" /* No matching documents */\n | \"search.result.one\" /* 1 matching document */\n | \"search.result.other\" /* # matching documents */\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * Translations\n */\nlet lang: Record\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Translate the given key\n *\n * @param key - Key to be translated\n * @param value - Value to be replaced\n *\n * @return Translation\n */\nexport function translate(key: TranslateKey, value?: string): string {\n if (typeof lang === \"undefined\") {\n const el = getElementOrThrow(\"#__lang\")\n lang = JSON.parse(el.innerText)\n }\n if (typeof lang[key] === \"undefined\") {\n throw new ReferenceError(`Invalid translation: ${key}`)\n }\n return typeof value !== \"undefined\"\n ? lang[key].replace(\"#\", value)\n : lang[key]\n}\n\n/**\n * Truncate a string after the given number of characters\n *\n * This is not a very reasonable approach, since the summaries kind of suck.\n * It would be better to create something more intelligent, highlighting the\n * search occurrences and making a better summary out of it, but this note was\n * written three years ago, so who knows if we'll ever fix it.\n *\n * @param value - Value to be truncated\n * @param n - Number of characters\n *\n * @return Truncated value\n */\nexport function truncate(value: string, n: number): string {\n let i = n\n if (value.length > i) {\n while (value[i] !== \" \" && --i > 0); // tslint:disable-line\n return `${value.substring(0, i)}...`\n }\n return value\n}\n\n/**\n * Round a number for display with source facts\n *\n * This is a reverse engineered version of GitHub's weird rounding algorithm\n * for stars, forks and all other numbers. While all numbers below `1,000` are\n * returned as-is, bigger numbers are converted to fixed numbers:\n *\n * - `1,049` => `1k`\n * - `1,050` => `1.1k`\n * - `1,949` => `1.9k`\n * - `1,950` => `2k`\n *\n * @param value - Original value\n *\n * @return Rounded value\n */\nexport function round(value: number): string {\n if (value > 999) {\n const digits = +((value - 950) % 1000 > 99)\n return `${((value + 1) / 1000).toFixed(digits)}k`\n } else {\n return value.toString()\n }\n}\n\n/**\n * Simple hash function\n *\n * @see https://bit.ly/2wsVjJ4 - Original source\n *\n * @param value - Value to be hashed\n *\n * @return Hash as 32bit integer\n */\nexport function hash(value: string): number {\n let h = 0\n for (let i = 0, len = value.length; i < len; i++) {\n h = ((h << 5) - h) + value.charCodeAt(i)\n h |= 0 // Convert to 32bit integer\n }\n return h\n }\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./config\"\nexport * from \"./jsx\"\nexport * from \"./rxjs\"\nexport * from \"./string\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./header\"\nexport * from \"./hero\"\nexport * from \"./main\"\nexport * from \"./navigation\"\nexport * from \"./search\"\nexport * from \"./shared\"\nexport * from \"./tabs\"\nexport * from \"./toc\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set sidebar offset\n *\n * @param el - Sidebar element\n * @param value - Sidebar offset\n */\nexport function setSidebarOffset(\n el: HTMLElement, value: number\n): void {\n el.style.top = `${value}px`\n}\n\n/**\n * Reset sidebar offset\n *\n * @param el - Sidebar element\n */\nexport function resetSidebarOffset(\n el: HTMLElement\n): void {\n el.style.top = \"\"\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Set sidebar height\n *\n * @param el - Sidebar element\n * @param value - Sidebar height\n */\nexport function setSidebarHeight(\n el: HTMLElement, value: number\n): void {\n el.style.height = `${value}px`\n}\n\n/**\n * Reset sidebar height\n *\n * @param el - Sidebar element\n */\nexport function resetSidebarHeight(\n el: HTMLElement\n): void {\n el.style.height = \"\"\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Set sidebar lock\n *\n * @param el - Sidebar element\n * @param value - Whether the sidebar is locked\n */\nexport function setSidebarLock(\n el: HTMLElement, value: boolean\n): void {\n el.setAttribute(\"data-md-state\", value ? \"lock\" : \"\")\n}\n\n/**\n * Reset sidebar lock\n *\n * @param el - Sidebar element\n */\nexport function resetSidebarLock(\n el: HTMLElement\n): void {\n el.removeAttribute(\"data-md-state\")\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { EMPTY, Observable, of } from \"rxjs\"\nimport {\n distinctUntilChanged,\n map,\n scan,\n shareReplay,\n switchMap\n} from \"rxjs/operators\"\n\nimport { getElement } from \"browser\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Component\n */\nexport type Component =\n | \"container\" /* Container */\n | \"header\" /* Header */\n | \"header-title\" /* Header title */\n | \"hero\" /* Hero */\n | \"main\" /* Main area */\n | \"navigation\" /* Navigation */\n | \"search\" /* Search */\n | \"search-query\" /* Search input */\n | \"search-reset\" /* Search reset */\n | \"search-result\" /* Search results */\n | \"skip\" /* Skip link */\n | \"tabs\" /* Tabs */\n | \"toc\" /* Table of contents */\n\n/**\n * Component map\n */\nexport type ComponentMap = {\n [P in Component]?: HTMLElement\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n document$: Observable /* Document observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * Component map observable\n */\nlet components$: Observable\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup bindings to components with given names\n *\n * This function will maintain bindings to the elements identified by the given\n * names in-between document switches and update the elements in-place.\n *\n * @param names - Component names\n * @param options - Options\n */\nexport function setupComponents(\n names: Component[], { document$ }: WatchOptions\n): void {\n components$ = document$\n .pipe(\n\n /* Build component map */\n map(document => names.reduce((components, name) => {\n const el = getElement(`[data-md-component=${name}]`, document)\n return {\n ...components,\n ...typeof el !== \"undefined\" ? { [name]: el } : {}\n }\n }, {})),\n\n /* Re-compute component map on document switch */\n scan((prev, next) => {\n for (const name of names) {\n switch (name) {\n\n /* Top-level components: update */\n case \"header-title\":\n case \"container\":\n case \"skip\":\n if (name in prev && typeof prev[name] !== \"undefined\") {\n prev[name]!.replaceWith(next[name]!)\n prev[name] = next[name]\n }\n break\n\n /* All other components: rebind */\n default:\n if (typeof next[name] !== \"undefined\")\n prev[name] = getElement(`[data-md-component=${name}]`)\n else\n delete prev[name]\n }\n }\n return prev\n }),\n\n /* Convert to hot observable */\n shareReplay(1)\n )\n}\n\n/**\n * Retrieve a component\n *\n * The returned observable will only re-emit if the element changed, i.e. if\n * it was replaced from a document which was switched to.\n *\n * @template T - Element type\n *\n * @param name - Component name\n *\n * @return Element observable\n */\nexport function useComponent(\n name: \"search-query\"\n): Observable\nexport function useComponent(\n name: Component\n): Observable\nexport function useComponent(\n name: Component\n): Observable {\n return components$\n .pipe(\n switchMap(components => (\n typeof components[name] !== \"undefined\"\n ? of(components[name] as T)\n : EMPTY\n )),\n distinctUntilChanged()\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set anchor blur\n *\n * @param el - Anchor element\n * @param value - Whether the anchor is blurred\n */\nexport function setAnchorBlur(\n el: HTMLElement, value: boolean\n): void {\n el.setAttribute(\"data-md-state\", value ? \"blur\" : \"\")\n}\n\n/**\n * Reset anchor blur\n *\n * @param el - Anchor element\n */\nexport function resetAnchorBlur(\n el: HTMLElement\n): void {\n el.removeAttribute(\"data-md-state\")\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Set anchor active\n *\n * @param el - Anchor element\n * @param value - Whether the anchor is active\n */\nexport function setAnchorActive(\n el: HTMLElement, value: boolean\n): void {\n el.classList.toggle(\"md-nav__link--active\", value)\n}\n\n/**\n * Reset anchor active\n *\n * @param el - Anchor element\n */\nexport function resetAnchorActive(\n el: HTMLElement\n): void {\n el.classList.remove(\"md-nav__link--active\")\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./sidebar\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { h, translate } from \"utilities\"\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * CSS classes\n */\nconst css = {\n container: \"md-clipboard md-icon\"\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Render a 'copy-to-clipboard' button\n *\n * @param id - Unique identifier\n *\n * @return Element\n */\nexport function renderClipboard(\n id: string\n) {\n const path = require(\"material-design-icons-svg/paths/content-copy.json\")\n return (\n \n \n \n \n \n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { SearchResult } from \"integrations/search\"\nimport { h, truncate } from \"utilities\"\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * CSS classes\n */\nconst css = {\n item: \"md-search-result__item\",\n link: \"md-search-result__link\",\n article: \"md-search-result__article md-search-result__article--document\",\n section: \"md-search-result__article\",\n title: \"md-search-result__title\",\n teaser: \"md-search-result__teaser\"\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Render a search result\n *\n * @param result - Search result\n *\n * @return Element\n */\nexport function renderSearchResult(\n { article, sections }: SearchResult\n) {\n\n // create page with icon\n const path = require(\"material-design-icons-svg/paths/file-search-outline.json\")\n\n const children = [article, ...sections].map(document => {\n const { location, title, text } = document\n return (\n \n
    \n {!(\"parent\" in document)\n ?
    \n \n \n \n
    \n : null\n }\n

    {title}

    \n {text.length\n ?

    {truncate(text, 320)}

    \n : undefined\n }\n
    \n
    \n )\n })\n return (\n
  • \n {children}\n
  • \n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { SourceFacts } from \"patches/source\"\nimport { h } from \"utilities\"\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * CSS classes\n */\nconst css = {\n facts: \"md-source__facts\",\n fact: \"md-source__fact\"\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Render source facts\n *\n * @param facts - Source facts\n *\n * @return Element\n */\nexport function renderSource(\n facts: SourceFacts\n) {\n const children = facts.map(fact => (\n
  • {fact}
  • \n ))\n return (\n
      \n {children}\n
    \n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { h } from \"utilities\"\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * CSS classes\n */\nconst css = {\n wrapper: \"md-typeset__scrollwrap\",\n table: \"md-typeset__table\"\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Render a table inside a wrapper to improve scrolling on mobile\n *\n * @param table - Table element\n *\n * @return Element\n */\nexport function renderTable(\n table: HTMLTableElement\n) {\n return (\n
    \n
    \n {table}\n
    \n
    \n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./clipboard\"\nexport * from \"./search\"\nexport * from \"./source\"\nexport * from \"./table\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Global augmentations\n */\ndeclare global {\n interface CSSStyleDeclaration {\n webkitOverflowScrolling: \"touch\" | \"\"\n }\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set overflow scrolling\n *\n * @param el - Scrollable element\n */\nexport function setOverflowScrolling(\n el: HTMLElement\n): void {\n el.style.webkitOverflowScrolling = \"touch\"\n}\n\n/**\n * Reset overflow scrolling\n *\n * @param el - Scrollable element\n */\nexport function resetOverflowScrolling(\n el: HTMLElement\n): void {\n el.style.webkitOverflowScrolling = \"\"\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A RTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { SearchIndexOptions, SearchResult } from \"integrations/search\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Search message type\n */\nexport const enum SearchMessageType {\n SETUP, /* Search index setup */\n DUMP, /* Search index dump */\n QUERY, /* Search query */\n RESULT /* Search results */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * A message containing the data necessary to setup the search index\n */\nexport interface SearchSetupMessage {\n type: SearchMessageType.SETUP /* Message type */\n data: SearchIndexOptions /* Message data */\n}\n\n/**\n * A message containing the a dump of the search index\n */\nexport interface SearchDumpMessage {\n type: SearchMessageType.DUMP /* Message type */\n data: string /* Message data */\n}\n\n/**\n * A message containing a search query\n */\nexport interface SearchQueryMessage {\n type: SearchMessageType.QUERY /* Message type */\n data: string /* Message data */\n}\n\n/**\n * A message containing results for a search query\n */\nexport interface SearchResultMessage {\n type: SearchMessageType.RESULT /* Message type */\n data: SearchResult[] /* Message data */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * A message exchanged with the search worker\n */\nexport type SearchMessage =\n | SearchSetupMessage\n | SearchDumpMessage\n | SearchQueryMessage\n | SearchResultMessage\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Type guard for search setup messages\n *\n * @param message - Search worker message\n *\n * @return Test result\n */\nexport function isSearchSetupMessage(\n message: SearchMessage\n): message is SearchSetupMessage {\n return message.type === SearchMessageType.SETUP\n}\n\n/**\n * Type guard for search dump messages\n *\n * @param message - Search worker message\n *\n * @return Test result\n */\nexport function isSearchDumpMessage(\n message: SearchMessage\n): message is SearchDumpMessage {\n return message.type === SearchMessageType.DUMP\n}\n\n/**\n * Type guard for search query messages\n *\n * @param message - Search worker message\n *\n * @return Test result\n */\nexport function isSearchQueryMessage(\n message: SearchMessage\n): message is SearchQueryMessage {\n return message.type === SearchMessageType.QUERY\n}\n\n/**\n * Type guard for search result messages\n *\n * @param message - Search worker message\n *\n * @return Test result\n */\nexport function isSearchResultMessage(\n message: SearchMessage\n): message is SearchResultMessage {\n return message.type === SearchMessageType.RESULT\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A RTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, Subject, from } from \"rxjs\"\nimport { ajax } from \"rxjs/ajax\"\nimport {\n map,\n pluck,\n shareReplay,\n switchMap,\n take,\n tap,\n withLatestFrom\n} from \"rxjs/operators\"\n\nimport { WorkerHandler, watchWorker } from \"browser\"\nimport { SearchIndexConfig, SearchIndexOptions } from \"integrations/search\"\n\nimport { translate } from \"utilities\"\nimport {\n SearchMessage,\n SearchMessageType,\n SearchSetupMessage,\n isSearchResultMessage\n} from \"../message\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup options\n */\ninterface SetupOptions {\n base: string /* Base url */\n index?: Promise /* Promise resolving with index */\n location$: Observable /* Location observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup search web worker\n *\n * This function will create a web worker to setup and query the search index\n * which is done using `lunr`. The index can be passed explicitly in order to\n * enable hacks like _localsearch_ via search index embedding as JSON. If no\n * index is given, this function will load it from the default location.\n *\n * @param url - Worker url\n * @param options - Options\n *\n * @return Worker handler\n */\nexport function setupSearchWorker(\n url: string, { base, index, location$ }: SetupOptions\n): WorkerHandler {\n const worker = new Worker(url)\n\n /* Ensure stable base URL */\n const origin$ = location$\n .pipe(\n take(1),\n map(({ href }) => new URL(base, href)\n .toString()\n .replace(/\\/$/, \"\")\n )\n )\n\n /* Create communication channels and resolve relative links */\n const tx$ = new Subject()\n const rx$ = watchWorker(worker, { tx$ })\n .pipe(\n withLatestFrom(origin$),\n map(([message, origin]) => {\n if (isSearchResultMessage(message)) {\n for (const { article, sections } of message.data) {\n article.location = `${origin}/${article.location}`\n for (const section of sections)\n section.location = `${origin}/${section.location}`\n }\n }\n return message\n }),\n shareReplay(1)\n )\n\n /* Fetch index if it wasn't passed explicitly */\n const index$ = typeof index !== \"undefined\"\n ? from(index)\n : origin$\n .pipe(\n switchMap(origin => ajax({\n url: `${origin}/search/search_index.json`,\n responseType: \"json\",\n withCredentials: true\n })\n .pipe(\n pluck(\"response\")\n )\n )\n )\n\n function isConfigDefaultLang(config: SearchIndexConfig) {\n return config.lang.length === 1 && config.lang[0] === \"en\"\n }\n\n function isConfigDefaultSeparator(config: SearchIndexConfig) {\n return config.separator === \"[\\s\\-]+\"\n }\n\n index$\n .pipe(\n map(({ config, ...rest }) => ({\n config: {\n lang: isConfigDefaultLang(config)\n ? [translate(\"search.config.lang\")]\n : config.lang,\n pipeline: translate(\"search.config.pipeline\")\n .split(/\\s*,\\s*/)\n .filter(Boolean),\n separator: isConfigDefaultSeparator(config)\n ? translate(\"search.config.separator\")\n : config.separator\n },\n ...rest\n }))\n )\n .subscribe(console.log)\n\n /* Send index to worker */\n index$\n .pipe(\n map(data => ({\n type: SearchMessageType.SETUP,\n data\n }))\n )\n .subscribe(tx$.next.bind(tx$))\n\n /* Return worker handler */\n return { tx$, rx$ }\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./search\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./react\"\nexport * from \"./set\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./react\"\nexport * from \"./set\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./layer\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, OperatorFunction, pipe } from \"rxjs\"\nimport { map, switchMap } from \"rxjs/operators\"\n\nimport { Viewport, getElements } from \"browser\"\n\nimport { Header } from \"../../header\"\nimport { Main } from \"../../main\"\nimport {\n Sidebar,\n applySidebar,\n watchSidebar\n} from \"../../shared\"\nimport {\n NavigationLayer,\n applyNavigationLayer,\n watchNavigationLayer\n} from \"../layer\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Navigation for [screen -]\n */\ninterface NavigationBelowScreen {\n layer: NavigationLayer /* Active layer */\n}\n\n/**\n * Navigation for [screen +]\n */\ninterface NavigationAboveScreen {\n sidebar: Sidebar /* Sidebar */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Navigation\n */\nexport type Navigation =\n | NavigationBelowScreen\n | NavigationAboveScreen\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n header$: Observable
    /* Header observable */\n main$: Observable
    /* Main area observable */\n viewport$: Observable /* Viewport observable */\n screen$: Observable /* Screen media observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount navigation from source observable\n *\n * @param options - Options\n *\n * @return Operator function\n */\nexport function mountNavigation(\n { header$, main$, viewport$, screen$ }: MountOptions\n): OperatorFunction {\n return pipe(\n switchMap(el => screen$\n .pipe(\n switchMap(screen => {\n\n /* [screen +]: Mount navigation in sidebar */\n if (screen) {\n return watchSidebar(el, { main$, viewport$ })\n .pipe(\n applySidebar(el, { header$ }),\n map(sidebar => ({ sidebar }))\n )\n\n /* [screen -]: Mount navigation in drawer */\n } else {\n const els = getElements(\"nav\", el)\n return watchNavigationLayer(els)\n .pipe(\n applyNavigationLayer(els),\n map(layer => ({ layer }))\n )\n }\n })\n )\n )\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./react\"\nexport * from \"./set\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n MonoTypeOperatorFunction,\n Observable,\n animationFrameScheduler,\n combineLatest,\n pipe\n} from \"rxjs\"\nimport {\n distinctUntilChanged,\n distinctUntilKeyChanged,\n finalize,\n map,\n observeOn,\n tap,\n withLatestFrom\n} from \"rxjs/operators\"\n\nimport { Viewport } from \"browser\"\n\nimport { Header } from \"../../../header\"\nimport { Main } from \"../../../main\"\nimport { Sidebar } from \"../_\"\nimport {\n resetSidebarHeight,\n resetSidebarLock,\n resetSidebarOffset,\n setSidebarHeight,\n setSidebarLock,\n setSidebarOffset\n} from \"../set\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n main$: Observable
    /* Main area observable */\n viewport$: Observable /* Viewport observable */\n}\n\n/**\n * Apply options\n */\ninterface ApplyOptions {\n header$: Observable
    /* Header observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch sidebar\n *\n * This function returns an observable that computes the visual parameters of\n * the sidebar which depends on the vertical viewport offset, as well as the\n * height of the main area. When the page is scrolled beyond the header, the\n * sidebar is locked and fills the remaining space.\n *\n * @param el - Sidebar element\n * @param options - Options\n *\n * @return Sidebar observable\n */\nexport function watchSidebar(\n el: HTMLElement, { main$, viewport$ }: WatchOptions\n): Observable {\n\n /* Adjust for internal main area offset */\n const adjust$ = viewport$\n .pipe(\n distinctUntilKeyChanged(\"size\"),\n map(() => parseFloat(\n getComputedStyle(el.parentElement!)\n .getPropertyValue(\"padding-top\")\n )),\n distinctUntilChanged()\n )\n\n /* Compute the sidebar's available height */\n const height$ = viewport$\n .pipe(\n withLatestFrom(adjust$, main$),\n map(([{ offset: { y } }, adjust, { offset, height }]) => (\n height\n + Math.min(adjust, Math.max(0, y - offset))\n - adjust\n )),\n distinctUntilChanged()\n )\n\n /* Compute whether the sidebar should be locked */\n const lock$ = viewport$\n .pipe(\n withLatestFrom(adjust$, main$),\n map(([{ offset: { y } }, adjust, { offset }]) => (\n y >= offset + adjust\n )),\n distinctUntilChanged()\n )\n\n /* Combine into single observable */\n return combineLatest([height$, lock$])\n .pipe(\n map(([height, lock]) => ({ height, lock }))\n )\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Apply sidebar\n *\n * @param el - Sidebar element\n * @param options - Options\n *\n * @return Operator function\n */\nexport function applySidebar(\n el: HTMLElement, { header$ }: ApplyOptions\n): MonoTypeOperatorFunction {\n return pipe(\n\n /* Defer repaint to next animation frame */\n observeOn(animationFrameScheduler),\n withLatestFrom(header$),\n tap(([{ height, lock }, { height: offset }]) => {\n setSidebarHeight(el, height)\n setSidebarLock(el, lock)\n\n /* Set offset in locked state depending on header height */\n if (lock)\n setSidebarOffset(el, offset)\n else\n resetSidebarOffset(el)\n }),\n\n /* Re-map to sidebar */\n map(([sidebar]) => sidebar),\n\n /* Reset on complete or error */\n finalize(() => {\n resetSidebarOffset(el)\n resetSidebarHeight(el)\n resetSidebarLock(el)\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { findLast } from \"ramda\"\nimport {\n MonoTypeOperatorFunction,\n Observable,\n animationFrameScheduler,\n fromEvent,\n merge,\n pipe\n} from \"rxjs\"\nimport {\n delay,\n finalize,\n map,\n observeOn,\n scan,\n tap\n} from \"rxjs/operators\"\n\nimport { getElement, getElementOrThrow } from \"browser\"\n\nimport { NavigationLayer } from \"../_\"\nimport {\n resetOverflowScrolling,\n setOverflowScrolling\n} from \"../set\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch navigation layer\n *\n * On iOS we want to add `-webkit-overflow-scrolling: touch` for the menus\n * contained in the drawer, but as the navigational layers are nested, we can\n * only add it to the topmost layer or extremely weird cropping will occur.\n * This implementation keeps track of the previous and current layer.\n *\n * @param els - Navigation elements\n *\n * @return Navigation layer observable\n */\nexport function watchNavigationLayer(\n els: HTMLElement[]\n): Observable {\n const table = new Map()\n for (const el of els) {\n const label = getElement(\"label\", el)\n if (typeof label !== \"undefined\") {\n const input = getElementOrThrow(`#${label.htmlFor}`)\n table.set(input, el)\n }\n }\n\n /* Determine topmost layer */\n const layer$ = merge(...[...table.keys()].map(input => (\n fromEvent(input, \"change\")\n )))\n .pipe(\n map(() => getElementOrThrow(\".md-nav__list\", table.get(\n findLast(({ checked }) => checked, [...table.keys()])!\n )))\n )\n\n /* Return previous and next layer */\n return layer$\n .pipe(\n map(next => ({ next })),\n scan(({ next: prev }, { next }) => ({ prev, next }))\n )\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Apply navigation layer\n *\n * @param els - Navigation elements\n *\n * @return Operator function\n */\nexport function applyNavigationLayer(\n els: HTMLElement[]\n): MonoTypeOperatorFunction {\n return pipe(\n\n /* Defer repaint to next animation frame */\n observeOn(animationFrameScheduler),\n tap(({ prev }) => {\n if (prev)\n resetOverflowScrolling(prev)\n }),\n\n /* Wait until transition has finished */\n delay(250),\n\n /* Defer repaint to next animation frame */\n observeOn(animationFrameScheduler),\n tap(({ next }) => {\n setOverflowScrolling(next)\n }),\n\n /* Reset on complete or error */\n finalize(() => {\n for (const el of els)\n resetOverflowScrolling(\n getElementOrThrow(\".md-nav__list\", el)\n )\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./anchor\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n OperatorFunction,\n combineLatest,\n of,\n pipe\n} from \"rxjs\"\nimport { map, switchMap } from \"rxjs/operators\"\n\nimport { Viewport, getElements } from \"browser\"\n\nimport { Header } from \"../../header\"\nimport { Main } from \"../../main\"\nimport {\n Sidebar,\n applySidebar,\n watchSidebar\n} from \"../../shared\"\nimport {\n AnchorList,\n applyAnchorList,\n watchAnchorList\n} from \"../anchor\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Table of contents for [tablet -]\n */\ninterface TableOfContentsBelowTablet {} // tslint:disable-line\n\n/**\n * Table of contents for [tablet +]\n */\ninterface TableOfContentsAboveTablet {\n sidebar: Sidebar /* Sidebar */\n anchors: AnchorList /* Anchor list */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Table of contents\n */\nexport type TableOfContents =\n | TableOfContentsBelowTablet\n | TableOfContentsAboveTablet\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n header$: Observable
    /* Header observable */\n main$: Observable
    /* Main area observable */\n viewport$: Observable /* Viewport observable */\n tablet$: Observable /* Tablet media observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount table of contents from source observable\n *\n * @param options - Options\n *\n * @return Operator function\n */\nexport function mountTableOfContents(\n { header$, main$, viewport$, tablet$}: MountOptions\n): OperatorFunction {\n return pipe(\n switchMap(el => tablet$\n .pipe(\n switchMap(tablet => {\n\n /* [tablet +]: Mount table of contents in sidebar */\n if (tablet) {\n const els = getElements(\".md-nav__link\", el)\n\n /* Watch and apply sidebar */\n const sidebar$ = watchSidebar(el, { main$, viewport$ })\n .pipe(\n applySidebar(el, { header$ })\n )\n\n /* Watch and apply anchor list (scroll spy) */\n const anchors$ = watchAnchorList(els, { header$, viewport$ })\n .pipe(\n applyAnchorList(els)\n )\n\n /* Combine into a single hot observable */\n return combineLatest([sidebar$, anchors$])\n .pipe(\n map(([sidebar, anchors]) => ({ sidebar, anchors }))\n )\n\n /* [tablet -]: Unmount table of contents */\n } else {\n return of({})\n }\n })\n )\n )\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { reverse } from \"ramda\"\nimport {\n MonoTypeOperatorFunction,\n Observable,\n animationFrameScheduler,\n combineLatest,\n pipe\n} from \"rxjs\"\nimport {\n bufferCount,\n distinctUntilChanged,\n distinctUntilKeyChanged,\n finalize,\n map,\n observeOn,\n scan,\n startWith,\n switchMap,\n tap\n} from \"rxjs/operators\"\n\nimport { Viewport, getElement } from \"browser\"\n\nimport { Header } from \"../../../header\"\nimport { AnchorList } from \"../_\"\nimport {\n resetAnchorActive,\n resetAnchorBlur,\n setAnchorActive,\n setAnchorBlur\n} from \"../set\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n header$: Observable
    /* Header observable */\n viewport$: Observable /* Viewport observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch anchor list\n *\n * This is effectively a scroll-spy implementation which will account for the\n * fixed header and automatically re-calculate anchor offsets when the viewport\n * is resized. The returned observable will only emit if the anchor list needs\n * to be repainted.\n *\n * This implementation tracks an anchor element's entire path starting from its\n * level up to the top-most anchor element, e.g. `[h3, h2, h1]`. Although the\n * Material theme currently doesn't make use of this information, it enables\n * the styling of the entire hierarchy through customization.\n *\n * Note that the current anchor is the last item of the `prev` anchor list.\n *\n * @param els - Anchor elements\n * @param options - Options\n *\n * @return Anchor list observable\n */\nexport function watchAnchorList(\n els: HTMLAnchorElement[], { header$, viewport$ }: WatchOptions\n): Observable {\n const table = new Map()\n for (const el of els) {\n const id = decodeURIComponent(el.hash.substring(1))\n const target = getElement(`[id=\"${id}\"]`)\n if (typeof target !== \"undefined\")\n table.set(el, target)\n }\n\n /* Compute necessary adjustment for header */\n const adjust$ = header$\n .pipe(\n map(header => 18 + header.height)\n )\n\n /* Compute partition of previous and next anchors */\n const partition$ = viewport$\n .pipe(\n distinctUntilKeyChanged(\"size\"),\n\n /* Build index to map anchor paths to vertical offsets */\n map(() => {\n let path: HTMLAnchorElement[] = []\n return [...table].reduce((index, [anchor, target]) => {\n while (path.length) {\n const last = table.get(path[path.length - 1])!\n if (last.tagName >= target.tagName) {\n path.pop()\n } else {\n break\n }\n }\n\n /* If the current anchor is hidden, continue with its parent */\n let offset = target.offsetTop\n while (!offset && target.parentElement) {\n target = target.parentElement\n offset = target.offsetTop\n }\n\n /* Map reversed anchor path to vertical offset */\n return index.set(\n reverse(path = [...path, anchor]),\n offset\n )\n }, new Map())\n }),\n\n /* Re-compute partition when viewport offset changes */\n switchMap(index => combineLatest([adjust$, viewport$])\n .pipe(\n scan(([prev, next], [adjust, { offset: { y } }]) => {\n\n /* Look forward */\n while (next.length) {\n const [, offset] = next[0]\n if (offset - adjust < y) {\n prev = [...prev, next.shift()!]\n } else {\n break\n }\n }\n\n /* Look backward */\n while (prev.length) {\n const [, offset] = prev[prev.length - 1]\n if (offset - adjust >= y) {\n next = [prev.pop()!, ...next]\n } else {\n break\n }\n }\n\n /* Return partition */\n return [prev, next]\n }, [[], [...index]]),\n distinctUntilChanged((a, b) => {\n return a[0] === b[0]\n && a[1] === b[1]\n })\n )\n )\n )\n\n /* Compute and return anchor list migrations */\n return partition$\n .pipe(\n map(([prev, next]) => ({\n prev: prev.map(([path]) => path),\n next: next.map(([path]) => path)\n })),\n\n /* Extract anchor list migrations */\n startWith({ prev: [], next: [] }),\n bufferCount(2, 1),\n map(([a, b]) => {\n\n /* Moving down */\n if (a.prev.length < b.prev.length) {\n return {\n prev: b.prev.slice(Math.max(0, a.prev.length - 1), b.prev.length),\n next: []\n }\n\n /* Moving up */\n } else {\n return {\n prev: b.prev.slice(-1),\n next: b.next.slice(0, b.next.length - a.next.length)\n }\n }\n })\n )\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Apply anchor list\n *\n * @param els - Anchor elements\n *\n * @return Operator function\n */\nexport function applyAnchorList(\n els: HTMLAnchorElement[]\n): MonoTypeOperatorFunction {\n return pipe(\n\n /* Defer repaint to next animation frame */\n observeOn(animationFrameScheduler),\n tap(({ prev, next }) => {\n\n /* Look forward */\n for (const [el] of next) {\n resetAnchorActive(el)\n resetAnchorBlur(el)\n }\n\n /* Look backward */\n prev.forEach(([el], index) => {\n setAnchorActive(el, index === prev.length - 1)\n setAnchorBlur(el, true)\n })\n }),\n\n /* Reset on complete or error */\n finalize(() => {\n for (const el of els) {\n resetAnchorActive(el)\n resetAnchorBlur(el)\n }\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, OperatorFunction, combineLatest, pipe } from \"rxjs\"\nimport { map, switchMap } from \"rxjs/operators\"\n\nimport { SearchResult } from \"integrations/search\"\n\nimport { SearchQuery } from \"../query\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Search\n */\nexport interface Search {\n query: SearchQuery /* Search query */\n result: SearchResult[] /* Search result list */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n query$: Observable /* Search query observable */\n reset$: Observable /* Search reset observable */\n result$: Observable /* Search result observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount search from source observable\n *\n * @param options - Options\n *\n * @return Operator function\n */\nexport function mountSearch(\n { query$, reset$, result$ }: MountOptions\n): OperatorFunction {\n return pipe(\n switchMap(() => combineLatest([query$, result$, reset$])\n .pipe(\n map(([query, result]) => ({ query, result }))\n )\n )\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, combineLatest, fromEvent, merge } from \"rxjs\"\nimport {\n delay,\n distinctUntilChanged,\n map,\n startWith\n} from \"rxjs/operators\"\n\nimport { watchElementFocus } from \"browser\"\n\nimport { SearchQuery } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n transform?(value: string): string /* Transformation function */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Default transformation function\n *\n * Rogue control characters are filtered before handing the query to the\n * search index, as `lunr` will throw otherwise.\n *\n * @param value - Query value\n *\n * @return Transformed query value\n */\nfunction defaultTransform(value: string): string {\n return value\n .replace(/(?:^|\\s+)[*+-:^~]+(?=\\s+|$)/g, \"\")\n .trim()\n .replace(/\\s+|\\b$/g, \"* \")\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch search query\n *\n * Note that the focus event which triggers re-reading the current query value\n * is delayed by `1ms` so the input's empty state is allowed to propagate.\n *\n * @param el - Search query element\n * @param options - Options\n *\n * @return Search query observable\n */\nexport function watchSearchQuery(\n el: HTMLInputElement, { transform }: WatchOptions = {}\n): Observable {\n const fn = transform || defaultTransform\n\n /* Intercept keyboard events */\n const value$ = merge(\n fromEvent(el, \"keyup\"),\n fromEvent(el, \"focus\").pipe(delay(1))\n )\n .pipe(\n map(() => fn(el.value)),\n startWith(fn(el.value)),\n distinctUntilChanged()\n )\n\n /* Intercept focus events */\n const focus$ = watchElementFocus(el)\n\n /* Combine into a single observable */\n return combineLatest([value$, focus$])\n .pipe(\n map(([value, focus]) => ({ value, focus }))\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { OperatorFunction, pipe } from \"rxjs\"\nimport {\n distinctUntilKeyChanged,\n map,\n switchMap\n} from \"rxjs/operators\"\n\nimport { WorkerHandler, setToggle } from \"browser\"\nimport {\n SearchMessage,\n SearchMessageType,\n SearchQueryMessage\n} from \"workers\"\n\nimport { watchSearchQuery } from \"../react\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Search query\n */\nexport interface SearchQuery {\n value: string /* Query value */\n focus: boolean /* Query focus */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n transform?(value: string): string /* Transformation function */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount search query from source observable\n *\n * @param handler - Worker handler\n * @param options - Options\n *\n * @return Operator function\n */\nexport function mountSearchQuery(\n { tx$ }: WorkerHandler, options: MountOptions = {}\n): OperatorFunction {\n return pipe(\n switchMap(el => {\n const query$ = watchSearchQuery(el, options)\n\n /* Subscribe worker to search query */\n query$\n .pipe(\n distinctUntilKeyChanged(\"value\"),\n map(({ value }): SearchQueryMessage => ({\n type: SearchMessageType.QUERY,\n data: value\n }))\n )\n .subscribe(tx$.next.bind(tx$))\n\n /* Toggle search on focus */\n query$\n .pipe(\n distinctUntilKeyChanged(\"focus\")\n )\n .subscribe(({ focus }) => {\n if (focus)\n setToggle(\"search\", focus)\n })\n\n /* Return search query */\n return query$\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { OperatorFunction, pipe } from \"rxjs\"\nimport {\n mapTo,\n startWith,\n switchMap,\n switchMapTo,\n tap\n} from \"rxjs/operators\"\n\nimport { setElementFocus } from \"browser\"\n\nimport { useComponent } from \"../../../_\"\nimport { watchSearchReset } from \"../react\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount search reset from source observable\n *\n * @return Operator function\n */\nexport function mountSearchReset(): OperatorFunction {\n return pipe(\n switchMap(el => watchSearchReset(el)\n .pipe(\n switchMapTo(useComponent(\"search-query\")),\n tap(setElementFocus),\n mapTo(undefined)\n )\n ),\n startWith(undefined)\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, fromEvent } from \"rxjs\"\nimport { mapTo } from \"rxjs/operators\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch search reset\n *\n * @param el - Search reset element\n *\n * @return Search reset observable\n */\nexport function watchSearchReset(\n el: HTMLElement\n): Observable {\n return fromEvent(el, \"click\")\n .pipe(\n mapTo(undefined)\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { translate } from \"utilities\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set number of search results\n *\n * @param el - Search result metadata element\n * @param value - Number of results\n */\nexport function setSearchResultMeta(\n el: HTMLElement, value: number\n): void {\n switch (value) {\n\n /* No results */\n case 0:\n el.textContent = translate(\"search.result.none\")\n break\n\n /* One result */\n case 1:\n el.textContent = translate(\"search.result.one\")\n break\n\n /* Multiple result */\n default:\n el.textContent = translate(\"search.result.other\", value.toString())\n }\n}\n\n/**\n * Reset number of search results\n *\n * @param el - Search result metadata element\n */\nexport function resetSearchResultMeta(\n el: HTMLElement\n): void {\n el.textContent = translate(\"search.result.placeholder\")\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Add an element to the search result list\n *\n * @param el - Search result list element\n * @param child - Search result element\n */\nexport function addToSearchResultList(\n el: HTMLElement, child: HTMLElement\n): void {\n el.appendChild(child)\n}\n\n/**\n * Reset search result list\n *\n * @param el - Search result list element\n */\nexport function resetSearchResultList(\n el: HTMLElement\n): void {\n el.innerHTML = \"\"\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n MonoTypeOperatorFunction,\n Observable,\n animationFrameScheduler,\n pipe\n} from \"rxjs\"\nimport {\n finalize,\n map,\n mapTo,\n observeOn,\n scan,\n switchMap,\n withLatestFrom\n} from \"rxjs/operators\"\n\nimport { getElementOrThrow } from \"browser\"\nimport { SearchResult } from \"integrations/search\"\nimport { renderSearchResult } from \"templates\"\n\nimport { SearchQuery } from \"../../query\"\nimport {\n addToSearchResultList,\n resetSearchResultList,\n resetSearchResultMeta,\n setSearchResultMeta\n} from \"../set\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Apply options\n */\ninterface ApplyOptions {\n query$: Observable /* Search query observable */\n fetch$: Observable /* Result fetch observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Apply search results\n *\n * This function will perform a lazy rendering of the search results, depending\n * on the vertical offset of the search result container. When the scroll offset\n * reaches the bottom of the element, more results are fetched and rendered.\n *\n * @param el - Search result element\n * @param options - Options\n *\n * @return Operator function\n */\nexport function applySearchResult(\n el: HTMLElement, { query$, fetch$ }: ApplyOptions\n): MonoTypeOperatorFunction {\n const list = getElementOrThrow(\".md-search-result__list\", el)\n const meta = getElementOrThrow(\".md-search-result__meta\", el)\n return pipe(\n\n /* Apply search result metadata */\n withLatestFrom(query$),\n map(([result, query]) => {\n if (query.value) {\n setSearchResultMeta(meta, result.length)\n } else {\n resetSearchResultMeta(meta)\n }\n return result\n }),\n\n /* Apply search result list */\n switchMap(result => fetch$\n .pipe(\n\n /* Defer repaint to next animation frame */\n observeOn(animationFrameScheduler),\n scan(index => {\n const container = el.parentElement!\n while (index < result.length) {\n addToSearchResultList(list, renderSearchResult(result[index++]))\n if (container.scrollHeight - container.offsetHeight > 16)\n break\n }\n return index\n }, 0),\n\n /* Re-map to search result */\n mapTo(result),\n\n /* Reset on complete or error */\n finalize(() => {\n resetSearchResultList(list)\n })\n )\n )\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { identity } from \"ramda\"\nimport { Observable, OperatorFunction, pipe } from \"rxjs\"\nimport {\n distinctUntilChanged,\n filter,\n map,\n pluck,\n switchMap\n} from \"rxjs/operators\"\n\nimport { WorkerHandler, watchElementOffset } from \"browser\"\nimport { SearchResult } from \"integrations/search\"\nimport {\n SearchMessage,\n isSearchResultMessage\n} from \"workers\"\n\nimport { SearchQuery } from \"../../query\"\nimport { applySearchResult } from \"../react\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n query$: Observable /* Search query observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount search result from source observable\n *\n * @param handler - Worker handler\n * @param options - Options\n *\n * @return Operator function\n */\nexport function mountSearchResult(\n { rx$ }: WorkerHandler, { query$ }: MountOptions\n): OperatorFunction {\n return pipe(\n switchMap(el => {\n const container = el.parentElement!\n\n /* Compute whether there are more search results to fetch */\n const fetch$ = watchElementOffset(container)\n .pipe(\n map(({ y }) => {\n return y >= container.scrollHeight - container.offsetHeight - 16\n }),\n distinctUntilChanged(),\n filter(identity)\n )\n\n /* Apply search results */\n return rx$\n .pipe(\n filter(isSearchResultMessage),\n pluck(\"data\"),\n applySearchResult(el, { query$, fetch$ })\n )\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./query\"\nexport * from \"./reset\"\nexport * from \"./result\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, OperatorFunction, combineLatest, pipe } from \"rxjs\"\nimport {\n distinctUntilChanged,\n filter,\n map,\n shareReplay,\n startWith,\n switchMap,\n withLatestFrom\n} from \"rxjs/operators\"\n\nimport {\n Viewport,\n getElement,\n watchViewportAt\n} from \"browser\"\n\nimport { useComponent } from \"../../_\"\nimport {\n applyHeaderType,\n watchHeader\n} from \"../react\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Header type\n */\nexport type HeaderType =\n | \"site\" /* Header shows site title */\n | \"page\" /* Header shows page title */\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Header\n */\nexport interface Header {\n type: HeaderType /* Header type */\n sticky: boolean /* Header stickyness */\n height: number /* Header visible height */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n viewport$: Observable /* Viewport observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount header from source observable\n *\n * @param options - Options\n *\n * @return Operator function\n */\nexport function mountHeader(\n { viewport$ }: MountOptions\n): OperatorFunction {\n return pipe(\n switchMap(el => {\n const header$ = watchHeader(el, { viewport$ })\n\n /* Compute whether the header should switch to page header */\n const type$ = useComponent(\"main\")\n .pipe(\n map(main => getElement(\"h1, h2, h3, h4, h5, h6\", main)!),\n filter(hx => typeof hx !== \"undefined\"),\n withLatestFrom(useComponent(\"header-title\")),\n switchMap(([hx, title]) => watchViewportAt(hx, { header$, viewport$ })\n .pipe(\n map(({ offset: { y } }) => {\n return y >= hx.offsetHeight ? \"page\" : \"site\"\n }),\n distinctUntilChanged(),\n applyHeaderType(title)\n )\n ),\n startWith(\"site\")\n )\n\n /* Combine into single observable */\n return combineLatest([header$, type$])\n .pipe(\n map(([header, type]): Header => ({ type, ...header })),\n shareReplay(1)\n )\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n MonoTypeOperatorFunction,\n Observable,\n animationFrameScheduler,\n of,\n pipe\n} from \"rxjs\"\nimport {\n distinctUntilKeyChanged,\n finalize,\n observeOn,\n switchMap,\n tap\n} from \"rxjs/operators\"\n\nimport { Viewport } from \"browser\"\n\nimport { Header, HeaderType } from \"../_\"\nimport {\n resetHeaderTitleActive,\n setHeaderTitleActive\n} from \"../set\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n viewport$: Observable /* Viewport observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch header\n *\n * The header is wrapped in an observable to pave the way for auto-hiding or\n * other dynamic behaviors that may be implemented later on.\n *\n * @param el - Header element\n * @param options - Options\n *\n * @return Header observable\n */\nexport function watchHeader(\n el: HTMLElement, { viewport$ }: WatchOptions\n): Observable> {\n return viewport$\n .pipe(\n distinctUntilKeyChanged(\"size\"),\n switchMap(() => {\n const styles = getComputedStyle(el)\n const sticky = [\n \"sticky\", /* Modern browsers */\n \"-webkit-sticky\" /* Old Safari */\n ].includes(styles.position)\n return of({\n sticky,\n height: sticky ? el.offsetHeight : 0\n })\n })\n )\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Apply header title type\n *\n * @param el - Header title element\n *\n * @return Operator function\n */\nexport function applyHeaderType(\n el: HTMLElement\n): MonoTypeOperatorFunction {\n return pipe(\n\n /* Defer repaint to next animation frame */\n observeOn(animationFrameScheduler),\n tap(type => {\n setHeaderTitleActive(el, type === \"page\")\n }),\n\n /* Reset on complete or error */\n finalize(() => {\n resetHeaderTitleActive(el)\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set header title active\n *\n * @param el - Header title element\n * @param value - Whether the title is shown\n */\nexport function setHeaderTitleActive(\n el: HTMLElement, value: boolean\n): void {\n el.setAttribute(\"data-md-state\", value ? \"active\" : \"\")\n}\n\n/**\n * Reset header title active\n *\n * @param el - Header title element\n */\nexport function resetHeaderTitleActive(\n el: HTMLElement\n): void {\n el.removeAttribute(\"data-md-state\")\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./react\"\nexport * from \"./set\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, OperatorFunction, pipe } from \"rxjs\"\nimport { distinctUntilChanged, map, switchMap } from \"rxjs/operators\"\n\nimport { Viewport, watchViewportAt } from \"browser\"\n\nimport { Header } from \"../../header\"\nimport { applyHero } from \"../react\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Hero\n */\nexport interface Hero {\n hidden: boolean /* Whether the hero is hidden */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n header$: Observable
    /* Header observable */\n viewport$: Observable /* Viewport observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount hero from source observable\n *\n * @param options - Options\n *\n * @return Operator function\n */\nexport function mountHero(\n { header$, viewport$ }: MountOptions\n): OperatorFunction {\n return pipe(\n switchMap(el => watchViewportAt(el, { header$, viewport$ })\n .pipe(\n map(({ offset: { y } }) => ({ hidden: y >= 20 })),\n distinctUntilChanged(),\n applyHero(el)\n )\n )\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n MonoTypeOperatorFunction,\n animationFrameScheduler,\n pipe\n} from \"rxjs\"\nimport { finalize, observeOn, tap } from \"rxjs/operators\"\n\nimport { Hero } from \"../_\"\nimport {\n resetHeroHidden,\n setHeroHidden\n} from \"../set\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Apply hero\n *\n * @param el - Hero element\n *\n * @return Operator function\n */\nexport function applyHero(\n el: HTMLElement\n): MonoTypeOperatorFunction {\n return pipe(\n\n /* Defer repaint to next animation frame */\n observeOn(animationFrameScheduler),\n tap(({ hidden }) => {\n setHeroHidden(el, hidden)\n }),\n\n /* Reset on complete or error */\n finalize(() => {\n resetHeroHidden(el)\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set hero hidden\n *\n * @param el - Hero element\n * @param value - Whether the element is hidden\n */\nexport function setHeroHidden(\n el: HTMLElement, value: boolean\n): void {\n el.setAttribute(\"data-md-state\", value ? \"hidden\" : \"\")\n}\n\n/**\n * Reset hero hidden\n *\n * @param el - Hero element\n */\nexport function resetHeroHidden(\n el: HTMLElement\n): void {\n el.removeAttribute(\"data-md-state\")\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./react\"\nexport * from \"./set\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, OperatorFunction, Subject, pipe } from \"rxjs\"\nimport { distinctUntilKeyChanged, switchMap, tap } from \"rxjs/operators\"\n\nimport { Viewport } from \"browser\"\n\nimport { useComponent } from \"../../_\"\nimport { Header } from \"../../header\"\nimport {\n applyHeaderShadow,\n watchMain\n} from \"../react\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Main area\n */\nexport interface Main {\n offset: number /* Main area top offset */\n height: number /* Main area visible height */\n active: boolean /* Scrolled past top offset */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n header$: Observable
    /* Header observable */\n viewport$: Observable /* Viewport observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount main area from source observable\n *\n * The header must be connected to the main area observable outside of the\n * operator function, as the header will persist in-between document switches\n * while the main area is replaced. However, the header observable must be\n * passed to this function, so we connect both via a long-living subject.\n *\n * @param options - Options\n *\n * @return Operator function\n */\nexport function mountMain(\n { header$, viewport$ }: MountOptions\n): OperatorFunction {\n const main$ = new Subject
    ()\n\n /* Connect to main area observable via long-living subject */\n useComponent(\"header\")\n .pipe(\n switchMap(header => main$\n .pipe(\n distinctUntilKeyChanged(\"active\"),\n applyHeaderShadow(header)\n )\n )\n )\n .subscribe()\n\n /* Return operator */\n return pipe(\n switchMap(el => watchMain(el, { header$, viewport$ })),\n tap(main => main$.next(main))\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n MonoTypeOperatorFunction,\n Observable,\n animationFrameScheduler,\n combineLatest,\n pipe\n} from \"rxjs\"\nimport {\n distinctUntilChanged,\n finalize,\n map,\n observeOn,\n pluck,\n tap\n} from \"rxjs/operators\"\n\nimport { Viewport } from \"browser\"\n\nimport { Header } from \"../../header\"\nimport { Main } from \"../_\"\nimport {\n resetHeaderShadow,\n setHeaderShadow\n} from \"../set\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n header$: Observable
    /* Header observable */\n viewport$: Observable /* Viewport observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch main area\n *\n * This function returns an observable that computes the visual parameters of\n * the main area which depends on the viewport vertical offset and height, as\n * well as the height of the header element, if the header is fixed.\n *\n * @param el - Main area element\n * @param options - Options\n *\n * @return Main area observable\n */\nexport function watchMain(\n el: HTMLElement, { header$, viewport$ }: WatchOptions\n): Observable
    {\n\n /* Compute necessary adjustment for header */\n const adjust$ = header$\n .pipe(\n pluck(\"height\")\n )\n\n /* Compute the main area's visible height */\n const height$ = combineLatest([adjust$, viewport$])\n .pipe(\n map(([adjust, { offset: { y }, size: { height } }]) => {\n const top = el.offsetTop\n const bottom = el.offsetHeight + top\n return height\n - Math.max(0, top - y, adjust)\n - Math.max(0, height + y - bottom)\n }),\n map(height => Math.max(0, height)),\n distinctUntilChanged()\n )\n\n /* Compute whether the viewport offset is past the main area's top */\n const active$ = combineLatest([adjust$, viewport$])\n .pipe(\n map(([adjust, { offset: { y } }]) => y >= el.offsetTop - adjust),\n distinctUntilChanged()\n )\n\n /* Combine into a single observable */\n return combineLatest([adjust$, height$, active$])\n .pipe(\n map(([adjust, height, active]) => ({\n offset: el.offsetTop - adjust,\n height,\n active\n }))\n )\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Apply header shadow\n *\n * @param el - Header element\n *\n * @return Operator function\n */\nexport function applyHeaderShadow(\n el: HTMLElement\n): MonoTypeOperatorFunction
    {\n return pipe(\n\n /* Defer repaint to next animation frame */\n observeOn(animationFrameScheduler),\n tap(({ active }) => {\n setHeaderShadow(el, active)\n }),\n\n /* Reset on complete or error */\n finalize(() => {\n resetHeaderShadow(el)\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set header shadow\n *\n * @param el - Header element\n * @param value - Whether the shadow is shown\n */\nexport function setHeaderShadow(\n el: HTMLElement, value: boolean\n): void {\n el.setAttribute(\"data-md-state\", value ? \"shadow\" : \"\")\n}\n\n/**\n * Reset header shadow\n *\n * @param el - Header element\n */\nexport function resetHeaderShadow(\n el: HTMLElement\n): void {\n el.removeAttribute(\"data-md-state\")\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./react\"\nexport * from \"./set\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, OperatorFunction, of, pipe } from \"rxjs\"\nimport { distinctUntilChanged, map, switchMap } from \"rxjs/operators\"\n\nimport { Viewport, watchViewportAt } from \"browser\"\n\nimport { Header } from \"../../header\"\nimport { applyTabs } from \"../react\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Tabs\n */\nexport interface Tabs {\n hidden: boolean /* Whether the tabs are hidden */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n header$: Observable
    /* Header observable */\n viewport$: Observable /* Viewport observable */\n screen$: Observable /* Media screen observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount tabs from source observable\n *\n * @param options - Options\n *\n * @return Operator function\n */\nexport function mountTabs(\n { header$, viewport$, screen$ }: MountOptions\n): OperatorFunction {\n return pipe(\n switchMap(el => screen$\n .pipe(\n switchMap(screen => {\n\n /* [screen +]: Mount tabs above screen breakpoint */\n if (screen) {\n return watchViewportAt(el, { header$, viewport$ })\n .pipe(\n map(({ offset: { y } }) => ({ hidden: y >= 10 })),\n distinctUntilChanged(),\n applyTabs(el)\n )\n\n /* [screen -]: Unmount tabs below screen breakpoint */\n } else {\n return of({ hidden: true })\n }\n })\n )\n )\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n MonoTypeOperatorFunction,\n animationFrameScheduler,\n pipe\n} from \"rxjs\"\nimport { finalize, observeOn, tap } from \"rxjs/operators\"\n\nimport { Tabs } from \"../_\"\nimport {\n resetTabsHidden,\n setTabsHidden\n} from \"../set\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Apply tabs\n *\n * @param el - Tabs element\n *\n * @return Operator function\n */\nexport function applyTabs(\n el: HTMLElement\n): MonoTypeOperatorFunction {\n return pipe(\n\n /* Defer repaint to next animation frame */\n observeOn(animationFrameScheduler),\n tap(({ hidden }) => {\n setTabsHidden(el, hidden)\n }),\n\n /* Reset on complete or error */\n finalize(() => {\n resetTabsHidden(el)\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set tabs hidden\n *\n * @param el - Tabs element\n * @param value - Whether the element is hidden\n */\nexport function setTabsHidden(\n el: HTMLElement, value: boolean\n): void {\n el.setAttribute(\"data-md-state\", value ? \"hidden\" : \"\")\n}\n\n/**\n * Reset tabs hidden\n *\n * @param el - Tabs element\n */\nexport function resetTabsHidden(\n el: HTMLElement\n): void {\n el.removeAttribute(\"data-md-state\")\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./react\"\nexport * from \"./set\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { NEVER, Observable, fromEvent, iif, merge } from \"rxjs\"\nimport { map, mapTo, shareReplay, switchMap } from \"rxjs/operators\"\n\nimport { getElements } from \"browser\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch options\n */\ninterface PatchOptions {\n document$: Observable /* Document observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Check whether the given device is an Apple device\n *\n * @return Test result\n */\nfunction isAppleDevice(): boolean {\n return /(iPad|iPhone|iPod)/.test(navigator.userAgent)\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch all elements with `data-md-scrollfix` attributes\n *\n * This is a year-old patch which ensures that overflow scrolling works at the\n * top and bottom of containers on iOS by ensuring a `1px` scroll offset upon\n * the start of a touch event.\n *\n * @see https://bit.ly/2SCtAOO - Original source\n *\n * @param options - Options\n */\nexport function patchScrollfix(\n { document$ }: PatchOptions\n): void {\n const els$ = document$\n .pipe(\n map(() => getElements(\"[data-md-scrollfix]\")),\n shareReplay(1)\n )\n\n /* Remove marker attribute, so we'll only add the fix once */\n els$.subscribe(els => {\n for (const el of els)\n el.removeAttribute(\"data-md-scrollfix\")\n })\n\n /* Patch overflow scrolling on touch start */\n iif(isAppleDevice, els$, NEVER)\n .pipe(\n switchMap(els => merge(...els.map(el => (\n fromEvent(el, \"touchstart\")\n .pipe(\n mapTo(el)\n )\n ))))\n )\n .subscribe(el => {\n const top = el.scrollTop\n\n /* We're at the top of the container */\n if (top === 0) {\n el.scrollTop = 1\n\n /* We're at the bottom of the container */\n } else if (top + el.offsetHeight === el.scrollHeight) {\n el.scrollTop = top - 1\n }\n })\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { NEVER, Observable } from \"rxjs\"\nimport { catchError, map, switchMap } from \"rxjs/operators\"\n\nimport { getElementOrThrow, getElements } from \"browser\"\nimport { renderSource } from \"templates\"\nimport { cache, hash } from \"utilities\"\n\nimport { fetchSourceFactsFromGitHub } from \"./github\"\nimport { fetchSourceFactsFromGitLab } from \"./gitlab\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Source facts\n */\nexport type SourceFacts = string[]\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch options\n */\ninterface PatchOptions {\n document$: Observable /* Document observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Fetch source facts\n *\n * @param url - Source repository URL\n *\n * @return Source facts observable\n */\nfunction fetchSourceFacts(\n url: string\n): Observable {\n const [type] = url.match(/(git(?:hub|lab))/i) || []\n switch (type.toLowerCase()) {\n\n /* GitHub repository */\n case \"github\":\n const [, user, repo] = url.match(/^.+github\\.com\\/([^\\/]+)\\/?([^\\/]+)/i)\n return fetchSourceFactsFromGitHub(user, repo)\n\n /* GitLab repository */\n case \"gitlab\":\n const [, base, project] = url.match(/^.+?([^\\/]*gitlab[^\\/]+)\\/(.+)/i)\n return fetchSourceFactsFromGitLab(base, project)\n\n /* Everything else */\n default:\n return NEVER\n }\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch elements containing repository information\n *\n * This function will retrieve the URL from the repository link and try to\n * query data from integrated source code platforms like GitHub or GitLab.\n *\n * @param options - Options\n */\nexport function patchSource(\n { document$ }: PatchOptions\n): void {\n document$\n .pipe(\n map(() => getElementOrThrow(\".md-source[href]\")),\n switchMap(({ href }) => (\n cache(`${hash(href)}`, () => fetchSourceFacts(href))\n )),\n catchError(() => NEVER)\n )\n .subscribe(facts => {\n for (const el of getElements(\".md-source__repository\")) {\n if (!el.hasAttribute(\"data-md-state\")) {\n el.setAttribute(\"data-md-state\", \"done\")\n el.appendChild(renderSource(facts))\n }\n }\n })\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Repo, User } from \"github-types\"\nimport { Observable, of } from \"rxjs\"\nimport { ajax } from \"rxjs/ajax\"\nimport { filter, pluck, switchMap } from \"rxjs/operators\"\n\nimport { round } from \"utilities\"\n\nimport { SourceFacts } from \"..\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Fetch GitHub source facts\n *\n * @param user - GitHub user\n * @param repo - GitHub repository\n *\n * @return Source facts observable\n */\nexport function fetchSourceFactsFromGitHub(\n user: string, repo?: string\n): Observable {\n return ajax({\n url: typeof repo !== \"undefined\"\n ? `https://api.github.com/repos/${user}/${repo}`\n : `https://api.github.com/users/${user}`,\n responseType: \"json\"\n })\n .pipe(\n filter(({ status }) => status === 200),\n pluck(\"response\"),\n switchMap(data => {\n\n /* GitHub repository */\n if (typeof repo !== \"undefined\") {\n const { stargazers_count, forks_count }: Repo = data\n return of([\n `${round(stargazers_count || 0)} Stars`,\n `${round(forks_count || 0)} Forks`\n ])\n\n /* GitHub user/organization */\n } else {\n const { public_repos }: User = data\n return of([\n `${round(public_repos || 0)} Repositories`\n ])\n }\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { ProjectSchema } from \"gitlab\"\nimport { Observable } from \"rxjs\"\nimport { ajax } from \"rxjs/ajax\"\nimport { filter, map, pluck } from \"rxjs/operators\"\n\nimport { round } from \"utilities\"\n\nimport { SourceFacts } from \"..\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Fetch GitLab source facts\n *\n * @param base - GitLab base\n * @param project - GitLab project\n *\n * @return Source facts observable\n */\nexport function fetchSourceFactsFromGitLab(\n base: string, project: string\n): Observable {\n return ajax({\n url: `https://${base}/api/v4/projects/${encodeURIComponent(project)}`,\n responseType: \"json\"\n })\n .pipe(\n filter(({ status }) => status === 200),\n pluck(\"response\"),\n map(({ star_count, forks_count }: ProjectSchema) => ([\n `${round(star_count)} Stars`,\n `${round(forks_count)} Forks`\n ]))\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n// TODO: remove this after we finished refactoring\n// tslint:disable\n\nimport \"../stylesheets/main.scss\"\nimport \"../stylesheets/palette.scss\"\n\nimport { values } from \"ramda\"\nimport {\n merge,\n combineLatest,\n animationFrameScheduler,\n fromEvent,\n of,\n NEVER,\n from\n} from \"rxjs\"\nimport {\n delay,\n switchMap,\n tap,\n filter,\n withLatestFrom,\n observeOn,\n take,\n shareReplay,\n share\n} from \"rxjs/operators\"\n\nimport {\n watchToggle,\n setToggle,\n getElements,\n watchMedia,\n watchDocument,\n watchLocation,\n watchLocationHash,\n watchViewport,\n isLocationInternal,\n isLocationAnchor\n} from \"./browser\"\nimport { setupSearchWorker } from \"./workers\"\n\nimport {\n mountHeader,\n mountHero,\n mountMain,\n mountNavigation,\n mountSearch,\n mountTableOfContents,\n mountTabs,\n useComponent,\n setupComponents,\n mountSearchQuery,\n mountSearchReset,\n mountSearchResult\n} from \"components\"\nimport { setupClipboard } from \"./integrations/clipboard\"\nimport { setupDialog } from \"integrations/dialog\"\nimport { setupKeyboard } from \"./integrations/keyboard\"\nimport { setupInstantLoading } from \"integrations/instant\"\nimport {\n patchTables,\n patchDetails,\n patchScrollfix,\n patchSource,\n patchScripts\n} from \"patches\"\nimport { isConfig } from \"utilities\"\n\n/* ------------------------------------------------------------------------- */\n\ndocument.documentElement.classList.remove(\"no-js\")\ndocument.documentElement.classList.add(\"js\")\n\n/* Test for iOS */\nif (navigator.userAgent.match(/(iPad|iPhone|iPod)/g))\n document.documentElement.classList.add(\"ios\")\n\n/**\n * Set scroll lock\n *\n * @param el - Scrollable element\n * @param value - Vertical offset\n */\nexport function setScrollLock(\n el: HTMLElement, value: number\n): void {\n el.setAttribute(\"data-md-state\", \"lock\")\n el.style.top = `-${value}px`\n}\n\n/**\n * Reset scroll lock\n *\n * @param el - Scrollable element\n */\nexport function resetScrollLock(\n el: HTMLElement\n): void {\n const value = -1 * parseInt(el.style.top, 10)\n el.removeAttribute(\"data-md-state\")\n el.style.top = \"\"\n if (value)\n window.scrollTo(0, value)\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Initialize Material for MkDocs\n *\n * @param config - Configuration\n */\nexport function initialize(config: unknown) {\n if (!isConfig(config))\n throw new SyntaxError(`Invalid configuration: ${JSON.stringify(config)}`)\n\n /* Setup user interface observables */\n const location$ = watchLocation()\n const hash$ = watchLocationHash()\n const viewport$ = watchViewport()\n const tablet$ = watchMedia(\"(min-width: 960px)\")\n const screen$ = watchMedia(\"(min-width: 1220px)\")\n\n /* Setup document observable */\n const document$ = config.features.includes(\"instant\")\n ? watchDocument({ location$ })\n : watchDocument()\n\n /* Setup component bindings */\n setupComponents([\n \"container\", /* Container */\n \"header\", /* Header */\n \"header-title\", /* Header title */\n \"hero\", /* Hero */\n \"main\", /* Main area */\n \"navigation\", /* Navigation */\n \"search\", /* Search */\n \"search-query\", /* Search input */\n \"search-reset\", /* Search reset */\n \"search-result\", /* Search results */\n \"skip\", /* Skip link */\n \"tabs\", /* Tabs */\n \"toc\" /* Table of contents */\n ], { document$ })\n\n /* ----------------------------------------------------------------------- */\n\n // External index\n const index = config.search && config.search.index\n ? config.search.index\n : undefined\n\n // TODO: pass URL config as first parameter, options as second\n const worker = setupSearchWorker(config.url.worker.search, {\n base: config.url.base, index, location$\n })\n\n /* ----------------------------------------------------------------------- */\n\n /* Create header observable */\n const header$ = useComponent(\"header\")\n .pipe(\n mountHeader({ viewport$ }),\n shareReplay(1)\n )\n\n const main$ = useComponent(\"main\")\n .pipe(\n mountMain({ header$, viewport$ }),\n shareReplay(1)\n )\n\n /* ----------------------------------------------------------------------- */\n\n /* Mount search query */\n const query$ = useComponent(\"search-query\")\n .pipe(\n mountSearchQuery(worker),\n shareReplay(1)\n )\n\n /* Mount search reset */\n const reset$ = useComponent(\"search-reset\")\n .pipe(\n mountSearchReset(),\n shareReplay(1)\n )\n\n /* Mount search result */\n const result$ = useComponent(\"search-result\")\n .pipe(\n mountSearchResult(worker, { query$ }),\n shareReplay(1)\n )\n\n /* ----------------------------------------------------------------------- */\n\n const search$ = useComponent(\"search\")\n .pipe(\n mountSearch({ query$, reset$, result$ }),\n shareReplay(1)\n )\n\n /* ----------------------------------------------------------------------- */\n\n const navigation$ = useComponent(\"navigation\")\n .pipe(\n mountNavigation({ header$, main$, viewport$, screen$ }),\n shareReplay(1) // shareReplay because there might be late subscribers\n )\n\n const toc$ = useComponent(\"toc\")\n .pipe(\n mountTableOfContents({ header$, main$, viewport$, tablet$ }),\n shareReplay(1)\n )\n\n const tabs$ = useComponent(\"tabs\")\n .pipe(\n mountTabs({ header$, viewport$, screen$ }),\n shareReplay(1)\n )\n\n const hero$ = useComponent(\"hero\")\n .pipe(\n mountHero({ header$, viewport$ }),\n shareReplay(1)\n )\n\n /* ----------------------------------------------------------------------- */\n\n const keyboard$ = setupKeyboard()\n\n patchDetails({ document$, hash$ })\n patchScripts({ document$ })\n patchSource({ document$ })\n patchTables({ document$ })\n\n /* Force 1px scroll offset to trigger overflow scrolling */\n patchScrollfix({ document$ })\n\n /* Setup clipboard and dialog */\n const dialog$ = setupDialog()\n const clipboard$ = setupClipboard({ document$, dialog$ })\n\n /* ----------------------------------------------------------------------- */\n\n // // put into search...\n // hash$\n // .pipe(\n // switchMap(hash => useToggle(\"search\")\n // .pipe(\n // filter(x => x.checked), // only active\n // tap(toggle => setToggle(toggle, false)),\n // delay(125), // ensure that it runs after the body scroll reset...\n // mapTo(hash)\n // )\n // )\n // )\n // .subscribe(hash => {\n // getElement(`[id=\"${hash}\"]`)!.scrollIntoView()\n // })\n\n // Scroll lock // document -> document$ => { body } !?\n // put into search...\n combineLatest([\n watchToggle(\"search\"),\n tablet$,\n ])\n .pipe(\n withLatestFrom(viewport$),\n switchMap(([[toggle, tablet], { offset: { y }}]) => {\n const active = toggle && !tablet\n return document$\n .pipe(\n delay(active ? 400 : 100), // TOOD: directly combine this with the hash!\n observeOn(animationFrameScheduler),\n tap(({ body }) => active\n ? setScrollLock(body, y)\n : resetScrollLock(body)\n )\n )\n })\n )\n .subscribe()\n\n /* ----------------------------------------------------------------------- */\n\n /* Intercept internal link clicks */\n const link$ = fromEvent(document.body, \"click\")\n .pipe(\n filter(ev => !(ev.metaKey || ev.ctrlKey)),\n switchMap(ev => {\n if (ev.target instanceof HTMLElement) {\n const el = ev.target.closest(\"a\") // TODO: abstract as link click?\n if (el && isLocationInternal(el)) {\n if (!isLocationAnchor(el))\n ev.preventDefault()\n return of(el)\n }\n }\n return NEVER\n }),\n share()\n )\n\n /* Always close drawer on click */\n link$.subscribe(() => {\n setToggle(\"drawer\", false)\n })\n\n // somehow call this setupNavigation ?\n\n // instant loading\n if (config.features.includes(\"instant\")) {\n\n /* Disable automatic scroll restoration, as it doesn't work nicely */\n if (\"scrollRestoration\" in history)\n history.scrollRestoration = \"manual\"\n\n /* Resolve relative links for stability */\n for (const selector of [\n `link[rel=\"shortcut icon\"]`,\n `link[rel=\"stylesheet\"]`\n ])\n for (const el of getElements(selector))\n el.href = el.href\n\n setupInstantLoading({\n document$, link$, location$, viewport$\n })\n\n }\n\n /* ----------------------------------------------------------------------- */\n\n // if we use a single tab outside of search, unhide all permalinks.\n // TODO: experimental. necessary!?\n keyboard$\n .pipe(\n filter(key => key.mode === \"global\" && [\"Tab\"].includes(key.type)),\n take(1)\n )\n .subscribe(() => {\n for (const link of getElements(\".headerlink\"))\n link.style.visibility = \"visible\"\n })\n\n /* ----------------------------------------------------------------------- */\n\n const state = {\n\n /* Browser observables */\n document$,\n viewport$,\n\n /* Component observables */\n header$,\n hero$,\n main$,\n navigation$,\n search$,\n tabs$,\n toc$,\n\n /* Integation observables */\n clipboard$,\n keyboard$,\n dialog$\n }\n\n /* Subscribe to all observables */\n merge(...values(state))\n .subscribe()\n return state\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable } from \"rxjs\"\nimport {\n filter,\n map,\n share,\n withLatestFrom\n} from \"rxjs/operators\"\n\nimport {\n Key,\n getActiveElement,\n getElement,\n getElements,\n getToggle,\n isSusceptibleToKeyboard,\n setElementFocus,\n setElementSelection,\n setToggle,\n watchKeyboard\n} from \"browser\"\nimport { useComponent } from \"components\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Keyboard mode\n */\nexport type KeyboardMode =\n | \"global\" /* Global */\n | \"search\" /* Search is open */\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Keyboard\n */\nexport interface Keyboard extends Key {\n mode: KeyboardMode /* Keyboard mode */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup keyboard\n *\n * This function will setup the keyboard handlers and ensure that keys are\n * correctly propagated. Currently there are two modes:\n *\n * - `global`: This mode is active when the search is closed. It is intended\n * to assign hotkeys to specific functions of the site. Currently the search,\n * previous and next page can be triggered.\n *\n * - `search`: This mode is active when the search is open. It maps certain\n * navigational keys to offer search results that can be entirely navigated\n * through keyboard input.\n *\n * The keyboard observable is returned and can be used to monitor the keyboard\n * in order toassign further hotkeys to custom functions.\n *\n * @return Keyboard observable\n */\nexport function setupKeyboard(): Observable {\n const keyboard$ = watchKeyboard()\n .pipe(\n map(key => ({\n mode: getToggle(\"search\") ? \"search\" : \"global\",\n ...key\n })),\n share()\n )\n\n /* Setup search keyboard handlers */\n keyboard$\n .pipe(\n filter(({ mode }) => mode === \"search\"),\n withLatestFrom(\n useComponent(\"search-query\"),\n useComponent(\"search-result\")\n )\n )\n .subscribe(([key, query, result]) => {\n const active = getActiveElement()\n switch (key.type) {\n\n /* Enter: prevent form submission */\n case \"Enter\":\n if (active === query)\n key.claim()\n break\n\n /* Escape or Tab: close search */\n case \"Escape\":\n case \"Tab\":\n setToggle(\"search\", false)\n setElementFocus(query, false)\n break\n\n /* Vertical arrows: select previous or next search result */\n case \"ArrowUp\":\n case \"ArrowDown\":\n if (typeof active === \"undefined\") {\n setElementFocus(query)\n } else {\n const els = [query, ...getElements(\"[href]\", result)]\n const i = Math.max(0, (\n Math.max(0, els.indexOf(active)) + els.length + (\n key.type === \"ArrowUp\" ? -1 : +1\n )\n ) % els.length)\n setElementFocus(els[i])\n }\n\n /* Prevent scrolling of page */\n key.claim()\n break\n\n /* All other keys: hand to search query */\n default:\n if (query !== getActiveElement())\n setElementFocus(query)\n }\n })\n\n /* Setup global keyboard handlers */\n keyboard$\n .pipe(\n filter(({ mode }) => {\n if (mode === \"global\") {\n const active = getActiveElement()\n if (typeof active !== \"undefined\")\n return !isSusceptibleToKeyboard(active)\n }\n return false\n }),\n withLatestFrom(useComponent(\"search-query\"))\n )\n .subscribe(([key, query]) => {\n switch (key.type) {\n\n /* Open search and select query */\n case \"f\":\n case \"s\":\n setElementFocus(query)\n setElementSelection(query)\n key.claim()\n break\n\n /* Go to previous page */\n case \"p\":\n case \",\":\n const prev = getElement(\"[href][rel=prev]\")\n if (typeof prev !== \"undefined\")\n prev.click()\n break\n\n /* Go to next page */\n case \"n\":\n case \".\":\n const next = getElement(\"[href][rel=next]\")\n if (typeof next !== \"undefined\")\n next.click()\n break\n }\n })\n\n /* Return keyboard */\n return keyboard$\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { identity } from \"ramda\"\nimport { Observable, fromEvent, merge } from \"rxjs\"\nimport {\n filter,\n map,\n switchMapTo,\n tap\n} from \"rxjs/operators\"\n\nimport {\n getElement,\n getElements,\n watchMedia\n} from \"browser\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch options\n */\ninterface PatchOptions {\n document$: Observable /* Document observable */\n hash$: Observable /* Location hash observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch all `details` elements\n *\n * This function will ensure that all `details` tags are opened prior to\n * printing, so the whole content of the page is included, and on anchor jumps.\n *\n * @param options - Options\n */\nexport function patchDetails(\n { document$, hash$ }: PatchOptions\n): void {\n const els$ = document$\n .pipe(\n map(() => getElements(\"details\"))\n )\n\n /* Open all details before printing */\n merge(\n watchMedia(\"print\").pipe(filter(identity)), /* Webkit */\n fromEvent(window, \"beforeprint\") /* IE, FF */\n )\n .pipe(\n switchMapTo(els$)\n )\n .subscribe(els => {\n for (const el of els)\n el.setAttribute(\"open\", \"\")\n })\n\n /* Open parent details and fix anchor jump */\n hash$\n .pipe(\n map(id => getElement(`[id=\"${id}\"]`)!),\n filter(el => typeof el !== \"undefined\"),\n tap(el => {\n const details = el.closest(\"details\")\n if (details && !details.open)\n details.setAttribute(\"open\", \"\")\n })\n )\n .subscribe(el => el.scrollIntoView())\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable } from \"rxjs\"\nimport { map, skip, withLatestFrom } from \"rxjs/operators\"\n\nimport { getElements } from \"browser\"\nimport { useComponent } from \"components\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch options\n */\ninterface PatchOptions {\n document$: Observable /* Document observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch all `script` elements\n *\n * This function must be run after a document switch, which means the first\n * emission must be ignored.\n *\n * @param options - Options\n */\nexport function patchScripts(\n { document$ }: PatchOptions\n): void {\n const els$ = document$\n .pipe(\n skip(1),\n withLatestFrom(useComponent(\"container\")),\n map(([, el]) => getElements(\"script\", el))\n )\n\n /* Evaluate all scripts via replacement */\n els$.subscribe(els => {\n for (const el of els) {\n if (el.src || /(^|\\/javascript)$/i.test(el.type)) {\n const script = document.createElement(\"script\")\n const key = el.src ? \"src\" : \"innerText\"\n script[key] = el[key]\n el.replaceWith(script)\n }\n }\n })\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable } from \"rxjs\"\nimport { map } from \"rxjs/operators\"\n\nimport { getElements } from \"browser\"\nimport { renderTable } from \"templates\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n document$: Observable /* Document observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch all `table` elements\n *\n * This function will re-render all tables by wrapping them to improve overflow\n * scrolling on smaller screen sizes.\n *\n * @param options - Options\n */\nexport function patchTables(\n { document$ }: MountOptions\n): void {\n const sentinel = document.createElement(\"table\")\n document$\n .pipe(\n map(() => getElements(\"table:not([class])\"))\n )\n .subscribe(els => {\n for (const el of els) {\n el.replaceWith(sentinel)\n sentinel.replaceWith(renderTable(el))\n }\n })\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Subject, animationFrameScheduler, of } from \"rxjs\"\nimport {\n delay,\n map,\n observeOn,\n switchMap,\n tap\n} from \"rxjs/operators\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup options\n */\ninterface SetupOptions {\n duration?: number /* Display duration (default: 2s) */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup dialog\n *\n * @param options - Options\n *\n * @return Dialog observable\n */\nexport function setupDialog(\n { duration }: SetupOptions = {}\n): Subject {\n const dialog$ = new Subject()\n\n /* Create dialog */\n const dialog = document.createElement(\"div\") // TODO: improve scoping\n dialog.classList.add(\"md-dialog\", \"md-typeset\")\n\n /* Display dialog */\n dialog$\n .pipe(\n switchMap(text => of(document.body) // useComponent(\"container\")\n .pipe(\n map(container => container.appendChild(dialog)),\n observeOn(animationFrameScheduler),\n delay(1), // Strangley it doesnt work when we push things to the new animation frame...\n tap(el => {\n el.innerHTML = text\n el.setAttribute(\"data-md-state\", \"open\")\n }),\n delay(duration || 2000),\n tap(el => el.removeAttribute(\"data-md-state\")),\n delay(400),\n tap(el => {\n el.innerHTML = \"\"\n el.remove()\n })\n )\n )\n )\n .subscribe()\n\n /* Return dialog subject */\n return dialog$\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport * as ClipboardJS from \"clipboard\"\nimport { NEVER, Observable, Subject, fromEventPattern } from \"rxjs\"\nimport { mapTo, share, tap } from \"rxjs/operators\"\n\nimport { getElements } from \"browser\"\nimport { renderClipboard } from \"templates\"\nimport { translate } from \"utilities\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup options\n */\ninterface SetupOptions {\n document$: Observable /* Document observable */\n dialog$: Subject /* Dialog subject */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup clipboard\n *\n * This function implements the Clipboard.js integration and injects a button\n * into all code blocks when the document changes.\n *\n * @param options - Options\n *\n * @return Clipboard observable\n */\nexport function setupClipboard(\n { document$, dialog$ }: SetupOptions\n): Observable {\n if (!ClipboardJS.isSupported())\n return NEVER\n\n /* Inject 'copy-to-clipboard' buttons */\n document$.subscribe(() => {\n const blocks = getElements(\"pre > code\")\n blocks.forEach((block, index) => {\n const parent = block.parentElement!\n parent.id = `__code_${index}`\n parent.insertBefore(renderClipboard(parent.id), block)\n })\n })\n\n /* Initialize and setup clipboard */\n const clipboard$ = fromEventPattern(next => {\n new ClipboardJS(\".md-clipboard\").on(\"success\", next)\n })\n .pipe(\n share()\n )\n\n /* Display notification for clipboard event */\n clipboard$\n .pipe(\n tap(ev => ev.clearSelection()),\n mapTo(translate(\"clipboard.copied\"))\n )\n .subscribe(dialog$)\n\n /* Return clipboard */\n return clipboard$\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, Subject, fromEvent, merge } from \"rxjs\"\nimport {\n bufferCount,\n debounceTime,\n distinctUntilChanged,\n distinctUntilKeyChanged,\n filter,\n map,\n pluck,\n sample,\n share,\n withLatestFrom\n} from \"rxjs/operators\"\n\nimport {\n Viewport,\n ViewportOffset,\n getElement,\n isLocationAnchor,\n setLocationHash,\n setViewportOffset\n} from \"browser\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * History state\n */\ninterface State {\n url: URL /* State URL */\n offset?: ViewportOffset /* State viewport offset */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Setup options\n */\ninterface SetupOptions {\n document$: Observable /* Document observable */\n viewport$: Observable /* Viewport observable */\n link$: Observable /* Internal link observable */\n location$: Subject /* Location subject */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup instant loading\n *\n * @param options - Options\n *\n * @return TODO ?\n */\nexport function setupInstantLoading(\n { document$, viewport$, link$, location$ }: SetupOptions\n) { // TODO: add return type\n const state$ = link$\n .pipe(\n map(el => ({ url: new URL(el.href) })),\n share()\n )\n\n /* Intercept internal links to dispatch */\n const push$ = state$\n .pipe(\n distinctUntilChanged((prev, next) => prev.url.href === next.url.href),\n filter(({ url }) => !isLocationAnchor(url)),\n share()\n )\n\n /* Intercept popstate events (history back and forward) */\n const pop$ = fromEvent(window, \"popstate\")\n .pipe(\n filter(ev => ev.state !== null),\n map(ev => ({\n url: new URL(location.href),\n offset: ev.state\n })),\n share()\n )\n\n /* Emit location change */\n merge(push$, pop$)\n .pipe(\n pluck(\"url\")\n )\n .subscribe(location$)\n\n /* History: dispatch internal link */\n push$.subscribe(({ url }) => {\n history.pushState({}, \"\", url.toString())\n })\n\n /* History: debounce update of viewport offset */\n viewport$\n .pipe(\n debounceTime(250),\n distinctUntilKeyChanged(\"offset\")\n )\n .subscribe(({ offset }) => {\n history.replaceState(offset, \"\")\n })\n\n /* Apply viewport offset from history */\n merge(state$, pop$)\n .pipe(\n bufferCount(2, 1),\n filter(([prev, next]) => {\n return prev.url.pathname === next.url.pathname\n && !isLocationAnchor(next.url)\n }),\n map(([, state]) => state)\n )\n .subscribe(({ offset }) => {\n setViewportOffset(offset || { y: 0 })\n })\n\n /* Intercept actual instant loading */\n const instant$ = merge(push$, pop$)\n .pipe(\n sample(document$)\n )\n\n // TODO: from here on, everything is beta.... ###############################\n\n instant$.subscribe(({ url, offset }) => {\n if (url.hash && !offset) {\n console.log(\"set hash!\")\n setLocationHash(url.hash) // must delay, if search is open!\n } else {\n setViewportOffset(offset || { y: 0 })\n }\n })\n\n instant$\n .pipe(\n withLatestFrom(document$)\n )\n .subscribe(([, { title, head }]) => {\n document.dispatchEvent(new CustomEvent(\"DOMContentSwitch\"))\n document.title = title\n\n /* Replace meta tags */\n for (const selector of [\n `link[rel=\"canonical\"]`,\n `meta[name=\"author\"]`,\n `meta[name=\"description\"]`\n ]) {\n const next = getElement(selector, head)\n const prev = getElement(selector, document.head)\n if (\n typeof next !== \"undefined\" &&\n typeof prev !== \"undefined\"\n ) {\n prev.replaceWith(next)\n }\n }\n })\n}\n"],"sourceRoot":""} \ No newline at end of file diff --git a/material/assets/javascripts/bundle.js b/material/assets/javascripts/bundle.js new file mode 100644 index 000000000..3dfbbd3b0 --- /dev/null +++ b/material/assets/javascripts/bundle.js @@ -0,0 +1,7560 @@ +(function(e, a) { for(var i in a) e[i] = a[i]; }(window, /******/ (function(modules) { // webpackBootstrap +/******/ // install a JSONP callback for chunk loading +/******/ function webpackJsonpCallback(data) { +/******/ var chunkIds = data[0]; +/******/ var moreModules = data[1]; +/******/ var executeModules = data[2]; +/******/ +/******/ // add "moreModules" to the modules object, +/******/ // then flag all "chunkIds" as loaded and fire callback +/******/ var moduleId, chunkId, i = 0, resolves = []; +/******/ for(;i < chunkIds.length; i++) { +/******/ chunkId = chunkIds[i]; +/******/ if(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) { +/******/ resolves.push(installedChunks[chunkId][0]); +/******/ } +/******/ installedChunks[chunkId] = 0; +/******/ } +/******/ for(moduleId in moreModules) { +/******/ if(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) { +/******/ modules[moduleId] = moreModules[moduleId]; +/******/ } +/******/ } +/******/ if(parentJsonpFunction) parentJsonpFunction(data); +/******/ +/******/ while(resolves.length) { +/******/ resolves.shift()(); +/******/ } +/******/ +/******/ // add entry modules from loaded chunk to deferred list +/******/ deferredModules.push.apply(deferredModules, executeModules || []); +/******/ +/******/ // run deferred modules when all chunks ready +/******/ return checkDeferredModules(); +/******/ }; +/******/ function checkDeferredModules() { +/******/ var result; +/******/ for(var i = 0; i < deferredModules.length; i++) { +/******/ var deferredModule = deferredModules[i]; +/******/ var fulfilled = true; +/******/ for(var j = 1; j < deferredModule.length; j++) { +/******/ var depId = deferredModule[j]; +/******/ if(installedChunks[depId] !== 0) fulfilled = false; +/******/ } +/******/ if(fulfilled) { +/******/ deferredModules.splice(i--, 1); +/******/ result = __webpack_require__(__webpack_require__.s = deferredModule[0]); +/******/ } +/******/ } +/******/ +/******/ return result; +/******/ } +/******/ +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // object to store loaded and loading chunks +/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched +/******/ // Promise = chunk loading, 0 = chunk loaded +/******/ var installedChunks = { +/******/ "assets/javascripts/bundle": 0 +/******/ }; +/******/ +/******/ var deferredModules = []; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) { +/******/ return installedModules[moduleId].exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ i: moduleId, +/******/ l: false, +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Flag the module as loaded +/******/ module.l = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; +/******/ +/******/ // define getter function for harmony exports +/******/ __webpack_require__.d = function(exports, name, getter) { +/******/ if(!__webpack_require__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); +/******/ } +/******/ }; +/******/ +/******/ // define __esModule on exports +/******/ __webpack_require__.r = function(exports) { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ +/******/ // create a fake namespace object +/******/ // mode & 1: value is a module id, require it +/******/ // mode & 2: merge all properties of value into the ns +/******/ // mode & 4: return value when already ns object +/******/ // mode & 8|1: behave like require +/******/ __webpack_require__.t = function(value, mode) { +/******/ if(mode & 1) value = __webpack_require__(value); +/******/ if(mode & 8) return value; +/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; +/******/ var ns = Object.create(null); +/******/ __webpack_require__.r(ns); +/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); +/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); +/******/ return ns; +/******/ }; +/******/ +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function getDefault() { return module['default']; } : +/******/ function getModuleExports() { return module; }; +/******/ __webpack_require__.d(getter, 'a', getter); +/******/ return getter; +/******/ }; +/******/ +/******/ // Object.prototype.hasOwnProperty.call +/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; +/******/ +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; +/******/ +/******/ var jsonpArray = window["webpackJsonp"] = window["webpackJsonp"] || []; +/******/ var oldJsonpFunction = jsonpArray.push.bind(jsonpArray); +/******/ jsonpArray.push = webpackJsonpCallback; +/******/ jsonpArray = jsonpArray.slice(); +/******/ for(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]); +/******/ var parentJsonpFunction = oldJsonpFunction; +/******/ +/******/ +/******/ // add entry module to deferred list +/******/ deferredModules.push(["./src/assets/javascripts/index.ts","assets/javascripts/vendor"]); +/******/ // run deferred modules when ready +/******/ return checkDeferredModules(); +/******/ }) +/************************************************************************/ +/******/ ({ + +/***/ "./src/assets/javascripts/browser/document/_/index.ts": +/*!************************************************************!*\ + !*** ./src/assets/javascripts/browser/document/_/index.ts ***! + \************************************************************/ +/*! exports provided: watchDocument */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "watchDocument", function() { return watchDocument; }); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); +/* harmony import */ var _switch__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../switch */ "./src/assets/javascripts/browser/document/switch/index.ts"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Watch document + * + * If the location observable is passed, instant loading will be enabled which + * means that new values will be emitted every time the location changes. + * + * @return Document observable + */ +function watchDocument(_a) { + var location$ = (_a === void 0 ? {} : _a).location$; + return Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["merge"])(Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["fromEvent"])(document, "DOMContentLoaded") + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["mapTo"])(document)), typeof location$ !== "undefined" + ? Object(_switch__WEBPACK_IMPORTED_MODULE_2__["watchDocumentSwitch"])({ location$: location$ }) + : rxjs__WEBPACK_IMPORTED_MODULE_0__["NEVER"]) + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["shareReplay"])(1)); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/browser/document/index.ts": +/*!**********************************************************!*\ + !*** ./src/assets/javascripts/browser/document/index.ts ***! + \**********************************************************/ +/*! exports provided: watchDocument, watchDocumentSwitch */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_ */ "./src/assets/javascripts/browser/document/_/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchDocument", function() { return ___WEBPACK_IMPORTED_MODULE_0__["watchDocument"]; }); + +/* harmony import */ var _switch__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./switch */ "./src/assets/javascripts/browser/document/switch/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchDocumentSwitch", function() { return _switch__WEBPACK_IMPORTED_MODULE_1__["watchDocumentSwitch"]; }); + +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + +/***/ }), + +/***/ "./src/assets/javascripts/browser/document/switch/index.ts": +/*!*****************************************************************!*\ + !*** ./src/assets/javascripts/browser/document/switch/index.ts ***! + \*****************************************************************/ +/*! exports provided: watchDocumentSwitch */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "watchDocumentSwitch", function() { return watchDocumentSwitch; }); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); +/* harmony import */ var rxjs_ajax__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs/ajax */ "./node_modules/rxjs/_esm5/ajax/index.js"); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); +/* harmony import */ var _location__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../location */ "./src/assets/javascripts/browser/location/index.ts"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Watch document switch + * + * This function returns an observables that fetches a document if the provided + * location observable emits a new value (i.e. URL). If the emitted URL points + * to the same page, the request is effectively ignored (i.e. when only the + * fragment identifier changes). + * + * In case the request fails, the location change is dispatched regularly. + * + * @param options - Options + * + * @return Document observable + */ +function watchDocumentSwitch(_a) { + var location$ = _a.location$; + return location$ + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["distinctUntilKeyChanged"])("pathname"), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["skip"])(1), + /* Fetch document */ + Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["switchMap"])(function (url) { return Object(rxjs_ajax__WEBPACK_IMPORTED_MODULE_1__["ajax"])({ + url: url.href, + responseType: "document", + withCredentials: true + }) + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["pluck"])("response"), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["catchError"])(function () { + Object(_location__WEBPACK_IMPORTED_MODULE_3__["setLocation"])(url); + return rxjs__WEBPACK_IMPORTED_MODULE_0__["NEVER"]; + })); }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["share"])()); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/browser/element/_/index.ts": +/*!***********************************************************!*\ + !*** ./src/assets/javascripts/browser/element/_/index.ts ***! + \***********************************************************/ +/*! exports provided: getElement, getElementOrThrow, getActiveElement, getElements */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getElement", function() { return getElement; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getElementOrThrow", function() { return getElementOrThrow; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getActiveElement", function() { return getActiveElement; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getElements", function() { return getElements; }); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Retrieve an element matching the query selector + * + * @template T - Element type + * + * @param selector - Query selector + * @param node - Node of reference + * + * @return Element or nothing + */ +function getElement(selector, node) { + if (node === void 0) { node = document; } + return node.querySelector(selector) || undefined; +} +/** + * Retrieve an element matching a query selector or throw a reference error + * + * @template T - Element type + * + * @param selector - Query selector + * @param node - Node of reference + * + * @return Element + */ +function getElementOrThrow(selector, node) { + if (node === void 0) { node = document; } + var el = getElement(selector, node); + if (typeof el === "undefined") + throw new ReferenceError("Missing element: expected \"" + selector + "\" to be present"); + return el; +} +/** + * Retrieve the currently active element + * + * @return Element or nothing + */ +function getActiveElement() { + return document.activeElement instanceof HTMLElement + ? document.activeElement + : undefined; +} +/** + * Retrieve all elements matching the query selector + * + * @template T - Element type + * + * @param selector - Query selector + * @param node - Node of reference + * + * @return Elements + */ +function getElements(selector, node) { + if (node === void 0) { node = document; } + return Array.from(node.querySelectorAll(selector)); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/browser/element/focus/index.ts": +/*!***************************************************************!*\ + !*** ./src/assets/javascripts/browser/element/focus/index.ts ***! + \***************************************************************/ +/*! exports provided: setElementFocus, watchElementFocus */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setElementFocus", function() { return setElementFocus; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "watchElementFocus", function() { return watchElementFocus; }); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); +/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../_ */ "./src/assets/javascripts/browser/element/_/index.ts"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Set element focus + * + * @param el - Element + * @param value - Whether the element should be focused + */ +function setElementFocus(el, value) { + if (value === void 0) { value = true; } + if (value) + el.focus(); + else + el.blur(); +} +/* ------------------------------------------------------------------------- */ +/** + * Watch element focus + * + * @param el - Element + * + * @return Element focus observable + */ +function watchElementFocus(el) { + var focus$ = Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["fromEvent"])(el, "focus"); + var blur$ = Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["fromEvent"])(el, "blur"); + /* Map events to boolean state */ + return Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["merge"])(focus$.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["mapTo"])(true)), blur$.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["mapTo"])(false))) + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["startWith"])(el === Object(___WEBPACK_IMPORTED_MODULE_2__["getActiveElement"])()), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["shareReplay"])(1)); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/browser/element/index.ts": +/*!*********************************************************!*\ + !*** ./src/assets/javascripts/browser/element/index.ts ***! + \*********************************************************/ +/*! exports provided: getElement, getElementOrThrow, getActiveElement, getElements, setElementFocus, watchElementFocus, getElementOffset, watchElementOffset, setElementSelection */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_ */ "./src/assets/javascripts/browser/element/_/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getElement", function() { return ___WEBPACK_IMPORTED_MODULE_0__["getElement"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getElementOrThrow", function() { return ___WEBPACK_IMPORTED_MODULE_0__["getElementOrThrow"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getActiveElement", function() { return ___WEBPACK_IMPORTED_MODULE_0__["getActiveElement"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getElements", function() { return ___WEBPACK_IMPORTED_MODULE_0__["getElements"]; }); + +/* harmony import */ var _focus__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./focus */ "./src/assets/javascripts/browser/element/focus/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setElementFocus", function() { return _focus__WEBPACK_IMPORTED_MODULE_1__["setElementFocus"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchElementFocus", function() { return _focus__WEBPACK_IMPORTED_MODULE_1__["watchElementFocus"]; }); + +/* harmony import */ var _offset__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./offset */ "./src/assets/javascripts/browser/element/offset/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getElementOffset", function() { return _offset__WEBPACK_IMPORTED_MODULE_2__["getElementOffset"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchElementOffset", function() { return _offset__WEBPACK_IMPORTED_MODULE_2__["watchElementOffset"]; }); + +/* harmony import */ var _select__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./select */ "./src/assets/javascripts/browser/element/select/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setElementSelection", function() { return _select__WEBPACK_IMPORTED_MODULE_3__["setElementSelection"]; }); + +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + + + +/***/ }), + +/***/ "./src/assets/javascripts/browser/element/offset/index.ts": +/*!****************************************************************!*\ + !*** ./src/assets/javascripts/browser/element/offset/index.ts ***! + \****************************************************************/ +/*! exports provided: getElementOffset, watchElementOffset */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getElementOffset", function() { return getElementOffset; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "watchElementOffset", function() { return watchElementOffset; }); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Retrieve element offset + * + * @param el - Element + * + * @return Element offset + */ +function getElementOffset(el) { + return { + x: el.scrollLeft, + y: el.scrollTop + }; +} +/* ------------------------------------------------------------------------- */ +/** + * Watch element offset + * + * @param el - Element + * + * @return Element offset observable + */ +function watchElementOffset(el) { + return Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["merge"])(Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["fromEvent"])(el, "scroll"), Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["fromEvent"])(window, "resize")) + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["map"])(function () { return getElementOffset(el); }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["startWith"])(getElementOffset(el)), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["shareReplay"])(1)); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/browser/element/select/index.ts": +/*!****************************************************************!*\ + !*** ./src/assets/javascripts/browser/element/select/index.ts ***! + \****************************************************************/ +/*! exports provided: setElementSelection */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setElementSelection", function() { return setElementSelection; }); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Set element text selection + * + * @param el - Element + */ +function setElementSelection(el) { + if (el instanceof HTMLInputElement) + el.select(); + else + throw new Error("Not implemented"); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/browser/index.ts": +/*!*************************************************!*\ + !*** ./src/assets/javascripts/browser/index.ts ***! + \*************************************************/ +/*! exports provided: isSusceptibleToKeyboard, watchKeyboard, watchMedia, getToggle, setToggle, watchToggle, watchWorker, watchDocument, watchDocumentSwitch, getElement, getElementOrThrow, getActiveElement, getElements, setElementFocus, watchElementFocus, getElementOffset, watchElementOffset, setElementSelection, getLocation, setLocation, isLocationInternal, isLocationAnchor, watchLocation, getLocationHash, setLocationHash, watchLocationHash, watchViewport, watchViewportAt, getViewportOffset, setViewportOffset, watchViewportOffset, getViewportSize, watchViewportSize */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _document__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./document */ "./src/assets/javascripts/browser/document/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchDocument", function() { return _document__WEBPACK_IMPORTED_MODULE_0__["watchDocument"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchDocumentSwitch", function() { return _document__WEBPACK_IMPORTED_MODULE_0__["watchDocumentSwitch"]; }); + +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./element */ "./src/assets/javascripts/browser/element/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getElement", function() { return _element__WEBPACK_IMPORTED_MODULE_1__["getElement"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getElementOrThrow", function() { return _element__WEBPACK_IMPORTED_MODULE_1__["getElementOrThrow"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getActiveElement", function() { return _element__WEBPACK_IMPORTED_MODULE_1__["getActiveElement"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getElements", function() { return _element__WEBPACK_IMPORTED_MODULE_1__["getElements"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setElementFocus", function() { return _element__WEBPACK_IMPORTED_MODULE_1__["setElementFocus"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchElementFocus", function() { return _element__WEBPACK_IMPORTED_MODULE_1__["watchElementFocus"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getElementOffset", function() { return _element__WEBPACK_IMPORTED_MODULE_1__["getElementOffset"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchElementOffset", function() { return _element__WEBPACK_IMPORTED_MODULE_1__["watchElementOffset"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setElementSelection", function() { return _element__WEBPACK_IMPORTED_MODULE_1__["setElementSelection"]; }); + +/* harmony import */ var _keyboard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./keyboard */ "./src/assets/javascripts/browser/keyboard/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "isSusceptibleToKeyboard", function() { return _keyboard__WEBPACK_IMPORTED_MODULE_2__["isSusceptibleToKeyboard"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchKeyboard", function() { return _keyboard__WEBPACK_IMPORTED_MODULE_2__["watchKeyboard"]; }); + +/* harmony import */ var _location__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./location */ "./src/assets/javascripts/browser/location/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getLocation", function() { return _location__WEBPACK_IMPORTED_MODULE_3__["getLocation"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setLocation", function() { return _location__WEBPACK_IMPORTED_MODULE_3__["setLocation"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "isLocationInternal", function() { return _location__WEBPACK_IMPORTED_MODULE_3__["isLocationInternal"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "isLocationAnchor", function() { return _location__WEBPACK_IMPORTED_MODULE_3__["isLocationAnchor"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchLocation", function() { return _location__WEBPACK_IMPORTED_MODULE_3__["watchLocation"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getLocationHash", function() { return _location__WEBPACK_IMPORTED_MODULE_3__["getLocationHash"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setLocationHash", function() { return _location__WEBPACK_IMPORTED_MODULE_3__["setLocationHash"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchLocationHash", function() { return _location__WEBPACK_IMPORTED_MODULE_3__["watchLocationHash"]; }); + +/* harmony import */ var _media__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./media */ "./src/assets/javascripts/browser/media/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchMedia", function() { return _media__WEBPACK_IMPORTED_MODULE_4__["watchMedia"]; }); + +/* harmony import */ var _toggle__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./toggle */ "./src/assets/javascripts/browser/toggle/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getToggle", function() { return _toggle__WEBPACK_IMPORTED_MODULE_5__["getToggle"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setToggle", function() { return _toggle__WEBPACK_IMPORTED_MODULE_5__["setToggle"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchToggle", function() { return _toggle__WEBPACK_IMPORTED_MODULE_5__["watchToggle"]; }); + +/* harmony import */ var _viewport__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./viewport */ "./src/assets/javascripts/browser/viewport/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchViewport", function() { return _viewport__WEBPACK_IMPORTED_MODULE_6__["watchViewport"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchViewportAt", function() { return _viewport__WEBPACK_IMPORTED_MODULE_6__["watchViewportAt"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getViewportOffset", function() { return _viewport__WEBPACK_IMPORTED_MODULE_6__["getViewportOffset"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setViewportOffset", function() { return _viewport__WEBPACK_IMPORTED_MODULE_6__["setViewportOffset"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchViewportOffset", function() { return _viewport__WEBPACK_IMPORTED_MODULE_6__["watchViewportOffset"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getViewportSize", function() { return _viewport__WEBPACK_IMPORTED_MODULE_6__["getViewportSize"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchViewportSize", function() { return _viewport__WEBPACK_IMPORTED_MODULE_6__["watchViewportSize"]; }); + +/* harmony import */ var _worker__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./worker */ "./src/assets/javascripts/browser/worker/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchWorker", function() { return _worker__WEBPACK_IMPORTED_MODULE_7__["watchWorker"]; }); + +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + + + + + + + +/***/ }), + +/***/ "./src/assets/javascripts/browser/keyboard/index.ts": +/*!**********************************************************!*\ + !*** ./src/assets/javascripts/browser/keyboard/index.ts ***! + \**********************************************************/ +/*! exports provided: isSusceptibleToKeyboard, watchKeyboard */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isSusceptibleToKeyboard", function() { return isSusceptibleToKeyboard; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "watchKeyboard", function() { return watchKeyboard; }); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Check whether an element may receive keyboard input + * + * @param el - Element + * + * @return Test result + */ +function isSusceptibleToKeyboard(el) { + switch (el.tagName) { + /* Form elements */ + case "INPUT": + case "SELECT": + case "TEXTAREA": + return true; + /* Everything else */ + default: + return el.isContentEditable; + } +} +/* ------------------------------------------------------------------------- */ +/** + * Watch keyboard + * + * @return Keyboard observable + */ +function watchKeyboard() { + return Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["fromEvent"])(window, "keydown") + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["filter"])(function (ev) { return !(ev.metaKey || ev.ctrlKey); }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["map"])(function (ev) { return ({ + type: ev.key, + claim: function () { + ev.preventDefault(); + ev.stopPropagation(); + } + }); }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["share"])()); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/browser/location/_/index.ts": +/*!************************************************************!*\ + !*** ./src/assets/javascripts/browser/location/_/index.ts ***! + \************************************************************/ +/*! exports provided: getLocation, setLocation, isLocationInternal, isLocationAnchor, watchLocation */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getLocation", function() { return getLocation; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setLocation", function() { return setLocation; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isLocationInternal", function() { return isLocationInternal; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isLocationAnchor", function() { return isLocationAnchor; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "watchLocation", function() { return watchLocation; }); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Retrieve location + * + * This function will return a `URL` object (and not `Location`) in order to + * normalize typings across the application. Furthermore, locations need to be + * tracked without setting them and `Location` is a singleton which represents + * the current location. + * + * @return URL + */ +function getLocation() { + return new URL(location.href); +} +/** + * Set location + * + * @param url - URL to change to + */ +function setLocation(url) { + location.href = url.href; +} +/* ------------------------------------------------------------------------- */ +/** + * Check whether a URL is an internal link or a file (except `.html`) + * + * @param url - URL or HTML anchor element + * @param ref - Reference URL + * + * @return Test result + */ +function isLocationInternal(url, ref) { + if (ref === void 0) { ref = location; } + return url.host === ref.host + && /^(?:\/[\w-]+)*(?:\/?|\.html)$/i.test(url.pathname); +} +/** + * Check whether a URL is an anchor link on the current page + * + * @param url - URL or HTML anchor element + * @param ref - Reference URL + * + * @return Test result + */ +function isLocationAnchor(url, ref) { + if (ref === void 0) { ref = location; } + return url.pathname === ref.pathname + && url.hash.length > 0; +} +/* ------------------------------------------------------------------------- */ +/** + * Watch location + * + * @return Location subject + */ +function watchLocation() { + return new rxjs__WEBPACK_IMPORTED_MODULE_0__["BehaviorSubject"](getLocation()); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/browser/location/hash/index.ts": +/*!***************************************************************!*\ + !*** ./src/assets/javascripts/browser/location/hash/index.ts ***! + \***************************************************************/ +/*! exports provided: getLocationHash, setLocationHash, watchLocationHash */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getLocationHash", function() { return getLocationHash; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setLocationHash", function() { return setLocationHash; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "watchLocationHash", function() { return watchLocationHash; }); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Retrieve location hash + * + * @return Location hash + */ +function getLocationHash() { + return location.hash.substring(1); +} +/** + * Set location hash + * + * Setting a new fragment identifier via `location.hash` will have no effect + * if the value doesn't change. However, when a new fragment identifier is set, + * we want the browser to target the respective element at all times, which is + * why we use this dirty little trick. + * + * @param hash - Location hash + */ +function setLocationHash(hash) { + var el = document.createElement("a"); + el.href = hash; + el.click(); +} +/* ------------------------------------------------------------------------- */ +/** + * Watch location hash + * + * @return Location hash observable + */ +function watchLocationHash() { + return Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["fromEvent"])(window, "hashchange") + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["map"])(getLocationHash), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["startWith"])(getLocationHash()), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["filter"])(function (hash) { return hash.length > 0; }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["share"])()); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/browser/location/index.ts": +/*!**********************************************************!*\ + !*** ./src/assets/javascripts/browser/location/index.ts ***! + \**********************************************************/ +/*! exports provided: getLocation, setLocation, isLocationInternal, isLocationAnchor, watchLocation, getLocationHash, setLocationHash, watchLocationHash */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_ */ "./src/assets/javascripts/browser/location/_/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getLocation", function() { return ___WEBPACK_IMPORTED_MODULE_0__["getLocation"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setLocation", function() { return ___WEBPACK_IMPORTED_MODULE_0__["setLocation"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "isLocationInternal", function() { return ___WEBPACK_IMPORTED_MODULE_0__["isLocationInternal"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "isLocationAnchor", function() { return ___WEBPACK_IMPORTED_MODULE_0__["isLocationAnchor"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchLocation", function() { return ___WEBPACK_IMPORTED_MODULE_0__["watchLocation"]; }); + +/* harmony import */ var _hash__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./hash */ "./src/assets/javascripts/browser/location/hash/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getLocationHash", function() { return _hash__WEBPACK_IMPORTED_MODULE_1__["getLocationHash"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setLocationHash", function() { return _hash__WEBPACK_IMPORTED_MODULE_1__["setLocationHash"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchLocationHash", function() { return _hash__WEBPACK_IMPORTED_MODULE_1__["watchLocationHash"]; }); + +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + +/***/ }), + +/***/ "./src/assets/javascripts/browser/media/index.ts": +/*!*******************************************************!*\ + !*** ./src/assets/javascripts/browser/media/index.ts ***! + \*******************************************************/ +/*! exports provided: watchMedia */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "watchMedia", function() { return watchMedia; }); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Watch media query + * + * @param query - Media query + * + * @return Media observable + */ +function watchMedia(query) { + var media = matchMedia(query); + return Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["fromEventPattern"])(function (next) { + return media.addListener(function () { return next(media.matches); }); + }) + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["startWith"])(media.matches), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["shareReplay"])(1)); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/browser/toggle/index.ts": +/*!********************************************************!*\ + !*** ./src/assets/javascripts/browser/toggle/index.ts ***! + \********************************************************/ +/*! exports provided: getToggle, setToggle, watchToggle */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getToggle", function() { return getToggle; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setToggle", function() { return setToggle; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "watchToggle", function() { return watchToggle; }); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../element */ "./src/assets/javascripts/browser/element/index.ts"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + +/* ---------------------------------------------------------------------------- + * Data + * ------------------------------------------------------------------------- */ +/** + * Toggle map + */ +var toggles = { + drawer: Object(_element__WEBPACK_IMPORTED_MODULE_2__["getElementOrThrow"])("[data-md-toggle=drawer]"), + search: Object(_element__WEBPACK_IMPORTED_MODULE_2__["getElementOrThrow"])("[data-md-toggle=search]") +}; +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Retrieve the value of a toggle + * + * @param name - Toggle + * + * @return Toggle value + */ +function getToggle(name) { + return toggles[name].checked; +} +/** + * Set toggle + * + * Simulating a click event seems to be the most cross-browser compatible way + * of changing the value while also emitting a `change` event. Before, Material + * used `CustomEvent` to programmatically change the value of a toggle, but this + * is a much simpler and cleaner solution which doesn't require a polyfill. + * + * @param name - Toggle + * @param value - Toggle value + */ +function setToggle(name, value) { + if (toggles[name].checked !== value) + toggles[name].click(); +} +/* ------------------------------------------------------------------------- */ +/** + * Watch toggle + * + * @param name - Toggle + * + * @return Toggle value observable + */ +function watchToggle(name) { + var el = toggles[name]; + return Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["fromEvent"])(el, "change") + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["map"])(function () { return el.checked; }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["startWith"])(el.checked)); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/browser/viewport/_/index.ts": +/*!************************************************************!*\ + !*** ./src/assets/javascripts/browser/viewport/_/index.ts ***! + \************************************************************/ +/*! exports provided: watchViewport, watchViewportAt */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "watchViewport", function() { return watchViewport; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "watchViewportAt", function() { return watchViewportAt; }); +/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); +/* harmony import */ var _offset__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../offset */ "./src/assets/javascripts/browser/viewport/offset/index.ts"); +/* harmony import */ var _size__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../size */ "./src/assets/javascripts/browser/viewport/size/index.ts"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + + +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Watch viewport + * + * @return Viewport observable + */ +function watchViewport() { + return Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["combineLatest"])([ + Object(_offset__WEBPACK_IMPORTED_MODULE_3__["watchViewportOffset"])(), + Object(_size__WEBPACK_IMPORTED_MODULE_4__["watchViewportSize"])() + ]) + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(function (_a) { + var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_a, 2), offset = _b[0], size = _b[1]; + return ({ offset: offset, size: size }); + }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["shareReplay"])(1)); +} +/** + * Watch viewport relative to element + * + * @param el - Element + * @param options - Options + * + * @return Viewport observable + */ +function watchViewportAt(el, _a) { + var header$ = _a.header$, viewport$ = _a.viewport$; + var offset$ = viewport$ + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["distinctUntilKeyChanged"])("size"), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(function () { return ({ + x: el.offsetLeft, + y: el.offsetTop + }); })); + /* Compute relative viewport, return hot observable */ + return Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["combineLatest"])([header$, viewport$, offset$]) + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(function (_a) { + var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_a, 3), height = _b[0].height, _c = _b[1], offset = _c.offset, size = _c.size, _d = _b[2], x = _d.x, y = _d.y; + return ({ + offset: { + x: offset.x - x, + y: offset.y - y + height + }, + size: size + }); + }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["shareReplay"])(1)); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/browser/viewport/index.ts": +/*!**********************************************************!*\ + !*** ./src/assets/javascripts/browser/viewport/index.ts ***! + \**********************************************************/ +/*! exports provided: watchViewport, watchViewportAt, getViewportOffset, setViewportOffset, watchViewportOffset, getViewportSize, watchViewportSize */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_ */ "./src/assets/javascripts/browser/viewport/_/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchViewport", function() { return ___WEBPACK_IMPORTED_MODULE_0__["watchViewport"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchViewportAt", function() { return ___WEBPACK_IMPORTED_MODULE_0__["watchViewportAt"]; }); + +/* harmony import */ var _offset__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./offset */ "./src/assets/javascripts/browser/viewport/offset/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getViewportOffset", function() { return _offset__WEBPACK_IMPORTED_MODULE_1__["getViewportOffset"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setViewportOffset", function() { return _offset__WEBPACK_IMPORTED_MODULE_1__["setViewportOffset"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchViewportOffset", function() { return _offset__WEBPACK_IMPORTED_MODULE_1__["watchViewportOffset"]; }); + +/* harmony import */ var _size__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./size */ "./src/assets/javascripts/browser/viewport/size/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getViewportSize", function() { return _size__WEBPACK_IMPORTED_MODULE_2__["getViewportSize"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchViewportSize", function() { return _size__WEBPACK_IMPORTED_MODULE_2__["watchViewportSize"]; }); + +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + + +/***/ }), + +/***/ "./src/assets/javascripts/browser/viewport/offset/index.ts": +/*!*****************************************************************!*\ + !*** ./src/assets/javascripts/browser/viewport/offset/index.ts ***! + \*****************************************************************/ +/*! exports provided: getViewportOffset, setViewportOffset, watchViewportOffset */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getViewportOffset", function() { return getViewportOffset; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setViewportOffset", function() { return setViewportOffset; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "watchViewportOffset", function() { return watchViewportOffset; }); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Retrieve viewport offset + * + * On iOS Safari, viewport offset can be negative due to overflow scrolling. + * As this may induce strange behaviors downstream, we'll just limit it to 0. + * + * @return Viewport offset + */ +function getViewportOffset() { + return { + x: Math.max(0, pageXOffset), + y: Math.max(0, pageYOffset) + }; +} +/** + * Set viewport offset + * + * @param offset - Viewport offset + */ +function setViewportOffset(_a) { + var x = _a.x, y = _a.y; + window.scrollTo(x || 0, y || 0); +} +/* ------------------------------------------------------------------------- */ +/** + * Watch viewport offset + * + * @return Viewport offset observable + */ +function watchViewportOffset() { + return Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["merge"])(Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["fromEvent"])(window, "scroll"), Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["fromEvent"])(window, "resize")) + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["map"])(getViewportOffset), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["startWith"])(getViewportOffset())); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/browser/viewport/size/index.ts": +/*!***************************************************************!*\ + !*** ./src/assets/javascripts/browser/viewport/size/index.ts ***! + \***************************************************************/ +/*! exports provided: getViewportSize, watchViewportSize */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getViewportSize", function() { return getViewportSize; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "watchViewportSize", function() { return watchViewportSize; }); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Retrieve viewport size + * + * @return Viewport size + */ +function getViewportSize() { + return { + width: innerWidth, + height: innerHeight + }; +} +/* ------------------------------------------------------------------------- */ +/** + * Watch viewport size + * + * @return Viewport size observable + */ +function watchViewportSize() { + return Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["fromEvent"])(window, "resize") + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["map"])(getViewportSize), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["startWith"])(getViewportSize())); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/browser/worker/index.ts": +/*!********************************************************!*\ + !*** ./src/assets/javascripts/browser/worker/index.ts ***! + \********************************************************/ +/*! exports provided: watchWorker */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "watchWorker", function() { return watchWorker; }); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Watch a web worker + * + * This function returns an observable that will send all values emitted by the + * message observable to the web worker. Web worker communication is expected + * to be bidirectional (request-response) and synchronous. Messages that are + * emitted during a pending request are throttled, the last one is emitted. + * + * @param worker - Web worker + * @param options - Options + * + * @return Worker message observable + */ +function watchWorker(worker, _a) { + var tx$ = _a.tx$; + /* Intercept messages from worker-like objects */ + var rx$ = Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["fromEventPattern"])(function (next) { + return worker.addEventListener("message", next); + }) + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["pluck"])("data")); + /* Send and receive messages, return hot observable */ + return tx$ + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["throttle"])(function () { return rx$; }, { leading: true, trailing: true }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["tap"])(function (message) { return worker.postMessage(message); }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["switchMapTo"])(rx$), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["share"])()); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/components/_/index.ts": +/*!******************************************************!*\ + !*** ./src/assets/javascripts/components/_/index.ts ***! + \******************************************************/ +/*! exports provided: setupComponents, useComponent */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setupComponents", function() { return setupComponents; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "useComponent", function() { return useComponent; }); +/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); +/* harmony import */ var browser__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! browser */ "./src/assets/javascripts/browser/index.ts"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + +/* ---------------------------------------------------------------------------- + * Data + * ------------------------------------------------------------------------- */ +/** + * Component map observable + */ +var components$; +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Setup bindings to components with given names + * + * This function will maintain bindings to the elements identified by the given + * names in-between document switches and update the elements in-place. + * + * @param names - Component names + * @param options - Options + */ +function setupComponents(names, _a) { + var document$ = _a.document$; + components$ = document$ + .pipe( + /* Build component map */ + Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(function (document) { return names.reduce(function (components, name) { + var _a; + var el = Object(browser__WEBPACK_IMPORTED_MODULE_3__["getElement"])("[data-md-component=" + name + "]", document); + return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__assign"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__assign"])({}, components), typeof el !== "undefined" ? (_a = {}, _a[name] = el, _a) : {}); + }, {}); }), + /* Re-compute component map on document switch */ + Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["scan"])(function (prev, next) { + var e_1, _a; + try { + for (var names_1 = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__values"])(names), names_1_1 = names_1.next(); !names_1_1.done; names_1_1 = names_1.next()) { + var name = names_1_1.value; + switch (name) { + /* Top-level components: update */ + case "header-title": + case "container": + case "skip": + if (name in prev && typeof prev[name] !== "undefined") { + prev[name].replaceWith(next[name]); + prev[name] = next[name]; + } + break; + /* All other components: rebind */ + default: + if (typeof next[name] !== "undefined") + prev[name] = Object(browser__WEBPACK_IMPORTED_MODULE_3__["getElement"])("[data-md-component=" + name + "]"); + else + delete prev[name]; + } + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (names_1_1 && !names_1_1.done && (_a = names_1.return)) _a.call(names_1); + } + finally { if (e_1) throw e_1.error; } + } + return prev; + }), + /* Convert to hot observable */ + Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["shareReplay"])(1)); +} +function useComponent(name) { + return components$ + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["switchMap"])(function (components) { return (typeof components[name] !== "undefined" + ? Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["of"])(components[name]) + : rxjs__WEBPACK_IMPORTED_MODULE_1__["EMPTY"]); }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["distinctUntilChanged"])()); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/components/header/_/index.ts": +/*!*************************************************************!*\ + !*** ./src/assets/javascripts/components/header/_/index.ts ***! + \*************************************************************/ +/*! exports provided: mountHeader */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mountHeader", function() { return mountHeader; }); +/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); +/* harmony import */ var browser__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! browser */ "./src/assets/javascripts/browser/index.ts"); +/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../_ */ "./src/assets/javascripts/components/_/index.ts"); +/* harmony import */ var _react__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../react */ "./src/assets/javascripts/components/header/react/index.ts"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + + + +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Mount header from source observable + * + * @param options - Options + * + * @return Operator function + */ +function mountHeader(_a) { + var viewport$ = _a.viewport$; + return Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["pipe"])(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["switchMap"])(function (el) { + var header$ = Object(_react__WEBPACK_IMPORTED_MODULE_5__["watchHeader"])(el, { viewport$: viewport$ }); + /* Compute whether the header should switch to page header */ + var type$ = Object(___WEBPACK_IMPORTED_MODULE_4__["useComponent"])("main") + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(function (main) { return Object(browser__WEBPACK_IMPORTED_MODULE_3__["getElement"])("h1, h2, h3, h4, h5, h6", main); }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["filter"])(function (hx) { return typeof hx !== "undefined"; }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["withLatestFrom"])(Object(___WEBPACK_IMPORTED_MODULE_4__["useComponent"])("header-title")), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["switchMap"])(function (_a) { + var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_a, 2), hx = _b[0], title = _b[1]; + return Object(browser__WEBPACK_IMPORTED_MODULE_3__["watchViewportAt"])(hx, { header$: header$, viewport$: viewport$ }) + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(function (_a) { + var y = _a.offset.y; + return y >= hx.offsetHeight ? "page" : "site"; + }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["distinctUntilChanged"])(), Object(_react__WEBPACK_IMPORTED_MODULE_5__["applyHeaderType"])(title)); + }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["startWith"])("site")); + /* Combine into single observable */ + return Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["combineLatest"])([header$, type$]) + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(function (_a) { + var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_a, 2), header = _b[0], type = _b[1]; + return (Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__assign"])({ type: type }, header)); + }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["shareReplay"])(1)); + })); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/components/header/index.ts": +/*!***********************************************************!*\ + !*** ./src/assets/javascripts/components/header/index.ts ***! + \***********************************************************/ +/*! exports provided: mountHeader, watchHeader, applyHeaderType, setHeaderTitleActive, resetHeaderTitleActive */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_ */ "./src/assets/javascripts/components/header/_/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mountHeader", function() { return ___WEBPACK_IMPORTED_MODULE_0__["mountHeader"]; }); + +/* harmony import */ var _react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./react */ "./src/assets/javascripts/components/header/react/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchHeader", function() { return _react__WEBPACK_IMPORTED_MODULE_1__["watchHeader"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "applyHeaderType", function() { return _react__WEBPACK_IMPORTED_MODULE_1__["applyHeaderType"]; }); + +/* harmony import */ var _set__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./set */ "./src/assets/javascripts/components/header/set/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setHeaderTitleActive", function() { return _set__WEBPACK_IMPORTED_MODULE_2__["setHeaderTitleActive"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "resetHeaderTitleActive", function() { return _set__WEBPACK_IMPORTED_MODULE_2__["resetHeaderTitleActive"]; }); + +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + + +/***/ }), + +/***/ "./src/assets/javascripts/components/header/react/index.ts": +/*!*****************************************************************!*\ + !*** ./src/assets/javascripts/components/header/react/index.ts ***! + \*****************************************************************/ +/*! exports provided: watchHeader, applyHeaderType */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "watchHeader", function() { return watchHeader; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "applyHeaderType", function() { return applyHeaderType; }); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); +/* harmony import */ var _set__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../set */ "./src/assets/javascripts/components/header/set/index.ts"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Watch header + * + * The header is wrapped in an observable to pave the way for auto-hiding or + * other dynamic behaviors that may be implemented later on. + * + * @param el - Header element + * @param options - Options + * + * @return Header observable + */ +function watchHeader(el, _a) { + var viewport$ = _a.viewport$; + return viewport$ + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["distinctUntilKeyChanged"])("size"), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["switchMap"])(function () { + var styles = getComputedStyle(el); + var sticky = [ + "sticky", + "-webkit-sticky" /* Old Safari */ + ].includes(styles.position); + return Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["of"])({ + sticky: sticky, + height: sticky ? el.offsetHeight : 0 + }); + })); +} +/* ------------------------------------------------------------------------- */ +/** + * Apply header title type + * + * @param el - Header title element + * + * @return Operator function + */ +function applyHeaderType(el) { + return Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["pipe"])( + /* Defer repaint to next animation frame */ + Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["observeOn"])(rxjs__WEBPACK_IMPORTED_MODULE_0__["animationFrameScheduler"]), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["tap"])(function (type) { + Object(_set__WEBPACK_IMPORTED_MODULE_2__["setHeaderTitleActive"])(el, type === "page"); + }), + /* Reset on complete or error */ + Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["finalize"])(function () { + Object(_set__WEBPACK_IMPORTED_MODULE_2__["resetHeaderTitleActive"])(el); + })); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/components/header/set/index.ts": +/*!***************************************************************!*\ + !*** ./src/assets/javascripts/components/header/set/index.ts ***! + \***************************************************************/ +/*! exports provided: setHeaderTitleActive, resetHeaderTitleActive */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setHeaderTitleActive", function() { return setHeaderTitleActive; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "resetHeaderTitleActive", function() { return resetHeaderTitleActive; }); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Set header title active + * + * @param el - Header title element + * @param value - Whether the title is shown + */ +function setHeaderTitleActive(el, value) { + el.setAttribute("data-md-state", value ? "active" : ""); +} +/** + * Reset header title active + * + * @param el - Header title element + */ +function resetHeaderTitleActive(el) { + el.removeAttribute("data-md-state"); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/components/hero/_/index.ts": +/*!***********************************************************!*\ + !*** ./src/assets/javascripts/components/hero/_/index.ts ***! + \***********************************************************/ +/*! exports provided: mountHero */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mountHero", function() { return mountHero; }); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); +/* harmony import */ var browser__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! browser */ "./src/assets/javascripts/browser/index.ts"); +/* harmony import */ var _react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../react */ "./src/assets/javascripts/components/hero/react/index.ts"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Mount hero from source observable + * + * @param options - Options + * + * @return Operator function + */ +function mountHero(_a) { + var header$ = _a.header$, viewport$ = _a.viewport$; + return Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["pipe"])(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["switchMap"])(function (el) { return Object(browser__WEBPACK_IMPORTED_MODULE_2__["watchViewportAt"])(el, { header$: header$, viewport$: viewport$ }) + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["map"])(function (_a) { + var y = _a.offset.y; + return ({ hidden: y >= 20 }); + }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["distinctUntilChanged"])(), Object(_react__WEBPACK_IMPORTED_MODULE_3__["applyHero"])(el)); })); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/components/hero/index.ts": +/*!*********************************************************!*\ + !*** ./src/assets/javascripts/components/hero/index.ts ***! + \*********************************************************/ +/*! exports provided: mountHero, applyHero, setHeroHidden, resetHeroHidden */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_ */ "./src/assets/javascripts/components/hero/_/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mountHero", function() { return ___WEBPACK_IMPORTED_MODULE_0__["mountHero"]; }); + +/* harmony import */ var _react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./react */ "./src/assets/javascripts/components/hero/react/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "applyHero", function() { return _react__WEBPACK_IMPORTED_MODULE_1__["applyHero"]; }); + +/* harmony import */ var _set__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./set */ "./src/assets/javascripts/components/hero/set/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setHeroHidden", function() { return _set__WEBPACK_IMPORTED_MODULE_2__["setHeroHidden"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "resetHeroHidden", function() { return _set__WEBPACK_IMPORTED_MODULE_2__["resetHeroHidden"]; }); + +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + + +/***/ }), + +/***/ "./src/assets/javascripts/components/hero/react/index.ts": +/*!***************************************************************!*\ + !*** ./src/assets/javascripts/components/hero/react/index.ts ***! + \***************************************************************/ +/*! exports provided: applyHero */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "applyHero", function() { return applyHero; }); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); +/* harmony import */ var _set__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../set */ "./src/assets/javascripts/components/hero/set/index.ts"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Apply hero + * + * @param el - Hero element + * + * @return Operator function + */ +function applyHero(el) { + return Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["pipe"])( + /* Defer repaint to next animation frame */ + Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["observeOn"])(rxjs__WEBPACK_IMPORTED_MODULE_0__["animationFrameScheduler"]), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["tap"])(function (_a) { + var hidden = _a.hidden; + Object(_set__WEBPACK_IMPORTED_MODULE_2__["setHeroHidden"])(el, hidden); + }), + /* Reset on complete or error */ + Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["finalize"])(function () { + Object(_set__WEBPACK_IMPORTED_MODULE_2__["resetHeroHidden"])(el); + })); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/components/hero/set/index.ts": +/*!*************************************************************!*\ + !*** ./src/assets/javascripts/components/hero/set/index.ts ***! + \*************************************************************/ +/*! exports provided: setHeroHidden, resetHeroHidden */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setHeroHidden", function() { return setHeroHidden; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "resetHeroHidden", function() { return resetHeroHidden; }); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Set hero hidden + * + * @param el - Hero element + * @param value - Whether the element is hidden + */ +function setHeroHidden(el, value) { + el.setAttribute("data-md-state", value ? "hidden" : ""); +} +/** + * Reset hero hidden + * + * @param el - Hero element + */ +function resetHeroHidden(el) { + el.removeAttribute("data-md-state"); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/components/index.ts": +/*!****************************************************!*\ + !*** ./src/assets/javascripts/components/index.ts ***! + \****************************************************/ +/*! no static exports found */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_ */ "./src/assets/javascripts/components/_/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setupComponents", function() { return ___WEBPACK_IMPORTED_MODULE_0__["setupComponents"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "useComponent", function() { return ___WEBPACK_IMPORTED_MODULE_0__["useComponent"]; }); + +/* harmony import */ var _header__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./header */ "./src/assets/javascripts/components/header/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mountHeader", function() { return _header__WEBPACK_IMPORTED_MODULE_1__["mountHeader"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchHeader", function() { return _header__WEBPACK_IMPORTED_MODULE_1__["watchHeader"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "applyHeaderType", function() { return _header__WEBPACK_IMPORTED_MODULE_1__["applyHeaderType"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setHeaderTitleActive", function() { return _header__WEBPACK_IMPORTED_MODULE_1__["setHeaderTitleActive"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "resetHeaderTitleActive", function() { return _header__WEBPACK_IMPORTED_MODULE_1__["resetHeaderTitleActive"]; }); + +/* harmony import */ var _hero__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./hero */ "./src/assets/javascripts/components/hero/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mountHero", function() { return _hero__WEBPACK_IMPORTED_MODULE_2__["mountHero"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "applyHero", function() { return _hero__WEBPACK_IMPORTED_MODULE_2__["applyHero"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setHeroHidden", function() { return _hero__WEBPACK_IMPORTED_MODULE_2__["setHeroHidden"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "resetHeroHidden", function() { return _hero__WEBPACK_IMPORTED_MODULE_2__["resetHeroHidden"]; }); + +/* harmony import */ var _main__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./main */ "./src/assets/javascripts/components/main/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mountMain", function() { return _main__WEBPACK_IMPORTED_MODULE_3__["mountMain"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchMain", function() { return _main__WEBPACK_IMPORTED_MODULE_3__["watchMain"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "applyHeaderShadow", function() { return _main__WEBPACK_IMPORTED_MODULE_3__["applyHeaderShadow"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setHeaderShadow", function() { return _main__WEBPACK_IMPORTED_MODULE_3__["setHeaderShadow"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "resetHeaderShadow", function() { return _main__WEBPACK_IMPORTED_MODULE_3__["resetHeaderShadow"]; }); + +/* harmony import */ var _navigation__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./navigation */ "./src/assets/javascripts/components/navigation/index.ts"); +/* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _navigation__WEBPACK_IMPORTED_MODULE_4__) if(["setupComponents","useComponent","mountHeader","watchHeader","applyHeaderType","setHeaderTitleActive","resetHeaderTitleActive","mountHero","applyHero","setHeroHidden","resetHeroHidden","mountMain","watchMain","applyHeaderShadow","setHeaderShadow","resetHeaderShadow","default"].indexOf(__WEBPACK_IMPORT_KEY__) < 0) (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return _navigation__WEBPACK_IMPORTED_MODULE_4__[key]; }) }(__WEBPACK_IMPORT_KEY__)); +/* harmony import */ var _search__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./search */ "./src/assets/javascripts/components/search/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mountSearch", function() { return _search__WEBPACK_IMPORTED_MODULE_5__["mountSearch"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mountSearchQuery", function() { return _search__WEBPACK_IMPORTED_MODULE_5__["mountSearchQuery"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchSearchQuery", function() { return _search__WEBPACK_IMPORTED_MODULE_5__["watchSearchQuery"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mountSearchReset", function() { return _search__WEBPACK_IMPORTED_MODULE_5__["mountSearchReset"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchSearchReset", function() { return _search__WEBPACK_IMPORTED_MODULE_5__["watchSearchReset"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mountSearchResult", function() { return _search__WEBPACK_IMPORTED_MODULE_5__["mountSearchResult"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "applySearchResult", function() { return _search__WEBPACK_IMPORTED_MODULE_5__["applySearchResult"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setSearchResultMeta", function() { return _search__WEBPACK_IMPORTED_MODULE_5__["setSearchResultMeta"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "resetSearchResultMeta", function() { return _search__WEBPACK_IMPORTED_MODULE_5__["resetSearchResultMeta"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "addToSearchResultList", function() { return _search__WEBPACK_IMPORTED_MODULE_5__["addToSearchResultList"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "resetSearchResultList", function() { return _search__WEBPACK_IMPORTED_MODULE_5__["resetSearchResultList"]; }); + +/* harmony import */ var _shared__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./shared */ "./src/assets/javascripts/components/shared/index.ts"); +/* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _shared__WEBPACK_IMPORTED_MODULE_6__) if(["setupComponents","useComponent","mountHeader","watchHeader","applyHeaderType","setHeaderTitleActive","resetHeaderTitleActive","mountHero","applyHero","setHeroHidden","resetHeroHidden","mountMain","watchMain","applyHeaderShadow","setHeaderShadow","resetHeaderShadow","mountSearch","mountSearchQuery","watchSearchQuery","mountSearchReset","watchSearchReset","mountSearchResult","applySearchResult","setSearchResultMeta","resetSearchResultMeta","addToSearchResultList","resetSearchResultList","default"].indexOf(__WEBPACK_IMPORT_KEY__) < 0) (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return _shared__WEBPACK_IMPORTED_MODULE_6__[key]; }) }(__WEBPACK_IMPORT_KEY__)); +/* harmony import */ var _tabs__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./tabs */ "./src/assets/javascripts/components/tabs/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mountTabs", function() { return _tabs__WEBPACK_IMPORTED_MODULE_7__["mountTabs"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "applyTabs", function() { return _tabs__WEBPACK_IMPORTED_MODULE_7__["applyTabs"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setTabsHidden", function() { return _tabs__WEBPACK_IMPORTED_MODULE_7__["setTabsHidden"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "resetTabsHidden", function() { return _tabs__WEBPACK_IMPORTED_MODULE_7__["resetTabsHidden"]; }); + +/* harmony import */ var _toc__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./toc */ "./src/assets/javascripts/components/toc/index.ts"); +/* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _toc__WEBPACK_IMPORTED_MODULE_8__) if(["setupComponents","useComponent","mountHeader","watchHeader","applyHeaderType","setHeaderTitleActive","resetHeaderTitleActive","mountHero","applyHero","setHeroHidden","resetHeroHidden","mountMain","watchMain","applyHeaderShadow","setHeaderShadow","resetHeaderShadow","mountSearch","mountSearchQuery","watchSearchQuery","mountSearchReset","watchSearchReset","mountSearchResult","applySearchResult","setSearchResultMeta","resetSearchResultMeta","addToSearchResultList","resetSearchResultList","mountTabs","applyTabs","setTabsHidden","resetTabsHidden","default"].indexOf(__WEBPACK_IMPORT_KEY__) < 0) (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return _toc__WEBPACK_IMPORTED_MODULE_8__[key]; }) }(__WEBPACK_IMPORT_KEY__)); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + + + + + + + + +/***/ }), + +/***/ "./src/assets/javascripts/components/main/_/index.ts": +/*!***********************************************************!*\ + !*** ./src/assets/javascripts/components/main/_/index.ts ***! + \***********************************************************/ +/*! exports provided: mountMain */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mountMain", function() { return mountMain; }); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); +/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../_ */ "./src/assets/javascripts/components/_/index.ts"); +/* harmony import */ var _react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../react */ "./src/assets/javascripts/components/main/react/index.ts"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Mount main area from source observable + * + * The header must be connected to the main area observable outside of the + * operator function, as the header will persist in-between document switches + * while the main area is replaced. However, the header observable must be + * passed to this function, so we connect both via a long-living subject. + * + * @param options - Options + * + * @return Operator function + */ +function mountMain(_a) { + var header$ = _a.header$, viewport$ = _a.viewport$; + var main$ = new rxjs__WEBPACK_IMPORTED_MODULE_0__["Subject"](); + /* Connect to main area observable via long-living subject */ + Object(___WEBPACK_IMPORTED_MODULE_2__["useComponent"])("header") + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["switchMap"])(function (header) { return main$ + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["distinctUntilKeyChanged"])("active"), Object(_react__WEBPACK_IMPORTED_MODULE_3__["applyHeaderShadow"])(header)); })) + .subscribe(); + /* Return operator */ + return Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["pipe"])(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["switchMap"])(function (el) { return Object(_react__WEBPACK_IMPORTED_MODULE_3__["watchMain"])(el, { header$: header$, viewport$: viewport$ }); }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["tap"])(function (main) { return main$.next(main); })); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/components/main/index.ts": +/*!*********************************************************!*\ + !*** ./src/assets/javascripts/components/main/index.ts ***! + \*********************************************************/ +/*! exports provided: mountMain, watchMain, applyHeaderShadow, setHeaderShadow, resetHeaderShadow */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_ */ "./src/assets/javascripts/components/main/_/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mountMain", function() { return ___WEBPACK_IMPORTED_MODULE_0__["mountMain"]; }); + +/* harmony import */ var _react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./react */ "./src/assets/javascripts/components/main/react/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchMain", function() { return _react__WEBPACK_IMPORTED_MODULE_1__["watchMain"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "applyHeaderShadow", function() { return _react__WEBPACK_IMPORTED_MODULE_1__["applyHeaderShadow"]; }); + +/* harmony import */ var _set__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./set */ "./src/assets/javascripts/components/main/set/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setHeaderShadow", function() { return _set__WEBPACK_IMPORTED_MODULE_2__["setHeaderShadow"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "resetHeaderShadow", function() { return _set__WEBPACK_IMPORTED_MODULE_2__["resetHeaderShadow"]; }); + +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + + +/***/ }), + +/***/ "./src/assets/javascripts/components/main/react/index.ts": +/*!***************************************************************!*\ + !*** ./src/assets/javascripts/components/main/react/index.ts ***! + \***************************************************************/ +/*! exports provided: watchMain, applyHeaderShadow */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "watchMain", function() { return watchMain; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "applyHeaderShadow", function() { return applyHeaderShadow; }); +/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); +/* harmony import */ var _set__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../set */ "./src/assets/javascripts/components/main/set/index.ts"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Watch main area + * + * This function returns an observable that computes the visual parameters of + * the main area which depends on the viewport vertical offset and height, as + * well as the height of the header element, if the header is fixed. + * + * @param el - Main area element + * @param options - Options + * + * @return Main area observable + */ +function watchMain(el, _a) { + var header$ = _a.header$, viewport$ = _a.viewport$; + /* Compute necessary adjustment for header */ + var adjust$ = header$ + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["pluck"])("height")); + /* Compute the main area's visible height */ + var height$ = Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["combineLatest"])([adjust$, viewport$]) + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(function (_a) { + var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_a, 2), adjust = _b[0], _c = _b[1], y = _c.offset.y, height = _c.size.height; + var top = el.offsetTop; + var bottom = el.offsetHeight + top; + return height + - Math.max(0, top - y, adjust) + - Math.max(0, height + y - bottom); + }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(function (height) { return Math.max(0, height); }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["distinctUntilChanged"])()); + /* Compute whether the viewport offset is past the main area's top */ + var active$ = Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["combineLatest"])([adjust$, viewport$]) + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(function (_a) { + var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_a, 2), adjust = _b[0], y = _b[1].offset.y; + return y >= el.offsetTop - adjust; + }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["distinctUntilChanged"])()); + /* Combine into a single observable */ + return Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["combineLatest"])([adjust$, height$, active$]) + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(function (_a) { + var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_a, 3), adjust = _b[0], height = _b[1], active = _b[2]; + return ({ + offset: el.offsetTop - adjust, + height: height, + active: active + }); + })); +} +/* ------------------------------------------------------------------------- */ +/** + * Apply header shadow + * + * @param el - Header element + * + * @return Operator function + */ +function applyHeaderShadow(el) { + return Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["pipe"])( + /* Defer repaint to next animation frame */ + Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["observeOn"])(rxjs__WEBPACK_IMPORTED_MODULE_1__["animationFrameScheduler"]), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["tap"])(function (_a) { + var active = _a.active; + Object(_set__WEBPACK_IMPORTED_MODULE_3__["setHeaderShadow"])(el, active); + }), + /* Reset on complete or error */ + Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["finalize"])(function () { + Object(_set__WEBPACK_IMPORTED_MODULE_3__["resetHeaderShadow"])(el); + })); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/components/main/set/index.ts": +/*!*************************************************************!*\ + !*** ./src/assets/javascripts/components/main/set/index.ts ***! + \*************************************************************/ +/*! exports provided: setHeaderShadow, resetHeaderShadow */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setHeaderShadow", function() { return setHeaderShadow; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "resetHeaderShadow", function() { return resetHeaderShadow; }); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Set header shadow + * + * @param el - Header element + * @param value - Whether the shadow is shown + */ +function setHeaderShadow(el, value) { + el.setAttribute("data-md-state", value ? "shadow" : ""); +} +/** + * Reset header shadow + * + * @param el - Header element + */ +function resetHeaderShadow(el) { + el.removeAttribute("data-md-state"); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/components/navigation/_/index.ts": +/*!*****************************************************************!*\ + !*** ./src/assets/javascripts/components/navigation/_/index.ts ***! + \*****************************************************************/ +/*! exports provided: mountNavigation */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mountNavigation", function() { return mountNavigation; }); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); +/* harmony import */ var browser__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! browser */ "./src/assets/javascripts/browser/index.ts"); +/* harmony import */ var _shared__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../shared */ "./src/assets/javascripts/components/shared/index.ts"); +/* harmony import */ var _layer__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../layer */ "./src/assets/javascripts/components/navigation/layer/index.ts"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + + +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Mount navigation from source observable + * + * @param options - Options + * + * @return Operator function + */ +function mountNavigation(_a) { + var header$ = _a.header$, main$ = _a.main$, viewport$ = _a.viewport$, screen$ = _a.screen$; + return Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["pipe"])(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["switchMap"])(function (el) { return screen$ + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["switchMap"])(function (screen) { + /* [screen +]: Mount navigation in sidebar */ + if (screen) { + return Object(_shared__WEBPACK_IMPORTED_MODULE_3__["watchSidebar"])(el, { main$: main$, viewport$: viewport$ }) + .pipe(Object(_shared__WEBPACK_IMPORTED_MODULE_3__["applySidebar"])(el, { header$: header$ }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["map"])(function (sidebar) { return ({ sidebar: sidebar }); })); + /* [screen -]: Mount navigation in drawer */ + } + else { + var els = Object(browser__WEBPACK_IMPORTED_MODULE_2__["getElements"])("nav", el); + return Object(_layer__WEBPACK_IMPORTED_MODULE_4__["watchNavigationLayer"])(els) + .pipe(Object(_layer__WEBPACK_IMPORTED_MODULE_4__["applyNavigationLayer"])(els), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["map"])(function (layer) { return ({ layer: layer }); })); + } + })); })); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/components/navigation/index.ts": +/*!***************************************************************!*\ + !*** ./src/assets/javascripts/components/navigation/index.ts ***! + \***************************************************************/ +/*! no static exports found */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_ */ "./src/assets/javascripts/components/navigation/_/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mountNavigation", function() { return ___WEBPACK_IMPORTED_MODULE_0__["mountNavigation"]; }); + +/* harmony import */ var _layer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./layer */ "./src/assets/javascripts/components/navigation/layer/index.ts"); +/* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _layer__WEBPACK_IMPORTED_MODULE_1__) if(["mountNavigation","default"].indexOf(__WEBPACK_IMPORT_KEY__) < 0) (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return _layer__WEBPACK_IMPORTED_MODULE_1__[key]; }) }(__WEBPACK_IMPORT_KEY__)); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + +/***/ }), + +/***/ "./src/assets/javascripts/components/navigation/layer/_/index.ts": +/*!***********************************************************************!*\ + !*** ./src/assets/javascripts/components/navigation/layer/_/index.ts ***! + \***********************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + +/***/ }), + +/***/ "./src/assets/javascripts/components/navigation/layer/index.ts": +/*!*********************************************************************!*\ + !*** ./src/assets/javascripts/components/navigation/layer/index.ts ***! + \*********************************************************************/ +/*! no static exports found */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_ */ "./src/assets/javascripts/components/navigation/layer/_/index.ts"); +/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_0__); +/* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in ___WEBPACK_IMPORTED_MODULE_0__) if(__WEBPACK_IMPORT_KEY__ !== 'default') (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return ___WEBPACK_IMPORTED_MODULE_0__[key]; }) }(__WEBPACK_IMPORT_KEY__)); +/* harmony import */ var _react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./react */ "./src/assets/javascripts/components/navigation/layer/react/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchNavigationLayer", function() { return _react__WEBPACK_IMPORTED_MODULE_1__["watchNavigationLayer"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "applyNavigationLayer", function() { return _react__WEBPACK_IMPORTED_MODULE_1__["applyNavigationLayer"]; }); + +/* harmony import */ var _set__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./set */ "./src/assets/javascripts/components/navigation/layer/set/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setOverflowScrolling", function() { return _set__WEBPACK_IMPORTED_MODULE_2__["setOverflowScrolling"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "resetOverflowScrolling", function() { return _set__WEBPACK_IMPORTED_MODULE_2__["resetOverflowScrolling"]; }); + +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + + +/***/ }), + +/***/ "./src/assets/javascripts/components/navigation/layer/react/index.ts": +/*!***************************************************************************!*\ + !*** ./src/assets/javascripts/components/navigation/layer/react/index.ts ***! + \***************************************************************************/ +/*! exports provided: watchNavigationLayer, applyNavigationLayer */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "watchNavigationLayer", function() { return watchNavigationLayer; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "applyNavigationLayer", function() { return applyNavigationLayer; }); +/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); +/* harmony import */ var ramda__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ramda */ "./node_modules/ramda/es/index.js"); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); +/* harmony import */ var browser__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! browser */ "./src/assets/javascripts/browser/index.ts"); +/* harmony import */ var _set__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../set */ "./src/assets/javascripts/components/navigation/layer/set/index.ts"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + + + +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Watch navigation layer + * + * On iOS we want to add `-webkit-overflow-scrolling: touch` for the menus + * contained in the drawer, but as the navigational layers are nested, we can + * only add it to the topmost layer or extremely weird cropping will occur. + * This implementation keeps track of the previous and current layer. + * + * @param els - Navigation elements + * + * @return Navigation layer observable + */ +function watchNavigationLayer(els) { + var e_1, _a; + var table = new Map(); + try { + for (var els_1 = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__values"])(els), els_1_1 = els_1.next(); !els_1_1.done; els_1_1 = els_1.next()) { + var el = els_1_1.value; + var label = Object(browser__WEBPACK_IMPORTED_MODULE_4__["getElement"])("label", el); + if (typeof label !== "undefined") { + var input = Object(browser__WEBPACK_IMPORTED_MODULE_4__["getElementOrThrow"])("#" + label.htmlFor); + table.set(input, el); + } + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (els_1_1 && !els_1_1.done && (_a = els_1.return)) _a.call(els_1); + } + finally { if (e_1) throw e_1.error; } + } + /* Determine topmost layer */ + var layer$ = rxjs__WEBPACK_IMPORTED_MODULE_2__["merge"].apply(void 0, Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__spread"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__spread"])(table.keys()).map(function (input) { return (Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["fromEvent"])(input, "change")); }))).pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(function () { return Object(browser__WEBPACK_IMPORTED_MODULE_4__["getElementOrThrow"])(".md-nav__list", table.get(Object(ramda__WEBPACK_IMPORTED_MODULE_1__["findLast"])(function (_a) { + var checked = _a.checked; + return checked; + }, Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__spread"])(table.keys())))); })); + /* Return previous and next layer */ + return layer$ + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(function (next) { return ({ next: next }); }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["scan"])(function (_a, _b) { + var prev = _a.next; + var next = _b.next; + return ({ prev: prev, next: next }); + })); +} +/* ------------------------------------------------------------------------- */ +/** + * Apply navigation layer + * + * @param els - Navigation elements + * + * @return Operator function + */ +function applyNavigationLayer(els) { + return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["pipe"])( + /* Defer repaint to next animation frame */ + Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["observeOn"])(rxjs__WEBPACK_IMPORTED_MODULE_2__["animationFrameScheduler"]), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["tap"])(function (_a) { + var prev = _a.prev; + if (prev) + Object(_set__WEBPACK_IMPORTED_MODULE_5__["resetOverflowScrolling"])(prev); + }), + /* Wait until transition has finished */ + Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["delay"])(250), + /* Defer repaint to next animation frame */ + Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["observeOn"])(rxjs__WEBPACK_IMPORTED_MODULE_2__["animationFrameScheduler"]), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["tap"])(function (_a) { + var next = _a.next; + Object(_set__WEBPACK_IMPORTED_MODULE_5__["setOverflowScrolling"])(next); + }), + /* Reset on complete or error */ + Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["finalize"])(function () { + var e_2, _a; + try { + for (var els_2 = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__values"])(els), els_2_1 = els_2.next(); !els_2_1.done; els_2_1 = els_2.next()) { + var el = els_2_1.value; + Object(_set__WEBPACK_IMPORTED_MODULE_5__["resetOverflowScrolling"])(Object(browser__WEBPACK_IMPORTED_MODULE_4__["getElementOrThrow"])(".md-nav__list", el)); + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (els_2_1 && !els_2_1.done && (_a = els_2.return)) _a.call(els_2); + } + finally { if (e_2) throw e_2.error; } + } + })); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/components/navigation/layer/set/index.ts": +/*!*************************************************************************!*\ + !*** ./src/assets/javascripts/components/navigation/layer/set/index.ts ***! + \*************************************************************************/ +/*! exports provided: setOverflowScrolling, resetOverflowScrolling */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setOverflowScrolling", function() { return setOverflowScrolling; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "resetOverflowScrolling", function() { return resetOverflowScrolling; }); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Set overflow scrolling + * + * @param el - Scrollable element + */ +function setOverflowScrolling(el) { + el.style.webkitOverflowScrolling = "touch"; +} +/** + * Reset overflow scrolling + * + * @param el - Scrollable element + */ +function resetOverflowScrolling(el) { + el.style.webkitOverflowScrolling = ""; +} + + +/***/ }), + +/***/ "./src/assets/javascripts/components/search/_/index.ts": +/*!*************************************************************!*\ + !*** ./src/assets/javascripts/components/search/_/index.ts ***! + \*************************************************************/ +/*! exports provided: mountSearch */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mountSearch", function() { return mountSearch; }); +/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Mount search from source observable + * + * @param options - Options + * + * @return Operator function + */ +function mountSearch(_a) { + var query$ = _a.query$, reset$ = _a.reset$, result$ = _a.result$; + return Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["pipe"])(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["switchMap"])(function () { return Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["combineLatest"])([query$, result$, reset$]) + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(function (_a) { + var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_a, 2), query = _b[0], result = _b[1]; + return ({ query: query, result: result }); + })); })); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/components/search/index.ts": +/*!***********************************************************!*\ + !*** ./src/assets/javascripts/components/search/index.ts ***! + \***********************************************************/ +/*! exports provided: mountSearch, mountSearchQuery, watchSearchQuery, mountSearchReset, watchSearchReset, mountSearchResult, applySearchResult, setSearchResultMeta, resetSearchResultMeta, addToSearchResultList, resetSearchResultList */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_ */ "./src/assets/javascripts/components/search/_/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mountSearch", function() { return ___WEBPACK_IMPORTED_MODULE_0__["mountSearch"]; }); + +/* harmony import */ var _query__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./query */ "./src/assets/javascripts/components/search/query/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mountSearchQuery", function() { return _query__WEBPACK_IMPORTED_MODULE_1__["mountSearchQuery"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchSearchQuery", function() { return _query__WEBPACK_IMPORTED_MODULE_1__["watchSearchQuery"]; }); + +/* harmony import */ var _reset__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./reset */ "./src/assets/javascripts/components/search/reset/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mountSearchReset", function() { return _reset__WEBPACK_IMPORTED_MODULE_2__["mountSearchReset"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchSearchReset", function() { return _reset__WEBPACK_IMPORTED_MODULE_2__["watchSearchReset"]; }); + +/* harmony import */ var _result__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./result */ "./src/assets/javascripts/components/search/result/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mountSearchResult", function() { return _result__WEBPACK_IMPORTED_MODULE_3__["mountSearchResult"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "applySearchResult", function() { return _result__WEBPACK_IMPORTED_MODULE_3__["applySearchResult"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setSearchResultMeta", function() { return _result__WEBPACK_IMPORTED_MODULE_3__["setSearchResultMeta"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "resetSearchResultMeta", function() { return _result__WEBPACK_IMPORTED_MODULE_3__["resetSearchResultMeta"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "addToSearchResultList", function() { return _result__WEBPACK_IMPORTED_MODULE_3__["addToSearchResultList"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "resetSearchResultList", function() { return _result__WEBPACK_IMPORTED_MODULE_3__["resetSearchResultList"]; }); + +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + + + +/***/ }), + +/***/ "./src/assets/javascripts/components/search/query/_/index.ts": +/*!*******************************************************************!*\ + !*** ./src/assets/javascripts/components/search/query/_/index.ts ***! + \*******************************************************************/ +/*! exports provided: mountSearchQuery */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mountSearchQuery", function() { return mountSearchQuery; }); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); +/* harmony import */ var browser__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! browser */ "./src/assets/javascripts/browser/index.ts"); +/* harmony import */ var workers__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! workers */ "./src/assets/javascripts/workers/index.ts"); +/* harmony import */ var _react__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../react */ "./src/assets/javascripts/components/search/query/react/index.ts"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + + +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Mount search query from source observable + * + * @param handler - Worker handler + * @param options - Options + * + * @return Operator function + */ +function mountSearchQuery(_a, options) { + var tx$ = _a.tx$; + if (options === void 0) { options = {}; } + return Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["pipe"])(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["switchMap"])(function (el) { + var query$ = Object(_react__WEBPACK_IMPORTED_MODULE_4__["watchSearchQuery"])(el, options); + /* Subscribe worker to search query */ + query$ + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["distinctUntilKeyChanged"])("value"), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["map"])(function (_a) { + var value = _a.value; + return ({ + type: workers__WEBPACK_IMPORTED_MODULE_3__["SearchMessageType"].QUERY, + data: value + }); + })) + .subscribe(tx$.next.bind(tx$)); + /* Toggle search on focus */ + query$ + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["distinctUntilKeyChanged"])("focus")) + .subscribe(function (_a) { + var focus = _a.focus; + if (focus) + Object(browser__WEBPACK_IMPORTED_MODULE_2__["setToggle"])("search", focus); + }); + /* Return search query */ + return query$; + })); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/components/search/query/index.ts": +/*!*****************************************************************!*\ + !*** ./src/assets/javascripts/components/search/query/index.ts ***! + \*****************************************************************/ +/*! exports provided: mountSearchQuery, watchSearchQuery */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_ */ "./src/assets/javascripts/components/search/query/_/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mountSearchQuery", function() { return ___WEBPACK_IMPORTED_MODULE_0__["mountSearchQuery"]; }); + +/* harmony import */ var _react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./react */ "./src/assets/javascripts/components/search/query/react/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchSearchQuery", function() { return _react__WEBPACK_IMPORTED_MODULE_1__["watchSearchQuery"]; }); + +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + +/***/ }), + +/***/ "./src/assets/javascripts/components/search/query/react/index.ts": +/*!***********************************************************************!*\ + !*** ./src/assets/javascripts/components/search/query/react/index.ts ***! + \***********************************************************************/ +/*! exports provided: watchSearchQuery */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "watchSearchQuery", function() { return watchSearchQuery; }); +/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); +/* harmony import */ var browser__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! browser */ "./src/assets/javascripts/browser/index.ts"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + +/* ---------------------------------------------------------------------------- + * Helper functions + * ------------------------------------------------------------------------- */ +/** + * Default transformation function + * + * Rogue control characters are filtered before handing the query to the + * search index, as `lunr` will throw otherwise. + * + * @param value - Query value + * + * @return Transformed query value + */ +function defaultTransform(value) { + return value + .replace(/(?:^|\s+)[*+-:^~]+(?=\s+|$)/g, "") + .trim() + .replace(/\s+|\b$/g, "* "); +} +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Watch search query + * + * Note that the focus event which triggers re-reading the current query value + * is delayed by `1ms` so the input's empty state is allowed to propagate. + * + * @param el - Search query element + * @param options - Options + * + * @return Search query observable + */ +function watchSearchQuery(el, _a) { + var transform = (_a === void 0 ? {} : _a).transform; + var fn = transform || defaultTransform; + /* Intercept keyboard events */ + var value$ = Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["merge"])(Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["fromEvent"])(el, "keyup"), Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["fromEvent"])(el, "focus").pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["delay"])(1))) + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(function () { return fn(el.value); }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["startWith"])(fn(el.value)), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["distinctUntilChanged"])()); + /* Intercept focus events */ + var focus$ = Object(browser__WEBPACK_IMPORTED_MODULE_3__["watchElementFocus"])(el); + /* Combine into a single observable */ + return Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["combineLatest"])([value$, focus$]) + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(function (_a) { + var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_a, 2), value = _b[0], focus = _b[1]; + return ({ value: value, focus: focus }); + })); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/components/search/reset/_/index.ts": +/*!*******************************************************************!*\ + !*** ./src/assets/javascripts/components/search/reset/_/index.ts ***! + \*******************************************************************/ +/*! exports provided: mountSearchReset */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mountSearchReset", function() { return mountSearchReset; }); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); +/* harmony import */ var browser__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! browser */ "./src/assets/javascripts/browser/index.ts"); +/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../_ */ "./src/assets/javascripts/components/_/index.ts"); +/* harmony import */ var _react__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../react */ "./src/assets/javascripts/components/search/reset/react/index.ts"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + + +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Mount search reset from source observable + * + * @return Operator function + */ +function mountSearchReset() { + return Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["pipe"])(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["switchMap"])(function (el) { return Object(_react__WEBPACK_IMPORTED_MODULE_4__["watchSearchReset"])(el) + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["switchMapTo"])(Object(___WEBPACK_IMPORTED_MODULE_3__["useComponent"])("search-query")), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["tap"])(browser__WEBPACK_IMPORTED_MODULE_2__["setElementFocus"]), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["mapTo"])(undefined)); }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["startWith"])(undefined)); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/components/search/reset/index.ts": +/*!*****************************************************************!*\ + !*** ./src/assets/javascripts/components/search/reset/index.ts ***! + \*****************************************************************/ +/*! exports provided: mountSearchReset, watchSearchReset */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_ */ "./src/assets/javascripts/components/search/reset/_/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mountSearchReset", function() { return ___WEBPACK_IMPORTED_MODULE_0__["mountSearchReset"]; }); + +/* harmony import */ var _react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./react */ "./src/assets/javascripts/components/search/reset/react/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchSearchReset", function() { return _react__WEBPACK_IMPORTED_MODULE_1__["watchSearchReset"]; }); + +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + +/***/ }), + +/***/ "./src/assets/javascripts/components/search/reset/react/index.ts": +/*!***********************************************************************!*\ + !*** ./src/assets/javascripts/components/search/reset/react/index.ts ***! + \***********************************************************************/ +/*! exports provided: watchSearchReset */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "watchSearchReset", function() { return watchSearchReset; }); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Watch search reset + * + * @param el - Search reset element + * + * @return Search reset observable + */ +function watchSearchReset(el) { + return Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["fromEvent"])(el, "click") + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["mapTo"])(undefined)); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/components/search/result/_/index.ts": +/*!********************************************************************!*\ + !*** ./src/assets/javascripts/components/search/result/_/index.ts ***! + \********************************************************************/ +/*! exports provided: mountSearchResult */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mountSearchResult", function() { return mountSearchResult; }); +/* harmony import */ var ramda__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ramda */ "./node_modules/ramda/es/index.js"); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); +/* harmony import */ var browser__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! browser */ "./src/assets/javascripts/browser/index.ts"); +/* harmony import */ var workers__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! workers */ "./src/assets/javascripts/workers/index.ts"); +/* harmony import */ var _react__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../react */ "./src/assets/javascripts/components/search/result/react/index.ts"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + + + +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Mount search result from source observable + * + * @param handler - Worker handler + * @param options - Options + * + * @return Operator function + */ +function mountSearchResult(_a, _b) { + var rx$ = _a.rx$; + var query$ = _b.query$; + return Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["pipe"])(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["switchMap"])(function (el) { + var container = el.parentElement; + /* Compute whether there are more search results to fetch */ + var fetch$ = Object(browser__WEBPACK_IMPORTED_MODULE_3__["watchElementOffset"])(container) + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(function (_a) { + var y = _a.y; + return y >= container.scrollHeight - container.offsetHeight - 16; + }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["distinctUntilChanged"])(), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["filter"])(ramda__WEBPACK_IMPORTED_MODULE_0__["identity"])); + /* Apply search results */ + return rx$ + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["filter"])(workers__WEBPACK_IMPORTED_MODULE_4__["isSearchResultMessage"]), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["pluck"])("data"), Object(_react__WEBPACK_IMPORTED_MODULE_5__["applySearchResult"])(el, { query$: query$, fetch$: fetch$ })); + })); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/components/search/result/index.ts": +/*!******************************************************************!*\ + !*** ./src/assets/javascripts/components/search/result/index.ts ***! + \******************************************************************/ +/*! exports provided: mountSearchResult, applySearchResult, setSearchResultMeta, resetSearchResultMeta, addToSearchResultList, resetSearchResultList */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_ */ "./src/assets/javascripts/components/search/result/_/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mountSearchResult", function() { return ___WEBPACK_IMPORTED_MODULE_0__["mountSearchResult"]; }); + +/* harmony import */ var _react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./react */ "./src/assets/javascripts/components/search/result/react/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "applySearchResult", function() { return _react__WEBPACK_IMPORTED_MODULE_1__["applySearchResult"]; }); + +/* harmony import */ var _set__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./set */ "./src/assets/javascripts/components/search/result/set/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setSearchResultMeta", function() { return _set__WEBPACK_IMPORTED_MODULE_2__["setSearchResultMeta"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "resetSearchResultMeta", function() { return _set__WEBPACK_IMPORTED_MODULE_2__["resetSearchResultMeta"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "addToSearchResultList", function() { return _set__WEBPACK_IMPORTED_MODULE_2__["addToSearchResultList"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "resetSearchResultList", function() { return _set__WEBPACK_IMPORTED_MODULE_2__["resetSearchResultList"]; }); + +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + + +/***/ }), + +/***/ "./src/assets/javascripts/components/search/result/react/index.ts": +/*!************************************************************************!*\ + !*** ./src/assets/javascripts/components/search/result/react/index.ts ***! + \************************************************************************/ +/*! exports provided: applySearchResult */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "applySearchResult", function() { return applySearchResult; }); +/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); +/* harmony import */ var browser__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! browser */ "./src/assets/javascripts/browser/index.ts"); +/* harmony import */ var templates__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! templates */ "./src/assets/javascripts/templates/index.ts"); +/* harmony import */ var _set__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../set */ "./src/assets/javascripts/components/search/result/set/index.ts"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + + + +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Apply search results + * + * This function will perform a lazy rendering of the search results, depending + * on the vertical offset of the search result container. When the scroll offset + * reaches the bottom of the element, more results are fetched and rendered. + * + * @param el - Search result element + * @param options - Options + * + * @return Operator function + */ +function applySearchResult(el, _a) { + var query$ = _a.query$, fetch$ = _a.fetch$; + var list = Object(browser__WEBPACK_IMPORTED_MODULE_3__["getElementOrThrow"])(".md-search-result__list", el); + var meta = Object(browser__WEBPACK_IMPORTED_MODULE_3__["getElementOrThrow"])(".md-search-result__meta", el); + return Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["pipe"])( + /* Apply search result metadata */ + Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["withLatestFrom"])(query$), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(function (_a) { + var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_a, 2), result = _b[0], query = _b[1]; + if (query.value) { + Object(_set__WEBPACK_IMPORTED_MODULE_5__["setSearchResultMeta"])(meta, result.length); + } + else { + Object(_set__WEBPACK_IMPORTED_MODULE_5__["resetSearchResultMeta"])(meta); + } + return result; + }), + /* Apply search result list */ + Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["switchMap"])(function (result) { return fetch$ + .pipe( + /* Defer repaint to next animation frame */ + Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["observeOn"])(rxjs__WEBPACK_IMPORTED_MODULE_1__["animationFrameScheduler"]), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["scan"])(function (index) { + var container = el.parentElement; + while (index < result.length) { + Object(_set__WEBPACK_IMPORTED_MODULE_5__["addToSearchResultList"])(list, Object(templates__WEBPACK_IMPORTED_MODULE_4__["renderSearchResult"])(result[index++])); + if (container.scrollHeight - container.offsetHeight > 16) + break; + } + return index; + }, 0), + /* Re-map to search result */ + Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["mapTo"])(result), + /* Reset on complete or error */ + Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["finalize"])(function () { + Object(_set__WEBPACK_IMPORTED_MODULE_5__["resetSearchResultList"])(list); + })); })); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/components/search/result/set/index.ts": +/*!**********************************************************************!*\ + !*** ./src/assets/javascripts/components/search/result/set/index.ts ***! + \**********************************************************************/ +/*! exports provided: setSearchResultMeta, resetSearchResultMeta, addToSearchResultList, resetSearchResultList */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setSearchResultMeta", function() { return setSearchResultMeta; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "resetSearchResultMeta", function() { return resetSearchResultMeta; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addToSearchResultList", function() { return addToSearchResultList; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "resetSearchResultList", function() { return resetSearchResultList; }); +/* harmony import */ var utilities__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! utilities */ "./src/assets/javascripts/utilities/index.ts"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Set number of search results + * + * @param el - Search result metadata element + * @param value - Number of results + */ +function setSearchResultMeta(el, value) { + switch (value) { + /* No results */ + case 0: + el.textContent = Object(utilities__WEBPACK_IMPORTED_MODULE_0__["translate"])("search.result.none"); + break; + /* One result */ + case 1: + el.textContent = Object(utilities__WEBPACK_IMPORTED_MODULE_0__["translate"])("search.result.one"); + break; + /* Multiple result */ + default: + el.textContent = Object(utilities__WEBPACK_IMPORTED_MODULE_0__["translate"])("search.result.other", value.toString()); + } +} +/** + * Reset number of search results + * + * @param el - Search result metadata element + */ +function resetSearchResultMeta(el) { + el.textContent = Object(utilities__WEBPACK_IMPORTED_MODULE_0__["translate"])("search.result.placeholder"); +} +/* ------------------------------------------------------------------------- */ +/** + * Add an element to the search result list + * + * @param el - Search result list element + * @param child - Search result element + */ +function addToSearchResultList(el, child) { + el.appendChild(child); +} +/** + * Reset search result list + * + * @param el - Search result list element + */ +function resetSearchResultList(el) { + el.innerHTML = ""; +} + + +/***/ }), + +/***/ "./src/assets/javascripts/components/shared/index.ts": +/*!***********************************************************!*\ + !*** ./src/assets/javascripts/components/shared/index.ts ***! + \***********************************************************/ +/*! no static exports found */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _sidebar__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sidebar */ "./src/assets/javascripts/components/shared/sidebar/index.ts"); +/* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _sidebar__WEBPACK_IMPORTED_MODULE_0__) if(__WEBPACK_IMPORT_KEY__ !== 'default') (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return _sidebar__WEBPACK_IMPORTED_MODULE_0__[key]; }) }(__WEBPACK_IMPORT_KEY__)); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + +/***/ }), + +/***/ "./src/assets/javascripts/components/shared/sidebar/_/index.ts": +/*!*********************************************************************!*\ + !*** ./src/assets/javascripts/components/shared/sidebar/_/index.ts ***! + \*********************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + +/***/ }), + +/***/ "./src/assets/javascripts/components/shared/sidebar/index.ts": +/*!*******************************************************************!*\ + !*** ./src/assets/javascripts/components/shared/sidebar/index.ts ***! + \*******************************************************************/ +/*! no static exports found */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_ */ "./src/assets/javascripts/components/shared/sidebar/_/index.ts"); +/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_0__); +/* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in ___WEBPACK_IMPORTED_MODULE_0__) if(__WEBPACK_IMPORT_KEY__ !== 'default') (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return ___WEBPACK_IMPORTED_MODULE_0__[key]; }) }(__WEBPACK_IMPORT_KEY__)); +/* harmony import */ var _react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./react */ "./src/assets/javascripts/components/shared/sidebar/react/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchSidebar", function() { return _react__WEBPACK_IMPORTED_MODULE_1__["watchSidebar"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "applySidebar", function() { return _react__WEBPACK_IMPORTED_MODULE_1__["applySidebar"]; }); + +/* harmony import */ var _set__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./set */ "./src/assets/javascripts/components/shared/sidebar/set/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setSidebarOffset", function() { return _set__WEBPACK_IMPORTED_MODULE_2__["setSidebarOffset"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "resetSidebarOffset", function() { return _set__WEBPACK_IMPORTED_MODULE_2__["resetSidebarOffset"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setSidebarHeight", function() { return _set__WEBPACK_IMPORTED_MODULE_2__["setSidebarHeight"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "resetSidebarHeight", function() { return _set__WEBPACK_IMPORTED_MODULE_2__["resetSidebarHeight"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setSidebarLock", function() { return _set__WEBPACK_IMPORTED_MODULE_2__["setSidebarLock"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "resetSidebarLock", function() { return _set__WEBPACK_IMPORTED_MODULE_2__["resetSidebarLock"]; }); + +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + + +/***/ }), + +/***/ "./src/assets/javascripts/components/shared/sidebar/react/index.ts": +/*!*************************************************************************!*\ + !*** ./src/assets/javascripts/components/shared/sidebar/react/index.ts ***! + \*************************************************************************/ +/*! exports provided: watchSidebar, applySidebar */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "watchSidebar", function() { return watchSidebar; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "applySidebar", function() { return applySidebar; }); +/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); +/* harmony import */ var _set__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../set */ "./src/assets/javascripts/components/shared/sidebar/set/index.ts"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Watch sidebar + * + * This function returns an observable that computes the visual parameters of + * the sidebar which depends on the vertical viewport offset, as well as the + * height of the main area. When the page is scrolled beyond the header, the + * sidebar is locked and fills the remaining space. + * + * @param el - Sidebar element + * @param options - Options + * + * @return Sidebar observable + */ +function watchSidebar(el, _a) { + var main$ = _a.main$, viewport$ = _a.viewport$; + /* Adjust for internal main area offset */ + var adjust$ = viewport$ + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["distinctUntilKeyChanged"])("size"), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(function () { return parseFloat(getComputedStyle(el.parentElement) + .getPropertyValue("padding-top")); }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["distinctUntilChanged"])()); + /* Compute the sidebar's available height */ + var height$ = viewport$ + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["withLatestFrom"])(adjust$, main$), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(function (_a) { + var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_a, 3), y = _b[0].offset.y, adjust = _b[1], _c = _b[2], offset = _c.offset, height = _c.height; + return (height + + Math.min(adjust, Math.max(0, y - offset)) + - adjust); + }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["distinctUntilChanged"])()); + /* Compute whether the sidebar should be locked */ + var lock$ = viewport$ + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["withLatestFrom"])(adjust$, main$), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(function (_a) { + var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_a, 3), y = _b[0].offset.y, adjust = _b[1], offset = _b[2].offset; + return (y >= offset + adjust); + }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["distinctUntilChanged"])()); + /* Combine into single observable */ + return Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["combineLatest"])([height$, lock$]) + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(function (_a) { + var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_a, 2), height = _b[0], lock = _b[1]; + return ({ height: height, lock: lock }); + })); +} +/* ------------------------------------------------------------------------- */ +/** + * Apply sidebar + * + * @param el - Sidebar element + * @param options - Options + * + * @return Operator function + */ +function applySidebar(el, _a) { + var header$ = _a.header$; + return Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["pipe"])( + /* Defer repaint to next animation frame */ + Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["observeOn"])(rxjs__WEBPACK_IMPORTED_MODULE_1__["animationFrameScheduler"]), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["withLatestFrom"])(header$), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["tap"])(function (_a) { + var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_a, 2), _c = _b[0], height = _c.height, lock = _c.lock, offset = _b[1].height; + Object(_set__WEBPACK_IMPORTED_MODULE_3__["setSidebarHeight"])(el, height); + Object(_set__WEBPACK_IMPORTED_MODULE_3__["setSidebarLock"])(el, lock); + /* Set offset in locked state depending on header height */ + if (lock) + Object(_set__WEBPACK_IMPORTED_MODULE_3__["setSidebarOffset"])(el, offset); + else + Object(_set__WEBPACK_IMPORTED_MODULE_3__["resetSidebarOffset"])(el); + }), + /* Re-map to sidebar */ + Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(function (_a) { + var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_a, 1), sidebar = _b[0]; + return sidebar; + }), + /* Reset on complete or error */ + Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["finalize"])(function () { + Object(_set__WEBPACK_IMPORTED_MODULE_3__["resetSidebarOffset"])(el); + Object(_set__WEBPACK_IMPORTED_MODULE_3__["resetSidebarHeight"])(el); + Object(_set__WEBPACK_IMPORTED_MODULE_3__["resetSidebarLock"])(el); + })); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/components/shared/sidebar/set/index.ts": +/*!***********************************************************************!*\ + !*** ./src/assets/javascripts/components/shared/sidebar/set/index.ts ***! + \***********************************************************************/ +/*! exports provided: setSidebarOffset, resetSidebarOffset, setSidebarHeight, resetSidebarHeight, setSidebarLock, resetSidebarLock */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setSidebarOffset", function() { return setSidebarOffset; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "resetSidebarOffset", function() { return resetSidebarOffset; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setSidebarHeight", function() { return setSidebarHeight; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "resetSidebarHeight", function() { return resetSidebarHeight; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setSidebarLock", function() { return setSidebarLock; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "resetSidebarLock", function() { return resetSidebarLock; }); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Set sidebar offset + * + * @param el - Sidebar element + * @param value - Sidebar offset + */ +function setSidebarOffset(el, value) { + el.style.top = value + "px"; +} +/** + * Reset sidebar offset + * + * @param el - Sidebar element + */ +function resetSidebarOffset(el) { + el.style.top = ""; +} +/* ------------------------------------------------------------------------- */ +/** + * Set sidebar height + * + * @param el - Sidebar element + * @param value - Sidebar height + */ +function setSidebarHeight(el, value) { + el.style.height = value + "px"; +} +/** + * Reset sidebar height + * + * @param el - Sidebar element + */ +function resetSidebarHeight(el) { + el.style.height = ""; +} +/* ------------------------------------------------------------------------- */ +/** + * Set sidebar lock + * + * @param el - Sidebar element + * @param value - Whether the sidebar is locked + */ +function setSidebarLock(el, value) { + el.setAttribute("data-md-state", value ? "lock" : ""); +} +/** + * Reset sidebar lock + * + * @param el - Sidebar element + */ +function resetSidebarLock(el) { + el.removeAttribute("data-md-state"); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/components/tabs/_/index.ts": +/*!***********************************************************!*\ + !*** ./src/assets/javascripts/components/tabs/_/index.ts ***! + \***********************************************************/ +/*! exports provided: mountTabs */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mountTabs", function() { return mountTabs; }); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); +/* harmony import */ var browser__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! browser */ "./src/assets/javascripts/browser/index.ts"); +/* harmony import */ var _react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../react */ "./src/assets/javascripts/components/tabs/react/index.ts"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Mount tabs from source observable + * + * @param options - Options + * + * @return Operator function + */ +function mountTabs(_a) { + var header$ = _a.header$, viewport$ = _a.viewport$, screen$ = _a.screen$; + return Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["pipe"])(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["switchMap"])(function (el) { return screen$ + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["switchMap"])(function (screen) { + /* [screen +]: Mount tabs above screen breakpoint */ + if (screen) { + return Object(browser__WEBPACK_IMPORTED_MODULE_2__["watchViewportAt"])(el, { header$: header$, viewport$: viewport$ }) + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["map"])(function (_a) { + var y = _a.offset.y; + return ({ hidden: y >= 10 }); + }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["distinctUntilChanged"])(), Object(_react__WEBPACK_IMPORTED_MODULE_3__["applyTabs"])(el)); + /* [screen -]: Unmount tabs below screen breakpoint */ + } + else { + return Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["of"])({ hidden: true }); + } + })); })); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/components/tabs/index.ts": +/*!*********************************************************!*\ + !*** ./src/assets/javascripts/components/tabs/index.ts ***! + \*********************************************************/ +/*! exports provided: mountTabs, applyTabs, setTabsHidden, resetTabsHidden */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_ */ "./src/assets/javascripts/components/tabs/_/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mountTabs", function() { return ___WEBPACK_IMPORTED_MODULE_0__["mountTabs"]; }); + +/* harmony import */ var _react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./react */ "./src/assets/javascripts/components/tabs/react/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "applyTabs", function() { return _react__WEBPACK_IMPORTED_MODULE_1__["applyTabs"]; }); + +/* harmony import */ var _set__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./set */ "./src/assets/javascripts/components/tabs/set/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setTabsHidden", function() { return _set__WEBPACK_IMPORTED_MODULE_2__["setTabsHidden"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "resetTabsHidden", function() { return _set__WEBPACK_IMPORTED_MODULE_2__["resetTabsHidden"]; }); + +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + + +/***/ }), + +/***/ "./src/assets/javascripts/components/tabs/react/index.ts": +/*!***************************************************************!*\ + !*** ./src/assets/javascripts/components/tabs/react/index.ts ***! + \***************************************************************/ +/*! exports provided: applyTabs */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "applyTabs", function() { return applyTabs; }); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); +/* harmony import */ var _set__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../set */ "./src/assets/javascripts/components/tabs/set/index.ts"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Apply tabs + * + * @param el - Tabs element + * + * @return Operator function + */ +function applyTabs(el) { + return Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["pipe"])( + /* Defer repaint to next animation frame */ + Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["observeOn"])(rxjs__WEBPACK_IMPORTED_MODULE_0__["animationFrameScheduler"]), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["tap"])(function (_a) { + var hidden = _a.hidden; + Object(_set__WEBPACK_IMPORTED_MODULE_2__["setTabsHidden"])(el, hidden); + }), + /* Reset on complete or error */ + Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["finalize"])(function () { + Object(_set__WEBPACK_IMPORTED_MODULE_2__["resetTabsHidden"])(el); + })); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/components/tabs/set/index.ts": +/*!*************************************************************!*\ + !*** ./src/assets/javascripts/components/tabs/set/index.ts ***! + \*************************************************************/ +/*! exports provided: setTabsHidden, resetTabsHidden */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setTabsHidden", function() { return setTabsHidden; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "resetTabsHidden", function() { return resetTabsHidden; }); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Set tabs hidden + * + * @param el - Tabs element + * @param value - Whether the element is hidden + */ +function setTabsHidden(el, value) { + el.setAttribute("data-md-state", value ? "hidden" : ""); +} +/** + * Reset tabs hidden + * + * @param el - Tabs element + */ +function resetTabsHidden(el) { + el.removeAttribute("data-md-state"); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/components/toc/_/index.ts": +/*!**********************************************************!*\ + !*** ./src/assets/javascripts/components/toc/_/index.ts ***! + \**********************************************************/ +/*! exports provided: mountTableOfContents */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mountTableOfContents", function() { return mountTableOfContents; }); +/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); +/* harmony import */ var browser__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! browser */ "./src/assets/javascripts/browser/index.ts"); +/* harmony import */ var _shared__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../shared */ "./src/assets/javascripts/components/shared/index.ts"); +/* harmony import */ var _anchor__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../anchor */ "./src/assets/javascripts/components/toc/anchor/index.ts"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + + + +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Mount table of contents from source observable + * + * @param options - Options + * + * @return Operator function + */ +function mountTableOfContents(_a) { + var header$ = _a.header$, main$ = _a.main$, viewport$ = _a.viewport$, tablet$ = _a.tablet$; + return Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["pipe"])(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["switchMap"])(function (el) { return tablet$ + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["switchMap"])(function (tablet) { + /* [tablet +]: Mount table of contents in sidebar */ + if (tablet) { + var els = Object(browser__WEBPACK_IMPORTED_MODULE_3__["getElements"])(".md-nav__link", el); + /* Watch and apply sidebar */ + var sidebar$ = Object(_shared__WEBPACK_IMPORTED_MODULE_4__["watchSidebar"])(el, { main$: main$, viewport$: viewport$ }) + .pipe(Object(_shared__WEBPACK_IMPORTED_MODULE_4__["applySidebar"])(el, { header$: header$ })); + /* Watch and apply anchor list (scroll spy) */ + var anchors$ = Object(_anchor__WEBPACK_IMPORTED_MODULE_5__["watchAnchorList"])(els, { header$: header$, viewport$: viewport$ }) + .pipe(Object(_anchor__WEBPACK_IMPORTED_MODULE_5__["applyAnchorList"])(els)); + /* Combine into a single hot observable */ + return Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["combineLatest"])([sidebar$, anchors$]) + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(function (_a) { + var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_a, 2), sidebar = _b[0], anchors = _b[1]; + return ({ sidebar: sidebar, anchors: anchors }); + })); + /* [tablet -]: Unmount table of contents */ + } + else { + return Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["of"])({}); + } + })); })); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/components/toc/anchor/_/index.ts": +/*!*****************************************************************!*\ + !*** ./src/assets/javascripts/components/toc/anchor/_/index.ts ***! + \*****************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + +/***/ }), + +/***/ "./src/assets/javascripts/components/toc/anchor/index.ts": +/*!***************************************************************!*\ + !*** ./src/assets/javascripts/components/toc/anchor/index.ts ***! + \***************************************************************/ +/*! no static exports found */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_ */ "./src/assets/javascripts/components/toc/anchor/_/index.ts"); +/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_0__); +/* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in ___WEBPACK_IMPORTED_MODULE_0__) if(__WEBPACK_IMPORT_KEY__ !== 'default') (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return ___WEBPACK_IMPORTED_MODULE_0__[key]; }) }(__WEBPACK_IMPORT_KEY__)); +/* harmony import */ var _react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./react */ "./src/assets/javascripts/components/toc/anchor/react/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchAnchorList", function() { return _react__WEBPACK_IMPORTED_MODULE_1__["watchAnchorList"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "applyAnchorList", function() { return _react__WEBPACK_IMPORTED_MODULE_1__["applyAnchorList"]; }); + +/* harmony import */ var _set__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./set */ "./src/assets/javascripts/components/toc/anchor/set/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setAnchorBlur", function() { return _set__WEBPACK_IMPORTED_MODULE_2__["setAnchorBlur"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "resetAnchorBlur", function() { return _set__WEBPACK_IMPORTED_MODULE_2__["resetAnchorBlur"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setAnchorActive", function() { return _set__WEBPACK_IMPORTED_MODULE_2__["setAnchorActive"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "resetAnchorActive", function() { return _set__WEBPACK_IMPORTED_MODULE_2__["resetAnchorActive"]; }); + +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + + +/***/ }), + +/***/ "./src/assets/javascripts/components/toc/anchor/react/index.ts": +/*!*********************************************************************!*\ + !*** ./src/assets/javascripts/components/toc/anchor/react/index.ts ***! + \*********************************************************************/ +/*! exports provided: watchAnchorList, applyAnchorList */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "watchAnchorList", function() { return watchAnchorList; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "applyAnchorList", function() { return applyAnchorList; }); +/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); +/* harmony import */ var ramda__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ramda */ "./node_modules/ramda/es/index.js"); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); +/* harmony import */ var browser__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! browser */ "./src/assets/javascripts/browser/index.ts"); +/* harmony import */ var _set__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../set */ "./src/assets/javascripts/components/toc/anchor/set/index.ts"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + + + +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Watch anchor list + * + * This is effectively a scroll-spy implementation which will account for the + * fixed header and automatically re-calculate anchor offsets when the viewport + * is resized. The returned observable will only emit if the anchor list needs + * to be repainted. + * + * This implementation tracks an anchor element's entire path starting from its + * level up to the top-most anchor element, e.g. `[h3, h2, h1]`. Although the + * Material theme currently doesn't make use of this information, it enables + * the styling of the entire hierarchy through customization. + * + * Note that the current anchor is the last item of the `prev` anchor list. + * + * @param els - Anchor elements + * @param options - Options + * + * @return Anchor list observable + */ +function watchAnchorList(els, _a) { + var e_1, _b; + var header$ = _a.header$, viewport$ = _a.viewport$; + var table = new Map(); + try { + for (var els_1 = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__values"])(els), els_1_1 = els_1.next(); !els_1_1.done; els_1_1 = els_1.next()) { + var el = els_1_1.value; + var id = decodeURIComponent(el.hash.substring(1)); + var target = Object(browser__WEBPACK_IMPORTED_MODULE_4__["getElement"])("[id=\"" + id + "\"]"); + if (typeof target !== "undefined") + table.set(el, target); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (els_1_1 && !els_1_1.done && (_b = els_1.return)) _b.call(els_1); + } + finally { if (e_1) throw e_1.error; } + } + /* Compute necessary adjustment for header */ + var adjust$ = header$ + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(function (header) { return 18 + header.height; })); + /* Compute partition of previous and next anchors */ + var partition$ = viewport$ + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["distinctUntilKeyChanged"])("size"), + /* Build index to map anchor paths to vertical offsets */ + Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(function () { + var path = []; + return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__spread"])(table).reduce(function (index, _a) { + var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_a, 2), anchor = _b[0], target = _b[1]; + while (path.length) { + var last = table.get(path[path.length - 1]); + if (last.tagName >= target.tagName) { + path.pop(); + } + else { + break; + } + } + /* If the current anchor is hidden, continue with its parent */ + var offset = target.offsetTop; + while (!offset && target.parentElement) { + target = target.parentElement; + offset = target.offsetTop; + } + /* Map reversed anchor path to vertical offset */ + return index.set(Object(ramda__WEBPACK_IMPORTED_MODULE_1__["reverse"])(path = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__spread"])(path, [anchor])), offset); + }, new Map()); + }), + /* Re-compute partition when viewport offset changes */ + Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["switchMap"])(function (index) { return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["combineLatest"])([adjust$, viewport$]) + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["scan"])(function (_a, _b) { + var _c = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_a, 2), prev = _c[0], next = _c[1]; + var _d = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_b, 2), adjust = _d[0], y = _d[1].offset.y; + /* Look forward */ + while (next.length) { + var _e = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(next[0], 2), offset = _e[1]; + if (offset - adjust < y) { + prev = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__spread"])(prev, [next.shift()]); + } + else { + break; + } + } + /* Look backward */ + while (prev.length) { + var _f = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(prev[prev.length - 1], 2), offset = _f[1]; + if (offset - adjust >= y) { + next = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__spread"])([prev.pop()], next); + } + else { + break; + } + } + /* Return partition */ + return [prev, next]; + }, [[], Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__spread"])(index)]), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["distinctUntilChanged"])(function (a, b) { + return a[0] === b[0] + && a[1] === b[1]; + })); })); + /* Compute and return anchor list migrations */ + return partition$ + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(function (_a) { + var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_a, 2), prev = _b[0], next = _b[1]; + return ({ + prev: prev.map(function (_a) { + var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_a, 1), path = _b[0]; + return path; + }), + next: next.map(function (_a) { + var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_a, 1), path = _b[0]; + return path; + }) + }); + }), + /* Extract anchor list migrations */ + Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["startWith"])({ prev: [], next: [] }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["bufferCount"])(2, 1), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(function (_a) { + var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_a, 2), a = _b[0], b = _b[1]; + /* Moving down */ + if (a.prev.length < b.prev.length) { + return { + prev: b.prev.slice(Math.max(0, a.prev.length - 1), b.prev.length), + next: [] + }; + /* Moving up */ + } + else { + return { + prev: b.prev.slice(-1), + next: b.next.slice(0, b.next.length - a.next.length) + }; + } + })); +} +/* ------------------------------------------------------------------------- */ +/** + * Apply anchor list + * + * @param els - Anchor elements + * + * @return Operator function + */ +function applyAnchorList(els) { + return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["pipe"])( + /* Defer repaint to next animation frame */ + Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["observeOn"])(rxjs__WEBPACK_IMPORTED_MODULE_2__["animationFrameScheduler"]), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["tap"])(function (_a) { + var e_2, _b; + var prev = _a.prev, next = _a.next; + try { + /* Look forward */ + for (var next_1 = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__values"])(next), next_1_1 = next_1.next(); !next_1_1.done; next_1_1 = next_1.next()) { + var _c = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(next_1_1.value, 1), el = _c[0]; + Object(_set__WEBPACK_IMPORTED_MODULE_5__["resetAnchorActive"])(el); + Object(_set__WEBPACK_IMPORTED_MODULE_5__["resetAnchorBlur"])(el); + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (next_1_1 && !next_1_1.done && (_b = next_1.return)) _b.call(next_1); + } + finally { if (e_2) throw e_2.error; } + } + /* Look backward */ + prev.forEach(function (_a, index) { + var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_a, 1), el = _b[0]; + Object(_set__WEBPACK_IMPORTED_MODULE_5__["setAnchorActive"])(el, index === prev.length - 1); + Object(_set__WEBPACK_IMPORTED_MODULE_5__["setAnchorBlur"])(el, true); + }); + }), + /* Reset on complete or error */ + Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["finalize"])(function () { + var e_3, _a; + try { + for (var els_2 = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__values"])(els), els_2_1 = els_2.next(); !els_2_1.done; els_2_1 = els_2.next()) { + var el = els_2_1.value; + Object(_set__WEBPACK_IMPORTED_MODULE_5__["resetAnchorActive"])(el); + Object(_set__WEBPACK_IMPORTED_MODULE_5__["resetAnchorBlur"])(el); + } + } + catch (e_3_1) { e_3 = { error: e_3_1 }; } + finally { + try { + if (els_2_1 && !els_2_1.done && (_a = els_2.return)) _a.call(els_2); + } + finally { if (e_3) throw e_3.error; } + } + })); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/components/toc/anchor/set/index.ts": +/*!*******************************************************************!*\ + !*** ./src/assets/javascripts/components/toc/anchor/set/index.ts ***! + \*******************************************************************/ +/*! exports provided: setAnchorBlur, resetAnchorBlur, setAnchorActive, resetAnchorActive */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setAnchorBlur", function() { return setAnchorBlur; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "resetAnchorBlur", function() { return resetAnchorBlur; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setAnchorActive", function() { return setAnchorActive; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "resetAnchorActive", function() { return resetAnchorActive; }); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Set anchor blur + * + * @param el - Anchor element + * @param value - Whether the anchor is blurred + */ +function setAnchorBlur(el, value) { + el.setAttribute("data-md-state", value ? "blur" : ""); +} +/** + * Reset anchor blur + * + * @param el - Anchor element + */ +function resetAnchorBlur(el) { + el.removeAttribute("data-md-state"); +} +/* ------------------------------------------------------------------------- */ +/** + * Set anchor active + * + * @param el - Anchor element + * @param value - Whether the anchor is active + */ +function setAnchorActive(el, value) { + el.classList.toggle("md-nav__link--active", value); +} +/** + * Reset anchor active + * + * @param el - Anchor element + */ +function resetAnchorActive(el) { + el.classList.remove("md-nav__link--active"); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/components/toc/index.ts": +/*!********************************************************!*\ + !*** ./src/assets/javascripts/components/toc/index.ts ***! + \********************************************************/ +/*! no static exports found */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_ */ "./src/assets/javascripts/components/toc/_/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mountTableOfContents", function() { return ___WEBPACK_IMPORTED_MODULE_0__["mountTableOfContents"]; }); + +/* harmony import */ var _anchor__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./anchor */ "./src/assets/javascripts/components/toc/anchor/index.ts"); +/* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _anchor__WEBPACK_IMPORTED_MODULE_1__) if(["mountTableOfContents","default"].indexOf(__WEBPACK_IMPORT_KEY__) < 0) (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return _anchor__WEBPACK_IMPORTED_MODULE_1__[key]; }) }(__WEBPACK_IMPORT_KEY__)); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + +/***/ }), + +/***/ "./src/assets/javascripts/index.ts": +/*!*****************************************!*\ + !*** ./src/assets/javascripts/index.ts ***! + \*****************************************/ +/*! exports provided: setScrollLock, resetScrollLock, initialize */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setScrollLock", function() { return setScrollLock; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "resetScrollLock", function() { return resetScrollLock; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "initialize", function() { return initialize; }); +/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); +/* harmony import */ var _stylesheets_main_scss__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../stylesheets/main.scss */ "./src/assets/stylesheets/main.scss"); +/* harmony import */ var _stylesheets_palette_scss__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../stylesheets/palette.scss */ "./src/assets/stylesheets/palette.scss"); +/* harmony import */ var ramda__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ramda */ "./node_modules/ramda/es/index.js"); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); +/* harmony import */ var _browser__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./browser */ "./src/assets/javascripts/browser/index.ts"); +/* harmony import */ var _workers__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./workers */ "./src/assets/javascripts/workers/index.ts"); +/* harmony import */ var components__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! components */ "./src/assets/javascripts/components/index.ts"); +/* harmony import */ var _integrations_clipboard__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./integrations/clipboard */ "./src/assets/javascripts/integrations/clipboard/index.ts"); +/* harmony import */ var integrations_dialog__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! integrations/dialog */ "./src/assets/javascripts/integrations/dialog/index.ts"); +/* harmony import */ var _integrations_keyboard__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./integrations/keyboard */ "./src/assets/javascripts/integrations/keyboard/index.ts"); +/* harmony import */ var integrations_instant__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! integrations/instant */ "./src/assets/javascripts/integrations/instant/index.ts"); +/* harmony import */ var patches__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! patches */ "./src/assets/javascripts/patches/index.ts"); +/* harmony import */ var utilities__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! utilities */ "./src/assets/javascripts/utilities/index.ts"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + +// TODO: remove this after we finished refactoring +// tslint:disable + + + + + + + + + + + + + + +/* ------------------------------------------------------------------------- */ +document.documentElement.classList.remove("no-js"); +document.documentElement.classList.add("js"); +/* Test for iOS */ +if (navigator.userAgent.match(/(iPad|iPhone|iPod)/g)) + document.documentElement.classList.add("ios"); +/** + * Set scroll lock + * + * @param el - Scrollable element + * @param value - Vertical offset + */ +function setScrollLock(el, value) { + el.setAttribute("data-md-state", "lock"); + el.style.top = "-" + value + "px"; +} +/** + * Reset scroll lock + * + * @param el - Scrollable element + */ +function resetScrollLock(el) { + var value = -1 * parseInt(el.style.top, 10); + el.removeAttribute("data-md-state"); + el.style.top = ""; + if (value) + window.scrollTo(0, value); +} +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Initialize Material for MkDocs + * + * @param config - Configuration + */ +function initialize(config) { + var e_1, _a, e_2, _b; + if (!Object(utilities__WEBPACK_IMPORTED_MODULE_14__["isConfig"])(config)) + throw new SyntaxError("Invalid configuration: " + JSON.stringify(config)); + /* Setup user interface observables */ + var location$ = Object(_browser__WEBPACK_IMPORTED_MODULE_6__["watchLocation"])(); + var hash$ = Object(_browser__WEBPACK_IMPORTED_MODULE_6__["watchLocationHash"])(); + var viewport$ = Object(_browser__WEBPACK_IMPORTED_MODULE_6__["watchViewport"])(); + var tablet$ = Object(_browser__WEBPACK_IMPORTED_MODULE_6__["watchMedia"])("(min-width: 960px)"); + var screen$ = Object(_browser__WEBPACK_IMPORTED_MODULE_6__["watchMedia"])("(min-width: 1220px)"); + /* Setup document observable */ + var document$ = config.features.includes("instant") + ? Object(_browser__WEBPACK_IMPORTED_MODULE_6__["watchDocument"])({ location$: location$ }) + : Object(_browser__WEBPACK_IMPORTED_MODULE_6__["watchDocument"])(); + /* Setup component bindings */ + Object(components__WEBPACK_IMPORTED_MODULE_8__["setupComponents"])([ + "container", + "header", + "header-title", + "hero", + "main", + "navigation", + "search", + "search-query", + "search-reset", + "search-result", + "skip", + "tabs", + "toc" /* Table of contents */ + ], { document$: document$ }); + /* ----------------------------------------------------------------------- */ + // External index + var index = config.search && config.search.index + ? config.search.index + : undefined; + // TODO: pass URL config as first parameter, options as second + var worker = Object(_workers__WEBPACK_IMPORTED_MODULE_7__["setupSearchWorker"])(config.url.worker.search, { + base: config.url.base, index: index, location$: location$ + }); + /* ----------------------------------------------------------------------- */ + /* Create header observable */ + var header$ = Object(components__WEBPACK_IMPORTED_MODULE_8__["useComponent"])("header") + .pipe(Object(components__WEBPACK_IMPORTED_MODULE_8__["mountHeader"])({ viewport$: viewport$ }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_5__["shareReplay"])(1)); + var main$ = Object(components__WEBPACK_IMPORTED_MODULE_8__["useComponent"])("main") + .pipe(Object(components__WEBPACK_IMPORTED_MODULE_8__["mountMain"])({ header$: header$, viewport$: viewport$ }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_5__["shareReplay"])(1)); + /* ----------------------------------------------------------------------- */ + /* Mount search query */ + var query$ = Object(components__WEBPACK_IMPORTED_MODULE_8__["useComponent"])("search-query") + .pipe(Object(components__WEBPACK_IMPORTED_MODULE_8__["mountSearchQuery"])(worker), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_5__["shareReplay"])(1)); + /* Mount search reset */ + var reset$ = Object(components__WEBPACK_IMPORTED_MODULE_8__["useComponent"])("search-reset") + .pipe(Object(components__WEBPACK_IMPORTED_MODULE_8__["mountSearchReset"])(), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_5__["shareReplay"])(1)); + /* Mount search result */ + var result$ = Object(components__WEBPACK_IMPORTED_MODULE_8__["useComponent"])("search-result") + .pipe(Object(components__WEBPACK_IMPORTED_MODULE_8__["mountSearchResult"])(worker, { query$: query$ }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_5__["shareReplay"])(1)); + /* ----------------------------------------------------------------------- */ + var search$ = Object(components__WEBPACK_IMPORTED_MODULE_8__["useComponent"])("search") + .pipe(Object(components__WEBPACK_IMPORTED_MODULE_8__["mountSearch"])({ query$: query$, reset$: reset$, result$: result$ }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_5__["shareReplay"])(1)); + /* ----------------------------------------------------------------------- */ + var navigation$ = Object(components__WEBPACK_IMPORTED_MODULE_8__["useComponent"])("navigation") + .pipe(Object(components__WEBPACK_IMPORTED_MODULE_8__["mountNavigation"])({ header$: header$, main$: main$, viewport$: viewport$, screen$: screen$ }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_5__["shareReplay"])(1) // shareReplay because there might be late subscribers + ); + var toc$ = Object(components__WEBPACK_IMPORTED_MODULE_8__["useComponent"])("toc") + .pipe(Object(components__WEBPACK_IMPORTED_MODULE_8__["mountTableOfContents"])({ header$: header$, main$: main$, viewport$: viewport$, tablet$: tablet$ }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_5__["shareReplay"])(1)); + var tabs$ = Object(components__WEBPACK_IMPORTED_MODULE_8__["useComponent"])("tabs") + .pipe(Object(components__WEBPACK_IMPORTED_MODULE_8__["mountTabs"])({ header$: header$, viewport$: viewport$, screen$: screen$ }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_5__["shareReplay"])(1)); + var hero$ = Object(components__WEBPACK_IMPORTED_MODULE_8__["useComponent"])("hero") + .pipe(Object(components__WEBPACK_IMPORTED_MODULE_8__["mountHero"])({ header$: header$, viewport$: viewport$ }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_5__["shareReplay"])(1)); + /* ----------------------------------------------------------------------- */ + var keyboard$ = Object(_integrations_keyboard__WEBPACK_IMPORTED_MODULE_11__["setupKeyboard"])(); + Object(patches__WEBPACK_IMPORTED_MODULE_13__["patchDetails"])({ document$: document$, hash$: hash$ }); + Object(patches__WEBPACK_IMPORTED_MODULE_13__["patchScripts"])({ document$: document$ }); + Object(patches__WEBPACK_IMPORTED_MODULE_13__["patchSource"])({ document$: document$ }); + Object(patches__WEBPACK_IMPORTED_MODULE_13__["patchTables"])({ document$: document$ }); + /* Force 1px scroll offset to trigger overflow scrolling */ + Object(patches__WEBPACK_IMPORTED_MODULE_13__["patchScrollfix"])({ document$: document$ }); + /* Setup clipboard and dialog */ + var dialog$ = Object(integrations_dialog__WEBPACK_IMPORTED_MODULE_10__["setupDialog"])(); + var clipboard$ = Object(_integrations_clipboard__WEBPACK_IMPORTED_MODULE_9__["setupClipboard"])({ document$: document$, dialog$: dialog$ }); + /* ----------------------------------------------------------------------- */ + // // put into search... + // hash$ + // .pipe( + // switchMap(hash => useToggle("search") + // .pipe( + // filter(x => x.checked), // only active + // tap(toggle => setToggle(toggle, false)), + // delay(125), // ensure that it runs after the body scroll reset... + // mapTo(hash) + // ) + // ) + // ) + // .subscribe(hash => { + // getElement(`[id="${hash}"]`)!.scrollIntoView() + // }) + // Scroll lock // document -> document$ => { body } !? + // put into search... + Object(rxjs__WEBPACK_IMPORTED_MODULE_4__["combineLatest"])([ + Object(_browser__WEBPACK_IMPORTED_MODULE_6__["watchToggle"])("search"), + tablet$, + ]) + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_5__["withLatestFrom"])(viewport$), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_5__["switchMap"])(function (_a) { + var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_a, 2), _c = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_b[0], 2), toggle = _c[0], tablet = _c[1], y = _b[1].offset.y; + var active = toggle && !tablet; + return document$ + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_5__["delay"])(active ? 400 : 100), // TOOD: directly combine this with the hash! + Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_5__["observeOn"])(rxjs__WEBPACK_IMPORTED_MODULE_4__["animationFrameScheduler"]), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_5__["tap"])(function (_a) { + var body = _a.body; + return active + ? setScrollLock(body, y) + : resetScrollLock(body); + })); + })) + .subscribe(); + /* ----------------------------------------------------------------------- */ + /* Intercept internal link clicks */ + var link$ = Object(rxjs__WEBPACK_IMPORTED_MODULE_4__["fromEvent"])(document.body, "click") + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_5__["filter"])(function (ev) { return !(ev.metaKey || ev.ctrlKey); }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_5__["switchMap"])(function (ev) { + if (ev.target instanceof HTMLElement) { + var el = ev.target.closest("a"); // TODO: abstract as link click? + if (el && Object(_browser__WEBPACK_IMPORTED_MODULE_6__["isLocationInternal"])(el)) { + if (!Object(_browser__WEBPACK_IMPORTED_MODULE_6__["isLocationAnchor"])(el)) + ev.preventDefault(); + return Object(rxjs__WEBPACK_IMPORTED_MODULE_4__["of"])(el); + } + } + return rxjs__WEBPACK_IMPORTED_MODULE_4__["NEVER"]; + }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_5__["share"])()); + /* Always close drawer on click */ + link$.subscribe(function () { + Object(_browser__WEBPACK_IMPORTED_MODULE_6__["setToggle"])("drawer", false); + }); + // somehow call this setupNavigation ? + // instant loading + if (config.features.includes("instant")) { + /* Disable automatic scroll restoration, as it doesn't work nicely */ + if ("scrollRestoration" in history) + history.scrollRestoration = "manual"; + try { + /* Resolve relative links for stability */ + for (var _c = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__values"])([ + "link[rel=\"shortcut icon\"]", + "link[rel=\"stylesheet\"]" + ]), _d = _c.next(); !_d.done; _d = _c.next()) { + var selector = _d.value; + try { + for (var _e = (e_2 = void 0, Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__values"])(Object(_browser__WEBPACK_IMPORTED_MODULE_6__["getElements"])(selector))), _f = _e.next(); !_f.done; _f = _e.next()) { + var el = _f.value; + el.href = el.href; + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (_f && !_f.done && (_b = _e.return)) _b.call(_e); + } + finally { if (e_2) throw e_2.error; } + } + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_d && !_d.done && (_a = _c.return)) _a.call(_c); + } + finally { if (e_1) throw e_1.error; } + } + Object(integrations_instant__WEBPACK_IMPORTED_MODULE_12__["setupInstantLoading"])({ + document$: document$, link$: link$, location$: location$, viewport$: viewport$ + }); + } + /* ----------------------------------------------------------------------- */ + // if we use a single tab outside of search, unhide all permalinks. + // TODO: experimental. necessary!? + keyboard$ + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_5__["filter"])(function (key) { return key.mode === "global" && ["Tab"].includes(key.type); }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_5__["take"])(1)) + .subscribe(function () { + var e_3, _a; + try { + for (var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__values"])(Object(_browser__WEBPACK_IMPORTED_MODULE_6__["getElements"])(".headerlink")), _c = _b.next(); !_c.done; _c = _b.next()) { + var link = _c.value; + link.style.visibility = "visible"; + } + } + catch (e_3_1) { e_3 = { error: e_3_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) _a.call(_b); + } + finally { if (e_3) throw e_3.error; } + } + }); + /* ----------------------------------------------------------------------- */ + var state = { + /* Browser observables */ + document$: document$, + viewport$: viewport$, + /* Component observables */ + header$: header$, + hero$: hero$, + main$: main$, + navigation$: navigation$, + search$: search$, + tabs$: tabs$, + toc$: toc$, + /* Integation observables */ + clipboard$: clipboard$, + keyboard$: keyboard$, + dialog$: dialog$ + }; + /* Subscribe to all observables */ + rxjs__WEBPACK_IMPORTED_MODULE_4__["merge"].apply(void 0, Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__spread"])(Object(ramda__WEBPACK_IMPORTED_MODULE_3__["values"])(state))).subscribe(); + return state; +} + + +/***/ }), + +/***/ "./src/assets/javascripts/integrations/clipboard/index.ts": +/*!****************************************************************!*\ + !*** ./src/assets/javascripts/integrations/clipboard/index.ts ***! + \****************************************************************/ +/*! exports provided: setupClipboard */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setupClipboard", function() { return setupClipboard; }); +/* harmony import */ var clipboard__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! clipboard */ "./node_modules/clipboard/dist/clipboard.js"); +/* harmony import */ var clipboard__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(clipboard__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); +/* harmony import */ var browser__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! browser */ "./src/assets/javascripts/browser/index.ts"); +/* harmony import */ var templates__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! templates */ "./src/assets/javascripts/templates/index.ts"); +/* harmony import */ var utilities__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! utilities */ "./src/assets/javascripts/utilities/index.ts"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + + + +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Setup clipboard + * + * This function implements the Clipboard.js integration and injects a button + * into all code blocks when the document changes. + * + * @param options - Options + * + * @return Clipboard observable + */ +function setupClipboard(_a) { + var document$ = _a.document$, dialog$ = _a.dialog$; + if (!clipboard__WEBPACK_IMPORTED_MODULE_0__["isSupported"]()) + return rxjs__WEBPACK_IMPORTED_MODULE_1__["NEVER"]; + /* Inject 'copy-to-clipboard' buttons */ + document$.subscribe(function () { + var blocks = Object(browser__WEBPACK_IMPORTED_MODULE_3__["getElements"])("pre > code"); + blocks.forEach(function (block, index) { + var parent = block.parentElement; + parent.id = "__code_" + index; + parent.insertBefore(Object(templates__WEBPACK_IMPORTED_MODULE_4__["renderClipboard"])(parent.id), block); + }); + }); + /* Initialize and setup clipboard */ + var clipboard$ = Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["fromEventPattern"])(function (next) { + new clipboard__WEBPACK_IMPORTED_MODULE_0__(".md-clipboard").on("success", next); + }) + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["share"])()); + /* Display notification for clipboard event */ + clipboard$ + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["tap"])(function (ev) { return ev.clearSelection(); }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["mapTo"])(Object(utilities__WEBPACK_IMPORTED_MODULE_5__["translate"])("clipboard.copied"))) + .subscribe(dialog$); + /* Return clipboard */ + return clipboard$; +} + + +/***/ }), + +/***/ "./src/assets/javascripts/integrations/dialog/index.ts": +/*!*************************************************************!*\ + !*** ./src/assets/javascripts/integrations/dialog/index.ts ***! + \*************************************************************/ +/*! exports provided: setupDialog */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setupDialog", function() { return setupDialog; }); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Setup dialog + * + * @param options - Options + * + * @return Dialog observable + */ +function setupDialog(_a) { + var duration = (_a === void 0 ? {} : _a).duration; + var dialog$ = new rxjs__WEBPACK_IMPORTED_MODULE_0__["Subject"](); + /* Create dialog */ + var dialog = document.createElement("div"); // TODO: improve scoping + dialog.classList.add("md-dialog", "md-typeset"); + /* Display dialog */ + dialog$ + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["switchMap"])(function (text) { return Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["of"])(document.body) // useComponent("container") + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["map"])(function (container) { return container.appendChild(dialog); }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["observeOn"])(rxjs__WEBPACK_IMPORTED_MODULE_0__["animationFrameScheduler"]), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["delay"])(1), // Strangley it doesnt work when we push things to the new animation frame... + Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["tap"])(function (el) { + el.innerHTML = text; + el.setAttribute("data-md-state", "open"); + }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["delay"])(duration || 2000), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["tap"])(function (el) { return el.removeAttribute("data-md-state"); }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["delay"])(400), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["tap"])(function (el) { + el.innerHTML = ""; + el.remove(); + })); })) + .subscribe(); + /* Return dialog subject */ + return dialog$; +} + + +/***/ }), + +/***/ "./src/assets/javascripts/integrations/instant/index.ts": +/*!**************************************************************!*\ + !*** ./src/assets/javascripts/integrations/instant/index.ts ***! + \**************************************************************/ +/*! exports provided: setupInstantLoading */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setupInstantLoading", function() { return setupInstantLoading; }); +/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); +/* harmony import */ var browser__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! browser */ "./src/assets/javascripts/browser/index.ts"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Setup instant loading + * + * @param options - Options + * + * @return TODO ? + */ +function setupInstantLoading(_a) { + var document$ = _a.document$, viewport$ = _a.viewport$, link$ = _a.link$, location$ = _a.location$; + var state$ = link$ + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(function (el) { return ({ url: new URL(el.href) }); }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["share"])()); + /* Intercept internal links to dispatch */ + var push$ = state$ + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["distinctUntilChanged"])(function (prev, next) { return prev.url.href === next.url.href; }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["filter"])(function (_a) { + var url = _a.url; + return !Object(browser__WEBPACK_IMPORTED_MODULE_3__["isLocationAnchor"])(url); + }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["share"])()); + /* Intercept popstate events (history back and forward) */ + var pop$ = Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["fromEvent"])(window, "popstate") + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["filter"])(function (ev) { return ev.state !== null; }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(function (ev) { return ({ + url: new URL(location.href), + offset: ev.state + }); }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["share"])()); + /* Emit location change */ + Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["merge"])(push$, pop$) + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["pluck"])("url")) + .subscribe(location$); + /* History: dispatch internal link */ + push$.subscribe(function (_a) { + var url = _a.url; + history.pushState({}, "", url.toString()); + }); + /* History: debounce update of viewport offset */ + viewport$ + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["debounceTime"])(250), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["distinctUntilKeyChanged"])("offset")) + .subscribe(function (_a) { + var offset = _a.offset; + history.replaceState(offset, ""); + }); + /* Apply viewport offset from history */ + Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["merge"])(state$, pop$) + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["bufferCount"])(2, 1), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["filter"])(function (_a) { + var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_a, 2), prev = _b[0], next = _b[1]; + return prev.url.pathname === next.url.pathname + && !Object(browser__WEBPACK_IMPORTED_MODULE_3__["isLocationAnchor"])(next.url); + }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(function (_a) { + var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_a, 2), state = _b[1]; + return state; + })) + .subscribe(function (_a) { + var offset = _a.offset; + Object(browser__WEBPACK_IMPORTED_MODULE_3__["setViewportOffset"])(offset || { y: 0 }); + }); + /* Intercept actual instant loading */ + var instant$ = Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["merge"])(push$, pop$) + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["sample"])(document$)); + // TODO: from here on, everything is beta.... ############################### + instant$.subscribe(function (_a) { + var url = _a.url, offset = _a.offset; + if (url.hash && !offset) { + console.log("set hash!"); + Object(browser__WEBPACK_IMPORTED_MODULE_3__["setLocationHash"])(url.hash); // must delay, if search is open! + } + else { + Object(browser__WEBPACK_IMPORTED_MODULE_3__["setViewportOffset"])(offset || { y: 0 }); + } + }); + instant$ + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["withLatestFrom"])(document$)) + .subscribe(function (_a) { + var e_1, _b; + var _c = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_a, 2), _d = _c[1], title = _d.title, head = _d.head; + document.dispatchEvent(new CustomEvent("DOMContentSwitch")); + document.title = title; + try { + /* Replace meta tags */ + for (var _e = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__values"])([ + "link[rel=\"canonical\"]", + "meta[name=\"author\"]", + "meta[name=\"description\"]" + ]), _f = _e.next(); !_f.done; _f = _e.next()) { + var selector = _f.value; + var next = Object(browser__WEBPACK_IMPORTED_MODULE_3__["getElement"])(selector, head); + var prev = Object(browser__WEBPACK_IMPORTED_MODULE_3__["getElement"])(selector, document.head); + if (typeof next !== "undefined" && + typeof prev !== "undefined") { + prev.replaceWith(next); + } + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_f && !_f.done && (_b = _e.return)) _b.call(_e); + } + finally { if (e_1) throw e_1.error; } + } + }); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/integrations/keyboard/index.ts": +/*!***************************************************************!*\ + !*** ./src/assets/javascripts/integrations/keyboard/index.ts ***! + \***************************************************************/ +/*! exports provided: setupKeyboard */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setupKeyboard", function() { return setupKeyboard; }); +/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); +/* harmony import */ var browser__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! browser */ "./src/assets/javascripts/browser/index.ts"); +/* harmony import */ var components__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! components */ "./src/assets/javascripts/components/index.ts"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Setup keyboard + * + * This function will setup the keyboard handlers and ensure that keys are + * correctly propagated. Currently there are two modes: + * + * - `global`: This mode is active when the search is closed. It is intended + * to assign hotkeys to specific functions of the site. Currently the search, + * previous and next page can be triggered. + * + * - `search`: This mode is active when the search is open. It maps certain + * navigational keys to offer search results that can be entirely navigated + * through keyboard input. + * + * The keyboard observable is returned and can be used to monitor the keyboard + * in order toassign further hotkeys to custom functions. + * + * @return Keyboard observable + */ +function setupKeyboard() { + var keyboard$ = Object(browser__WEBPACK_IMPORTED_MODULE_2__["watchKeyboard"])() + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["map"])(function (key) { return (Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__assign"])({ mode: Object(browser__WEBPACK_IMPORTED_MODULE_2__["getToggle"])("search") ? "search" : "global" }, key)); }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["share"])()); + /* Setup search keyboard handlers */ + keyboard$ + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["filter"])(function (_a) { + var mode = _a.mode; + return mode === "search"; + }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["withLatestFrom"])(Object(components__WEBPACK_IMPORTED_MODULE_3__["useComponent"])("search-query"), Object(components__WEBPACK_IMPORTED_MODULE_3__["useComponent"])("search-result"))) + .subscribe(function (_a) { + var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_a, 3), key = _b[0], query = _b[1], result = _b[2]; + var active = Object(browser__WEBPACK_IMPORTED_MODULE_2__["getActiveElement"])(); + switch (key.type) { + /* Enter: prevent form submission */ + case "Enter": + if (active === query) + key.claim(); + break; + /* Escape or Tab: close search */ + case "Escape": + case "Tab": + Object(browser__WEBPACK_IMPORTED_MODULE_2__["setToggle"])("search", false); + Object(browser__WEBPACK_IMPORTED_MODULE_2__["setElementFocus"])(query, false); + break; + /* Vertical arrows: select previous or next search result */ + case "ArrowUp": + case "ArrowDown": + if (typeof active === "undefined") { + Object(browser__WEBPACK_IMPORTED_MODULE_2__["setElementFocus"])(query); + } + else { + var els = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__spread"])([query], Object(browser__WEBPACK_IMPORTED_MODULE_2__["getElements"])("[href]", result)); + var i = Math.max(0, (Math.max(0, els.indexOf(active)) + els.length + (key.type === "ArrowUp" ? -1 : +1)) % els.length); + Object(browser__WEBPACK_IMPORTED_MODULE_2__["setElementFocus"])(els[i]); + } + /* Prevent scrolling of page */ + key.claim(); + break; + /* All other keys: hand to search query */ + default: + if (query !== Object(browser__WEBPACK_IMPORTED_MODULE_2__["getActiveElement"])()) + Object(browser__WEBPACK_IMPORTED_MODULE_2__["setElementFocus"])(query); + } + }); + /* Setup global keyboard handlers */ + keyboard$ + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["filter"])(function (_a) { + var mode = _a.mode; + if (mode === "global") { + var active = Object(browser__WEBPACK_IMPORTED_MODULE_2__["getActiveElement"])(); + if (typeof active !== "undefined") + return !Object(browser__WEBPACK_IMPORTED_MODULE_2__["isSusceptibleToKeyboard"])(active); + } + return false; + }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["withLatestFrom"])(Object(components__WEBPACK_IMPORTED_MODULE_3__["useComponent"])("search-query"))) + .subscribe(function (_a) { + var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_a, 2), key = _b[0], query = _b[1]; + switch (key.type) { + /* Open search and select query */ + case "f": + case "s": + Object(browser__WEBPACK_IMPORTED_MODULE_2__["setElementFocus"])(query); + Object(browser__WEBPACK_IMPORTED_MODULE_2__["setElementSelection"])(query); + key.claim(); + break; + /* Go to previous page */ + case "p": + case ",": + var prev = Object(browser__WEBPACK_IMPORTED_MODULE_2__["getElement"])("[href][rel=prev]"); + if (typeof prev !== "undefined") + prev.click(); + break; + /* Go to next page */ + case "n": + case ".": + var next = Object(browser__WEBPACK_IMPORTED_MODULE_2__["getElement"])("[href][rel=next]"); + if (typeof next !== "undefined") + next.click(); + break; + } + }); + /* Return keyboard */ + return keyboard$; +} + + +/***/ }), + +/***/ "./src/assets/javascripts/patches/details/index.ts": +/*!*********************************************************!*\ + !*** ./src/assets/javascripts/patches/details/index.ts ***! + \*********************************************************/ +/*! exports provided: patchDetails */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "patchDetails", function() { return patchDetails; }); +/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); +/* harmony import */ var ramda__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ramda */ "./node_modules/ramda/es/index.js"); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); +/* harmony import */ var browser__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! browser */ "./src/assets/javascripts/browser/index.ts"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + + +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Patch all `details` elements + * + * This function will ensure that all `details` tags are opened prior to + * printing, so the whole content of the page is included, and on anchor jumps. + * + * @param options - Options + */ +function patchDetails(_a) { + var document$ = _a.document$, hash$ = _a.hash$; + var els$ = document$ + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(function () { return Object(browser__WEBPACK_IMPORTED_MODULE_4__["getElements"])("details"); })); + /* Open all details before printing */ + Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["merge"])(Object(browser__WEBPACK_IMPORTED_MODULE_4__["watchMedia"])("print").pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["filter"])(ramda__WEBPACK_IMPORTED_MODULE_1__["identity"])), /* Webkit */ Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["fromEvent"])(window, "beforeprint") /* IE, FF */) + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["switchMapTo"])(els$)) + .subscribe(function (els) { + var e_1, _a; + try { + for (var els_1 = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__values"])(els), els_1_1 = els_1.next(); !els_1_1.done; els_1_1 = els_1.next()) { + var el = els_1_1.value; + el.setAttribute("open", ""); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (els_1_1 && !els_1_1.done && (_a = els_1.return)) _a.call(els_1); + } + finally { if (e_1) throw e_1.error; } + } + }); + /* Open parent details and fix anchor jump */ + hash$ + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(function (id) { return Object(browser__WEBPACK_IMPORTED_MODULE_4__["getElement"])("[id=\"" + id + "\"]"); }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["filter"])(function (el) { return typeof el !== "undefined"; }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["tap"])(function (el) { + var details = el.closest("details"); + if (details && !details.open) + details.setAttribute("open", ""); + })) + .subscribe(function (el) { return el.scrollIntoView(); }); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/patches/index.ts": +/*!*************************************************!*\ + !*** ./src/assets/javascripts/patches/index.ts ***! + \*************************************************/ +/*! exports provided: patchDetails, patchScripts, patchScrollfix, patchSource, patchTables */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _details__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./details */ "./src/assets/javascripts/patches/details/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "patchDetails", function() { return _details__WEBPACK_IMPORTED_MODULE_0__["patchDetails"]; }); + +/* harmony import */ var _script__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./script */ "./src/assets/javascripts/patches/script/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "patchScripts", function() { return _script__WEBPACK_IMPORTED_MODULE_1__["patchScripts"]; }); + +/* harmony import */ var _scrollfix__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./scrollfix */ "./src/assets/javascripts/patches/scrollfix/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "patchScrollfix", function() { return _scrollfix__WEBPACK_IMPORTED_MODULE_2__["patchScrollfix"]; }); + +/* harmony import */ var _source__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./source */ "./src/assets/javascripts/patches/source/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "patchSource", function() { return _source__WEBPACK_IMPORTED_MODULE_3__["patchSource"]; }); + +/* harmony import */ var _table__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./table */ "./src/assets/javascripts/patches/table/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "patchTables", function() { return _table__WEBPACK_IMPORTED_MODULE_4__["patchTables"]; }); + +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + + + + +/***/ }), + +/***/ "./src/assets/javascripts/patches/script/index.ts": +/*!********************************************************!*\ + !*** ./src/assets/javascripts/patches/script/index.ts ***! + \********************************************************/ +/*! exports provided: patchScripts */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "patchScripts", function() { return patchScripts; }); +/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); +/* harmony import */ var browser__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! browser */ "./src/assets/javascripts/browser/index.ts"); +/* harmony import */ var components__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! components */ "./src/assets/javascripts/components/index.ts"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Patch all `script` elements + * + * This function must be run after a document switch, which means the first + * emission must be ignored. + * + * @param options - Options + */ +function patchScripts(_a) { + var document$ = _a.document$; + var els$ = document$ + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["skip"])(1), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["withLatestFrom"])(Object(components__WEBPACK_IMPORTED_MODULE_3__["useComponent"])("container")), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["map"])(function (_a) { + var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_a, 2), el = _b[1]; + return Object(browser__WEBPACK_IMPORTED_MODULE_2__["getElements"])("script", el); + })); + /* Evaluate all scripts via replacement */ + els$.subscribe(function (els) { + var e_1, _a; + try { + for (var els_1 = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__values"])(els), els_1_1 = els_1.next(); !els_1_1.done; els_1_1 = els_1.next()) { + var el = els_1_1.value; + if (el.src || /(^|\/javascript)$/i.test(el.type)) { + var script = document.createElement("script"); + var key = el.src ? "src" : "innerText"; + script[key] = el[key]; + el.replaceWith(script); + } + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (els_1_1 && !els_1_1.done && (_a = els_1.return)) _a.call(els_1); + } + finally { if (e_1) throw e_1.error; } + } + }); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/patches/scrollfix/index.ts": +/*!***********************************************************!*\ + !*** ./src/assets/javascripts/patches/scrollfix/index.ts ***! + \***********************************************************/ +/*! exports provided: patchScrollfix */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "patchScrollfix", function() { return patchScrollfix; }); +/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); +/* harmony import */ var browser__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! browser */ "./src/assets/javascripts/browser/index.ts"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + +/* ---------------------------------------------------------------------------- + * Helper functions + * ------------------------------------------------------------------------- */ +/** + * Check whether the given device is an Apple device + * + * @return Test result + */ +function isAppleDevice() { + return /(iPad|iPhone|iPod)/.test(navigator.userAgent); +} +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Patch all elements with `data-md-scrollfix` attributes + * + * This is a year-old patch which ensures that overflow scrolling works at the + * top and bottom of containers on iOS by ensuring a `1px` scroll offset upon + * the start of a touch event. + * + * @see https://bit.ly/2SCtAOO - Original source + * + * @param options - Options + */ +function patchScrollfix(_a) { + var document$ = _a.document$; + var els$ = document$ + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(function () { return Object(browser__WEBPACK_IMPORTED_MODULE_3__["getElements"])("[data-md-scrollfix]"); }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["shareReplay"])(1)); + /* Remove marker attribute, so we'll only add the fix once */ + els$.subscribe(function (els) { + var e_1, _a; + try { + for (var els_1 = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__values"])(els), els_1_1 = els_1.next(); !els_1_1.done; els_1_1 = els_1.next()) { + var el = els_1_1.value; + el.removeAttribute("data-md-scrollfix"); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (els_1_1 && !els_1_1.done && (_a = els_1.return)) _a.call(els_1); + } + finally { if (e_1) throw e_1.error; } + } + }); + /* Patch overflow scrolling on touch start */ + Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["iif"])(isAppleDevice, els$, rxjs__WEBPACK_IMPORTED_MODULE_1__["NEVER"]) + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["switchMap"])(function (els) { return rxjs__WEBPACK_IMPORTED_MODULE_1__["merge"].apply(void 0, Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__spread"])(els.map(function (el) { return (Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["fromEvent"])(el, "touchstart") + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["mapTo"])(el))); }))); })) + .subscribe(function (el) { + var top = el.scrollTop; + /* We're at the top of the container */ + if (top === 0) { + el.scrollTop = 1; + /* We're at the bottom of the container */ + } + else if (top + el.offsetHeight === el.scrollHeight) { + el.scrollTop = top - 1; + } + }); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/patches/source/github/index.ts": +/*!***************************************************************!*\ + !*** ./src/assets/javascripts/patches/source/github/index.ts ***! + \***************************************************************/ +/*! exports provided: fetchSourceFactsFromGitHub */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "fetchSourceFactsFromGitHub", function() { return fetchSourceFactsFromGitHub; }); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); +/* harmony import */ var rxjs_ajax__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs/ajax */ "./node_modules/rxjs/_esm5/ajax/index.js"); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); +/* harmony import */ var utilities__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! utilities */ "./src/assets/javascripts/utilities/index.ts"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Fetch GitHub source facts + * + * @param user - GitHub user + * @param repo - GitHub repository + * + * @return Source facts observable + */ +function fetchSourceFactsFromGitHub(user, repo) { + return Object(rxjs_ajax__WEBPACK_IMPORTED_MODULE_1__["ajax"])({ + url: typeof repo !== "undefined" + ? "https://api.github.com/repos/" + user + "/" + repo + : "https://api.github.com/users/" + user, + responseType: "json" + }) + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["filter"])(function (_a) { + var status = _a.status; + return status === 200; + }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["pluck"])("response"), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["switchMap"])(function (data) { + /* GitHub repository */ + if (typeof repo !== "undefined") { + var stargazers_count = data.stargazers_count, forks_count = data.forks_count; + return Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["of"])([ + Object(utilities__WEBPACK_IMPORTED_MODULE_3__["round"])(stargazers_count || 0) + " Stars", + Object(utilities__WEBPACK_IMPORTED_MODULE_3__["round"])(forks_count || 0) + " Forks" + ]); + /* GitHub user/organization */ + } + else { + var public_repos = data.public_repos; + return Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["of"])([ + Object(utilities__WEBPACK_IMPORTED_MODULE_3__["round"])(public_repos || 0) + " Repositories" + ]); + } + })); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/patches/source/gitlab/index.ts": +/*!***************************************************************!*\ + !*** ./src/assets/javascripts/patches/source/gitlab/index.ts ***! + \***************************************************************/ +/*! exports provided: fetchSourceFactsFromGitLab */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "fetchSourceFactsFromGitLab", function() { return fetchSourceFactsFromGitLab; }); +/* harmony import */ var rxjs_ajax__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rxjs/ajax */ "./node_modules/rxjs/_esm5/ajax/index.js"); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); +/* harmony import */ var utilities__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! utilities */ "./src/assets/javascripts/utilities/index.ts"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Fetch GitLab source facts + * + * @param base - GitLab base + * @param project - GitLab project + * + * @return Source facts observable + */ +function fetchSourceFactsFromGitLab(base, project) { + return Object(rxjs_ajax__WEBPACK_IMPORTED_MODULE_0__["ajax"])({ + url: "https://" + base + "/api/v4/projects/" + encodeURIComponent(project), + responseType: "json" + }) + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["filter"])(function (_a) { + var status = _a.status; + return status === 200; + }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["pluck"])("response"), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["map"])(function (_a) { + var star_count = _a.star_count, forks_count = _a.forks_count; + return ([ + Object(utilities__WEBPACK_IMPORTED_MODULE_2__["round"])(star_count) + " Stars", + Object(utilities__WEBPACK_IMPORTED_MODULE_2__["round"])(forks_count) + " Forks" + ]); + })); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/patches/source/index.ts": +/*!********************************************************!*\ + !*** ./src/assets/javascripts/patches/source/index.ts ***! + \********************************************************/ +/*! exports provided: patchSource */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "patchSource", function() { return patchSource; }); +/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); +/* harmony import */ var browser__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! browser */ "./src/assets/javascripts/browser/index.ts"); +/* harmony import */ var templates__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! templates */ "./src/assets/javascripts/templates/index.ts"); +/* harmony import */ var utilities__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! utilities */ "./src/assets/javascripts/utilities/index.ts"); +/* harmony import */ var _github__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./github */ "./src/assets/javascripts/patches/source/github/index.ts"); +/* harmony import */ var _gitlab__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./gitlab */ "./src/assets/javascripts/patches/source/gitlab/index.ts"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + + + + + +/* ---------------------------------------------------------------------------- + * Helper functions + * ------------------------------------------------------------------------- */ +/** + * Fetch source facts + * + * @param url - Source repository URL + * + * @return Source facts observable + */ +function fetchSourceFacts(url) { + var _a = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(url.match(/(git(?:hub|lab))/i) || [], 1), type = _a[0]; + switch (type.toLowerCase()) { + /* GitHub repository */ + case "github": + var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(url.match(/^.+github\.com\/([^\/]+)\/?([^\/]+)/i), 3), user = _b[1], repo = _b[2]; + return Object(_github__WEBPACK_IMPORTED_MODULE_6__["fetchSourceFactsFromGitHub"])(user, repo); + /* GitLab repository */ + case "gitlab": + var _c = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(url.match(/^.+?([^\/]*gitlab[^\/]+)\/(.+)/i), 3), base = _c[1], project = _c[2]; + return Object(_gitlab__WEBPACK_IMPORTED_MODULE_7__["fetchSourceFactsFromGitLab"])(base, project); + /* Everything else */ + default: + return rxjs__WEBPACK_IMPORTED_MODULE_1__["NEVER"]; + } +} +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Patch elements containing repository information + * + * This function will retrieve the URL from the repository link and try to + * query data from integrated source code platforms like GitHub or GitLab. + * + * @param options - Options + */ +function patchSource(_a) { + var document$ = _a.document$; + document$ + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(function () { return Object(browser__WEBPACK_IMPORTED_MODULE_3__["getElementOrThrow"])(".md-source[href]"); }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["switchMap"])(function (_a) { + var href = _a.href; + return (Object(utilities__WEBPACK_IMPORTED_MODULE_5__["cache"])("" + Object(utilities__WEBPACK_IMPORTED_MODULE_5__["hash"])(href), function () { return fetchSourceFacts(href); })); + }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["catchError"])(function () { return rxjs__WEBPACK_IMPORTED_MODULE_1__["NEVER"]; })) + .subscribe(function (facts) { + var e_1, _a; + try { + for (var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__values"])(Object(browser__WEBPACK_IMPORTED_MODULE_3__["getElements"])(".md-source__repository")), _c = _b.next(); !_c.done; _c = _b.next()) { + var el = _c.value; + if (!el.hasAttribute("data-md-state")) { + el.setAttribute("data-md-state", "done"); + el.appendChild(Object(templates__WEBPACK_IMPORTED_MODULE_4__["renderSource"])(facts)); + } + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) _a.call(_b); + } + finally { if (e_1) throw e_1.error; } + } + }); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/patches/table/index.ts": +/*!*******************************************************!*\ + !*** ./src/assets/javascripts/patches/table/index.ts ***! + \*******************************************************/ +/*! exports provided: patchTables */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "patchTables", function() { return patchTables; }); +/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); +/* harmony import */ var browser__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! browser */ "./src/assets/javascripts/browser/index.ts"); +/* harmony import */ var templates__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! templates */ "./src/assets/javascripts/templates/index.ts"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Patch all `table` elements + * + * This function will re-render all tables by wrapping them to improve overflow + * scrolling on smaller screen sizes. + * + * @param options - Options + */ +function patchTables(_a) { + var document$ = _a.document$; + var sentinel = document.createElement("table"); + document$ + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["map"])(function () { return Object(browser__WEBPACK_IMPORTED_MODULE_2__["getElements"])("table:not([class])"); })) + .subscribe(function (els) { + var e_1, _a; + try { + for (var els_1 = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__values"])(els), els_1_1 = els_1.next(); !els_1_1.done; els_1_1 = els_1.next()) { + var el = els_1_1.value; + el.replaceWith(sentinel); + sentinel.replaceWith(Object(templates__WEBPACK_IMPORTED_MODULE_3__["renderTable"])(el)); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (els_1_1 && !els_1_1.done && (_a = els_1.return)) _a.call(els_1); + } + finally { if (e_1) throw e_1.error; } + } + }); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/templates/clipboard/index.tsx": +/*!**************************************************************!*\ + !*** ./src/assets/javascripts/templates/clipboard/index.tsx ***! + \**************************************************************/ +/*! exports provided: renderClipboard */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "renderClipboard", function() { return renderClipboard; }); +/* harmony import */ var utilities__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! utilities */ "./src/assets/javascripts/utilities/index.ts"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + +/* ---------------------------------------------------------------------------- + * Data + * ------------------------------------------------------------------------- */ +/** + * CSS classes + */ +var css = { + container: "md-clipboard md-icon" +}; +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Render a 'copy-to-clipboard' button + * + * @param id - Unique identifier + * + * @return Element + */ +function renderClipboard(id) { + var path = __webpack_require__(/*! material-design-icons-svg/paths/content-copy.json */ "./node_modules/material-design-icons-svg/paths/content-copy.json"); + return (Object(utilities__WEBPACK_IMPORTED_MODULE_0__["h"])("button", { class: css.container, title: Object(utilities__WEBPACK_IMPORTED_MODULE_0__["translate"])("clipboard.copy"), "data-clipboard-target": "#" + id + " code" }, + Object(utilities__WEBPACK_IMPORTED_MODULE_0__["h"])("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24" }, + Object(utilities__WEBPACK_IMPORTED_MODULE_0__["h"])("path", { d: path })))); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/templates/index.ts": +/*!***************************************************!*\ + !*** ./src/assets/javascripts/templates/index.ts ***! + \***************************************************/ +/*! exports provided: renderClipboard, renderSearchResult, renderSource, renderTable */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _clipboard__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./clipboard */ "./src/assets/javascripts/templates/clipboard/index.tsx"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "renderClipboard", function() { return _clipboard__WEBPACK_IMPORTED_MODULE_0__["renderClipboard"]; }); + +/* harmony import */ var _search__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./search */ "./src/assets/javascripts/templates/search/index.tsx"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "renderSearchResult", function() { return _search__WEBPACK_IMPORTED_MODULE_1__["renderSearchResult"]; }); + +/* harmony import */ var _source__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./source */ "./src/assets/javascripts/templates/source/index.tsx"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "renderSource", function() { return _source__WEBPACK_IMPORTED_MODULE_2__["renderSource"]; }); + +/* harmony import */ var _table__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./table */ "./src/assets/javascripts/templates/table/index.tsx"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "renderTable", function() { return _table__WEBPACK_IMPORTED_MODULE_3__["renderTable"]; }); + +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + + + +/***/ }), + +/***/ "./src/assets/javascripts/templates/search/index.tsx": +/*!***********************************************************!*\ + !*** ./src/assets/javascripts/templates/search/index.tsx ***! + \***********************************************************/ +/*! exports provided: renderSearchResult */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "renderSearchResult", function() { return renderSearchResult; }); +/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); +/* harmony import */ var utilities__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! utilities */ "./src/assets/javascripts/utilities/index.ts"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + +/* ---------------------------------------------------------------------------- + * Data + * ------------------------------------------------------------------------- */ +/** + * CSS classes + */ +var css = { + item: "md-search-result__item", + link: "md-search-result__link", + article: "md-search-result__article md-search-result__article--document", + section: "md-search-result__article", + title: "md-search-result__title", + teaser: "md-search-result__teaser" +}; +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Render a search result + * + * @param result - Search result + * + * @return Element + */ +function renderSearchResult(_a) { + var article = _a.article, sections = _a.sections; + // create page with icon + var path = __webpack_require__(/*! material-design-icons-svg/paths/file-search-outline.json */ "./node_modules/material-design-icons-svg/paths/file-search-outline.json"); + var children = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__spread"])([article], sections).map(function (document) { + var location = document.location, title = document.title, text = document.text; + return (Object(utilities__WEBPACK_IMPORTED_MODULE_1__["h"])("a", { href: location, class: css.link, tabIndex: -1 }, + Object(utilities__WEBPACK_IMPORTED_MODULE_1__["h"])("article", { class: "parent" in document ? css.section : css.article }, + !("parent" in document) + ? Object(utilities__WEBPACK_IMPORTED_MODULE_1__["h"])("div", { class: "md-search-result__icon md-icon" }, + Object(utilities__WEBPACK_IMPORTED_MODULE_1__["h"])("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24" }, + Object(utilities__WEBPACK_IMPORTED_MODULE_1__["h"])("path", { d: path }))) + : null, + Object(utilities__WEBPACK_IMPORTED_MODULE_1__["h"])("h1", { class: css.title }, title), + text.length + ? Object(utilities__WEBPACK_IMPORTED_MODULE_1__["h"])("p", { class: css.teaser }, Object(utilities__WEBPACK_IMPORTED_MODULE_1__["truncate"])(text, 320)) + : undefined))); + }); + return (Object(utilities__WEBPACK_IMPORTED_MODULE_1__["h"])("li", { class: css.item }, children)); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/templates/source/index.tsx": +/*!***********************************************************!*\ + !*** ./src/assets/javascripts/templates/source/index.tsx ***! + \***********************************************************/ +/*! exports provided: renderSource */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "renderSource", function() { return renderSource; }); +/* harmony import */ var utilities__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! utilities */ "./src/assets/javascripts/utilities/index.ts"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + +/* ---------------------------------------------------------------------------- + * Data + * ------------------------------------------------------------------------- */ +/** + * CSS classes + */ +var css = { + facts: "md-source__facts", + fact: "md-source__fact" +}; +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Render source facts + * + * @param facts - Source facts + * + * @return Element + */ +function renderSource(facts) { + var children = facts.map(function (fact) { return (Object(utilities__WEBPACK_IMPORTED_MODULE_0__["h"])("li", { class: css.fact }, fact)); }); + return (Object(utilities__WEBPACK_IMPORTED_MODULE_0__["h"])("ul", { class: css.facts }, children)); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/templates/table/index.tsx": +/*!**********************************************************!*\ + !*** ./src/assets/javascripts/templates/table/index.tsx ***! + \**********************************************************/ +/*! exports provided: renderTable */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "renderTable", function() { return renderTable; }); +/* harmony import */ var utilities__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! utilities */ "./src/assets/javascripts/utilities/index.ts"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + +/* ---------------------------------------------------------------------------- + * Data + * ------------------------------------------------------------------------- */ +/** + * CSS classes + */ +var css = { + wrapper: "md-typeset__scrollwrap", + table: "md-typeset__table" +}; +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Render a table inside a wrapper to improve scrolling on mobile + * + * @param table - Table element + * + * @return Element + */ +function renderTable(table) { + return (Object(utilities__WEBPACK_IMPORTED_MODULE_0__["h"])("div", { class: css.wrapper }, + Object(utilities__WEBPACK_IMPORTED_MODULE_0__["h"])("div", { class: css.table }, table))); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/utilities/config/index.ts": +/*!**********************************************************!*\ + !*** ./src/assets/javascripts/utilities/config/index.ts ***! + \**********************************************************/ +/*! exports provided: isConfig */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isConfig", function() { return isConfig; }); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Ensure that the given value is a valid configuration + * + * We could use `jsonschema` or any other schema validation framework, but that + * would just add more bloat to the bundle, so we'll keep it plain and simple. + * + * @param config - Configuration + * + * @return Test result + */ +function isConfig(config) { + return typeof config === "object" + && typeof config.url === "object" + && typeof config.url.base === "string" + && typeof config.url.worker === "object" + && typeof config.url.worker.search === "string"; +} + + +/***/ }), + +/***/ "./src/assets/javascripts/utilities/index.ts": +/*!***************************************************!*\ + !*** ./src/assets/javascripts/utilities/index.ts ***! + \***************************************************/ +/*! exports provided: isConfig, h, cache, translate, truncate, round, hash */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./config */ "./src/assets/javascripts/utilities/config/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "isConfig", function() { return _config__WEBPACK_IMPORTED_MODULE_0__["isConfig"]; }); + +/* harmony import */ var _jsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./jsx */ "./src/assets/javascripts/utilities/jsx/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "h", function() { return _jsx__WEBPACK_IMPORTED_MODULE_1__["h"]; }); + +/* harmony import */ var _rxjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./rxjs */ "./src/assets/javascripts/utilities/rxjs/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "cache", function() { return _rxjs__WEBPACK_IMPORTED_MODULE_2__["cache"]; }); + +/* harmony import */ var _string__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./string */ "./src/assets/javascripts/utilities/string/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "translate", function() { return _string__WEBPACK_IMPORTED_MODULE_3__["translate"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "truncate", function() { return _string__WEBPACK_IMPORTED_MODULE_3__["truncate"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "round", function() { return _string__WEBPACK_IMPORTED_MODULE_3__["round"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "hash", function() { return _string__WEBPACK_IMPORTED_MODULE_3__["hash"]; }); + +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + + + +/***/ }), + +/***/ "./src/assets/javascripts/utilities/jsx/index.ts": +/*!*******************************************************!*\ + !*** ./src/assets/javascripts/utilities/jsx/index.ts ***! + \*******************************************************/ +/*! exports provided: h */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "h", function() { return h; }); +/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); +/* harmony import */ var ramda__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ramda */ "./node_modules/ramda/es/index.js"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + +/* ---------------------------------------------------------------------------- + * Helper functions + * ------------------------------------------------------------------------- */ +/** + * Create an element + * + * @param tag - HTML or SVG tag + * + * @return Element + */ +function createElement(tag) { + switch (tag) { + /* SVG elements */ + case "svg": + case "path": + return document.createElementNS("http://www.w3.org/2000/svg", tag); + /* HTML elements */ + default: + return document.createElement(tag); + } +} +/** + * Set an attribute + * + * @param el - Element + * @param name - Attribute name + * @param value - Attribute value + */ +function setAttribute(el, name, value) { + switch (name) { + /* Attributes to be ignored */ + case "xmlns": + break; + /* Attributes of SVG elements */ + case "viewBox": + case "d": + if (typeof value !== "boolean") + el.setAttributeNS(null, name, value); + else if (value) + el.setAttributeNS(null, name, ""); + break; + /* Attributes of HTML elements */ + default: + if (typeof value !== "boolean") + el.setAttribute(name, value); + else if (value) + el.setAttribute(name, ""); + } +} +/** + * Append a child node to an element + * + * @param el - Element + * @param child - Child node(s) + */ +function appendChild(el, child) { + var e_1, _a; + /* Handle primitive types (including raw HTML) */ + if (typeof child === "string" || typeof child === "number") { + el.innerHTML += child.toString(); + /* Handle nodes */ + } + else if (child instanceof Node) { + el.appendChild(child); + /* Handle nested children */ + } + else if (Array.isArray(child)) { + try { + for (var child_1 = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__values"])(child), child_1_1 = child_1.next(); !child_1_1.done; child_1_1 = child_1.next()) { + var node = child_1_1.value; + appendChild(el, node); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (child_1_1 && !child_1_1.done && (_a = child_1.return)) _a.call(child_1); + } + finally { if (e_1) throw e_1.error; } + } + } +} +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * JSX factory + * + * @param tag - HTML or SVG tag + * @param attributes - HTML attributes + * @param children - Child elements + * + * @return Element + */ +function h(tag, attributes) { + var e_2, _a, e_3, _b; + var children = []; + for (var _i = 2; _i < arguments.length; _i++) { + children[_i - 2] = arguments[_i]; + } + var el = createElement(tag); + /* Set attributes, if any */ + if (attributes) + try { + for (var _c = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__values"])(Object(ramda__WEBPACK_IMPORTED_MODULE_1__["keys"])(attributes)), _d = _c.next(); !_d.done; _d = _c.next()) { + var attr = _d.value; + setAttribute(el, attr, attributes[attr]); + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (_d && !_d.done && (_a = _c.return)) _a.call(_c); + } + finally { if (e_2) throw e_2.error; } + } + try { + /* Append child nodes */ + for (var children_1 = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__values"])(children), children_1_1 = children_1.next(); !children_1_1.done; children_1_1 = children_1.next()) { + var child = children_1_1.value; + appendChild(el, child); + } + } + catch (e_3_1) { e_3 = { error: e_3_1 }; } + finally { + try { + if (children_1_1 && !children_1_1.done && (_b = children_1.return)) _b.call(children_1); + } + finally { if (e_3) throw e_3.error; } + } + /* Return element */ + return el; +} + + +/***/ }), + +/***/ "./src/assets/javascripts/utilities/rxjs/index.ts": +/*!********************************************************!*\ + !*** ./src/assets/javascripts/utilities/rxjs/index.ts ***! + \********************************************************/ +/*! exports provided: cache */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "cache", function() { return cache; }); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Cache the last value emitted by an observable in session storage + * + * If the key is not found in session storage, the factory is executed and the + * latest value emitted will automatically be persisted to sessions storage. + * Note that the values emitted by the returned observable must be serializable + * as `JSON`, or data will be lost. + * + * @template T - Value type + * + * @param key - Cache key + * @param factory - Observable factory + * + * @return Value observable + */ +function cache(key, factory) { + return Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["defer"])(function () { + var data = sessionStorage.getItem(key); + if (data) { + return Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["of"])(JSON.parse(data)); + /* Retrieve value from observable factory and write to storage */ + } + else { + var value$ = factory(); + value$.subscribe(function (value) { + try { + sessionStorage.setItem(key, JSON.stringify(value)); + } + catch (err) { + /* Uncritical, just swallow */ + } + }); + /* Return value */ + return value$; + } + }); +} + + +/***/ }), + +/***/ "./src/assets/javascripts/utilities/string/index.ts": +/*!**********************************************************!*\ + !*** ./src/assets/javascripts/utilities/string/index.ts ***! + \**********************************************************/ +/*! exports provided: translate, truncate, round, hash */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "translate", function() { return translate; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "truncate", function() { return truncate; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "round", function() { return round; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "hash", function() { return hash; }); +/* harmony import */ var browser__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! browser */ "./src/assets/javascripts/browser/index.ts"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + +/* ---------------------------------------------------------------------------- + * Data + * ------------------------------------------------------------------------- */ +/** + * Translations + */ +var lang; +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Translate the given key + * + * @param key - Key to be translated + * @param value - Value to be replaced + * + * @return Translation + */ +function translate(key, value) { + if (typeof lang === "undefined") { + var el = Object(browser__WEBPACK_IMPORTED_MODULE_0__["getElementOrThrow"])("#__lang"); + lang = JSON.parse(el.innerText); + } + if (typeof lang[key] === "undefined") { + throw new ReferenceError("Invalid translation: " + key); + } + return typeof value !== "undefined" + ? lang[key].replace("#", value) + : lang[key]; +} +/** + * Truncate a string after the given number of characters + * + * This is not a very reasonable approach, since the summaries kind of suck. + * It would be better to create something more intelligent, highlighting the + * search occurrences and making a better summary out of it, but this note was + * written three years ago, so who knows if we'll ever fix it. + * + * @param value - Value to be truncated + * @param n - Number of characters + * + * @return Truncated value + */ +function truncate(value, n) { + var i = n; + if (value.length > i) { + while (value[i] !== " " && --i > 0) + ; // tslint:disable-line + return value.substring(0, i) + "..."; + } + return value; +} +/** + * Round a number for display with source facts + * + * This is a reverse engineered version of GitHub's weird rounding algorithm + * for stars, forks and all other numbers. While all numbers below `1,000` are + * returned as-is, bigger numbers are converted to fixed numbers: + * + * - `1,049` => `1k` + * - `1,050` => `1.1k` + * - `1,949` => `1.9k` + * - `1,950` => `2k` + * + * @param value - Original value + * + * @return Rounded value + */ +function round(value) { + if (value > 999) { + var digits = +((value - 950) % 1000 > 99); + return ((value + 1) / 1000).toFixed(digits) + "k"; + } + else { + return value.toString(); + } +} +/** + * Simple hash function + * + * @see https://bit.ly/2wsVjJ4 - Original source + * + * @param value - Value to be hashed + * + * @return Hash as 32bit integer + */ +function hash(value) { + var h = 0; + for (var i = 0, len = value.length; i < len; i++) { + h = ((h << 5) - h) + value.charCodeAt(i); + h |= 0; // Convert to 32bit integer + } + return h; +} + + +/***/ }), + +/***/ "./src/assets/javascripts/workers/index.ts": +/*!*************************************************!*\ + !*** ./src/assets/javascripts/workers/index.ts ***! + \*************************************************/ +/*! exports provided: setupSearchWorker, SearchMessageType, isSearchSetupMessage, isSearchDumpMessage, isSearchQueryMessage, isSearchResultMessage */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _search__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./search */ "./src/assets/javascripts/workers/search/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setupSearchWorker", function() { return _search__WEBPACK_IMPORTED_MODULE_0__["setupSearchWorker"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "SearchMessageType", function() { return _search__WEBPACK_IMPORTED_MODULE_0__["SearchMessageType"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "isSearchSetupMessage", function() { return _search__WEBPACK_IMPORTED_MODULE_0__["isSearchSetupMessage"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "isSearchDumpMessage", function() { return _search__WEBPACK_IMPORTED_MODULE_0__["isSearchDumpMessage"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "isSearchQueryMessage", function() { return _search__WEBPACK_IMPORTED_MODULE_0__["isSearchQueryMessage"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "isSearchResultMessage", function() { return _search__WEBPACK_IMPORTED_MODULE_0__["isSearchResultMessage"]; }); + +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + +/***/ }), + +/***/ "./src/assets/javascripts/workers/search/_/index.ts": +/*!**********************************************************!*\ + !*** ./src/assets/javascripts/workers/search/_/index.ts ***! + \**********************************************************/ +/*! exports provided: setupSearchWorker */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setupSearchWorker", function() { return setupSearchWorker; }); +/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); +/* harmony import */ var rxjs_ajax__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rxjs/ajax */ "./node_modules/rxjs/_esm5/ajax/index.js"); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); +/* harmony import */ var browser__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! browser */ "./src/assets/javascripts/browser/index.ts"); +/* harmony import */ var utilities__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! utilities */ "./src/assets/javascripts/utilities/index.ts"); +/* harmony import */ var _message__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../message */ "./src/assets/javascripts/workers/search/message/index.ts"); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A RTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + + + + +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Setup search web worker + * + * This function will create a web worker to setup and query the search index + * which is done using `lunr`. The index can be passed explicitly in order to + * enable hacks like _localsearch_ via search index embedding as JSON. If no + * index is given, this function will load it from the default location. + * + * @param url - Worker url + * @param options - Options + * + * @return Worker handler + */ +function setupSearchWorker(url, _a) { + var base = _a.base, index = _a.index, location$ = _a.location$; + var worker = new Worker(url); + /* Ensure stable base URL */ + var origin$ = location$ + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["take"])(1), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(function (_a) { + var href = _a.href; + return new URL(base, href) + .toString() + .replace(/\/$/, ""); + })); + /* Create communication channels and resolve relative links */ + var tx$ = new rxjs__WEBPACK_IMPORTED_MODULE_1__["Subject"](); + var rx$ = Object(browser__WEBPACK_IMPORTED_MODULE_4__["watchWorker"])(worker, { tx$: tx$ }) + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["withLatestFrom"])(origin$), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(function (_a) { + var e_1, _b, e_2, _c; + var _d = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_a, 2), message = _d[0], origin = _d[1]; + if (Object(_message__WEBPACK_IMPORTED_MODULE_6__["isSearchResultMessage"])(message)) { + try { + for (var _e = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__values"])(message.data), _f = _e.next(); !_f.done; _f = _e.next()) { + var _g = _f.value, article = _g.article, sections = _g.sections; + article.location = origin + "/" + article.location; + try { + for (var sections_1 = (e_2 = void 0, Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__values"])(sections)), sections_1_1 = sections_1.next(); !sections_1_1.done; sections_1_1 = sections_1.next()) { + var section = sections_1_1.value; + section.location = origin + "/" + section.location; + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (sections_1_1 && !sections_1_1.done && (_c = sections_1.return)) _c.call(sections_1); + } + finally { if (e_2) throw e_2.error; } + } + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_f && !_f.done && (_b = _e.return)) _b.call(_e); + } + finally { if (e_1) throw e_1.error; } + } + } + return message; + }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["shareReplay"])(1)); + /* Fetch index if it wasn't passed explicitly */ + var index$ = typeof index !== "undefined" + ? Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["from"])(index) + : origin$ + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["switchMap"])(function (origin) { return Object(rxjs_ajax__WEBPACK_IMPORTED_MODULE_2__["ajax"])({ + url: origin + "/search/search_index.json", + responseType: "json", + withCredentials: true + }) + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["pluck"])("response")); })); + function isConfigDefaultLang(config) { + return config.lang.length === 1 && config.lang[0] === "en"; + } + function isConfigDefaultSeparator(config) { + return config.separator === "[\s\-]+"; + } + index$ + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(function (_a) { + var config = _a.config, rest = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__rest"])(_a, ["config"]); + return (Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__assign"])({ config: { + lang: isConfigDefaultLang(config) + ? [Object(utilities__WEBPACK_IMPORTED_MODULE_5__["translate"])("search.config.lang")] + : config.lang, + separator: isConfigDefaultSeparator(config) + ? Object(utilities__WEBPACK_IMPORTED_MODULE_5__["translate"])("search.config.separator") + : config.separator + }, pipeline: Object(utilities__WEBPACK_IMPORTED_MODULE_5__["translate"])("search.config.pipeline") + .split(/\s*,\s*/) + .filter(Boolean) }, rest)); + })) + // .subscribe(console.log) + // /* Send index to worker */ + // index$ + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(function (data) { return ({ + type: _message__WEBPACK_IMPORTED_MODULE_6__["SearchMessageType"].SETUP, + data: data + }); })) + .subscribe(tx$.next.bind(tx$)); + /* Return worker handler */ + return { tx$: tx$, rx$: rx$ }; +} + + +/***/ }), + +/***/ "./src/assets/javascripts/workers/search/index.ts": +/*!********************************************************!*\ + !*** ./src/assets/javascripts/workers/search/index.ts ***! + \********************************************************/ +/*! exports provided: setupSearchWorker, SearchMessageType, isSearchSetupMessage, isSearchDumpMessage, isSearchQueryMessage, isSearchResultMessage */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_ */ "./src/assets/javascripts/workers/search/_/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setupSearchWorker", function() { return ___WEBPACK_IMPORTED_MODULE_0__["setupSearchWorker"]; }); + +/* harmony import */ var _message__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./message */ "./src/assets/javascripts/workers/search/message/index.ts"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "SearchMessageType", function() { return _message__WEBPACK_IMPORTED_MODULE_1__["SearchMessageType"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "isSearchSetupMessage", function() { return _message__WEBPACK_IMPORTED_MODULE_1__["isSearchSetupMessage"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "isSearchDumpMessage", function() { return _message__WEBPACK_IMPORTED_MODULE_1__["isSearchDumpMessage"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "isSearchQueryMessage", function() { return _message__WEBPACK_IMPORTED_MODULE_1__["isSearchQueryMessage"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "isSearchResultMessage", function() { return _message__WEBPACK_IMPORTED_MODULE_1__["isSearchResultMessage"]; }); + +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + + + +/***/ }), + +/***/ "./src/assets/javascripts/workers/search/message/index.ts": +/*!****************************************************************!*\ + !*** ./src/assets/javascripts/workers/search/message/index.ts ***! + \****************************************************************/ +/*! exports provided: SearchMessageType, isSearchSetupMessage, isSearchDumpMessage, isSearchQueryMessage, isSearchResultMessage */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SearchMessageType", function() { return SearchMessageType; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isSearchSetupMessage", function() { return isSearchSetupMessage; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isSearchDumpMessage", function() { return isSearchDumpMessage; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isSearchQueryMessage", function() { return isSearchQueryMessage; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isSearchResultMessage", function() { return isSearchResultMessage; }); +/* + * Copyright (c) 2016-2020 Martin Donath + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A RTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ +/* ---------------------------------------------------------------------------- + * Types + * ------------------------------------------------------------------------- */ +/** + * Search message type + */ +var SearchMessageType; +(function (SearchMessageType) { + SearchMessageType[SearchMessageType["SETUP"] = 0] = "SETUP"; + SearchMessageType[SearchMessageType["DUMP"] = 1] = "DUMP"; + SearchMessageType[SearchMessageType["QUERY"] = 2] = "QUERY"; + SearchMessageType[SearchMessageType["RESULT"] = 3] = "RESULT"; /* Search results */ +})(SearchMessageType || (SearchMessageType = {})); +/* ---------------------------------------------------------------------------- + * Functions + * ------------------------------------------------------------------------- */ +/** + * Type guard for search setup messages + * + * @param message - Search worker message + * + * @return Test result + */ +function isSearchSetupMessage(message) { + return message.type === SearchMessageType.SETUP; +} +/** + * Type guard for search dump messages + * + * @param message - Search worker message + * + * @return Test result + */ +function isSearchDumpMessage(message) { + return message.type === SearchMessageType.DUMP; +} +/** + * Type guard for search query messages + * + * @param message - Search worker message + * + * @return Test result + */ +function isSearchQueryMessage(message) { + return message.type === SearchMessageType.QUERY; +} +/** + * Type guard for search result messages + * + * @param message - Search worker message + * + * @return Test result + */ +function isSearchResultMessage(message) { + return message.type === SearchMessageType.RESULT; +} + + +/***/ }), + +/***/ "./src/assets/stylesheets/main.scss": +/*!******************************************!*\ + !*** ./src/assets/stylesheets/main.scss ***! + \******************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = ("/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/material/main.css"); + +/***/ }), + +/***/ "./src/assets/stylesheets/palette.scss": +/*!*********************************************!*\ + !*** ./src/assets/stylesheets/palette.scss ***! + \*********************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = ("/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/material/palette.css"); + +/***/ }) + +/******/ }))); +//# sourceMappingURL=bundle.js.map \ No newline at end of file diff --git a/material/assets/javascripts/bundle.js.map b/material/assets/javascripts/bundle.js.map new file mode 100644 index 000000000..8febd08ea --- /dev/null +++ b/material/assets/javascripts/bundle.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/assets/javascripts/browser/document/_/index.ts","webpack:///./src/assets/javascripts/browser/document/index.ts","webpack:///./src/assets/javascripts/browser/document/switch/index.ts","webpack:///./src/assets/javascripts/browser/element/_/index.ts","webpack:///./src/assets/javascripts/browser/element/focus/index.ts","webpack:///./src/assets/javascripts/browser/element/index.ts","webpack:///./src/assets/javascripts/browser/element/offset/index.ts","webpack:///./src/assets/javascripts/browser/element/select/index.ts","webpack:///./src/assets/javascripts/browser/index.ts","webpack:///./src/assets/javascripts/browser/keyboard/index.ts","webpack:///./src/assets/javascripts/browser/location/_/index.ts","webpack:///./src/assets/javascripts/browser/location/hash/index.ts","webpack:///./src/assets/javascripts/browser/location/index.ts","webpack:///./src/assets/javascripts/browser/media/index.ts","webpack:///./src/assets/javascripts/browser/toggle/index.ts","webpack:///./src/assets/javascripts/browser/viewport/_/index.ts","webpack:///./src/assets/javascripts/browser/viewport/index.ts","webpack:///./src/assets/javascripts/browser/viewport/offset/index.ts","webpack:///./src/assets/javascripts/browser/viewport/size/index.ts","webpack:///./src/assets/javascripts/browser/worker/index.ts","webpack:///./src/assets/javascripts/components/_/index.ts","webpack:///./src/assets/javascripts/components/header/_/index.ts","webpack:///./src/assets/javascripts/components/header/index.ts","webpack:///./src/assets/javascripts/components/header/react/index.ts","webpack:///./src/assets/javascripts/components/header/set/index.ts","webpack:///./src/assets/javascripts/components/hero/_/index.ts","webpack:///./src/assets/javascripts/components/hero/index.ts","webpack:///./src/assets/javascripts/components/hero/react/index.ts","webpack:///./src/assets/javascripts/components/hero/set/index.ts","webpack:///./src/assets/javascripts/components/index.ts","webpack:///./src/assets/javascripts/components/main/_/index.ts","webpack:///./src/assets/javascripts/components/main/index.ts","webpack:///./src/assets/javascripts/components/main/react/index.ts","webpack:///./src/assets/javascripts/components/main/set/index.ts","webpack:///./src/assets/javascripts/components/navigation/_/index.ts","webpack:///./src/assets/javascripts/components/navigation/index.ts","webpack:///./src/assets/javascripts/components/navigation/layer/_/index.ts","webpack:///./src/assets/javascripts/components/navigation/layer/index.ts","webpack:///./src/assets/javascripts/components/navigation/layer/react/index.ts","webpack:///./src/assets/javascripts/components/navigation/layer/set/index.ts","webpack:///./src/assets/javascripts/components/search/_/index.ts","webpack:///./src/assets/javascripts/components/search/index.ts","webpack:///./src/assets/javascripts/components/search/query/_/index.ts","webpack:///./src/assets/javascripts/components/search/query/index.ts","webpack:///./src/assets/javascripts/components/search/query/react/index.ts","webpack:///./src/assets/javascripts/components/search/reset/_/index.ts","webpack:///./src/assets/javascripts/components/search/reset/index.ts","webpack:///./src/assets/javascripts/components/search/reset/react/index.ts","webpack:///./src/assets/javascripts/components/search/result/_/index.ts","webpack:///./src/assets/javascripts/components/search/result/index.ts","webpack:///./src/assets/javascripts/components/search/result/react/index.ts","webpack:///./src/assets/javascripts/components/search/result/set/index.ts","webpack:///./src/assets/javascripts/components/shared/index.ts","webpack:///./src/assets/javascripts/components/shared/sidebar/_/index.ts","webpack:///./src/assets/javascripts/components/shared/sidebar/index.ts","webpack:///./src/assets/javascripts/components/shared/sidebar/react/index.ts","webpack:///./src/assets/javascripts/components/shared/sidebar/set/index.ts","webpack:///./src/assets/javascripts/components/tabs/_/index.ts","webpack:///./src/assets/javascripts/components/tabs/index.ts","webpack:///./src/assets/javascripts/components/tabs/react/index.ts","webpack:///./src/assets/javascripts/components/tabs/set/index.ts","webpack:///./src/assets/javascripts/components/toc/_/index.ts","webpack:///./src/assets/javascripts/components/toc/anchor/_/index.ts","webpack:///./src/assets/javascripts/components/toc/anchor/index.ts","webpack:///./src/assets/javascripts/components/toc/anchor/react/index.ts","webpack:///./src/assets/javascripts/components/toc/anchor/set/index.ts","webpack:///./src/assets/javascripts/components/toc/index.ts","webpack:///./src/assets/javascripts/index.ts","webpack:///./src/assets/javascripts/integrations/clipboard/index.ts","webpack:///./src/assets/javascripts/integrations/dialog/index.ts","webpack:///./src/assets/javascripts/integrations/instant/index.ts","webpack:///./src/assets/javascripts/integrations/keyboard/index.ts","webpack:///./src/assets/javascripts/patches/details/index.ts","webpack:///./src/assets/javascripts/patches/index.ts","webpack:///./src/assets/javascripts/patches/script/index.ts","webpack:///./src/assets/javascripts/patches/scrollfix/index.ts","webpack:///./src/assets/javascripts/patches/source/github/index.ts","webpack:///./src/assets/javascripts/patches/source/gitlab/index.ts","webpack:///./src/assets/javascripts/patches/source/index.ts","webpack:///./src/assets/javascripts/patches/table/index.ts","webpack:///./src/assets/javascripts/templates/clipboard/index.tsx","webpack:///./src/assets/javascripts/templates/index.ts","webpack:///./src/assets/javascripts/templates/search/index.tsx","webpack:///./src/assets/javascripts/templates/source/index.tsx","webpack:///./src/assets/javascripts/templates/table/index.tsx","webpack:///./src/assets/javascripts/utilities/config/index.ts","webpack:///./src/assets/javascripts/utilities/index.ts","webpack:///./src/assets/javascripts/utilities/jsx/index.ts","webpack:///./src/assets/javascripts/utilities/rxjs/index.ts","webpack:///./src/assets/javascripts/utilities/string/index.ts","webpack:///./src/assets/javascripts/workers/index.ts","webpack:///./src/assets/javascripts/workers/search/_/index.ts","webpack:///./src/assets/javascripts/workers/search/index.ts","webpack:///./src/assets/javascripts/workers/search/message/index.ts","webpack:///./src/assets/stylesheets/main.scss","webpack:///./src/assets/stylesheets/palette.scss"],"names":[],"mappings":"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","file":"assets/javascripts/bundle.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t\"assets/javascripts/bundle\": 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([\"./src/assets/javascripts/index.ts\",\"assets/javascripts/vendor\"]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { NEVER, Observable, fromEvent, merge } from \"rxjs\"\nimport { mapTo, shareReplay } from \"rxjs/operators\"\n\nimport { watchDocumentSwitch } from \"../switch\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n location$?: Observable /* Location observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch document\n *\n * If the location observable is passed, instant loading will be enabled which\n * means that new values will be emitted every time the location changes.\n *\n * @return Document observable\n */\nexport function watchDocument(\n { location$ }: WatchOptions = {}\n): Observable {\n return merge(\n fromEvent(document, \"DOMContentLoaded\")\n .pipe(\n mapTo(document)\n ),\n typeof location$ !== \"undefined\"\n ? watchDocumentSwitch({ location$ })\n : NEVER\n )\n .pipe(\n shareReplay(1)\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./switch\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { NEVER, Observable } from \"rxjs\"\nimport { ajax } from \"rxjs/ajax\"\nimport {\n catchError,\n distinctUntilKeyChanged,\n pluck,\n share,\n skip,\n switchMap\n} from \"rxjs/operators\"\n\nimport { setLocation } from \"../../location\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n location$: Observable /* Location observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch document switch\n *\n * This function returns an observables that fetches a document if the provided\n * location observable emits a new value (i.e. URL). If the emitted URL points\n * to the same page, the request is effectively ignored (i.e. when only the\n * fragment identifier changes).\n *\n * In case the request fails, the location change is dispatched regularly.\n *\n * @param options - Options\n *\n * @return Document observable\n */\nexport function watchDocumentSwitch(\n { location$ }: WatchOptions\n): Observable {\n return location$\n .pipe(\n distinctUntilKeyChanged(\"pathname\"),\n skip(1),\n\n /* Fetch document */\n switchMap(url => ajax({\n url: url.href,\n responseType: \"document\",\n withCredentials: true\n })\n .pipe(\n pluck(\"response\"),\n catchError(() => {\n setLocation(url)\n return NEVER\n })\n )\n ),\n share()\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve an element matching the query selector\n *\n * @template T - Element type\n *\n * @param selector - Query selector\n * @param node - Node of reference\n *\n * @return Element or nothing\n */\nexport function getElement(\n selector: string, node: ParentNode = document\n): T | undefined {\n return node.querySelector(selector) || undefined\n}\n\n/**\n * Retrieve an element matching a query selector or throw a reference error\n *\n * @template T - Element type\n *\n * @param selector - Query selector\n * @param node - Node of reference\n *\n * @return Element\n */\nexport function getElementOrThrow(\n selector: string, node: ParentNode = document\n): T {\n const el = getElement(selector, node)\n if (typeof el === \"undefined\")\n throw new ReferenceError(\n `Missing element: expected \"${selector}\" to be present`\n )\n return el\n}\n\n/**\n * Retrieve the currently active element\n *\n * @return Element or nothing\n */\nexport function getActiveElement(): HTMLElement | undefined {\n return document.activeElement instanceof HTMLElement\n ? document.activeElement\n : undefined\n}\n\n/**\n * Retrieve all elements matching the query selector\n *\n * @template T - Element type\n *\n * @param selector - Query selector\n * @param node - Node of reference\n *\n * @return Elements\n */\nexport function getElements(\n selector: string, node: ParentNode = document\n): T[] {\n return Array.from(node.querySelectorAll(selector))\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, fromEvent, merge } from \"rxjs\"\nimport { mapTo, shareReplay, startWith } from \"rxjs/operators\"\n\nimport { getActiveElement } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set element focus\n *\n * @param el - Element\n * @param value - Whether the element should be focused\n */\nexport function setElementFocus(\nel: HTMLElement, value: boolean = true\n): void {\n if (value)\n el.focus()\n else\n el.blur()\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch element focus\n *\n * @param el - Element\n *\n * @return Element focus observable\n */\nexport function watchElementFocus(\n el: HTMLElement\n): Observable {\n const focus$ = fromEvent(el, \"focus\")\n const blur$ = fromEvent(el, \"blur\")\n\n /* Map events to boolean state */\n return merge(\n focus$.pipe(mapTo(true)),\n blur$.pipe(mapTo(false))\n )\n .pipe(\n startWith(el === getActiveElement()),\n shareReplay(1)\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./focus\"\nexport * from \"./offset\"\nexport * from \"./select\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, fromEvent, merge } from \"rxjs\"\nimport { map, shareReplay, startWith } from \"rxjs/operators\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Element offset\n */\nexport interface ElementOffset {\n x: number /* Horizontal offset */\n y: number /* Vertical offset */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve element offset\n *\n * @param el - Element\n *\n * @return Element offset\n */\nexport function getElementOffset(el: HTMLElement): ElementOffset {\n return {\n x: el.scrollLeft,\n y: el.scrollTop\n }\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch element offset\n *\n * @param el - Element\n *\n * @return Element offset observable\n */\nexport function watchElementOffset(\n el: HTMLElement\n): Observable {\n return merge(\n fromEvent(el, \"scroll\"),\n fromEvent(window, \"resize\")\n )\n .pipe(\n map(() => getElementOffset(el)),\n startWith(getElementOffset(el)),\n shareReplay(1)\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set element text selection\n *\n * @param el - Element\n */\nexport function setElementSelection(\n el: HTMLElement\n): void {\n if (el instanceof HTMLInputElement)\n el.select()\n else\n throw new Error(\"Not implemented\")\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./document\"\nexport * from \"./element\"\nexport * from \"./keyboard\"\nexport * from \"./location\"\nexport * from \"./media\"\nexport * from \"./toggle\"\nexport * from \"./viewport\"\nexport * from \"./worker\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, fromEvent } from \"rxjs\"\nimport { filter, map, share } from \"rxjs/operators\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Key\n */\nexport interface Key {\n type: string /* Key type */\n claim(): void /* Key claim */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Check whether an element may receive keyboard input\n *\n * @param el - Element\n *\n * @return Test result\n */\nexport function isSusceptibleToKeyboard(el: HTMLElement): boolean {\n switch (el.tagName) {\n\n /* Form elements */\n case \"INPUT\":\n case \"SELECT\":\n case \"TEXTAREA\":\n return true\n\n /* Everything else */\n default:\n return el.isContentEditable\n }\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch keyboard\n *\n * @return Keyboard observable\n */\nexport function watchKeyboard(): Observable {\n return fromEvent(window, \"keydown\")\n .pipe(\n filter(ev => !(ev.metaKey || ev.ctrlKey)),\n map(ev => ({\n type: ev.key,\n claim() {\n ev.preventDefault()\n ev.stopPropagation()\n }\n })),\n share()\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { BehaviorSubject } from \"rxjs\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve location\n *\n * This function will return a `URL` object (and not `Location`) in order to\n * normalize typings across the application. Furthermore, locations need to be\n * tracked without setting them and `Location` is a singleton which represents\n * the current location.\n *\n * @return URL\n */\nexport function getLocation(): URL {\n return new URL(location.href)\n}\n\n/**\n * Set location\n *\n * @param url - URL to change to\n */\nexport function setLocation(url: URL): void {\n location.href = url.href\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Check whether a URL is an internal link or a file (except `.html`)\n *\n * @param url - URL or HTML anchor element\n * @param ref - Reference URL\n *\n * @return Test result\n */\nexport function isLocationInternal(\n url: URL | HTMLAnchorElement,\n ref: URL | Location = location\n): boolean {\n return url.host === ref.host\n && /^(?:\\/[\\w-]+)*(?:\\/?|\\.html)$/i.test(url.pathname)\n}\n\n/**\n * Check whether a URL is an anchor link on the current page\n *\n * @param url - URL or HTML anchor element\n * @param ref - Reference URL\n *\n * @return Test result\n */\nexport function isLocationAnchor(\n url: URL | HTMLAnchorElement,\n ref: URL | Location = location\n): boolean {\n return url.pathname === ref.pathname\n && url.hash.length > 0\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch location\n *\n * @return Location subject\n */\nexport function watchLocation(): BehaviorSubject {\n return new BehaviorSubject(getLocation())\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, fromEvent } from \"rxjs\"\nimport { filter, map, share, startWith } from \"rxjs/operators\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve location hash\n *\n * @return Location hash\n */\nexport function getLocationHash(): string {\n return location.hash.substring(1)\n}\n\n/**\n * Set location hash\n *\n * Setting a new fragment identifier via `location.hash` will have no effect\n * if the value doesn't change. However, when a new fragment identifier is set,\n * we want the browser to target the respective element at all times, which is\n * why we use this dirty little trick.\n *\n * @param hash - Location hash\n */\nexport function setLocationHash(hash: string): void {\n const el = document.createElement(\"a\")\n el.href = hash\n el.click()\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch location hash\n *\n * @return Location hash observable\n */\nexport function watchLocationHash(): Observable {\n return fromEvent(window, \"hashchange\")\n .pipe(\n map(getLocationHash),\n startWith(getLocationHash()),\n filter(hash => hash.length > 0),\n share()\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./hash\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, fromEventPattern } from \"rxjs\"\nimport { shareReplay, startWith } from \"rxjs/operators\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch media query\n *\n * @param query - Media query\n *\n * @return Media observable\n */\nexport function watchMedia(query: string): Observable {\n const media = matchMedia(query)\n return fromEventPattern(next =>\n media.addListener(() => next(media.matches))\n )\n .pipe(\n startWith(media.matches),\n shareReplay(1)\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, fromEvent } from \"rxjs\"\nimport { map, startWith } from \"rxjs/operators\"\n\nimport { getElementOrThrow } from \"../element\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Toggle\n */\nexport type Toggle =\n | \"drawer\" /* Toggle for drawer */\n | \"search\" /* Toggle for search */\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * Toggle map\n */\nconst toggles: Record = {\n drawer: getElementOrThrow(`[data-md-toggle=drawer]`),\n search: getElementOrThrow(`[data-md-toggle=search]`)\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve the value of a toggle\n *\n * @param name - Toggle\n *\n * @return Toggle value\n */\nexport function getToggle(name: Toggle): boolean {\n return toggles[name].checked\n}\n\n/**\n * Set toggle\n *\n * Simulating a click event seems to be the most cross-browser compatible way\n * of changing the value while also emitting a `change` event. Before, Material\n * used `CustomEvent` to programmatically change the value of a toggle, but this\n * is a much simpler and cleaner solution which doesn't require a polyfill.\n *\n * @param name - Toggle\n * @param value - Toggle value\n */\nexport function setToggle(name: Toggle, value: boolean): void {\n if (toggles[name].checked !== value)\n toggles[name].click()\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch toggle\n *\n * @param name - Toggle\n *\n * @return Toggle value observable\n */\nexport function watchToggle(name: Toggle): Observable {\n const el = toggles[name]\n return fromEvent(el, \"change\")\n .pipe(\n map(() => el.checked),\n startWith(el.checked)\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, combineLatest } from \"rxjs\"\nimport {\n distinctUntilKeyChanged,\n map,\n shareReplay\n} from \"rxjs/operators\"\n\nimport { Header } from \"components\"\n\nimport {\n ViewportOffset,\n watchViewportOffset\n} from \"../offset\"\nimport {\n ViewportSize,\n watchViewportSize\n} from \"../size\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Viewport\n */\nexport interface Viewport {\n offset: ViewportOffset /* Viewport offset */\n size: ViewportSize /* Viewport size */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch at options\n */\ninterface WatchAtOptions {\n header$: Observable
    /* Header observable */\n viewport$: Observable /* Viewport observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch viewport\n *\n * @return Viewport observable\n */\nexport function watchViewport(): Observable {\n return combineLatest([\n watchViewportOffset(),\n watchViewportSize()\n ])\n .pipe(\n map(([offset, size]) => ({ offset, size })),\n shareReplay(1)\n )\n}\n\n/**\n * Watch viewport relative to element\n *\n * @param el - Element\n * @param options - Options\n *\n * @return Viewport observable\n */\nexport function watchViewportAt(\n el: HTMLElement, { header$, viewport$ }: WatchAtOptions\n): Observable {\n const offset$ = viewport$\n .pipe(\n distinctUntilKeyChanged(\"size\"),\n map((): ViewportOffset => ({\n x: el.offsetLeft,\n y: el.offsetTop\n }))\n )\n\n /* Compute relative viewport, return hot observable */\n return combineLatest([header$, viewport$, offset$])\n .pipe(\n map(([{ height }, { offset, size }, { x, y }]) => ({\n offset: {\n x: offset.x - x,\n y: offset.y - y + height\n },\n size\n })),\n shareReplay(1)\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./offset\"\nexport * from \"./size\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, fromEvent, merge } from \"rxjs\"\nimport { map, startWith } from \"rxjs/operators\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Viewport offset\n */\nexport interface ViewportOffset {\n x: number /* Horizontal offset */\n y: number /* Vertical offset */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve viewport offset\n *\n * On iOS Safari, viewport offset can be negative due to overflow scrolling.\n * As this may induce strange behaviors downstream, we'll just limit it to 0.\n *\n * @return Viewport offset\n */\nexport function getViewportOffset(): ViewportOffset {\n return {\n x: Math.max(0, pageXOffset),\n y: Math.max(0, pageYOffset)\n }\n}\n\n/**\n * Set viewport offset\n *\n * @param offset - Viewport offset\n */\nexport function setViewportOffset(\n { x, y }: Partial\n): void {\n window.scrollTo(x || 0, y || 0)\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch viewport offset\n *\n * @return Viewport offset observable\n */\nexport function watchViewportOffset(): Observable {\n return merge(\n fromEvent(window, \"scroll\"),\n fromEvent(window, \"resize\")\n )\n .pipe(\n map(getViewportOffset),\n startWith(getViewportOffset())\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, fromEvent } from \"rxjs\"\nimport { map, startWith } from \"rxjs/operators\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Viewport size\n */\nexport interface ViewportSize {\n width: number /* Viewport width */\n height: number /* Viewport height */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve viewport size\n *\n * @return Viewport size\n */\nexport function getViewportSize(): ViewportSize {\n return {\n width: innerWidth,\n height: innerHeight\n }\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch viewport size\n *\n * @return Viewport size observable\n */\nexport function watchViewportSize(): Observable {\n return fromEvent(window, \"resize\")\n .pipe(\n map(getViewportSize),\n startWith(getViewportSize())\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, Subject, fromEventPattern } from \"rxjs\"\nimport {\n pluck,\n share,\n switchMapTo,\n tap,\n throttle\n} from \"rxjs/operators\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Worker message\n */\nexport interface WorkerMessage {\n type: unknown /* Message type */\n data: unknown /* Message data */\n}\n\n/**\n * Worker handler\n *\n * @template T - Message type\n */\nexport interface WorkerHandler<\n T extends WorkerMessage\n> {\n tx$: Subject /* Message transmission subject */\n rx$: Observable /* Message receive observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n *\n * @template T - Worker message type\n */\ninterface WatchOptions {\n tx$: Observable /* Message transmission observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch a web worker\n *\n * This function returns an observable that will send all values emitted by the\n * message observable to the web worker. Web worker communication is expected\n * to be bidirectional (request-response) and synchronous. Messages that are\n * emitted during a pending request are throttled, the last one is emitted.\n *\n * @param worker - Web worker\n * @param options - Options\n *\n * @return Worker message observable\n */\nexport function watchWorker(\n worker: Worker, { tx$ }: WatchOptions\n): Observable {\n\n /* Intercept messages from worker-like objects */\n const rx$ = fromEventPattern(next =>\n worker.addEventListener(\"message\", next)\n )\n .pipe(\n pluck(\"data\")\n )\n\n /* Send and receive messages, return hot observable */\n return tx$\n .pipe(\n throttle(() => rx$, { leading: true, trailing: true }),\n tap(message => worker.postMessage(message)),\n switchMapTo(rx$),\n share()\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { EMPTY, Observable, of } from \"rxjs\"\nimport {\n distinctUntilChanged,\n map,\n scan,\n shareReplay,\n switchMap\n} from \"rxjs/operators\"\n\nimport { getElement } from \"browser\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Component\n */\nexport type Component =\n | \"container\" /* Container */\n | \"header\" /* Header */\n | \"header-title\" /* Header title */\n | \"hero\" /* Hero */\n | \"main\" /* Main area */\n | \"navigation\" /* Navigation */\n | \"search\" /* Search */\n | \"search-query\" /* Search input */\n | \"search-reset\" /* Search reset */\n | \"search-result\" /* Search results */\n | \"skip\" /* Skip link */\n | \"tabs\" /* Tabs */\n | \"toc\" /* Table of contents */\n\n/**\n * Component map\n */\nexport type ComponentMap = {\n [P in Component]?: HTMLElement\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n document$: Observable /* Document observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * Component map observable\n */\nlet components$: Observable\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup bindings to components with given names\n *\n * This function will maintain bindings to the elements identified by the given\n * names in-between document switches and update the elements in-place.\n *\n * @param names - Component names\n * @param options - Options\n */\nexport function setupComponents(\n names: Component[], { document$ }: WatchOptions\n): void {\n components$ = document$\n .pipe(\n\n /* Build component map */\n map(document => names.reduce((components, name) => {\n const el = getElement(`[data-md-component=${name}]`, document)\n return {\n ...components,\n ...typeof el !== \"undefined\" ? { [name]: el } : {}\n }\n }, {})),\n\n /* Re-compute component map on document switch */\n scan((prev, next) => {\n for (const name of names) {\n switch (name) {\n\n /* Top-level components: update */\n case \"header-title\":\n case \"container\":\n case \"skip\":\n if (name in prev && typeof prev[name] !== \"undefined\") {\n prev[name]!.replaceWith(next[name]!)\n prev[name] = next[name]\n }\n break\n\n /* All other components: rebind */\n default:\n if (typeof next[name] !== \"undefined\")\n prev[name] = getElement(`[data-md-component=${name}]`)\n else\n delete prev[name]\n }\n }\n return prev\n }),\n\n /* Convert to hot observable */\n shareReplay(1)\n )\n}\n\n/**\n * Retrieve a component\n *\n * The returned observable will only re-emit if the element changed, i.e. if\n * it was replaced from a document which was switched to.\n *\n * @template T - Element type\n *\n * @param name - Component name\n *\n * @return Element observable\n */\nexport function useComponent(\n name: \"search-query\"\n): Observable\nexport function useComponent(\n name: Component\n): Observable\nexport function useComponent(\n name: Component\n): Observable {\n return components$\n .pipe(\n switchMap(components => (\n typeof components[name] !== \"undefined\"\n ? of(components[name] as T)\n : EMPTY\n )),\n distinctUntilChanged()\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, OperatorFunction, combineLatest, pipe } from \"rxjs\"\nimport {\n distinctUntilChanged,\n filter,\n map,\n shareReplay,\n startWith,\n switchMap,\n withLatestFrom\n} from \"rxjs/operators\"\n\nimport {\n Viewport,\n getElement,\n watchViewportAt\n} from \"browser\"\n\nimport { useComponent } from \"../../_\"\nimport {\n applyHeaderType,\n watchHeader\n} from \"../react\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Header type\n */\nexport type HeaderType =\n | \"site\" /* Header shows site title */\n | \"page\" /* Header shows page title */\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Header\n */\nexport interface Header {\n type: HeaderType /* Header type */\n sticky: boolean /* Header stickyness */\n height: number /* Header visible height */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n viewport$: Observable /* Viewport observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount header from source observable\n *\n * @param options - Options\n *\n * @return Operator function\n */\nexport function mountHeader(\n { viewport$ }: MountOptions\n): OperatorFunction {\n return pipe(\n switchMap(el => {\n const header$ = watchHeader(el, { viewport$ })\n\n /* Compute whether the header should switch to page header */\n const type$ = useComponent(\"main\")\n .pipe(\n map(main => getElement(\"h1, h2, h3, h4, h5, h6\", main)!),\n filter(hx => typeof hx !== \"undefined\"),\n withLatestFrom(useComponent(\"header-title\")),\n switchMap(([hx, title]) => watchViewportAt(hx, { header$, viewport$ })\n .pipe(\n map(({ offset: { y } }) => {\n return y >= hx.offsetHeight ? \"page\" : \"site\"\n }),\n distinctUntilChanged(),\n applyHeaderType(title)\n )\n ),\n startWith(\"site\")\n )\n\n /* Combine into single observable */\n return combineLatest([header$, type$])\n .pipe(\n map(([header, type]): Header => ({ type, ...header })),\n shareReplay(1)\n )\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./react\"\nexport * from \"./set\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n MonoTypeOperatorFunction,\n Observable,\n animationFrameScheduler,\n of,\n pipe\n} from \"rxjs\"\nimport {\n distinctUntilKeyChanged,\n finalize,\n observeOn,\n switchMap,\n tap\n} from \"rxjs/operators\"\n\nimport { Viewport } from \"browser\"\n\nimport { Header, HeaderType } from \"../_\"\nimport {\n resetHeaderTitleActive,\n setHeaderTitleActive\n} from \"../set\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n viewport$: Observable /* Viewport observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch header\n *\n * The header is wrapped in an observable to pave the way for auto-hiding or\n * other dynamic behaviors that may be implemented later on.\n *\n * @param el - Header element\n * @param options - Options\n *\n * @return Header observable\n */\nexport function watchHeader(\n el: HTMLElement, { viewport$ }: WatchOptions\n): Observable> {\n return viewport$\n .pipe(\n distinctUntilKeyChanged(\"size\"),\n switchMap(() => {\n const styles = getComputedStyle(el)\n const sticky = [\n \"sticky\", /* Modern browsers */\n \"-webkit-sticky\" /* Old Safari */\n ].includes(styles.position)\n return of({\n sticky,\n height: sticky ? el.offsetHeight : 0\n })\n })\n )\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Apply header title type\n *\n * @param el - Header title element\n *\n * @return Operator function\n */\nexport function applyHeaderType(\n el: HTMLElement\n): MonoTypeOperatorFunction {\n return pipe(\n\n /* Defer repaint to next animation frame */\n observeOn(animationFrameScheduler),\n tap(type => {\n setHeaderTitleActive(el, type === \"page\")\n }),\n\n /* Reset on complete or error */\n finalize(() => {\n resetHeaderTitleActive(el)\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set header title active\n *\n * @param el - Header title element\n * @param value - Whether the title is shown\n */\nexport function setHeaderTitleActive(\n el: HTMLElement, value: boolean\n): void {\n el.setAttribute(\"data-md-state\", value ? \"active\" : \"\")\n}\n\n/**\n * Reset header title active\n *\n * @param el - Header title element\n */\nexport function resetHeaderTitleActive(\n el: HTMLElement\n): void {\n el.removeAttribute(\"data-md-state\")\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, OperatorFunction, pipe } from \"rxjs\"\nimport { distinctUntilChanged, map, switchMap } from \"rxjs/operators\"\n\nimport { Viewport, watchViewportAt } from \"browser\"\n\nimport { Header } from \"../../header\"\nimport { applyHero } from \"../react\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Hero\n */\nexport interface Hero {\n hidden: boolean /* Whether the hero is hidden */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n header$: Observable
    /* Header observable */\n viewport$: Observable /* Viewport observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount hero from source observable\n *\n * @param options - Options\n *\n * @return Operator function\n */\nexport function mountHero(\n { header$, viewport$ }: MountOptions\n): OperatorFunction {\n return pipe(\n switchMap(el => watchViewportAt(el, { header$, viewport$ })\n .pipe(\n map(({ offset: { y } }) => ({ hidden: y >= 20 })),\n distinctUntilChanged(),\n applyHero(el)\n )\n )\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./react\"\nexport * from \"./set\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n MonoTypeOperatorFunction,\n animationFrameScheduler,\n pipe\n} from \"rxjs\"\nimport { finalize, observeOn, tap } from \"rxjs/operators\"\n\nimport { Hero } from \"../_\"\nimport {\n resetHeroHidden,\n setHeroHidden\n} from \"../set\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Apply hero\n *\n * @param el - Hero element\n *\n * @return Operator function\n */\nexport function applyHero(\n el: HTMLElement\n): MonoTypeOperatorFunction {\n return pipe(\n\n /* Defer repaint to next animation frame */\n observeOn(animationFrameScheduler),\n tap(({ hidden }) => {\n setHeroHidden(el, hidden)\n }),\n\n /* Reset on complete or error */\n finalize(() => {\n resetHeroHidden(el)\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set hero hidden\n *\n * @param el - Hero element\n * @param value - Whether the element is hidden\n */\nexport function setHeroHidden(\n el: HTMLElement, value: boolean\n): void {\n el.setAttribute(\"data-md-state\", value ? \"hidden\" : \"\")\n}\n\n/**\n * Reset hero hidden\n *\n * @param el - Hero element\n */\nexport function resetHeroHidden(\n el: HTMLElement\n): void {\n el.removeAttribute(\"data-md-state\")\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./header\"\nexport * from \"./hero\"\nexport * from \"./main\"\nexport * from \"./navigation\"\nexport * from \"./search\"\nexport * from \"./shared\"\nexport * from \"./tabs\"\nexport * from \"./toc\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, OperatorFunction, Subject, pipe } from \"rxjs\"\nimport { distinctUntilKeyChanged, switchMap, tap } from \"rxjs/operators\"\n\nimport { Viewport } from \"browser\"\n\nimport { useComponent } from \"../../_\"\nimport { Header } from \"../../header\"\nimport {\n applyHeaderShadow,\n watchMain\n} from \"../react\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Main area\n */\nexport interface Main {\n offset: number /* Main area top offset */\n height: number /* Main area visible height */\n active: boolean /* Scrolled past top offset */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n header$: Observable
    /* Header observable */\n viewport$: Observable /* Viewport observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount main area from source observable\n *\n * The header must be connected to the main area observable outside of the\n * operator function, as the header will persist in-between document switches\n * while the main area is replaced. However, the header observable must be\n * passed to this function, so we connect both via a long-living subject.\n *\n * @param options - Options\n *\n * @return Operator function\n */\nexport function mountMain(\n { header$, viewport$ }: MountOptions\n): OperatorFunction {\n const main$ = new Subject
    ()\n\n /* Connect to main area observable via long-living subject */\n useComponent(\"header\")\n .pipe(\n switchMap(header => main$\n .pipe(\n distinctUntilKeyChanged(\"active\"),\n applyHeaderShadow(header)\n )\n )\n )\n .subscribe()\n\n /* Return operator */\n return pipe(\n switchMap(el => watchMain(el, { header$, viewport$ })),\n tap(main => main$.next(main))\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./react\"\nexport * from \"./set\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n MonoTypeOperatorFunction,\n Observable,\n animationFrameScheduler,\n combineLatest,\n pipe\n} from \"rxjs\"\nimport {\n distinctUntilChanged,\n finalize,\n map,\n observeOn,\n pluck,\n tap\n} from \"rxjs/operators\"\n\nimport { Viewport } from \"browser\"\n\nimport { Header } from \"../../header\"\nimport { Main } from \"../_\"\nimport {\n resetHeaderShadow,\n setHeaderShadow\n} from \"../set\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n header$: Observable
    /* Header observable */\n viewport$: Observable /* Viewport observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch main area\n *\n * This function returns an observable that computes the visual parameters of\n * the main area which depends on the viewport vertical offset and height, as\n * well as the height of the header element, if the header is fixed.\n *\n * @param el - Main area element\n * @param options - Options\n *\n * @return Main area observable\n */\nexport function watchMain(\n el: HTMLElement, { header$, viewport$ }: WatchOptions\n): Observable
    {\n\n /* Compute necessary adjustment for header */\n const adjust$ = header$\n .pipe(\n pluck(\"height\")\n )\n\n /* Compute the main area's visible height */\n const height$ = combineLatest([adjust$, viewport$])\n .pipe(\n map(([adjust, { offset: { y }, size: { height } }]) => {\n const top = el.offsetTop\n const bottom = el.offsetHeight + top\n return height\n - Math.max(0, top - y, adjust)\n - Math.max(0, height + y - bottom)\n }),\n map(height => Math.max(0, height)),\n distinctUntilChanged()\n )\n\n /* Compute whether the viewport offset is past the main area's top */\n const active$ = combineLatest([adjust$, viewport$])\n .pipe(\n map(([adjust, { offset: { y } }]) => y >= el.offsetTop - adjust),\n distinctUntilChanged()\n )\n\n /* Combine into a single observable */\n return combineLatest([adjust$, height$, active$])\n .pipe(\n map(([adjust, height, active]) => ({\n offset: el.offsetTop - adjust,\n height,\n active\n }))\n )\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Apply header shadow\n *\n * @param el - Header element\n *\n * @return Operator function\n */\nexport function applyHeaderShadow(\n el: HTMLElement\n): MonoTypeOperatorFunction
    {\n return pipe(\n\n /* Defer repaint to next animation frame */\n observeOn(animationFrameScheduler),\n tap(({ active }) => {\n setHeaderShadow(el, active)\n }),\n\n /* Reset on complete or error */\n finalize(() => {\n resetHeaderShadow(el)\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set header shadow\n *\n * @param el - Header element\n * @param value - Whether the shadow is shown\n */\nexport function setHeaderShadow(\n el: HTMLElement, value: boolean\n): void {\n el.setAttribute(\"data-md-state\", value ? \"shadow\" : \"\")\n}\n\n/**\n * Reset header shadow\n *\n * @param el - Header element\n */\nexport function resetHeaderShadow(\n el: HTMLElement\n): void {\n el.removeAttribute(\"data-md-state\")\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, OperatorFunction, pipe } from \"rxjs\"\nimport { map, switchMap } from \"rxjs/operators\"\n\nimport { Viewport, getElements } from \"browser\"\n\nimport { Header } from \"../../header\"\nimport { Main } from \"../../main\"\nimport {\n Sidebar,\n applySidebar,\n watchSidebar\n} from \"../../shared\"\nimport {\n NavigationLayer,\n applyNavigationLayer,\n watchNavigationLayer\n} from \"../layer\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Navigation for [screen -]\n */\ninterface NavigationBelowScreen {\n layer: NavigationLayer /* Active layer */\n}\n\n/**\n * Navigation for [screen +]\n */\ninterface NavigationAboveScreen {\n sidebar: Sidebar /* Sidebar */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Navigation\n */\nexport type Navigation =\n | NavigationBelowScreen\n | NavigationAboveScreen\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n header$: Observable
    /* Header observable */\n main$: Observable
    /* Main area observable */\n viewport$: Observable /* Viewport observable */\n screen$: Observable /* Screen media observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount navigation from source observable\n *\n * @param options - Options\n *\n * @return Operator function\n */\nexport function mountNavigation(\n { header$, main$, viewport$, screen$ }: MountOptions\n): OperatorFunction {\n return pipe(\n switchMap(el => screen$\n .pipe(\n switchMap(screen => {\n\n /* [screen +]: Mount navigation in sidebar */\n if (screen) {\n return watchSidebar(el, { main$, viewport$ })\n .pipe(\n applySidebar(el, { header$ }),\n map(sidebar => ({ sidebar }))\n )\n\n /* [screen -]: Mount navigation in drawer */\n } else {\n const els = getElements(\"nav\", el)\n return watchNavigationLayer(els)\n .pipe(\n applyNavigationLayer(els),\n map(layer => ({ layer }))\n )\n }\n })\n )\n )\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./layer\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Navigation layer\n */\nexport interface NavigationLayer {\n prev?: HTMLElement /* Layer (previous) */\n next: HTMLElement /* Layer (next) */\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./react\"\nexport * from \"./set\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { findLast } from \"ramda\"\nimport {\n MonoTypeOperatorFunction,\n Observable,\n animationFrameScheduler,\n fromEvent,\n merge,\n pipe\n} from \"rxjs\"\nimport {\n delay,\n finalize,\n map,\n observeOn,\n scan,\n tap\n} from \"rxjs/operators\"\n\nimport { getElement, getElementOrThrow } from \"browser\"\n\nimport { NavigationLayer } from \"../_\"\nimport {\n resetOverflowScrolling,\n setOverflowScrolling\n} from \"../set\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch navigation layer\n *\n * On iOS we want to add `-webkit-overflow-scrolling: touch` for the menus\n * contained in the drawer, but as the navigational layers are nested, we can\n * only add it to the topmost layer or extremely weird cropping will occur.\n * This implementation keeps track of the previous and current layer.\n *\n * @param els - Navigation elements\n *\n * @return Navigation layer observable\n */\nexport function watchNavigationLayer(\n els: HTMLElement[]\n): Observable {\n const table = new Map()\n for (const el of els) {\n const label = getElement(\"label\", el)\n if (typeof label !== \"undefined\") {\n const input = getElementOrThrow(`#${label.htmlFor}`)\n table.set(input, el)\n }\n }\n\n /* Determine topmost layer */\n const layer$ = merge(...[...table.keys()].map(input => (\n fromEvent(input, \"change\")\n )))\n .pipe(\n map(() => getElementOrThrow(\".md-nav__list\", table.get(\n findLast(({ checked }) => checked, [...table.keys()])!\n )))\n )\n\n /* Return previous and next layer */\n return layer$\n .pipe(\n map(next => ({ next })),\n scan(({ next: prev }, { next }) => ({ prev, next }))\n )\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Apply navigation layer\n *\n * @param els - Navigation elements\n *\n * @return Operator function\n */\nexport function applyNavigationLayer(\n els: HTMLElement[]\n): MonoTypeOperatorFunction {\n return pipe(\n\n /* Defer repaint to next animation frame */\n observeOn(animationFrameScheduler),\n tap(({ prev }) => {\n if (prev)\n resetOverflowScrolling(prev)\n }),\n\n /* Wait until transition has finished */\n delay(250),\n\n /* Defer repaint to next animation frame */\n observeOn(animationFrameScheduler),\n tap(({ next }) => {\n setOverflowScrolling(next)\n }),\n\n /* Reset on complete or error */\n finalize(() => {\n for (const el of els)\n resetOverflowScrolling(\n getElementOrThrow(\".md-nav__list\", el)\n )\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Global augmentations\n */\ndeclare global {\n interface CSSStyleDeclaration {\n webkitOverflowScrolling: \"touch\" | \"\"\n }\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set overflow scrolling\n *\n * @param el - Scrollable element\n */\nexport function setOverflowScrolling(\n el: HTMLElement\n): void {\n el.style.webkitOverflowScrolling = \"touch\"\n}\n\n/**\n * Reset overflow scrolling\n *\n * @param el - Scrollable element\n */\nexport function resetOverflowScrolling(\n el: HTMLElement\n): void {\n el.style.webkitOverflowScrolling = \"\"\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, OperatorFunction, combineLatest, pipe } from \"rxjs\"\nimport { map, switchMap } from \"rxjs/operators\"\n\nimport { SearchResult } from \"integrations/search\"\n\nimport { SearchQuery } from \"../query\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Search\n */\nexport interface Search {\n query: SearchQuery /* Search query */\n result: SearchResult[] /* Search result list */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n query$: Observable /* Search query observable */\n reset$: Observable /* Search reset observable */\n result$: Observable /* Search result observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount search from source observable\n *\n * @param options - Options\n *\n * @return Operator function\n */\nexport function mountSearch(\n { query$, reset$, result$ }: MountOptions\n): OperatorFunction {\n return pipe(\n switchMap(() => combineLatest([query$, result$, reset$])\n .pipe(\n map(([query, result]) => ({ query, result }))\n )\n )\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./query\"\nexport * from \"./reset\"\nexport * from \"./result\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { OperatorFunction, pipe } from \"rxjs\"\nimport {\n distinctUntilKeyChanged,\n map,\n switchMap\n} from \"rxjs/operators\"\n\nimport { WorkerHandler, setToggle } from \"browser\"\nimport {\n SearchMessage,\n SearchMessageType,\n SearchQueryMessage\n} from \"workers\"\n\nimport { watchSearchQuery } from \"../react\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Search query\n */\nexport interface SearchQuery {\n value: string /* Query value */\n focus: boolean /* Query focus */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n transform?(value: string): string /* Transformation function */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount search query from source observable\n *\n * @param handler - Worker handler\n * @param options - Options\n *\n * @return Operator function\n */\nexport function mountSearchQuery(\n { tx$ }: WorkerHandler, options: MountOptions = {}\n): OperatorFunction {\n return pipe(\n switchMap(el => {\n const query$ = watchSearchQuery(el, options)\n\n /* Subscribe worker to search query */\n query$\n .pipe(\n distinctUntilKeyChanged(\"value\"),\n map(({ value }): SearchQueryMessage => ({\n type: SearchMessageType.QUERY,\n data: value\n }))\n )\n .subscribe(tx$.next.bind(tx$))\n\n /* Toggle search on focus */\n query$\n .pipe(\n distinctUntilKeyChanged(\"focus\")\n )\n .subscribe(({ focus }) => {\n if (focus)\n setToggle(\"search\", focus)\n })\n\n /* Return search query */\n return query$\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./react\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, combineLatest, fromEvent, merge } from \"rxjs\"\nimport {\n delay,\n distinctUntilChanged,\n map,\n startWith\n} from \"rxjs/operators\"\n\nimport { watchElementFocus } from \"browser\"\n\nimport { SearchQuery } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n transform?(value: string): string /* Transformation function */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Default transformation function\n *\n * Rogue control characters are filtered before handing the query to the\n * search index, as `lunr` will throw otherwise.\n *\n * @param value - Query value\n *\n * @return Transformed query value\n */\nfunction defaultTransform(value: string): string {\n return value\n .replace(/(?:^|\\s+)[*+-:^~]+(?=\\s+|$)/g, \"\")\n .trim()\n .replace(/\\s+|\\b$/g, \"* \")\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch search query\n *\n * Note that the focus event which triggers re-reading the current query value\n * is delayed by `1ms` so the input's empty state is allowed to propagate.\n *\n * @param el - Search query element\n * @param options - Options\n *\n * @return Search query observable\n */\nexport function watchSearchQuery(\n el: HTMLInputElement, { transform }: WatchOptions = {}\n): Observable {\n const fn = transform || defaultTransform\n\n /* Intercept keyboard events */\n const value$ = merge(\n fromEvent(el, \"keyup\"),\n fromEvent(el, \"focus\").pipe(delay(1))\n )\n .pipe(\n map(() => fn(el.value)),\n startWith(fn(el.value)),\n distinctUntilChanged()\n )\n\n /* Intercept focus events */\n const focus$ = watchElementFocus(el)\n\n /* Combine into a single observable */\n return combineLatest([value$, focus$])\n .pipe(\n map(([value, focus]) => ({ value, focus }))\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { OperatorFunction, pipe } from \"rxjs\"\nimport {\n mapTo,\n startWith,\n switchMap,\n switchMapTo,\n tap\n} from \"rxjs/operators\"\n\nimport { setElementFocus } from \"browser\"\n\nimport { useComponent } from \"../../../_\"\nimport { watchSearchReset } from \"../react\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount search reset from source observable\n *\n * @return Operator function\n */\nexport function mountSearchReset(): OperatorFunction {\n return pipe(\n switchMap(el => watchSearchReset(el)\n .pipe(\n switchMapTo(useComponent(\"search-query\")),\n tap(setElementFocus),\n mapTo(undefined)\n )\n ),\n startWith(undefined)\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./react\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, fromEvent } from \"rxjs\"\nimport { mapTo } from \"rxjs/operators\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch search reset\n *\n * @param el - Search reset element\n *\n * @return Search reset observable\n */\nexport function watchSearchReset(\n el: HTMLElement\n): Observable {\n return fromEvent(el, \"click\")\n .pipe(\n mapTo(undefined)\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { identity } from \"ramda\"\nimport { Observable, OperatorFunction, pipe } from \"rxjs\"\nimport {\n distinctUntilChanged,\n filter,\n map,\n pluck,\n switchMap\n} from \"rxjs/operators\"\n\nimport { WorkerHandler, watchElementOffset } from \"browser\"\nimport { SearchResult } from \"integrations/search\"\nimport {\n SearchMessage,\n isSearchResultMessage\n} from \"workers\"\n\nimport { SearchQuery } from \"../../query\"\nimport { applySearchResult } from \"../react\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n query$: Observable /* Search query observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount search result from source observable\n *\n * @param handler - Worker handler\n * @param options - Options\n *\n * @return Operator function\n */\nexport function mountSearchResult(\n { rx$ }: WorkerHandler, { query$ }: MountOptions\n): OperatorFunction {\n return pipe(\n switchMap(el => {\n const container = el.parentElement!\n\n /* Compute whether there are more search results to fetch */\n const fetch$ = watchElementOffset(container)\n .pipe(\n map(({ y }) => {\n return y >= container.scrollHeight - container.offsetHeight - 16\n }),\n distinctUntilChanged(),\n filter(identity)\n )\n\n /* Apply search results */\n return rx$\n .pipe(\n filter(isSearchResultMessage),\n pluck(\"data\"),\n applySearchResult(el, { query$, fetch$ })\n )\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./react\"\nexport * from \"./set\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n MonoTypeOperatorFunction,\n Observable,\n animationFrameScheduler,\n pipe\n} from \"rxjs\"\nimport {\n finalize,\n map,\n mapTo,\n observeOn,\n scan,\n switchMap,\n withLatestFrom\n} from \"rxjs/operators\"\n\nimport { getElementOrThrow } from \"browser\"\nimport { SearchResult } from \"integrations/search\"\nimport { renderSearchResult } from \"templates\"\n\nimport { SearchQuery } from \"../../query\"\nimport {\n addToSearchResultList,\n resetSearchResultList,\n resetSearchResultMeta,\n setSearchResultMeta\n} from \"../set\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Apply options\n */\ninterface ApplyOptions {\n query$: Observable /* Search query observable */\n fetch$: Observable /* Result fetch observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Apply search results\n *\n * This function will perform a lazy rendering of the search results, depending\n * on the vertical offset of the search result container. When the scroll offset\n * reaches the bottom of the element, more results are fetched and rendered.\n *\n * @param el - Search result element\n * @param options - Options\n *\n * @return Operator function\n */\nexport function applySearchResult(\n el: HTMLElement, { query$, fetch$ }: ApplyOptions\n): MonoTypeOperatorFunction {\n const list = getElementOrThrow(\".md-search-result__list\", el)\n const meta = getElementOrThrow(\".md-search-result__meta\", el)\n return pipe(\n\n /* Apply search result metadata */\n withLatestFrom(query$),\n map(([result, query]) => {\n if (query.value) {\n setSearchResultMeta(meta, result.length)\n } else {\n resetSearchResultMeta(meta)\n }\n return result\n }),\n\n /* Apply search result list */\n switchMap(result => fetch$\n .pipe(\n\n /* Defer repaint to next animation frame */\n observeOn(animationFrameScheduler),\n scan(index => {\n const container = el.parentElement!\n while (index < result.length) {\n addToSearchResultList(list, renderSearchResult(result[index++]))\n if (container.scrollHeight - container.offsetHeight > 16)\n break\n }\n return index\n }, 0),\n\n /* Re-map to search result */\n mapTo(result),\n\n /* Reset on complete or error */\n finalize(() => {\n resetSearchResultList(list)\n })\n )\n )\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { translate } from \"utilities\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set number of search results\n *\n * @param el - Search result metadata element\n * @param value - Number of results\n */\nexport function setSearchResultMeta(\n el: HTMLElement, value: number\n): void {\n switch (value) {\n\n /* No results */\n case 0:\n el.textContent = translate(\"search.result.none\")\n break\n\n /* One result */\n case 1:\n el.textContent = translate(\"search.result.one\")\n break\n\n /* Multiple result */\n default:\n el.textContent = translate(\"search.result.other\", value.toString())\n }\n}\n\n/**\n * Reset number of search results\n *\n * @param el - Search result metadata element\n */\nexport function resetSearchResultMeta(\n el: HTMLElement\n): void {\n el.textContent = translate(\"search.result.placeholder\")\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Add an element to the search result list\n *\n * @param el - Search result list element\n * @param child - Search result element\n */\nexport function addToSearchResultList(\n el: HTMLElement, child: HTMLElement\n): void {\n el.appendChild(child)\n}\n\n/**\n * Reset search result list\n *\n * @param el - Search result list element\n */\nexport function resetSearchResultList(\n el: HTMLElement\n): void {\n el.innerHTML = \"\"\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./sidebar\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Sidebar\n */\nexport interface Sidebar {\n height: number /* Sidebar height */\n lock: boolean /* Sidebar lock */\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./react\"\nexport * from \"./set\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n MonoTypeOperatorFunction,\n Observable,\n animationFrameScheduler,\n combineLatest,\n pipe\n} from \"rxjs\"\nimport {\n distinctUntilChanged,\n distinctUntilKeyChanged,\n finalize,\n map,\n observeOn,\n tap,\n withLatestFrom\n} from \"rxjs/operators\"\n\nimport { Viewport } from \"browser\"\n\nimport { Header } from \"../../../header\"\nimport { Main } from \"../../../main\"\nimport { Sidebar } from \"../_\"\nimport {\n resetSidebarHeight,\n resetSidebarLock,\n resetSidebarOffset,\n setSidebarHeight,\n setSidebarLock,\n setSidebarOffset\n} from \"../set\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n main$: Observable
    /* Main area observable */\n viewport$: Observable /* Viewport observable */\n}\n\n/**\n * Apply options\n */\ninterface ApplyOptions {\n header$: Observable
    /* Header observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch sidebar\n *\n * This function returns an observable that computes the visual parameters of\n * the sidebar which depends on the vertical viewport offset, as well as the\n * height of the main area. When the page is scrolled beyond the header, the\n * sidebar is locked and fills the remaining space.\n *\n * @param el - Sidebar element\n * @param options - Options\n *\n * @return Sidebar observable\n */\nexport function watchSidebar(\n el: HTMLElement, { main$, viewport$ }: WatchOptions\n): Observable {\n\n /* Adjust for internal main area offset */\n const adjust$ = viewport$\n .pipe(\n distinctUntilKeyChanged(\"size\"),\n map(() => parseFloat(\n getComputedStyle(el.parentElement!)\n .getPropertyValue(\"padding-top\")\n )),\n distinctUntilChanged()\n )\n\n /* Compute the sidebar's available height */\n const height$ = viewport$\n .pipe(\n withLatestFrom(adjust$, main$),\n map(([{ offset: { y } }, adjust, { offset, height }]) => (\n height\n + Math.min(adjust, Math.max(0, y - offset))\n - adjust\n )),\n distinctUntilChanged()\n )\n\n /* Compute whether the sidebar should be locked */\n const lock$ = viewport$\n .pipe(\n withLatestFrom(adjust$, main$),\n map(([{ offset: { y } }, adjust, { offset }]) => (\n y >= offset + adjust\n )),\n distinctUntilChanged()\n )\n\n /* Combine into single observable */\n return combineLatest([height$, lock$])\n .pipe(\n map(([height, lock]) => ({ height, lock }))\n )\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Apply sidebar\n *\n * @param el - Sidebar element\n * @param options - Options\n *\n * @return Operator function\n */\nexport function applySidebar(\n el: HTMLElement, { header$ }: ApplyOptions\n): MonoTypeOperatorFunction {\n return pipe(\n\n /* Defer repaint to next animation frame */\n observeOn(animationFrameScheduler),\n withLatestFrom(header$),\n tap(([{ height, lock }, { height: offset }]) => {\n setSidebarHeight(el, height)\n setSidebarLock(el, lock)\n\n /* Set offset in locked state depending on header height */\n if (lock)\n setSidebarOffset(el, offset)\n else\n resetSidebarOffset(el)\n }),\n\n /* Re-map to sidebar */\n map(([sidebar]) => sidebar),\n\n /* Reset on complete or error */\n finalize(() => {\n resetSidebarOffset(el)\n resetSidebarHeight(el)\n resetSidebarLock(el)\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set sidebar offset\n *\n * @param el - Sidebar element\n * @param value - Sidebar offset\n */\nexport function setSidebarOffset(\n el: HTMLElement, value: number\n): void {\n el.style.top = `${value}px`\n}\n\n/**\n * Reset sidebar offset\n *\n * @param el - Sidebar element\n */\nexport function resetSidebarOffset(\n el: HTMLElement\n): void {\n el.style.top = \"\"\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Set sidebar height\n *\n * @param el - Sidebar element\n * @param value - Sidebar height\n */\nexport function setSidebarHeight(\n el: HTMLElement, value: number\n): void {\n el.style.height = `${value}px`\n}\n\n/**\n * Reset sidebar height\n *\n * @param el - Sidebar element\n */\nexport function resetSidebarHeight(\n el: HTMLElement\n): void {\n el.style.height = \"\"\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Set sidebar lock\n *\n * @param el - Sidebar element\n * @param value - Whether the sidebar is locked\n */\nexport function setSidebarLock(\n el: HTMLElement, value: boolean\n): void {\n el.setAttribute(\"data-md-state\", value ? \"lock\" : \"\")\n}\n\n/**\n * Reset sidebar lock\n *\n * @param el - Sidebar element\n */\nexport function resetSidebarLock(\n el: HTMLElement\n): void {\n el.removeAttribute(\"data-md-state\")\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, OperatorFunction, of, pipe } from \"rxjs\"\nimport { distinctUntilChanged, map, switchMap } from \"rxjs/operators\"\n\nimport { Viewport, watchViewportAt } from \"browser\"\n\nimport { Header } from \"../../header\"\nimport { applyTabs } from \"../react\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Tabs\n */\nexport interface Tabs {\n hidden: boolean /* Whether the tabs are hidden */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n header$: Observable
    /* Header observable */\n viewport$: Observable /* Viewport observable */\n screen$: Observable /* Media screen observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount tabs from source observable\n *\n * @param options - Options\n *\n * @return Operator function\n */\nexport function mountTabs(\n { header$, viewport$, screen$ }: MountOptions\n): OperatorFunction {\n return pipe(\n switchMap(el => screen$\n .pipe(\n switchMap(screen => {\n\n /* [screen +]: Mount tabs above screen breakpoint */\n if (screen) {\n return watchViewportAt(el, { header$, viewport$ })\n .pipe(\n map(({ offset: { y } }) => ({ hidden: y >= 10 })),\n distinctUntilChanged(),\n applyTabs(el)\n )\n\n /* [screen -]: Unmount tabs below screen breakpoint */\n } else {\n return of({ hidden: true })\n }\n })\n )\n )\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./react\"\nexport * from \"./set\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n MonoTypeOperatorFunction,\n animationFrameScheduler,\n pipe\n} from \"rxjs\"\nimport { finalize, observeOn, tap } from \"rxjs/operators\"\n\nimport { Tabs } from \"../_\"\nimport {\n resetTabsHidden,\n setTabsHidden\n} from \"../set\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Apply tabs\n *\n * @param el - Tabs element\n *\n * @return Operator function\n */\nexport function applyTabs(\n el: HTMLElement\n): MonoTypeOperatorFunction {\n return pipe(\n\n /* Defer repaint to next animation frame */\n observeOn(animationFrameScheduler),\n tap(({ hidden }) => {\n setTabsHidden(el, hidden)\n }),\n\n /* Reset on complete or error */\n finalize(() => {\n resetTabsHidden(el)\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set tabs hidden\n *\n * @param el - Tabs element\n * @param value - Whether the element is hidden\n */\nexport function setTabsHidden(\n el: HTMLElement, value: boolean\n): void {\n el.setAttribute(\"data-md-state\", value ? \"hidden\" : \"\")\n}\n\n/**\n * Reset tabs hidden\n *\n * @param el - Tabs element\n */\nexport function resetTabsHidden(\n el: HTMLElement\n): void {\n el.removeAttribute(\"data-md-state\")\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n OperatorFunction,\n combineLatest,\n of,\n pipe\n} from \"rxjs\"\nimport { map, switchMap } from \"rxjs/operators\"\n\nimport { Viewport, getElements } from \"browser\"\n\nimport { Header } from \"../../header\"\nimport { Main } from \"../../main\"\nimport {\n Sidebar,\n applySidebar,\n watchSidebar\n} from \"../../shared\"\nimport {\n AnchorList,\n applyAnchorList,\n watchAnchorList\n} from \"../anchor\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Table of contents for [tablet -]\n */\ninterface TableOfContentsBelowTablet {} // tslint:disable-line\n\n/**\n * Table of contents for [tablet +]\n */\ninterface TableOfContentsAboveTablet {\n sidebar: Sidebar /* Sidebar */\n anchors: AnchorList /* Anchor list */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Table of contents\n */\nexport type TableOfContents =\n | TableOfContentsBelowTablet\n | TableOfContentsAboveTablet\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n header$: Observable
    /* Header observable */\n main$: Observable
    /* Main area observable */\n viewport$: Observable /* Viewport observable */\n tablet$: Observable /* Tablet media observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount table of contents from source observable\n *\n * @param options - Options\n *\n * @return Operator function\n */\nexport function mountTableOfContents(\n { header$, main$, viewport$, tablet$}: MountOptions\n): OperatorFunction {\n return pipe(\n switchMap(el => tablet$\n .pipe(\n switchMap(tablet => {\n\n /* [tablet +]: Mount table of contents in sidebar */\n if (tablet) {\n const els = getElements(\".md-nav__link\", el)\n\n /* Watch and apply sidebar */\n const sidebar$ = watchSidebar(el, { main$, viewport$ })\n .pipe(\n applySidebar(el, { header$ })\n )\n\n /* Watch and apply anchor list (scroll spy) */\n const anchors$ = watchAnchorList(els, { header$, viewport$ })\n .pipe(\n applyAnchorList(els)\n )\n\n /* Combine into a single hot observable */\n return combineLatest([sidebar$, anchors$])\n .pipe(\n map(([sidebar, anchors]) => ({ sidebar, anchors }))\n )\n\n /* [tablet -]: Unmount table of contents */\n } else {\n return of({})\n }\n })\n )\n )\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Anchor list\n */\nexport interface AnchorList {\n prev: HTMLAnchorElement[][] /* Anchors (previous) */\n next: HTMLAnchorElement[][] /* Anchors (next) */\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./react\"\nexport * from \"./set\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { reverse } from \"ramda\"\nimport {\n MonoTypeOperatorFunction,\n Observable,\n animationFrameScheduler,\n combineLatest,\n pipe\n} from \"rxjs\"\nimport {\n bufferCount,\n distinctUntilChanged,\n distinctUntilKeyChanged,\n finalize,\n map,\n observeOn,\n scan,\n startWith,\n switchMap,\n tap\n} from \"rxjs/operators\"\n\nimport { Viewport, getElement } from \"browser\"\n\nimport { Header } from \"../../../header\"\nimport { AnchorList } from \"../_\"\nimport {\n resetAnchorActive,\n resetAnchorBlur,\n setAnchorActive,\n setAnchorBlur\n} from \"../set\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n header$: Observable
    /* Header observable */\n viewport$: Observable /* Viewport observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch anchor list\n *\n * This is effectively a scroll-spy implementation which will account for the\n * fixed header and automatically re-calculate anchor offsets when the viewport\n * is resized. The returned observable will only emit if the anchor list needs\n * to be repainted.\n *\n * This implementation tracks an anchor element's entire path starting from its\n * level up to the top-most anchor element, e.g. `[h3, h2, h1]`. Although the\n * Material theme currently doesn't make use of this information, it enables\n * the styling of the entire hierarchy through customization.\n *\n * Note that the current anchor is the last item of the `prev` anchor list.\n *\n * @param els - Anchor elements\n * @param options - Options\n *\n * @return Anchor list observable\n */\nexport function watchAnchorList(\n els: HTMLAnchorElement[], { header$, viewport$ }: WatchOptions\n): Observable {\n const table = new Map()\n for (const el of els) {\n const id = decodeURIComponent(el.hash.substring(1))\n const target = getElement(`[id=\"${id}\"]`)\n if (typeof target !== \"undefined\")\n table.set(el, target)\n }\n\n /* Compute necessary adjustment for header */\n const adjust$ = header$\n .pipe(\n map(header => 18 + header.height)\n )\n\n /* Compute partition of previous and next anchors */\n const partition$ = viewport$\n .pipe(\n distinctUntilKeyChanged(\"size\"),\n\n /* Build index to map anchor paths to vertical offsets */\n map(() => {\n let path: HTMLAnchorElement[] = []\n return [...table].reduce((index, [anchor, target]) => {\n while (path.length) {\n const last = table.get(path[path.length - 1])!\n if (last.tagName >= target.tagName) {\n path.pop()\n } else {\n break\n }\n }\n\n /* If the current anchor is hidden, continue with its parent */\n let offset = target.offsetTop\n while (!offset && target.parentElement) {\n target = target.parentElement\n offset = target.offsetTop\n }\n\n /* Map reversed anchor path to vertical offset */\n return index.set(\n reverse(path = [...path, anchor]),\n offset\n )\n }, new Map())\n }),\n\n /* Re-compute partition when viewport offset changes */\n switchMap(index => combineLatest([adjust$, viewport$])\n .pipe(\n scan(([prev, next], [adjust, { offset: { y } }]) => {\n\n /* Look forward */\n while (next.length) {\n const [, offset] = next[0]\n if (offset - adjust < y) {\n prev = [...prev, next.shift()!]\n } else {\n break\n }\n }\n\n /* Look backward */\n while (prev.length) {\n const [, offset] = prev[prev.length - 1]\n if (offset - adjust >= y) {\n next = [prev.pop()!, ...next]\n } else {\n break\n }\n }\n\n /* Return partition */\n return [prev, next]\n }, [[], [...index]]),\n distinctUntilChanged((a, b) => {\n return a[0] === b[0]\n && a[1] === b[1]\n })\n )\n )\n )\n\n /* Compute and return anchor list migrations */\n return partition$\n .pipe(\n map(([prev, next]) => ({\n prev: prev.map(([path]) => path),\n next: next.map(([path]) => path)\n })),\n\n /* Extract anchor list migrations */\n startWith({ prev: [], next: [] }),\n bufferCount(2, 1),\n map(([a, b]) => {\n\n /* Moving down */\n if (a.prev.length < b.prev.length) {\n return {\n prev: b.prev.slice(Math.max(0, a.prev.length - 1), b.prev.length),\n next: []\n }\n\n /* Moving up */\n } else {\n return {\n prev: b.prev.slice(-1),\n next: b.next.slice(0, b.next.length - a.next.length)\n }\n }\n })\n )\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Apply anchor list\n *\n * @param els - Anchor elements\n *\n * @return Operator function\n */\nexport function applyAnchorList(\n els: HTMLAnchorElement[]\n): MonoTypeOperatorFunction {\n return pipe(\n\n /* Defer repaint to next animation frame */\n observeOn(animationFrameScheduler),\n tap(({ prev, next }) => {\n\n /* Look forward */\n for (const [el] of next) {\n resetAnchorActive(el)\n resetAnchorBlur(el)\n }\n\n /* Look backward */\n prev.forEach(([el], index) => {\n setAnchorActive(el, index === prev.length - 1)\n setAnchorBlur(el, true)\n })\n }),\n\n /* Reset on complete or error */\n finalize(() => {\n for (const el of els) {\n resetAnchorActive(el)\n resetAnchorBlur(el)\n }\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set anchor blur\n *\n * @param el - Anchor element\n * @param value - Whether the anchor is blurred\n */\nexport function setAnchorBlur(\n el: HTMLElement, value: boolean\n): void {\n el.setAttribute(\"data-md-state\", value ? \"blur\" : \"\")\n}\n\n/**\n * Reset anchor blur\n *\n * @param el - Anchor element\n */\nexport function resetAnchorBlur(\n el: HTMLElement\n): void {\n el.removeAttribute(\"data-md-state\")\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Set anchor active\n *\n * @param el - Anchor element\n * @param value - Whether the anchor is active\n */\nexport function setAnchorActive(\n el: HTMLElement, value: boolean\n): void {\n el.classList.toggle(\"md-nav__link--active\", value)\n}\n\n/**\n * Reset anchor active\n *\n * @param el - Anchor element\n */\nexport function resetAnchorActive(\n el: HTMLElement\n): void {\n el.classList.remove(\"md-nav__link--active\")\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./anchor\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n// TODO: remove this after we finished refactoring\n// tslint:disable\n\nimport \"../stylesheets/main.scss\"\nimport \"../stylesheets/palette.scss\"\n\nimport { values } from \"ramda\"\nimport {\n merge,\n combineLatest,\n animationFrameScheduler,\n fromEvent,\n of,\n NEVER,\n from\n} from \"rxjs\"\nimport {\n delay,\n switchMap,\n tap,\n filter,\n withLatestFrom,\n observeOn,\n take,\n shareReplay,\n share\n} from \"rxjs/operators\"\n\nimport {\n watchToggle,\n setToggle,\n getElements,\n watchMedia,\n watchDocument,\n watchLocation,\n watchLocationHash,\n watchViewport,\n isLocationInternal,\n isLocationAnchor\n} from \"./browser\"\nimport { setupSearchWorker } from \"./workers\"\n\nimport {\n mountHeader,\n mountHero,\n mountMain,\n mountNavigation,\n mountSearch,\n mountTableOfContents,\n mountTabs,\n useComponent,\n setupComponents,\n mountSearchQuery,\n mountSearchReset,\n mountSearchResult\n} from \"components\"\nimport { setupClipboard } from \"./integrations/clipboard\"\nimport { setupDialog } from \"integrations/dialog\"\nimport { setupKeyboard } from \"./integrations/keyboard\"\nimport { setupInstantLoading } from \"integrations/instant\"\nimport {\n patchTables,\n patchDetails,\n patchScrollfix,\n patchSource,\n patchScripts\n} from \"patches\"\nimport { isConfig } from \"utilities\"\n\n/* ------------------------------------------------------------------------- */\n\ndocument.documentElement.classList.remove(\"no-js\")\ndocument.documentElement.classList.add(\"js\")\n\n/* Test for iOS */\nif (navigator.userAgent.match(/(iPad|iPhone|iPod)/g))\n document.documentElement.classList.add(\"ios\")\n\n/**\n * Set scroll lock\n *\n * @param el - Scrollable element\n * @param value - Vertical offset\n */\nexport function setScrollLock(\n el: HTMLElement, value: number\n): void {\n el.setAttribute(\"data-md-state\", \"lock\")\n el.style.top = `-${value}px`\n}\n\n/**\n * Reset scroll lock\n *\n * @param el - Scrollable element\n */\nexport function resetScrollLock(\n el: HTMLElement\n): void {\n const value = -1 * parseInt(el.style.top, 10)\n el.removeAttribute(\"data-md-state\")\n el.style.top = \"\"\n if (value)\n window.scrollTo(0, value)\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Initialize Material for MkDocs\n *\n * @param config - Configuration\n */\nexport function initialize(config: unknown) {\n if (!isConfig(config))\n throw new SyntaxError(`Invalid configuration: ${JSON.stringify(config)}`)\n\n /* Setup user interface observables */\n const location$ = watchLocation()\n const hash$ = watchLocationHash()\n const viewport$ = watchViewport()\n const tablet$ = watchMedia(\"(min-width: 960px)\")\n const screen$ = watchMedia(\"(min-width: 1220px)\")\n\n /* Setup document observable */\n const document$ = config.features.includes(\"instant\")\n ? watchDocument({ location$ })\n : watchDocument()\n\n /* Setup component bindings */\n setupComponents([\n \"container\", /* Container */\n \"header\", /* Header */\n \"header-title\", /* Header title */\n \"hero\", /* Hero */\n \"main\", /* Main area */\n \"navigation\", /* Navigation */\n \"search\", /* Search */\n \"search-query\", /* Search input */\n \"search-reset\", /* Search reset */\n \"search-result\", /* Search results */\n \"skip\", /* Skip link */\n \"tabs\", /* Tabs */\n \"toc\" /* Table of contents */\n ], { document$ })\n\n /* ----------------------------------------------------------------------- */\n\n // External index\n const index = config.search && config.search.index\n ? config.search.index\n : undefined\n\n // TODO: pass URL config as first parameter, options as second\n const worker = setupSearchWorker(config.url.worker.search, {\n base: config.url.base, index, location$\n })\n\n /* ----------------------------------------------------------------------- */\n\n /* Create header observable */\n const header$ = useComponent(\"header\")\n .pipe(\n mountHeader({ viewport$ }),\n shareReplay(1)\n )\n\n const main$ = useComponent(\"main\")\n .pipe(\n mountMain({ header$, viewport$ }),\n shareReplay(1)\n )\n\n /* ----------------------------------------------------------------------- */\n\n /* Mount search query */\n const query$ = useComponent(\"search-query\")\n .pipe(\n mountSearchQuery(worker),\n shareReplay(1)\n )\n\n /* Mount search reset */\n const reset$ = useComponent(\"search-reset\")\n .pipe(\n mountSearchReset(),\n shareReplay(1)\n )\n\n /* Mount search result */\n const result$ = useComponent(\"search-result\")\n .pipe(\n mountSearchResult(worker, { query$ }),\n shareReplay(1)\n )\n\n /* ----------------------------------------------------------------------- */\n\n const search$ = useComponent(\"search\")\n .pipe(\n mountSearch({ query$, reset$, result$ }),\n shareReplay(1)\n )\n\n /* ----------------------------------------------------------------------- */\n\n const navigation$ = useComponent(\"navigation\")\n .pipe(\n mountNavigation({ header$, main$, viewport$, screen$ }),\n shareReplay(1) // shareReplay because there might be late subscribers\n )\n\n const toc$ = useComponent(\"toc\")\n .pipe(\n mountTableOfContents({ header$, main$, viewport$, tablet$ }),\n shareReplay(1)\n )\n\n const tabs$ = useComponent(\"tabs\")\n .pipe(\n mountTabs({ header$, viewport$, screen$ }),\n shareReplay(1)\n )\n\n const hero$ = useComponent(\"hero\")\n .pipe(\n mountHero({ header$, viewport$ }),\n shareReplay(1)\n )\n\n /* ----------------------------------------------------------------------- */\n\n const keyboard$ = setupKeyboard()\n\n patchDetails({ document$, hash$ })\n patchScripts({ document$ })\n patchSource({ document$ })\n patchTables({ document$ })\n\n /* Force 1px scroll offset to trigger overflow scrolling */\n patchScrollfix({ document$ })\n\n /* Setup clipboard and dialog */\n const dialog$ = setupDialog()\n const clipboard$ = setupClipboard({ document$, dialog$ })\n\n /* ----------------------------------------------------------------------- */\n\n // // put into search...\n // hash$\n // .pipe(\n // switchMap(hash => useToggle(\"search\")\n // .pipe(\n // filter(x => x.checked), // only active\n // tap(toggle => setToggle(toggle, false)),\n // delay(125), // ensure that it runs after the body scroll reset...\n // mapTo(hash)\n // )\n // )\n // )\n // .subscribe(hash => {\n // getElement(`[id=\"${hash}\"]`)!.scrollIntoView()\n // })\n\n // Scroll lock // document -> document$ => { body } !?\n // put into search...\n combineLatest([\n watchToggle(\"search\"),\n tablet$,\n ])\n .pipe(\n withLatestFrom(viewport$),\n switchMap(([[toggle, tablet], { offset: { y }}]) => {\n const active = toggle && !tablet\n return document$\n .pipe(\n delay(active ? 400 : 100), // TOOD: directly combine this with the hash!\n observeOn(animationFrameScheduler),\n tap(({ body }) => active\n ? setScrollLock(body, y)\n : resetScrollLock(body)\n )\n )\n })\n )\n .subscribe()\n\n /* ----------------------------------------------------------------------- */\n\n /* Intercept internal link clicks */\n const link$ = fromEvent(document.body, \"click\")\n .pipe(\n filter(ev => !(ev.metaKey || ev.ctrlKey)),\n switchMap(ev => {\n if (ev.target instanceof HTMLElement) {\n const el = ev.target.closest(\"a\") // TODO: abstract as link click?\n if (el && isLocationInternal(el)) {\n if (!isLocationAnchor(el))\n ev.preventDefault()\n return of(el)\n }\n }\n return NEVER\n }),\n share()\n )\n\n /* Always close drawer on click */\n link$.subscribe(() => {\n setToggle(\"drawer\", false)\n })\n\n // somehow call this setupNavigation ?\n\n // instant loading\n if (config.features.includes(\"instant\")) {\n\n /* Disable automatic scroll restoration, as it doesn't work nicely */\n if (\"scrollRestoration\" in history)\n history.scrollRestoration = \"manual\"\n\n /* Resolve relative links for stability */\n for (const selector of [\n `link[rel=\"shortcut icon\"]`,\n `link[rel=\"stylesheet\"]`\n ])\n for (const el of getElements(selector))\n el.href = el.href\n\n setupInstantLoading({\n document$, link$, location$, viewport$\n })\n\n }\n\n /* ----------------------------------------------------------------------- */\n\n // if we use a single tab outside of search, unhide all permalinks.\n // TODO: experimental. necessary!?\n keyboard$\n .pipe(\n filter(key => key.mode === \"global\" && [\"Tab\"].includes(key.type)),\n take(1)\n )\n .subscribe(() => {\n for (const link of getElements(\".headerlink\"))\n link.style.visibility = \"visible\"\n })\n\n /* ----------------------------------------------------------------------- */\n\n const state = {\n\n /* Browser observables */\n document$,\n viewport$,\n\n /* Component observables */\n header$,\n hero$,\n main$,\n navigation$,\n search$,\n tabs$,\n toc$,\n\n /* Integation observables */\n clipboard$,\n keyboard$,\n dialog$\n }\n\n /* Subscribe to all observables */\n merge(...values(state))\n .subscribe()\n return state\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport * as ClipboardJS from \"clipboard\"\nimport { NEVER, Observable, Subject, fromEventPattern } from \"rxjs\"\nimport { mapTo, share, tap } from \"rxjs/operators\"\n\nimport { getElements } from \"browser\"\nimport { renderClipboard } from \"templates\"\nimport { translate } from \"utilities\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup options\n */\ninterface SetupOptions {\n document$: Observable /* Document observable */\n dialog$: Subject /* Dialog subject */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup clipboard\n *\n * This function implements the Clipboard.js integration and injects a button\n * into all code blocks when the document changes.\n *\n * @param options - Options\n *\n * @return Clipboard observable\n */\nexport function setupClipboard(\n { document$, dialog$ }: SetupOptions\n): Observable {\n if (!ClipboardJS.isSupported())\n return NEVER\n\n /* Inject 'copy-to-clipboard' buttons */\n document$.subscribe(() => {\n const blocks = getElements(\"pre > code\")\n blocks.forEach((block, index) => {\n const parent = block.parentElement!\n parent.id = `__code_${index}`\n parent.insertBefore(renderClipboard(parent.id), block)\n })\n })\n\n /* Initialize and setup clipboard */\n const clipboard$ = fromEventPattern(next => {\n new ClipboardJS(\".md-clipboard\").on(\"success\", next)\n })\n .pipe(\n share()\n )\n\n /* Display notification for clipboard event */\n clipboard$\n .pipe(\n tap(ev => ev.clearSelection()),\n mapTo(translate(\"clipboard.copied\"))\n )\n .subscribe(dialog$)\n\n /* Return clipboard */\n return clipboard$\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Subject, animationFrameScheduler, of } from \"rxjs\"\nimport {\n delay,\n map,\n observeOn,\n switchMap,\n tap\n} from \"rxjs/operators\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup options\n */\ninterface SetupOptions {\n duration?: number /* Display duration (default: 2s) */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup dialog\n *\n * @param options - Options\n *\n * @return Dialog observable\n */\nexport function setupDialog(\n { duration }: SetupOptions = {}\n): Subject {\n const dialog$ = new Subject()\n\n /* Create dialog */\n const dialog = document.createElement(\"div\") // TODO: improve scoping\n dialog.classList.add(\"md-dialog\", \"md-typeset\")\n\n /* Display dialog */\n dialog$\n .pipe(\n switchMap(text => of(document.body) // useComponent(\"container\")\n .pipe(\n map(container => container.appendChild(dialog)),\n observeOn(animationFrameScheduler),\n delay(1), // Strangley it doesnt work when we push things to the new animation frame...\n tap(el => {\n el.innerHTML = text\n el.setAttribute(\"data-md-state\", \"open\")\n }),\n delay(duration || 2000),\n tap(el => el.removeAttribute(\"data-md-state\")),\n delay(400),\n tap(el => {\n el.innerHTML = \"\"\n el.remove()\n })\n )\n )\n )\n .subscribe()\n\n /* Return dialog subject */\n return dialog$\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, Subject, fromEvent, merge } from \"rxjs\"\nimport {\n bufferCount,\n debounceTime,\n distinctUntilChanged,\n distinctUntilKeyChanged,\n filter,\n map,\n pluck,\n sample,\n share,\n withLatestFrom\n} from \"rxjs/operators\"\n\nimport {\n Viewport,\n ViewportOffset,\n getElement,\n isLocationAnchor,\n setLocationHash,\n setViewportOffset\n} from \"browser\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * History state\n */\ninterface State {\n url: URL /* State URL */\n offset?: ViewportOffset /* State viewport offset */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Setup options\n */\ninterface SetupOptions {\n document$: Observable /* Document observable */\n viewport$: Observable /* Viewport observable */\n link$: Observable /* Internal link observable */\n location$: Subject /* Location subject */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup instant loading\n *\n * @param options - Options\n *\n * @return TODO ?\n */\nexport function setupInstantLoading(\n { document$, viewport$, link$, location$ }: SetupOptions\n) { // TODO: add return type\n const state$ = link$\n .pipe(\n map(el => ({ url: new URL(el.href) })),\n share()\n )\n\n /* Intercept internal links to dispatch */\n const push$ = state$\n .pipe(\n distinctUntilChanged((prev, next) => prev.url.href === next.url.href),\n filter(({ url }) => !isLocationAnchor(url)),\n share()\n )\n\n /* Intercept popstate events (history back and forward) */\n const pop$ = fromEvent(window, \"popstate\")\n .pipe(\n filter(ev => ev.state !== null),\n map(ev => ({\n url: new URL(location.href),\n offset: ev.state\n })),\n share()\n )\n\n /* Emit location change */\n merge(push$, pop$)\n .pipe(\n pluck(\"url\")\n )\n .subscribe(location$)\n\n /* History: dispatch internal link */\n push$.subscribe(({ url }) => {\n history.pushState({}, \"\", url.toString())\n })\n\n /* History: debounce update of viewport offset */\n viewport$\n .pipe(\n debounceTime(250),\n distinctUntilKeyChanged(\"offset\")\n )\n .subscribe(({ offset }) => {\n history.replaceState(offset, \"\")\n })\n\n /* Apply viewport offset from history */\n merge(state$, pop$)\n .pipe(\n bufferCount(2, 1),\n filter(([prev, next]) => {\n return prev.url.pathname === next.url.pathname\n && !isLocationAnchor(next.url)\n }),\n map(([, state]) => state)\n )\n .subscribe(({ offset }) => {\n setViewportOffset(offset || { y: 0 })\n })\n\n /* Intercept actual instant loading */\n const instant$ = merge(push$, pop$)\n .pipe(\n sample(document$)\n )\n\n // TODO: from here on, everything is beta.... ###############################\n\n instant$.subscribe(({ url, offset }) => {\n if (url.hash && !offset) {\n console.log(\"set hash!\")\n setLocationHash(url.hash) // must delay, if search is open!\n } else {\n setViewportOffset(offset || { y: 0 })\n }\n })\n\n instant$\n .pipe(\n withLatestFrom(document$)\n )\n .subscribe(([, { title, head }]) => {\n document.dispatchEvent(new CustomEvent(\"DOMContentSwitch\"))\n document.title = title\n\n /* Replace meta tags */\n for (const selector of [\n `link[rel=\"canonical\"]`,\n `meta[name=\"author\"]`,\n `meta[name=\"description\"]`\n ]) {\n const next = getElement(selector, head)\n const prev = getElement(selector, document.head)\n if (\n typeof next !== \"undefined\" &&\n typeof prev !== \"undefined\"\n ) {\n prev.replaceWith(next)\n }\n }\n })\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable } from \"rxjs\"\nimport {\n filter,\n map,\n share,\n withLatestFrom\n} from \"rxjs/operators\"\n\nimport {\n Key,\n getActiveElement,\n getElement,\n getElements,\n getToggle,\n isSusceptibleToKeyboard,\n setElementFocus,\n setElementSelection,\n setToggle,\n watchKeyboard\n} from \"browser\"\nimport { useComponent } from \"components\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Keyboard mode\n */\nexport type KeyboardMode =\n | \"global\" /* Global */\n | \"search\" /* Search is open */\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Keyboard\n */\nexport interface Keyboard extends Key {\n mode: KeyboardMode /* Keyboard mode */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup keyboard\n *\n * This function will setup the keyboard handlers and ensure that keys are\n * correctly propagated. Currently there are two modes:\n *\n * - `global`: This mode is active when the search is closed. It is intended\n * to assign hotkeys to specific functions of the site. Currently the search,\n * previous and next page can be triggered.\n *\n * - `search`: This mode is active when the search is open. It maps certain\n * navigational keys to offer search results that can be entirely navigated\n * through keyboard input.\n *\n * The keyboard observable is returned and can be used to monitor the keyboard\n * in order toassign further hotkeys to custom functions.\n *\n * @return Keyboard observable\n */\nexport function setupKeyboard(): Observable {\n const keyboard$ = watchKeyboard()\n .pipe(\n map(key => ({\n mode: getToggle(\"search\") ? \"search\" : \"global\",\n ...key\n })),\n share()\n )\n\n /* Setup search keyboard handlers */\n keyboard$\n .pipe(\n filter(({ mode }) => mode === \"search\"),\n withLatestFrom(\n useComponent(\"search-query\"),\n useComponent(\"search-result\")\n )\n )\n .subscribe(([key, query, result]) => {\n const active = getActiveElement()\n switch (key.type) {\n\n /* Enter: prevent form submission */\n case \"Enter\":\n if (active === query)\n key.claim()\n break\n\n /* Escape or Tab: close search */\n case \"Escape\":\n case \"Tab\":\n setToggle(\"search\", false)\n setElementFocus(query, false)\n break\n\n /* Vertical arrows: select previous or next search result */\n case \"ArrowUp\":\n case \"ArrowDown\":\n if (typeof active === \"undefined\") {\n setElementFocus(query)\n } else {\n const els = [query, ...getElements(\"[href]\", result)]\n const i = Math.max(0, (\n Math.max(0, els.indexOf(active)) + els.length + (\n key.type === \"ArrowUp\" ? -1 : +1\n )\n ) % els.length)\n setElementFocus(els[i])\n }\n\n /* Prevent scrolling of page */\n key.claim()\n break\n\n /* All other keys: hand to search query */\n default:\n if (query !== getActiveElement())\n setElementFocus(query)\n }\n })\n\n /* Setup global keyboard handlers */\n keyboard$\n .pipe(\n filter(({ mode }) => {\n if (mode === \"global\") {\n const active = getActiveElement()\n if (typeof active !== \"undefined\")\n return !isSusceptibleToKeyboard(active)\n }\n return false\n }),\n withLatestFrom(useComponent(\"search-query\"))\n )\n .subscribe(([key, query]) => {\n switch (key.type) {\n\n /* Open search and select query */\n case \"f\":\n case \"s\":\n setElementFocus(query)\n setElementSelection(query)\n key.claim()\n break\n\n /* Go to previous page */\n case \"p\":\n case \",\":\n const prev = getElement(\"[href][rel=prev]\")\n if (typeof prev !== \"undefined\")\n prev.click()\n break\n\n /* Go to next page */\n case \"n\":\n case \".\":\n const next = getElement(\"[href][rel=next]\")\n if (typeof next !== \"undefined\")\n next.click()\n break\n }\n })\n\n /* Return keyboard */\n return keyboard$\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { identity } from \"ramda\"\nimport { Observable, fromEvent, merge } from \"rxjs\"\nimport {\n filter,\n map,\n switchMapTo,\n tap\n} from \"rxjs/operators\"\n\nimport {\n getElement,\n getElements,\n watchMedia\n} from \"browser\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch options\n */\ninterface PatchOptions {\n document$: Observable /* Document observable */\n hash$: Observable /* Location hash observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch all `details` elements\n *\n * This function will ensure that all `details` tags are opened prior to\n * printing, so the whole content of the page is included, and on anchor jumps.\n *\n * @param options - Options\n */\nexport function patchDetails(\n { document$, hash$ }: PatchOptions\n): void {\n const els$ = document$\n .pipe(\n map(() => getElements(\"details\"))\n )\n\n /* Open all details before printing */\n merge(\n watchMedia(\"print\").pipe(filter(identity)), /* Webkit */\n fromEvent(window, \"beforeprint\") /* IE, FF */\n )\n .pipe(\n switchMapTo(els$)\n )\n .subscribe(els => {\n for (const el of els)\n el.setAttribute(\"open\", \"\")\n })\n\n /* Open parent details and fix anchor jump */\n hash$\n .pipe(\n map(id => getElement(`[id=\"${id}\"]`)!),\n filter(el => typeof el !== \"undefined\"),\n tap(el => {\n const details = el.closest(\"details\")\n if (details && !details.open)\n details.setAttribute(\"open\", \"\")\n })\n )\n .subscribe(el => el.scrollIntoView())\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./details\"\nexport * from \"./script\"\nexport * from \"./scrollfix\"\nexport * from \"./source\"\nexport * from \"./table\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable } from \"rxjs\"\nimport { map, skip, withLatestFrom } from \"rxjs/operators\"\n\nimport { getElements } from \"browser\"\nimport { useComponent } from \"components\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch options\n */\ninterface PatchOptions {\n document$: Observable /* Document observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch all `script` elements\n *\n * This function must be run after a document switch, which means the first\n * emission must be ignored.\n *\n * @param options - Options\n */\nexport function patchScripts(\n { document$ }: PatchOptions\n): void {\n const els$ = document$\n .pipe(\n skip(1),\n withLatestFrom(useComponent(\"container\")),\n map(([, el]) => getElements(\"script\", el))\n )\n\n /* Evaluate all scripts via replacement */\n els$.subscribe(els => {\n for (const el of els) {\n if (el.src || /(^|\\/javascript)$/i.test(el.type)) {\n const script = document.createElement(\"script\")\n const key = el.src ? \"src\" : \"innerText\"\n script[key] = el[key]\n el.replaceWith(script)\n }\n }\n })\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { NEVER, Observable, fromEvent, iif, merge } from \"rxjs\"\nimport { map, mapTo, shareReplay, switchMap } from \"rxjs/operators\"\n\nimport { getElements } from \"browser\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch options\n */\ninterface PatchOptions {\n document$: Observable /* Document observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Check whether the given device is an Apple device\n *\n * @return Test result\n */\nfunction isAppleDevice(): boolean {\n return /(iPad|iPhone|iPod)/.test(navigator.userAgent)\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch all elements with `data-md-scrollfix` attributes\n *\n * This is a year-old patch which ensures that overflow scrolling works at the\n * top and bottom of containers on iOS by ensuring a `1px` scroll offset upon\n * the start of a touch event.\n *\n * @see https://bit.ly/2SCtAOO - Original source\n *\n * @param options - Options\n */\nexport function patchScrollfix(\n { document$ }: PatchOptions\n): void {\n const els$ = document$\n .pipe(\n map(() => getElements(\"[data-md-scrollfix]\")),\n shareReplay(1)\n )\n\n /* Remove marker attribute, so we'll only add the fix once */\n els$.subscribe(els => {\n for (const el of els)\n el.removeAttribute(\"data-md-scrollfix\")\n })\n\n /* Patch overflow scrolling on touch start */\n iif(isAppleDevice, els$, NEVER)\n .pipe(\n switchMap(els => merge(...els.map(el => (\n fromEvent(el, \"touchstart\")\n .pipe(\n mapTo(el)\n )\n ))))\n )\n .subscribe(el => {\n const top = el.scrollTop\n\n /* We're at the top of the container */\n if (top === 0) {\n el.scrollTop = 1\n\n /* We're at the bottom of the container */\n } else if (top + el.offsetHeight === el.scrollHeight) {\n el.scrollTop = top - 1\n }\n })\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Repo, User } from \"github-types\"\nimport { Observable, of } from \"rxjs\"\nimport { ajax } from \"rxjs/ajax\"\nimport { filter, pluck, switchMap } from \"rxjs/operators\"\n\nimport { round } from \"utilities\"\n\nimport { SourceFacts } from \"..\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Fetch GitHub source facts\n *\n * @param user - GitHub user\n * @param repo - GitHub repository\n *\n * @return Source facts observable\n */\nexport function fetchSourceFactsFromGitHub(\n user: string, repo?: string\n): Observable {\n return ajax({\n url: typeof repo !== \"undefined\"\n ? `https://api.github.com/repos/${user}/${repo}`\n : `https://api.github.com/users/${user}`,\n responseType: \"json\"\n })\n .pipe(\n filter(({ status }) => status === 200),\n pluck(\"response\"),\n switchMap(data => {\n\n /* GitHub repository */\n if (typeof repo !== \"undefined\") {\n const { stargazers_count, forks_count }: Repo = data\n return of([\n `${round(stargazers_count || 0)} Stars`,\n `${round(forks_count || 0)} Forks`\n ])\n\n /* GitHub user/organization */\n } else {\n const { public_repos }: User = data\n return of([\n `${round(public_repos || 0)} Repositories`\n ])\n }\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { ProjectSchema } from \"gitlab\"\nimport { Observable } from \"rxjs\"\nimport { ajax } from \"rxjs/ajax\"\nimport { filter, map, pluck } from \"rxjs/operators\"\n\nimport { round } from \"utilities\"\n\nimport { SourceFacts } from \"..\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Fetch GitLab source facts\n *\n * @param base - GitLab base\n * @param project - GitLab project\n *\n * @return Source facts observable\n */\nexport function fetchSourceFactsFromGitLab(\n base: string, project: string\n): Observable {\n return ajax({\n url: `https://${base}/api/v4/projects/${encodeURIComponent(project)}`,\n responseType: \"json\"\n })\n .pipe(\n filter(({ status }) => status === 200),\n pluck(\"response\"),\n map(({ star_count, forks_count }: ProjectSchema) => ([\n `${round(star_count)} Stars`,\n `${round(forks_count)} Forks`\n ]))\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { NEVER, Observable } from \"rxjs\"\nimport { catchError, map, switchMap } from \"rxjs/operators\"\n\nimport { getElementOrThrow, getElements } from \"browser\"\nimport { renderSource } from \"templates\"\nimport { cache, hash } from \"utilities\"\n\nimport { fetchSourceFactsFromGitHub } from \"./github\"\nimport { fetchSourceFactsFromGitLab } from \"./gitlab\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Source facts\n */\nexport type SourceFacts = string[]\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch options\n */\ninterface PatchOptions {\n document$: Observable /* Document observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Fetch source facts\n *\n * @param url - Source repository URL\n *\n * @return Source facts observable\n */\nfunction fetchSourceFacts(\n url: string\n): Observable {\n const [type] = url.match(/(git(?:hub|lab))/i) || []\n switch (type.toLowerCase()) {\n\n /* GitHub repository */\n case \"github\":\n const [, user, repo] = url.match(/^.+github\\.com\\/([^\\/]+)\\/?([^\\/]+)/i)\n return fetchSourceFactsFromGitHub(user, repo)\n\n /* GitLab repository */\n case \"gitlab\":\n const [, base, project] = url.match(/^.+?([^\\/]*gitlab[^\\/]+)\\/(.+)/i)\n return fetchSourceFactsFromGitLab(base, project)\n\n /* Everything else */\n default:\n return NEVER\n }\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch elements containing repository information\n *\n * This function will retrieve the URL from the repository link and try to\n * query data from integrated source code platforms like GitHub or GitLab.\n *\n * @param options - Options\n */\nexport function patchSource(\n { document$ }: PatchOptions\n): void {\n document$\n .pipe(\n map(() => getElementOrThrow(\".md-source[href]\")),\n switchMap(({ href }) => (\n cache(`${hash(href)}`, () => fetchSourceFacts(href))\n )),\n catchError(() => NEVER)\n )\n .subscribe(facts => {\n for (const el of getElements(\".md-source__repository\")) {\n if (!el.hasAttribute(\"data-md-state\")) {\n el.setAttribute(\"data-md-state\", \"done\")\n el.appendChild(renderSource(facts))\n }\n }\n })\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable } from \"rxjs\"\nimport { map } from \"rxjs/operators\"\n\nimport { getElements } from \"browser\"\nimport { renderTable } from \"templates\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n document$: Observable /* Document observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch all `table` elements\n *\n * This function will re-render all tables by wrapping them to improve overflow\n * scrolling on smaller screen sizes.\n *\n * @param options - Options\n */\nexport function patchTables(\n { document$ }: MountOptions\n): void {\n const sentinel = document.createElement(\"table\")\n document$\n .pipe(\n map(() => getElements(\"table:not([class])\"))\n )\n .subscribe(els => {\n for (const el of els) {\n el.replaceWith(sentinel)\n sentinel.replaceWith(renderTable(el))\n }\n })\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { h, translate } from \"utilities\"\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * CSS classes\n */\nconst css = {\n container: \"md-clipboard md-icon\"\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Render a 'copy-to-clipboard' button\n *\n * @param id - Unique identifier\n *\n * @return Element\n */\nexport function renderClipboard(\n id: string\n) {\n const path = require(\"material-design-icons-svg/paths/content-copy.json\")\n return (\n \n \n \n \n \n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./clipboard\"\nexport * from \"./search\"\nexport * from \"./source\"\nexport * from \"./table\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { SearchResult } from \"integrations/search\"\nimport { h, truncate } from \"utilities\"\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * CSS classes\n */\nconst css = {\n item: \"md-search-result__item\",\n link: \"md-search-result__link\",\n article: \"md-search-result__article md-search-result__article--document\",\n section: \"md-search-result__article\",\n title: \"md-search-result__title\",\n teaser: \"md-search-result__teaser\"\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Render a search result\n *\n * @param result - Search result\n *\n * @return Element\n */\nexport function renderSearchResult(\n { article, sections }: SearchResult\n) {\n\n // create page with icon\n const path = require(\"material-design-icons-svg/paths/file-search-outline.json\")\n\n const children = [article, ...sections].map(document => {\n const { location, title, text } = document\n return (\n \n
    \n {!(\"parent\" in document)\n ?
    \n \n \n \n
    \n : null\n }\n

    {title}

    \n {text.length\n ?

    {truncate(text, 320)}

    \n : undefined\n }\n
    \n
    \n )\n })\n return (\n
  • \n {children}\n
  • \n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { SourceFacts } from \"patches/source\"\nimport { h } from \"utilities\"\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * CSS classes\n */\nconst css = {\n facts: \"md-source__facts\",\n fact: \"md-source__fact\"\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Render source facts\n *\n * @param facts - Source facts\n *\n * @return Element\n */\nexport function renderSource(\n facts: SourceFacts\n) {\n const children = facts.map(fact => (\n
  • {fact}
  • \n ))\n return (\n
      \n {children}\n
    \n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { h } from \"utilities\"\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * CSS classes\n */\nconst css = {\n wrapper: \"md-typeset__scrollwrap\",\n table: \"md-typeset__table\"\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Render a table inside a wrapper to improve scrolling on mobile\n *\n * @param table - Table element\n *\n * @return Element\n */\nexport function renderTable(\n table: HTMLTableElement\n) {\n return (\n
    \n
    \n {table}\n
    \n
    \n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { SearchIndexConfig, SearchIndexOptions } from \"integrations/search\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Feature flags\n */\nexport type Feature =\n | \"tabs\" /* Tabs navigation */\n | \"instant\" /* Instant loading\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * URL configuration\n */\nexport interface UrlConfig {\n base: string /* Base URL */\n worker: {\n search: string /* Search worker URL */\n }\n}\n\n/**\n * Search configuration\n */\nexport interface SearchConfig {\n index?: Promise\n query?: (value: string) => string\n}\n\n/**\n * Configuration\n */\nexport interface Config {\n url: UrlConfig\n features: Feature[] /* Feature flags */\n search?: SearchConfig\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Ensure that the given value is a valid configuration\n *\n * We could use `jsonschema` or any other schema validation framework, but that\n * would just add more bloat to the bundle, so we'll keep it plain and simple.\n *\n * @param config - Configuration\n *\n * @return Test result\n */\nexport function isConfig(config: any): config is Config {\n return typeof config === \"object\"\n && typeof config.url === \"object\"\n && typeof config.url.base === \"string\"\n && typeof config.url.worker === \"object\"\n && typeof config.url.worker.search === \"string\"\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./config\"\nexport * from \"./jsx\"\nexport * from \"./rxjs\"\nexport * from \"./string\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n// tslint:disable no-null-keyword\n\nimport { JSX as JSXInternal } from \"preact\"\nimport { keys } from \"ramda\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * HTML and SVG attributes\n */\ntype Attributes =\n & JSXInternal.HTMLAttributes\n & JSXInternal.SVGAttributes\n & Record\n\n/**\n * Child element\n */\ntype Child =\n | HTMLElement\n | SVGElement\n | Text\n | string\n | number\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Create an element\n *\n * @param tag - HTML or SVG tag\n *\n * @return Element\n */\nfunction createElement(tag: string): HTMLElement | SVGElement {\n switch (tag) {\n\n /* SVG elements */\n case \"svg\":\n case \"path\":\n return document.createElementNS(\"http://www.w3.org/2000/svg\", tag)\n\n /* HTML elements */\n default:\n return document.createElement(tag)\n }\n}\n\n/**\n * Set an attribute\n *\n * @param el - Element\n * @param name - Attribute name\n * @param value - Attribute value\n */\nfunction setAttribute(\n el: HTMLElement | SVGElement, name: string, value: string) {\n switch (name) {\n\n /* Attributes to be ignored */\n case \"xmlns\":\n break\n\n /* Attributes of SVG elements */\n case \"viewBox\":\n case \"d\":\n if (typeof value !== \"boolean\")\n el.setAttributeNS(null, name, value)\n else if (value)\n el.setAttributeNS(null, name, \"\")\n break\n\n /* Attributes of HTML elements */\n default:\n if (typeof value !== \"boolean\")\n el.setAttribute(name, value)\n else if (value)\n el.setAttribute(name, \"\")\n }\n}\n\n/**\n * Append a child node to an element\n *\n * @param el - Element\n * @param child - Child node(s)\n */\nfunction appendChild(\n el: HTMLElement | SVGElement, child: Child | Child[]\n): void {\n\n /* Handle primitive types (including raw HTML) */\n if (typeof child === \"string\" || typeof child === \"number\") {\n el.innerHTML += child.toString()\n\n /* Handle nodes */\n } else if (child instanceof Node) {\n el.appendChild(child)\n\n /* Handle nested children */\n } else if (Array.isArray(child)) {\n for (const node of child)\n appendChild(el, node)\n }\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * JSX factory\n *\n * @param tag - HTML or SVG tag\n * @param attributes - HTML attributes\n * @param children - Child elements\n *\n * @return Element\n */\nexport function h(\n tag: string, attributes: Attributes | null, ...children: Child[]\n): HTMLElement | SVGElement {\n const el = createElement(tag)\n\n /* Set attributes, if any */\n if (attributes)\n for (const attr of keys(attributes))\n setAttribute(el, attr, attributes[attr])\n\n /* Append child nodes */\n for (const child of children)\n appendChild(el, child)\n\n /* Return element */\n return el\n}\n\n/* ----------------------------------------------------------------------------\n * Namespace\n * ------------------------------------------------------------------------- */\n\nexport declare namespace h {\n namespace JSX {\n type Element = HTMLElement | SVGElement\n type IntrinsicElements = JSXInternal.IntrinsicElements\n }\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, defer, of } from \"rxjs\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Cache the last value emitted by an observable in session storage\n *\n * If the key is not found in session storage, the factory is executed and the\n * latest value emitted will automatically be persisted to sessions storage.\n * Note that the values emitted by the returned observable must be serializable\n * as `JSON`, or data will be lost.\n *\n * @template T - Value type\n *\n * @param key - Cache key\n * @param factory - Observable factory\n *\n * @return Value observable\n */\nexport function cache(\n key: string, factory: () => Observable\n): Observable {\n return defer(() => {\n const data = sessionStorage.getItem(key)\n if (data) {\n return of(JSON.parse(data) as T)\n\n /* Retrieve value from observable factory and write to storage */\n } else {\n const value$ = factory()\n value$.subscribe(value => {\n try {\n sessionStorage.setItem(key, JSON.stringify(value))\n } catch (err) {\n /* Uncritical, just swallow */\n }\n })\n\n /* Return value */\n return value$\n }\n })\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { getElementOrThrow } from \"browser\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Translation keys\n */\ntype TranslateKey =\n | \"clipboard.copy\" /* Copy to clipboard */\n | \"clipboard.copied\" /* Copied to clipboard */\n | \"search.config.lang\" /* Search language */\n | \"search.config.pipeline\" /* Search pipeline */\n | \"search.config.separator\" /* Search separator */\n | \"search.result.placeholder\" /* Type to start searching */\n | \"search.result.none\" /* No matching documents */\n | \"search.result.one\" /* 1 matching document */\n | \"search.result.other\" /* # matching documents */\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * Translations\n */\nlet lang: Record\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Translate the given key\n *\n * @param key - Key to be translated\n * @param value - Value to be replaced\n *\n * @return Translation\n */\nexport function translate(key: TranslateKey, value?: string): string {\n if (typeof lang === \"undefined\") {\n const el = getElementOrThrow(\"#__lang\")\n lang = JSON.parse(el.innerText)\n }\n if (typeof lang[key] === \"undefined\") {\n throw new ReferenceError(`Invalid translation: ${key}`)\n }\n return typeof value !== \"undefined\"\n ? lang[key].replace(\"#\", value)\n : lang[key]\n}\n\n/**\n * Truncate a string after the given number of characters\n *\n * This is not a very reasonable approach, since the summaries kind of suck.\n * It would be better to create something more intelligent, highlighting the\n * search occurrences and making a better summary out of it, but this note was\n * written three years ago, so who knows if we'll ever fix it.\n *\n * @param value - Value to be truncated\n * @param n - Number of characters\n *\n * @return Truncated value\n */\nexport function truncate(value: string, n: number): string {\n let i = n\n if (value.length > i) {\n while (value[i] !== \" \" && --i > 0); // tslint:disable-line\n return `${value.substring(0, i)}...`\n }\n return value\n}\n\n/**\n * Round a number for display with source facts\n *\n * This is a reverse engineered version of GitHub's weird rounding algorithm\n * for stars, forks and all other numbers. While all numbers below `1,000` are\n * returned as-is, bigger numbers are converted to fixed numbers:\n *\n * - `1,049` => `1k`\n * - `1,050` => `1.1k`\n * - `1,949` => `1.9k`\n * - `1,950` => `2k`\n *\n * @param value - Original value\n *\n * @return Rounded value\n */\nexport function round(value: number): string {\n if (value > 999) {\n const digits = +((value - 950) % 1000 > 99)\n return `${((value + 1) / 1000).toFixed(digits)}k`\n } else {\n return value.toString()\n }\n}\n\n/**\n * Simple hash function\n *\n * @see https://bit.ly/2wsVjJ4 - Original source\n *\n * @param value - Value to be hashed\n *\n * @return Hash as 32bit integer\n */\nexport function hash(value: string): number {\n let h = 0\n for (let i = 0, len = value.length; i < len; i++) {\n h = ((h << 5) - h) + value.charCodeAt(i)\n h |= 0 // Convert to 32bit integer\n }\n return h\n }\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./search\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A RTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, Subject, from } from \"rxjs\"\nimport { ajax } from \"rxjs/ajax\"\nimport {\n map,\n pluck,\n shareReplay,\n switchMap,\n take,\n tap,\n withLatestFrom\n} from \"rxjs/operators\"\n\nimport { WorkerHandler, watchWorker } from \"browser\"\nimport { SearchIndexConfig, SearchIndexOptions } from \"integrations/search\"\n\nimport { translate } from \"utilities\"\nimport {\n SearchMessage,\n SearchMessageType,\n SearchSetupMessage,\n isSearchResultMessage\n} from \"../message\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup options\n */\ninterface SetupOptions {\n base: string /* Base url */\n index?: Promise /* Promise resolving with index */\n location$: Observable /* Location observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup search web worker\n *\n * This function will create a web worker to setup and query the search index\n * which is done using `lunr`. The index can be passed explicitly in order to\n * enable hacks like _localsearch_ via search index embedding as JSON. If no\n * index is given, this function will load it from the default location.\n *\n * @param url - Worker url\n * @param options - Options\n *\n * @return Worker handler\n */\nexport function setupSearchWorker(\n url: string, { base, index, location$ }: SetupOptions\n): WorkerHandler {\n const worker = new Worker(url)\n\n /* Ensure stable base URL */\n const origin$ = location$\n .pipe(\n take(1),\n map(({ href }) => new URL(base, href)\n .toString()\n .replace(/\\/$/, \"\")\n )\n )\n\n /* Create communication channels and resolve relative links */\n const tx$ = new Subject()\n const rx$ = watchWorker(worker, { tx$ })\n .pipe(\n withLatestFrom(origin$),\n map(([message, origin]) => {\n if (isSearchResultMessage(message)) {\n for (const { article, sections } of message.data) {\n article.location = `${origin}/${article.location}`\n for (const section of sections)\n section.location = `${origin}/${section.location}`\n }\n }\n return message\n }),\n shareReplay(1)\n )\n\n /* Fetch index if it wasn't passed explicitly */\n const index$ = typeof index !== \"undefined\"\n ? from(index)\n : origin$\n .pipe(\n switchMap(origin => ajax({\n url: `${origin}/search/search_index.json`,\n responseType: \"json\",\n withCredentials: true\n })\n .pipe(\n pluck(\"response\")\n )\n )\n )\n\n function isConfigDefaultLang(config: SearchIndexConfig) {\n return config.lang.length === 1 && config.lang[0] === \"en\"\n }\n\n function isConfigDefaultSeparator(config: SearchIndexConfig) {\n return config.separator === \"[\\s\\-]+\"\n }\n\n index$\n .pipe(\n map(({ config, ...rest }) => ({\n config: {\n lang: isConfigDefaultLang(config)\n ? [translate(\"search.config.lang\")]\n : config.lang,\n separator: isConfigDefaultSeparator(config)\n ? translate(\"search.config.separator\")\n : config.separator\n },\n pipeline: translate(\"search.config.pipeline\")\n .split(/\\s*,\\s*/)\n .filter(Boolean) as any, // Hack\n ...rest\n }))\n )\n // .subscribe(console.log)\n\n // /* Send index to worker */\n // index$\n .pipe(\n map(data => ({\n type: SearchMessageType.SETUP,\n data\n }))\n )\n .subscribe(tx$.next.bind(tx$))\n\n /* Return worker handler */\n return { tx$, rx$ }\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./message\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A RTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { SearchIndexOptions, SearchResult } from \"integrations/search\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Search message type\n */\nexport const enum SearchMessageType {\n SETUP, /* Search index setup */\n DUMP, /* Search index dump */\n QUERY, /* Search query */\n RESULT /* Search results */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * A message containing the data necessary to setup the search index\n */\nexport interface SearchSetupMessage {\n type: SearchMessageType.SETUP /* Message type */\n data: SearchIndexOptions /* Message data */\n}\n\n/**\n * A message containing the a dump of the search index\n */\nexport interface SearchDumpMessage {\n type: SearchMessageType.DUMP /* Message type */\n data: string /* Message data */\n}\n\n/**\n * A message containing a search query\n */\nexport interface SearchQueryMessage {\n type: SearchMessageType.QUERY /* Message type */\n data: string /* Message data */\n}\n\n/**\n * A message containing results for a search query\n */\nexport interface SearchResultMessage {\n type: SearchMessageType.RESULT /* Message type */\n data: SearchResult[] /* Message data */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * A message exchanged with the search worker\n */\nexport type SearchMessage =\n | SearchSetupMessage\n | SearchDumpMessage\n | SearchQueryMessage\n | SearchResultMessage\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Type guard for search setup messages\n *\n * @param message - Search worker message\n *\n * @return Test result\n */\nexport function isSearchSetupMessage(\n message: SearchMessage\n): message is SearchSetupMessage {\n return message.type === SearchMessageType.SETUP\n}\n\n/**\n * Type guard for search dump messages\n *\n * @param message - Search worker message\n *\n * @return Test result\n */\nexport function isSearchDumpMessage(\n message: SearchMessage\n): message is SearchDumpMessage {\n return message.type === SearchMessageType.DUMP\n}\n\n/**\n * Type guard for search query messages\n *\n * @param message - Search worker message\n *\n * @return Test result\n */\nexport function isSearchQueryMessage(\n message: SearchMessage\n): message is SearchQueryMessage {\n return message.type === SearchMessageType.QUERY\n}\n\n/**\n * Type guard for search result messages\n *\n * @param message - Search worker message\n *\n * @return Test result\n */\nexport function isSearchResultMessage(\n message: SearchMessage\n): message is SearchResultMessage {\n return message.type === SearchMessageType.RESULT\n}\n","export default \"/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/material/main.css\";","export default \"/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/material/palette.css\";"],"sourceRoot":""} \ No newline at end of file diff --git a/material/assets/javascripts/vendor.000c9aa0.min.js.map b/material/assets/javascripts/vendor.000c9aa0.min.js.map deleted file mode 100644 index 029bbb8bb..000000000 --- a/material/assets/javascripts/vendor.000c9aa0.min.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["webpack:///vendors.ce18ab60.min.js"],"names":["window","push","module","__webpack_exports__","__webpack_require__","d","__extends","__assign","__rest","__values","__read","__spread","extendStatics","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__","this","constructor","prototype","create","assign","t","s","i","n","arguments","length","call","apply","e","indexOf","getOwnPropertySymbols","propertyIsEnumerable","o","m","Symbol","iterator","next","value","done","r","ar","error","concat","Subscriber","tslib__WEBPACK_IMPORTED_MODULE_0__","_util_isFunction__WEBPACK_IMPORTED_MODULE_1__","_Observer__WEBPACK_IMPORTED_MODULE_2__","_Subscription__WEBPACK_IMPORTED_MODULE_3__","_internal_symbol_rxSubscriber__WEBPACK_IMPORTED_MODULE_4__","_config__WEBPACK_IMPORTED_MODULE_5__","_util_hostReportError__WEBPACK_IMPORTED_MODULE_6__","_super","destinationOrNext","complete","_this","syncErrorValue","syncErrorThrown","syncErrorThrowable","isStopped","destination","add","SafeSubscriber","subscriber","_next","err","_error","_complete","unsubscribe","closed","_unsubscribeAndRecycle","_parentOrParents","_parentSubscriber","observerOrNext","context","bind","_context","useDeprecatedSynchronousErrorHandling","__tryOrSetError","__tryOrUnsub","wrappedComplete","fn","parent","Error","_unsubscribe","rxSubscriber","Observer","observable","pipe","config","Observable_Observable","Observable","subscribe","_isScalar","_subscribe","lift","operator","source","sink","nextOrObserver","toSubscriber","_trySubscribe","observer","_a","closed_1","canReportError","console","warn","forEach","promiseCtor","getPromiseCtor","resolve","reject","subscription","operations","_i","toPromise","x","Promise","map","_Subscriber__WEBPACK_IMPORTED_MODULE_1__","project","thisArg","TypeError","MapOperator","MapSubscriber","count","result","isArray","isObject","isFunction","UnsubscriptionError","UnsubscriptionErrorImpl","errors","message","toString","join","name","Subscription_Subscription","Subscription","_subscriptions","empty","remove","index","flattenUnsubscriptionErrors","len","sub","teardown","EMPTY","tmp","subscriptions","subscriptionIndex","splice","reduce","errs","subscribeToResult","_InnerSubscriber__WEBPACK_IMPORTED_MODULE_0__","_subscribeTo__WEBPACK_IMPORTED_MODULE_1__","_Observable__WEBPACK_IMPORTED_MODULE_2__","outerSubscriber","outerValue","outerIndex","OuterSubscriber","notifyNext","innerValue","innerIndex","innerSub","notifyError","notifyComplete","_enable_super_gross_mode_that_will_cause_bad_things","undefined","stack","global","_root","__window","__self","self","WorkerGlobalScope","_curry1","_isPlaceholder_js__WEBPACK_IMPORTED_MODULE_0__","f1","a","noop","_Observable__WEBPACK_IMPORTED_MODULE_0__","scheduler","schedule","emptyScheduled","ObjectUnsubscribedError","ObjectUnsubscribedErrorImpl","hostReportError","setTimeout","switchMap","_OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__","_InnerSubscriber__WEBPACK_IMPORTED_MODULE_2__","_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_3__","_map__WEBPACK_IMPORTED_MODULE_4__","_observable_from__WEBPACK_IMPORTED_MODULE_5__","resultSelector","ii","SwitchMapOperator","SwitchMapSubscriber","_innerSub","innerSubscription","innerSubscriber","SubjectSubscriber","Subject","_Observable__WEBPACK_IMPORTED_MODULE_1__","_Subscriber__WEBPACK_IMPORTED_MODULE_2__","_util_ObjectUnsubscribedError__WEBPACK_IMPORTED_MODULE_4__","_SubjectSubscription__WEBPACK_IMPORTED_MODULE_5__","_internal_symbol_rxSubscriber__WEBPACK_IMPORTED_MODULE_6__","observers","hasError","thrownError","subject","AnonymousSubject","copy","slice","asObservable","isScheduler","getSymbolIterator","InnerSubscriber","_isPlaceholder","Math","random","NotificationKind","of","dispatch","Notification_Notification","Notification","kind","hasValue","observe","do","accept","toObservable","createNext","undefinedValueNotification","createError","createComplete","completeNotification","pipeFromArray","_noop__WEBPACK_IMPORTED_MODULE_0__","fns","input","prev","distinctUntilChanged","compare","keySelector","DistinctUntilChangedOperator","DistinctUntilChangedSubscriber","hasKey","y","key","scheduleArray","_Subscription__WEBPACK_IMPORTED_MODULE_1__","fromArray","_util_subscribeToArray__WEBPACK_IMPORTED_MODULE_1__","_scheduled_scheduleArray__WEBPACK_IMPORTED_MODULE_2__","subscribeTo","symbol_observable","symbol_iterator","isPromise","isArrayLike","scheduled","isInteropObservable","scheduleObservable","then","schedulePromise","isIterable","return","scheduleIterable","from","tslib_es6","Scheduler","SchedulerAction","now","work","delay","state","Date","AsyncScheduler_AsyncScheduler","AsyncScheduler","delegate","actions","active","flush","action","execute","shift","Action_Action","Action","AsyncAction_AsyncAction","AsyncAction","pending","id","recycleAsyncId","requestAsyncId","setInterval","clearInterval","_execute","errored","errorValue","_config__WEBPACK_IMPORTED_MODULE_0__","_util_hostReportError__WEBPACK_IMPORTED_MODULE_1__","_util_isScheduler__WEBPACK_IMPORTED_MODULE_0__","_fromArray__WEBPACK_IMPORTED_MODULE_1__","args","pop","observeOn","ObserveOnSubscriber","_Notification__WEBPACK_IMPORTED_MODULE_2__","ObserveOnOperator","arg","notification","scheduleMessage","ObserveOnMessage","SubjectSubscription","subscriberIndex","subscribeToArray","array","async","_AsyncAction__WEBPACK_IMPORTED_MODULE_0__","obj","obs","promise","iterable","item","MergeMapOperator","concurrent","Number","POSITIVE_INFINITY","mergeMap_MergeMapSubscriber","MergeMapSubscriber","hasCompleted","buffer","_tryNext","ish","identity","mergeAll","mergeMap","tap","_util_noop__WEBPACK_IMPORTED_MODULE_2__","_util_isFunction__WEBPACK_IMPORTED_MODULE_3__","DoOperator","TapSubscriber","_tapNext","_tapError","_tapComplete","AnimationFrameAction_AnimationFrameAction","AnimationFrameAction","requestAnimationFrame","cancelAnimationFrame","AnimationFrameScheduler_AnimationFrameScheduler","AnimationFrameScheduler","animationFrame","exports","factory","modules","installedModules","moduleId","l","c","getter","defineProperty","enumerable","get","toStringTag","mode","__esModule","ns","object","property","_typeof","_createClass","defineProperties","target","props","descriptor","configurable","writable","Constructor","protoProps","staticProps","_clipboardAction2","_interopRequireDefault","_tinyEmitter2","_goodListener2","default","Clipboard","_Emitter","trigger","options","instance","_classCallCheck","ReferenceError","_possibleConstructorReturn","getPrototypeOf","resolveOptions","listenClick","subClass","superClass","_inherits","defaultAction","defaultTarget","text","defaultText","container","document","body","_this2","listener","onClick","delegateTarget","currentTarget","clipboardAction","emitter","getAttributeValue","selector","querySelector","destroy","support","queryCommandSupported","suffix","element","attribute","hasAttribute","getAttribute","_select","_select2","ClipboardAction","initSelection","selectedText","selectFake","selectTarget","isRTL","documentElement","removeFake","fakeHandlerCallback","fakeHandler","addEventListener","fakeElem","createElement","style","fontSize","border","padding","margin","position","yPosition","pageYOffset","scrollTop","top","setAttribute","appendChild","copyText","removeEventListener","removeChild","succeeded","execCommand","handleResult","emit","clearSelection","focus","getSelection","removeAllRanges","set","_action","nodeType","_target","nodeName","isReadOnly","select","setSelectionRange","removeAttribute","selection","range","createRange","selectNodeContents","addRange","E","on","callback","ctx","once","off","_","data","evtArr","evts","liveEvents","is","type","string","node","listenNode","nodeList","listenNodeList","listenSelector","HTMLElement","String","closest","_delegate","useCapture","listenerFn","elements","querySelectorAll","DOCUMENT_NODE_TYPE","Element","matches","proto","matchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","webkitMatchesSelector","parentNode","combineLatest","_util_isScheduler__WEBPACK_IMPORTED_MODULE_1__","_util_isArray__WEBPACK_IMPORTED_MODULE_2__","_OuterSubscriber__WEBPACK_IMPORTED_MODULE_3__","_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_4__","_fromArray__WEBPACK_IMPORTED_MODULE_5__","NONE","observables","CombineLatestOperator","CombineLatestSubscriber","values","toRespond","unused","oldVal","_tryResultSelector","withLatestFrom","_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__","WithLatestFromOperator","WithLatestFromSubscriber","found","_tryProject","scan","accumulator","seed","hasSeed","ScanOperator","ScanSubscriber","_seed","finalize","_Subscription__WEBPACK_IMPORTED_MODULE_2__","FinallyOperator","FinallySubscriber","defer","_from__WEBPACK_IMPORTED_MODULE_1__","_empty__WEBPACK_IMPORTED_MODULE_2__","observableFactory","_has","prop","_isArguments_toString","internal_isArguments","hasEnumBug","nonEnumerableProps","hasArgsEnumBug","contains","list","idx","keys_keys","keys","nIdx","ks","checkArgsLength","distinctUntilKeyChanged","_distinctUntilChanged__WEBPACK_IMPORTED_MODULE_0__","g","Function","JSON","parse","fromEvent","_util_isArray__WEBPACK_IMPORTED_MODULE_1__","_util_isFunction__WEBPACK_IMPORTED_MODULE_2__","_operators_map__WEBPACK_IMPORTED_MODULE_3__","eventName","setupSubscription","sourceObj","handler","isEventTarget","source_1","isJQueryStyleEventEmitter","source_2","addListener","removeListener","isNodeStyleEventEmitter","source_3","merge","_operators_mergeAll__WEBPACK_IMPORTED_MODULE_2__","_fromArray__WEBPACK_IMPORTED_MODULE_3__","last","bufferCount","bufferSize","startBufferEvery","BufferCountOperator","subscriberClass","BufferSkipCountSubscriber","BufferCountSubscriber","buffers","_curry2","f2","_b","_isArray","val","_isTransformer","_dispatchable","methodNames","xf","transducer","_xfBase","_xfindLast_XFindLast","XFindLast","f","findLast","QueueAction_QueueAction","QueueAction","queue","QueueScheduler","ReplaySubject_ReplaySubject","ReplaySubject","windowTime","_events","_infiniteTimeWindow","_bufferSize","_windowTime","nextInfiniteTimeWindow","nextTimeWindow","ReplayEvent","_getNow","_trimBufferThenGetEvents","eventsCount","spliceCount","time","max","shareReplay","configOrBufferSize","refCount","_c","useRefCount","isComplete","shareReplayOperator","concatAll","startWith","scheduler_async","delay_delay","delayFor","isNaN","abs","DelayOperator","delay_DelaySubscriber","DelaySubscriber","delay_1","_schedule","scheduleNotification","DelayMessage","reverse_reverse","split","reverse","BehaviorSubject","_Subject__WEBPACK_IMPORTED_MODULE_1__","_util_ObjectUnsubscribedError__WEBPACK_IMPORTED_MODULE_2__","_value","getValue","filter","predicate","FilterOperator","FilterSubscriber","skip","SkipOperator","total","SkipSubscriber","pluck","_map__WEBPACK_IMPORTED_MODULE_0__","properties","currentProp","plucker","catchError","CatchOperator","caught","CatchSubscriber","err2","NEVER","_util_noop__WEBPACK_IMPORTED_MODULE_1__","mapTo","MapToOperator","MapToSubscriber","fromEventPattern","addHandler","removeHandler","retValue","throttle","defaultThrottleConfig","leading","trailing","durationSelector","ThrottleOperator","ThrottleSubscriber","_leading","_trailing","_hasValue","_sendValue","_throttled","send","duration","tryDurationSelector","throttlingDone","switchMapTo","_switchMap__WEBPACK_IMPORTED_MODULE_0__","innerObservable","iif","_defer__WEBPACK_IMPORTED_MODULE_0__","_empty__WEBPACK_IMPORTED_MODULE_1__","condition","trueResult","falseResult","debounceTime","_scheduler_async__WEBPACK_IMPORTED_MODULE_2__","dueTime","DebounceTimeOperator","DebounceTimeSubscriber","debouncedSubscription","lastValue","clearDebounce","dispatchNext","debouncedNext","sample","notifier","SampleOperator","sampleSubscriber","SampleSubscriber","emitValue","_internal_curry1_js__WEBPACK_IMPORTED_MODULE_0__","_keys_js__WEBPACK_IMPORTED_MODULE_1__","vals","RefCountOperator","connectable","_refCount","refCounter","refCount_RefCountSubscriber","connection","connect","RefCountSubscriber","sharedConnection","_connection","ConnectableObservable_ConnectableObservable","ConnectableObservable","subjectFactory","_isComplete","getSubject","_subject","ConnectableObservable_ConnectableSubscriber","connectableObservableDescriptor","connectableProto","ConnectableSubscriber","MulticastOperator","shareSubjectFactory","share","subjectOrSubjectFactory","ArgumentOutOfRangeError","ArgumentOutOfRangeErrorImpl","take","take_TakeOperator","TakeOperator","take_TakeSubscriber","TakeSubscriber","_identity","root","ajaxGet","url","headers","AjaxObservable_AjaxObservable","method","ajaxPost","ajaxDelete","ajaxPut","ajaxPatch","mapResponse","response","ajaxGetJSON","responseType","AjaxObservable","urlOrRequest","request","createXHR","crossDomain","XMLHttpRequest","XDomainRequest","getCORSRequest","progId","progIds","ActiveXObject","getXMLHttpRequest","withCredentials","timeout","AjaxObservable_AjaxSubscriber","post","delete","put","patch","getJSON","AjaxSubscriber","getHeader","FormData","serializeBody","xhr","AjaxResponse","user","password","setupEvents","open","setHeaders","contentType","splitIndex","substring","encodeURIComponent","stringify","setRequestHeader","headerName","toLowerCase","progressSubscriber","xhrTimeout","AjaxTimeoutError","ontimeout","upload","xhrProgress_1","xhrError_1","onprogress","AjaxError","onerror","xhrReadyStateChange","xhrLoad","readyState","status_1","status","responseText","onreadystatechange","onload","abort","originalEvent","parseXhrResponse","AjaxErrorImpl","parseJson","responseXML","ajax"],"mappings":"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","file":"assets/javascripts/vendor.000c9aa0.min.js","sourceRoot":""} \ No newline at end of file diff --git a/material/assets/javascripts/vendor.000c9aa0.min.js b/material/assets/javascripts/vendor.31a2e7b9.min.js similarity index 56% rename from material/assets/javascripts/vendor.000c9aa0.min.js rename to material/assets/javascripts/vendor.31a2e7b9.min.js index c6f2bea51..4233c7700 100644 --- a/material/assets/javascripts/vendor.000c9aa0.min.js +++ b/material/assets/javascripts/vendor.31a2e7b9.min.js @@ -13,12 +13,12 @@ MERCHANTABLITY OR NON-INFRINGEMENT. See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ -var r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])})(t,e)};function i(t,e){function n(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}var o=function(){return(o=Object.assign||function(t){for(var e,n=1,r=arguments.length;n=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}}}function c(t,e){var n="function"==typeof Symbol&&t[Symbol.iterator];if(!n)return t;var r,i,o=n.call(t),u=[];try{for(;(void 0===e||e-- >0)&&!(r=o.next()).done;)u.push(r.value)}catch(t){i={error:t}}finally{try{r&&!r.done&&(n=o.return)&&n.call(o)}finally{if(i)throw i.error}}return u}function a(){for(var t=[],e=0;e0?this._next(e.shift()):0===this.active&&this.hasCompleted&&this.destination.complete()},e}(o.a);function l(t){return t}function h(t){return void 0===t&&(t=Number.POSITIVE_INFINITY),function t(e,n,r){return void 0===r&&(r=Number.POSITIVE_INFINITY),"function"==typeof n?function(i){return i.pipe(t((function(t,r){return Object(c.a)(e(t,r)).pipe(Object(s.a)((function(e,i){return n(t,e,r,i)})))}),r))}:("number"==typeof n&&(r=n),function(t){return t.lift(new a(e,r))})}(l,t)}n.d(e,"a",(function(){return h}))},function(t,e,n){"use strict";n.d(e,"a",(function(){return s}));var r=n(0),i=n(4),o=n(15),u=n(16);function s(t,e,n){return function(r){return r.lift(new c(t,e,n))}}var c=function(){function t(t,e,n){this.nextOrObserver=t,this.error=e,this.complete=n}return t.prototype.call=function(t,e){return e.subscribe(new a(t,this.nextOrObserver,this.error,this.complete))},t}(),a=function(t){function e(e,n,r,i){var s=t.call(this,e)||this;return s._tapNext=o.a,s._tapError=o.a,s._tapComplete=o.a,s._tapError=r||o.a,s._tapComplete=i||o.a,Object(u.a)(n)?(s._context=s,s._tapNext=n):n&&(s._context=n,s._tapNext=n.next||o.a,s._tapError=n.error||o.a,s._tapComplete=n.complete||o.a),s}return r.b(e,t),e.prototype._next=function(t){try{this._tapNext.call(this._context,t)}catch(t){return void this.destination.error(t)}this.destination.next(t)},e.prototype._error=function(t){try{this._tapError.call(this._context,t)}catch(t){return void this.destination.error(t)}this.destination.error(t)},e.prototype._complete=function(){try{this._tapComplete.call(this._context)}catch(t){return void this.destination.error(t)}return this.destination.complete()},e}(i.a)},function(t,e,n){"use strict";var r=n(0),i=function(t){function e(e,n){var r=t.call(this,e,n)||this;return r.scheduler=e,r.work=n,r}return r.b(e,t),e.prototype.requestAsyncId=function(e,n,r){return void 0===r&&(r=0),null!==r&&r>0?t.prototype.requestAsyncId.call(this,e,n,r):(e.actions.push(this),e.scheduled||(e.scheduled=requestAnimationFrame((function(){return e.flush(null)}))))},e.prototype.recycleAsyncId=function(e,n,r){if(void 0===r&&(r=0),null!==r&&r>0||null===r&&this.delay>0)return t.prototype.recycleAsyncId.call(this,e,n,r);0===e.actions.length&&(cancelAnimationFrame(n),e.scheduled=void 0)},e}(n(43).a),o=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return r.b(e,t),e.prototype.flush=function(t){this.active=!0,this.scheduled=void 0;var e,n=this.actions,r=-1,i=n.length;t=t||n.shift();do{if(e=t.execute(t.state,t.delay))break}while(++r=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}}}function c(t,e){var n="function"==typeof Symbol&&t[Symbol.iterator];if(!n)return t;var r,i,o=n.call(t),u=[];try{for(;(void 0===e||e-- >0)&&!(r=o.next()).done;)u.push(r.value)}catch(t){i={error:t}}finally{try{r&&!r.done&&(n=o.return)&&n.call(o)}finally{if(i)throw i.error}}return u}function a(){for(var t=[],e=0;e0?this._next(e.shift()):0===this.active&&this.hasCompleted&&this.destination.complete()},e}(o.a);function l(t){return t}function h(t){return void 0===t&&(t=Number.POSITIVE_INFINITY),function t(e,n,r){return void 0===r&&(r=Number.POSITIVE_INFINITY),"function"==typeof n?function(i){return i.pipe(t((function(t,r){return Object(c.a)(e(t,r)).pipe(Object(s.a)((function(e,i){return n(t,e,r,i)})))}),r))}:("number"==typeof n&&(r=n),function(t){return t.lift(new a(e,r))})}(l,t)}n.d(e,"a",(function(){return h}))},function(t,e,n){"use strict";n.d(e,"a",(function(){return s}));var r=n(0),i=n(3),o=n(15),u=n(16);function s(t,e,n){return function(r){return r.lift(new c(t,e,n))}}var c=function(){function t(t,e,n){this.nextOrObserver=t,this.error=e,this.complete=n}return t.prototype.call=function(t,e){return e.subscribe(new a(t,this.nextOrObserver,this.error,this.complete))},t}(),a=function(t){function e(e,n,r,i){var s=t.call(this,e)||this;return s._tapNext=o.a,s._tapError=o.a,s._tapComplete=o.a,s._tapError=r||o.a,s._tapComplete=i||o.a,Object(u.a)(n)?(s._context=s,s._tapNext=n):n&&(s._context=n,s._tapNext=n.next||o.a,s._tapError=n.error||o.a,s._tapComplete=n.complete||o.a),s}return r.b(e,t),e.prototype._next=function(t){try{this._tapNext.call(this._context,t)}catch(t){return void this.destination.error(t)}this.destination.next(t)},e.prototype._error=function(t){try{this._tapError.call(this._context,t)}catch(t){return void this.destination.error(t)}this.destination.error(t)},e.prototype._complete=function(){try{this._tapComplete.call(this._context)}catch(t){return void this.destination.error(t)}return this.destination.complete()},e}(i.a)},function(t,e,n){"use strict";var r=n(0),i=function(t){function e(e,n){var r=t.call(this,e,n)||this;return r.scheduler=e,r.work=n,r}return r.b(e,t),e.prototype.requestAsyncId=function(e,n,r){return void 0===r&&(r=0),null!==r&&r>0?t.prototype.requestAsyncId.call(this,e,n,r):(e.actions.push(this),e.scheduled||(e.scheduled=requestAnimationFrame((function(){return e.flush(null)}))))},e.prototype.recycleAsyncId=function(e,n,r){if(void 0===r&&(r=0),null!==r&&r>0||null===r&&this.delay>0)return t.prototype.recycleAsyncId.call(this,e,n,r);0===e.actions.length&&(cancelAnimationFrame(n),e.scheduled=void 0)},e}(n(43).a),o=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return r.b(e,t),e.prototype.flush=function(t){this.active=!0,this.scheduled=void 0;var e,n=this.actions,r=-1,i=n.length;t=t||n.shift();do{if(e=t.execute(t.state,t.delay))break}while(++r0&&void 0!==arguments[0]?arguments[0]:{};this.action="function"==typeof t.action?t.action:this.defaultAction,this.target="function"==typeof t.target?t.target:this.defaultTarget,this.text="function"==typeof t.text?t.text:this.defaultText,this.container="object"===r(t.container)?t.container:document.body}},{key:"listenClick",value:function(t){var e=this;this.listener=(0,s.default)(t,"click",(function(t){return e.onClick(t)}))}},{key:"onClick",value:function(t){var e=t.delegateTarget||t.currentTarget;this.clipboardAction&&(this.clipboardAction=null),this.clipboardAction=new o.default({action:this.action(e),target:this.target(e),text:this.text(e),container:this.container,trigger:e,emitter:this})}},{key:"defaultAction",value:function(t){return f("action",t)}},{key:"defaultTarget",value:function(t){var e=f("target",t);if(e)return document.querySelector(e)}},{key:"defaultText",value:function(t){return f("text",t)}},{key:"destroy",value:function(){this.listener.destroy(),this.clipboardAction&&(this.clipboardAction.destroy(),this.clipboardAction=null)}}],[{key:"isSupported",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:["copy","cut"],e="string"==typeof t?[t]:t,n=!!document.queryCommandSupported;return e.forEach((function(t){n=n&&!!document.queryCommandSupported(t)})),n}}]),e}(u.default);function f(t,e){var n="data-clipboard-"+t;if(e.hasAttribute(n))return e.getAttribute(n)}t.exports=a},function(t,e,n){"use strict";var r,i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},o=function(){function t(t,e){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:{};this.action=t.action,this.container=t.container,this.emitter=t.emitter,this.target=t.target,this.text=t.text,this.trigger=t.trigger,this.selectedText=""}},{key:"initSelection",value:function(){this.text?this.selectFake():this.target&&this.selectTarget()}},{key:"selectFake",value:function(){var t=this,e="rtl"==document.documentElement.getAttribute("dir");this.removeFake(),this.fakeHandlerCallback=function(){return t.removeFake()},this.fakeHandler=this.container.addEventListener("click",this.fakeHandlerCallback)||!0,this.fakeElem=document.createElement("textarea"),this.fakeElem.style.fontSize="12pt",this.fakeElem.style.border="0",this.fakeElem.style.padding="0",this.fakeElem.style.margin="0",this.fakeElem.style.position="absolute",this.fakeElem.style[e?"right":"left"]="-9999px";var n=window.pageYOffset||document.documentElement.scrollTop;this.fakeElem.style.top=n+"px",this.fakeElem.setAttribute("readonly",""),this.fakeElem.value=this.text,this.container.appendChild(this.fakeElem),this.selectedText=(0,s.default)(this.fakeElem),this.copyText()}},{key:"removeFake",value:function(){this.fakeHandler&&(this.container.removeEventListener("click",this.fakeHandlerCallback),this.fakeHandler=null,this.fakeHandlerCallback=null),this.fakeElem&&(this.container.removeChild(this.fakeElem),this.fakeElem=null)}},{key:"selectTarget",value:function(){this.selectedText=(0,s.default)(this.target),this.copyText()}},{key:"copyText",value:function(){var t=void 0;try{t=document.execCommand(this.action)}catch(e){t=!1}this.handleResult(t)}},{key:"handleResult",value:function(t){this.emitter.emit(t?"success":"error",{action:this.action,text:this.selectedText,trigger:this.trigger,clearSelection:this.clearSelection.bind(this)})}},{key:"clearSelection",value:function(){this.trigger&&this.trigger.focus(),window.getSelection().removeAllRanges()}},{key:"destroy",value:function(){this.removeFake()}},{key:"action",set:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"copy";if(this._action=t,"copy"!==this._action&&"cut"!==this._action)throw new Error('Invalid "action" value, use either "copy" or "cut"')},get:function(){return this._action}},{key:"target",set:function(t){if(void 0!==t){if(!t||"object"!==(void 0===t?"undefined":i(t))||1!==t.nodeType)throw new Error('Invalid "target" value, use a valid Element');if("copy"===this.action&&t.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if("cut"===this.action&&(t.hasAttribute("readonly")||t.hasAttribute("disabled")))throw new Error('Invalid "target" attribute. You can\'t cut text from elements with "readonly" or "disabled" attributes');this._target=t}},get:function(){return this._target}}]),t}();t.exports=c},function(t,e){t.exports=function(t){var e;if("SELECT"===t.nodeName)t.focus(),e=t.value;else if("INPUT"===t.nodeName||"TEXTAREA"===t.nodeName){var n=t.hasAttribute("readonly");n||t.setAttribute("readonly",""),t.select(),t.setSelectionRange(0,t.value.length),n||t.removeAttribute("readonly"),e=t.value}else{t.hasAttribute("contenteditable")&&t.focus();var r=window.getSelection(),i=document.createRange();i.selectNodeContents(t),r.removeAllRanges(),r.addRange(i),e=r.toString()}return e}},function(t,e){function n(){}n.prototype={on:function(t,e,n){var r=this.e||(this.e={});return(r[t]||(r[t]=[])).push({fn:e,ctx:n}),this},once:function(t,e,n){var r=this;function i(){r.off(t,i),e.apply(n,arguments)}return i._=e,this.on(t,i,n)},emit:function(t){for(var e=[].slice.call(arguments,1),n=((this.e||(this.e={}))[t]||[]).slice(),r=0,i=n.length;r0){var u=o.indexOf(n);-1!==u&&o.splice(u,1)}},e.prototype.notifyComplete=function(){},e.prototype._next=function(t){if(0===this.toRespond.length){var e=[t].concat(this.values);this.project?this._tryProject(e):this.destination.next(e)}},e.prototype._tryProject=function(t){var e;try{e=this.project.apply(this,t)}catch(t){return void this.destination.error(t)}this.destination.next(e)},e}(i.a)},function(t,e,n){"use strict";n.d(e,"a",(function(){return o}));var r=n(0),i=n(4);function o(t,e){var n=!1;return arguments.length>=2&&(n=!0),function(r){return r.lift(new u(t,e,n))}}var u=function(){function t(t,e,n){void 0===n&&(n=!1),this.accumulator=t,this.seed=e,this.hasSeed=n}return t.prototype.call=function(t,e){return e.subscribe(new s(t,this.accumulator,this.seed,this.hasSeed))},t}(),s=function(t){function e(e,n,r,i){var o=t.call(this,e)||this;return o.accumulator=n,o._seed=r,o.hasSeed=i,o.index=0,o}return r.b(e,t),Object.defineProperty(e.prototype,"seed",{get:function(){return this._seed},set:function(t){this.hasSeed=!0,this._seed=t},enumerable:!0,configurable:!0}),e.prototype._next=function(t){if(this.hasSeed)return this._tryNext(t);this.seed=t,this.destination.next(t)},e.prototype._tryNext=function(t){var e,n=this.index++;try{e=this.accumulator(this.seed,t,n)}catch(t){this.destination.error(t)}this.seed=e,this.destination.next(e)},e}(i.a)},function(t,e,n){"use strict";n.d(e,"a",(function(){return u}));var r=n(0),i=n(4),o=n(9);function u(t){return function(e){return e.lift(new s(t))}}var s=function(){function t(t){this.callback=t}return t.prototype.call=function(t,e){return e.subscribe(new c(t,this.callback))},t}(),c=function(t){function e(e,n){var r=t.call(this,e)||this;return r.add(new o.a(n)),r}return r.b(e,t),e}(i.a)},,,,,,,,,,,,,,,,,,,,function(t,e,n){"use strict";n.d(e,"a",(function(){return u}));var r=n(6),i=n(40),o=n(18);function u(t){return new r.a((function(e){var n;try{n=t()}catch(t){return void e.error(t)}return(n?Object(i.a)(n):Object(o.b)()).subscribe(e)}))}},function(t,e,n){"use strict";var r=n(14);function i(t,e){return Object.prototype.hasOwnProperty.call(e,t)}var o=Object.prototype.toString,u=function(){return"[object Arguments]"===o.call(arguments)?function(t){return"[object Arguments]"===o.call(t)}:function(t){return i("callee",t)}}(),s=!{toString:null}.propertyIsEnumerable("toString"),c=["constructor","valueOf","isPrototypeOf","toString","propertyIsEnumerable","hasOwnProperty","toLocaleString"],a=function(){return arguments.propertyIsEnumerable("length")}(),f=function(t,e){for(var n=0;n=0;)i(e=c[n],t)&&!f(r,e)&&(r[r.length]=e),n-=1;return r})):Object(r.a)((function(t){return Object(t)!==t?[]:Object.keys(t)}));e.a=l},function(t,e,n){"use strict";n.d(e,"a",(function(){return i}));var r=n(36);function i(t,e){return Object(r.a)((function(n,r){return e?e(n[t],r[t]):n[t]===r[t]}))}},function(t,e){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(t){"object"==typeof window&&(n=window)}t.exports=n},function(t){t.exports=JSON.parse('"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"')},function(t){t.exports=JSON.parse('"M14,2H6A2,2 0 0,0 4,4V20A2,2 0 0,0 6,22H13C12.59,21.75 12.2,21.44 11.86,21.1C11.53,20.77 11.25,20.4 11,20H6V4H13V9H18V10.18C18.71,10.34 19.39,10.61 20,11V8L14,2M20.31,18.9C21.64,16.79 21,14 18.91,12.68C16.8,11.35 14,12 12.69,14.08C11.35,16.19 12,18.97 14.09,20.3C15.55,21.23 17.41,21.23 18.88,20.32L22,23.39L23.39,22L20.31,18.9M16.5,19A2.5,2.5 0 0,1 14,16.5A2.5,2.5 0 0,1 16.5,14A2.5,2.5 0 0,1 19,16.5A2.5,2.5 0 0,1 16.5,19Z"')},,function(t,e,n){"use strict";n.d(e,"a",(function(){return s}));var r=n(6),i=n(26),o=n(16),u=n(8);function s(t,e,n,c){return Object(o.a)(n)&&(c=n,n=void 0),c?s(t,e,n).pipe(Object(u.a)((function(t){return Object(i.a)(t)?c.apply(void 0,t):c(t)}))):new r.a((function(r){!function t(e,n,r,i,o){var u;if(function(t){return t&&"function"==typeof t.addEventListener&&"function"==typeof t.removeEventListener}(e)){var s=e;e.addEventListener(n,r,o),u=function(){return s.removeEventListener(n,r,o)}}else if(function(t){return t&&"function"==typeof t.on&&"function"==typeof t.off}(e)){var c=e;e.on(n,r),u=function(){return c.off(n,r)}}else if(function(t){return t&&"function"==typeof t.addListener&&"function"==typeof t.removeListener}(e)){var a=e;e.addListener(n,r),u=function(){return a.removeListener(n,r)}}else{if(!e||!e.length)throw new TypeError("Invalid event target");for(var f=0,l=e.length;f1?r.next(Array.prototype.slice.call(arguments)):r.next(t)}),r,n)}))}},function(t,e,n){"use strict";n.d(e,"a",(function(){return s}));var r=n(6),i=n(27),o=n(57),u=n(38);function s(){for(var t=[],e=0;e1&&"number"==typeof t[t.length-1]&&(n=t.pop())):"number"==typeof c&&(n=t.pop()),null===s&&1===t.length&&t[0]instanceof r.a?t[0]:Object(o.a)(n)(Object(u.a)(t,s))}},function(t,e,n){"use strict";n.d(e,"a",(function(){return o}));var r=n(0),i=n(4);function o(t,e){return void 0===e&&(e=null),function(n){return n.lift(new u(t,e))}}var u=function(){function t(t,e){this.bufferSize=t,this.startBufferEvery=e,this.subscriberClass=e&&t!==e?c:s}return t.prototype.call=function(t,e){return e.subscribe(new this.subscriberClass(t,this.bufferSize,this.startBufferEvery))},t}(),s=function(t){function e(e,n){var r=t.call(this,e)||this;return r.bufferSize=n,r.buffer=[],r}return r.b(e,t),e.prototype._next=function(t){var e=this.buffer;e.push(t),e.length==this.bufferSize&&(this.destination.next(e),this.buffer=[])},e.prototype._complete=function(){var e=this.buffer;e.length>0&&this.destination.next(e),t.prototype._complete.call(this)},e}(i.a),c=function(t){function e(e,n,r){var i=t.call(this,e)||this;return i.bufferSize=n,i.startBufferEvery=r,i.buffers=[],i.count=0,i}return r.b(e,t),e.prototype._next=function(t){var e=this.bufferSize,n=this.startBufferEvery,r=this.buffers,i=this.count;this.count++,i%n==0&&r.push([]);for(var o=r.length;o--;){var u=r[o];u.push(t),u.length===e&&(r.splice(o,1),this.destination.next(u))}},e.prototype._complete=function(){for(var e=this.buffers,n=this.destination;e.length>0;){var r=e.shift();r.length>0&&n.next(r)}t.prototype._complete.call(this)},e}(i.a)},function(t,e,n){"use strict";var r=n(14),i=n(32);function o(t){return function e(n,o){switch(arguments.length){case 0:return e;case 1:return Object(i.a)(n)?e:Object(r.a)((function(e){return t(n,e)}));default:return Object(i.a)(n)&&Object(i.a)(o)?e:Object(i.a)(n)?Object(r.a)((function(e){return t(e,o)})):Object(i.a)(o)?Object(r.a)((function(e){return t(n,e)})):t(n,o)}}}var u=Array.isArray||function(t){return null!=t&&t.length>=0&&"[object Array]"===Object.prototype.toString.call(t)};function s(t){return null!=t&&"function"==typeof t["@@transducer/step"]}function c(t,e,n){return function(){if(0===arguments.length)return n();var r=Array.prototype.slice.call(arguments,0),i=r.pop();if(!u(i)){for(var o=0;o=0;){if(t(e[n]))return e[n];n-=1}})));e.a=l},function(t,e,n){"use strict";var r=n(0),i=n(25),o=function(t){function e(e,n){var r=t.call(this,e,n)||this;return r.scheduler=e,r.work=n,r}return r.b(e,t),e.prototype.schedule=function(e,n){return void 0===n&&(n=0),n>0?t.prototype.schedule.call(this,e,n):(this.delay=n,this.state=e,this.scheduler.flush(this),this)},e.prototype.execute=function(e,n){return n>0||this.closed?t.prototype.execute.call(this,e,n):this._execute(e,n)},e.prototype.requestAsyncId=function(e,n,r){return void 0===r&&(r=0),null!==r&&r>0||null===r&&this.delay>0?t.prototype.requestAsyncId.call(this,e,n,r):e.flush(this)},e}(n(43).a),u=new(function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return r.b(e,t),e}(n(42).a))(o),s=n(9),c=n(46),a=n(19),f=n(51),l=function(t){function e(e,n,r){void 0===e&&(e=Number.POSITIVE_INFINITY),void 0===n&&(n=Number.POSITIVE_INFINITY);var i=t.call(this)||this;return i.scheduler=r,i._events=[],i._infiniteTimeWindow=!1,i._bufferSize=e<1?1:e,i._windowTime=n<1?1:n,n===Number.POSITIVE_INFINITY?(i._infiniteTimeWindow=!0,i.next=i.nextInfiniteTimeWindow):i.next=i.nextTimeWindow,i}return r.b(e,t),e.prototype.nextInfiniteTimeWindow=function(e){var n=this._events;n.push(e),n.length>this._bufferSize&&n.shift(),t.prototype.next.call(this,e)},e.prototype.nextTimeWindow=function(e){this._events.push(new h(this._getNow(),e)),this._trimBufferThenGetEvents(),t.prototype.next.call(this,e)},e.prototype._subscribe=function(t){var e,n=this._infiniteTimeWindow,r=n?this._events:this._trimBufferThenGetEvents(),i=this.scheduler,o=r.length;if(this.closed)throw new a.a;if(this.isStopped||this.hasError?e=s.a.EMPTY:(this.observers.push(t),e=new f.a(this,t)),i&&t.add(t=new c.a(t,i)),n)for(var u=0;ue&&(o=Math.max(o,i-e)),o>0&&r.splice(0,o),r},e}(i.a),h=function(){return function(t,e){this.time=t,this.value=e}}();function p(t,e,n){var r;return r=t&&"object"==typeof t?t:{bufferSize:t,windowTime:e,refCount:!1,scheduler:n},function(t){return t.lift(function(t){var e,n,r=t.bufferSize,i=void 0===r?Number.POSITIVE_INFINITY:r,o=t.windowTime,u=void 0===o?Number.POSITIVE_INFINITY:o,s=t.refCount,c=t.scheduler,a=0,f=!1,h=!1;return function(t){a++,e&&!f||(f=!1,e=new l(i,u,c),n=t.subscribe({next:function(t){e.next(t)},error:function(t){f=!0,e.error(t)},complete:function(){h=!0,e.complete()}}));var r=e.subscribe(this);this.add((function(){a--,r.unsubscribe(),n&&!h&&s&&0===a&&(n.unsubscribe(),n=void 0,e=void 0)}))}}(r))}}n.d(e,"a",(function(){return p}))},function(t,e,n){"use strict";var r=n(45),i=n(57);function o(){for(var t=[],e=0;e0&&n[0].time-r.now()<=0;)n.shift().notification.observe(i);if(n.length>0){var o=Math.max(0,n[0].time-r.now());this.schedule(t,o)}else this.unsubscribe(),e.active=!1},e.prototype._schedule=function(t){this.active=!0,this.destination.add(t.schedule(e.dispatch,this.delay,{source:this,destination:this.destination,scheduler:t}))},e.prototype.scheduleNotification=function(t){if(!0!==this.errored){var e=this.scheduler,n=new f(e.now()+this.delay,t);this.queue.push(n),!1===this.active&&this._schedule(e)}},e.prototype._next=function(t){this.scheduleNotification(u.a.createNext(t))},e.prototype._error=function(t){this.errored=!0,this.queue=[],this.destination.error(t),this.unsubscribe()},e.prototype._complete=function(){this.scheduleNotification(u.a.createComplete()),this.unsubscribe()},e}(o.a),f=function(){return function(t,e){this.time=t,this.notification=e}}()},function(t,e,n){"use strict";var r=n(14);var i=Object(r.a)((function(t){return e=t,"[object String]"===Object.prototype.toString.call(e)?t.split("").reverse().join(""):Array.prototype.slice.call(t,0).reverse();var e}));e.a=i},function(t,e,n){"use strict";n.d(e,"a",(function(){return u}));var r=n(0),i=n(25),o=n(19),u=function(t){function e(e){var n=t.call(this)||this;return n._value=e,n}return r.b(e,t),Object.defineProperty(e.prototype,"value",{get:function(){return this.getValue()},enumerable:!0,configurable:!0}),e.prototype._subscribe=function(e){var n=t.prototype._subscribe.call(this,e);return n&&!n.closed&&e.next(this._value),n},e.prototype.getValue=function(){if(this.hasError)throw this.thrownError;if(this.closed)throw new o.a;return this._value},e.prototype.next=function(e){t.prototype.next.call(this,this._value=e)},e}(i.a)},function(t,e,n){"use strict";n.d(e,"a",(function(){return o}));var r=n(0),i=n(4);function o(t,e){return function(n){return n.lift(new u(t,e))}}var u=function(){function t(t,e){this.predicate=t,this.thisArg=e}return t.prototype.call=function(t,e){return e.subscribe(new s(t,this.predicate,this.thisArg))},t}(),s=function(t){function e(e,n,r){var i=t.call(this,e)||this;return i.predicate=n,i.thisArg=r,i.count=0,i}return r.b(e,t),e.prototype._next=function(t){var e;try{e=this.predicate.call(this.thisArg,t,this.count++)}catch(t){return void this.destination.error(t)}e&&this.destination.next(t)},e}(i.a)},function(t,e,n){"use strict";n.d(e,"a",(function(){return o}));var r=n(0),i=n(4);function o(t){return function(e){return e.lift(new u(t))}}var u=function(){function t(t){this.total=t}return t.prototype.call=function(t,e){return e.subscribe(new s(t,this.total))},t}(),s=function(t){function e(e,n){var r=t.call(this,e)||this;return r.total=n,r.count=0,r}return r.b(e,t),e.prototype._next=function(t){++this.count>this.total&&this.destination.next(t)},e}(i.a)},function(t,e,n){"use strict";n.d(e,"a",(function(){return i}));var r=n(8);function i(){for(var t=[],e=0;e1)this.connection=null;else{var n=this.connection,r=t._connection;this.connection=null,!r||n&&r!==n||r.unsubscribe()}}else this.connection=null},e}(u.a),l=function(t){function e(e,n){var r=t.call(this)||this;return r.source=e,r.subjectFactory=n,r._refCount=0,r._isComplete=!1,r}return r.b(e,t),e.prototype._subscribe=function(t){return this.getSubject().subscribe(t)},e.prototype.getSubject=function(){var t=this._subject;return t&&!t.isStopped||(this._subject=this.subjectFactory()),this._subject},e.prototype.connect=function(){var t=this._connection;return t||(this._isComplete=!1,(t=this._connection=new s.a).add(this.source.subscribe(new p(this.getSubject(),this))),t.closed&&(this._connection=null,t=s.a.EMPTY)),t},e.prototype.refCount=function(){return c()(this)},e}(o.a),h=function(){var t=l.prototype;return{operator:{value:null},_refCount:{value:0,writable:!0},_subject:{value:null,writable:!0},_connection:{value:null,writable:!0},_subscribe:{value:t._subscribe},_isComplete:{value:t._isComplete,writable:!0},getSubject:{value:t.getSubject},connect:{value:t.connect},refCount:{value:t.refCount}}}(),p=function(t){function e(e,n){var r=t.call(this,e)||this;return r.connectable=n,r}return r.b(e,t),e.prototype._error=function(e){this._unsubscribe(),t.prototype._error.call(this,e)},e.prototype._complete=function(){this.connectable._isComplete=!0,this._unsubscribe(),t.prototype._complete.call(this)},e.prototype._unsubscribe=function(){var t=this.connectable;if(t){this.connectable=null;var e=t._connection;t._refCount=0,t._subject=null,t._connection=null,e&&e.unsubscribe()}},e}(i.b);u.a;var d=function(){function t(t,e){this.subjectFactory=t,this.selector=e}return t.prototype.call=function(t,e){var n=this.selector,r=this.subjectFactory(),i=n(r).subscribe(t);return i.add(e.subscribe(r)),i},t}();function b(){return new i.a}function y(){return function(t){return c()((e=b,function(t){var r;if(r="function"==typeof e?e:function(){return e},"function"==typeof n)return t.lift(new d(r,n));var i=Object.create(t,h);return i.source=t,i.subjectFactory=r,i})(t));var e,n}}n.d(e,"a",(function(){return y}))},function(t,e,n){"use strict";var r=n(0),i=n(4),o=function(){function t(){return Error.call(this),this.message="argument out of range",this.name="ArgumentOutOfRangeError",this}return t.prototype=Object.create(Error.prototype),t}(),u=n(18);function s(t){return function(e){return 0===t?Object(u.b)():e.lift(new c(t))}}n.d(e,"a",(function(){return s}));var c=function(){function t(t){if(this.total=t,this.total<0)throw new o}return t.prototype.call=function(t,e){return e.subscribe(new a(t,this.total))},t}(),a=function(t){function e(e,n){var r=t.call(this,e)||this;return r.total=n,r.count=0,r}return r.b(e,t),e.prototype._next=function(t){var e=this.total,n=++this.count;n<=e&&(this.destination.next(t),n===e&&(this.destination.complete(),this.unsubscribe()))},e}(i.a)},function(t,e,n){"use strict";var r=n(14);function i(t){return t}var o=Object(r.a)(i);e.a=o},function(t,e,n){"use strict";var r=n(0),i=n(13),o=n(6),u=n(4),s=n(8);function c(t,e){return void 0===e&&(e=null),new b({method:"GET",url:t,headers:e})}function a(t,e,n){return new b({method:"POST",url:t,body:e,headers:n})}function f(t,e){return new b({method:"DELETE",url:t,headers:e})}function l(t,e,n){return new b({method:"PUT",url:t,body:e,headers:n})}function h(t,e,n){return new b({method:"PATCH",url:t,body:e,headers:n})}var p=Object(s.a)((function(t,e){return t.response}));function d(t,e){return p(new b({method:"GET",url:t,responseType:"json",headers:e}))}var b=function(t){function e(e){var n=t.call(this)||this,r={async:!0,createXHR:function(){return this.crossDomain?function(){if(i.a.XMLHttpRequest)return new i.a.XMLHttpRequest;if(i.a.XDomainRequest)return new i.a.XDomainRequest;throw new Error("CORS is not supported by your browser")}():function(){if(i.a.XMLHttpRequest)return new i.a.XMLHttpRequest;var t=void 0;try{for(var e=["Msxml2.XMLHTTP","Microsoft.XMLHTTP","Msxml2.XMLHTTP.4.0"],n=0;n<3;n++)try{if(t=e[n],new i.a.ActiveXObject(t))break}catch(t){}return new i.a.ActiveXObject(t)}catch(t){throw new Error("XMLHttpRequest is not supported by your browser")}}()},crossDomain:!0,withCredentials:!1,headers:{},method:"GET",responseType:"json",timeout:0};if("string"==typeof e)r.url=e;else for(var o in e)e.hasOwnProperty(o)&&(r[o]=e[o]);return n.request=r,n}var n;return r.b(e,t),e.prototype._subscribe=function(t){return new y(t,this.request)},e.create=((n=function(t){return new e(t)}).get=c,n.post=a,n.delete=f,n.put=l,n.patch=h,n.getJSON=d,n),e}(o.a),y=function(t){function e(e,n){var r=t.call(this,e)||this;r.request=n,r.done=!1;var o=n.headers=n.headers||{};return n.crossDomain||r.getHeader(o,"X-Requested-With")||(o["X-Requested-With"]="XMLHttpRequest"),r.getHeader(o,"Content-Type")||i.a.FormData&&n.body instanceof i.a.FormData||void 0===n.body||(o["Content-Type"]="application/x-www-form-urlencoded; charset=UTF-8"),n.body=r.serializeBody(n.body,r.getHeader(n.headers,"Content-Type")),r.send(),r}return r.b(e,t),e.prototype.next=function(t){this.done=!0;var e,n=this.xhr,r=this.request,i=this.destination;try{e=new v(t,n,r)}catch(t){return i.error(t)}i.next(e)},e.prototype.send=function(){var t=this.request,e=this.request,n=e.user,r=e.method,i=e.url,o=e.async,u=e.password,s=e.headers,c=e.body;try{var a=this.xhr=t.createXHR();this.setupEvents(a,t),n?a.open(r,i,o,n,u):a.open(r,i,o),o&&(a.timeout=t.timeout,a.responseType=t.responseType),"withCredentials"in a&&(a.withCredentials=!!t.withCredentials),this.setHeaders(a,s),c?a.send(c):a.send()}catch(t){this.error(t)}},e.prototype.serializeBody=function(t,e){if(!t||"string"==typeof t)return t;if(i.a.FormData&&t instanceof i.a.FormData)return t;if(e){var n=e.indexOf(";");-1!==n&&(e=e.substring(0,n))}switch(e){case"application/x-www-form-urlencoded":return Object.keys(t).map((function(e){return encodeURIComponent(e)+"="+encodeURIComponent(t[e])})).join("&");case"application/json":return JSON.stringify(t);default:return t}},e.prototype.setHeaders=function(t,e){for(var n in e)e.hasOwnProperty(n)&&t.setRequestHeader(n,e[n])},e.prototype.getHeader=function(t,e){for(var n in t)if(n.toLowerCase()===e.toLowerCase())return t[n]},e.prototype.setupEvents=function(t,e){var n=e.progressSubscriber;function r(t){var e,n=r,i=n.subscriber,o=n.progressSubscriber,u=n.request;o&&o.error(t);try{e=new g(this,u)}catch(t){e=t}i.error(e)}if(t.ontimeout=r,r.request=e,r.subscriber=this,r.progressSubscriber=n,t.upload&&"withCredentials"in t){var o,u;if(n)o=function(t){o.progressSubscriber.next(t)},i.a.XDomainRequest?t.onprogress=o:t.upload.onprogress=o,o.progressSubscriber=n;u=function(t){var e,n=u,r=n.progressSubscriber,i=n.subscriber,o=n.request;r&&r.error(t);try{e=new m("ajax error",this,o)}catch(t){e=t}i.error(e)},t.onerror=u,u.request=e,u.subscriber=this,u.progressSubscriber=n}function s(t){}function c(t){var e=c,n=e.subscriber,r=e.progressSubscriber,i=e.request;if(4===this.readyState){var o=1223===this.status?204:this.status,u="text"===this.responseType?this.response||this.responseText:this.response;if(0===o&&(o=u?200:0),o<400)r&&r.complete(),n.next(t),n.complete();else{r&&r.error(t);var s=void 0;try{s=new m("ajax error "+o,this,i)}catch(t){s=t}n.error(s)}}}t.onreadystatechange=s,s.subscriber=this,s.progressSubscriber=n,s.request=e,t.onload=c,c.subscriber=this,c.progressSubscriber=n,c.request=e},e.prototype.unsubscribe=function(){var e=this.done,n=this.xhr;!e&&n&&4!==n.readyState&&"function"==typeof n.abort&&n.abort(),t.prototype.unsubscribe.call(this)},e}(u.a),v=function(){return function(t,e,n){this.originalEvent=t,this.xhr=e,this.request=n,this.status=e.status,this.responseType=e.responseType||n.responseType,this.response=w(this.responseType,e)}}(),m=function(){function t(t,e,n){return Error.call(this),this.message=t,this.name="AjaxError",this.xhr=e,this.request=n,this.status=e.status,this.responseType=e.responseType||n.responseType,this.response=w(this.responseType,e),this}return t.prototype=Object.create(Error.prototype),t}();function w(t,e){switch(t){case"json":return function(t){return"response"in t?t.responseType?t.response:JSON.parse(t.response||t.responseText||"null"):JSON.parse(t.responseText||"null")}(e);case"xml":return e.responseXML;case"text":default:return"response"in e?e.response:e.responseText}}var g=function(t,e){return m.call(this,"ajax timeout",t,e),this.name="AjaxTimeoutError",this};n.d(e,"a",(function(){return _}));var _=function(){return b.create}()}]]); -//# sourceMappingURL=vendor.000c9aa0.min.js.map \ No newline at end of file +var r;r=function(){return function(t){var e={};function n(r){if(e[r])return e[r].exports;var i=e[r]={i:r,l:!1,exports:{}};return t[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=t,n.c=e,n.d=function(t,e,r){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var i in t)n.d(r,i,function(e){return t[e]}.bind(null,i));return r},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=0)}([function(t,e,n){"use strict";var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i=function(){function t(t,e){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:{};this.action="function"==typeof t.action?t.action:this.defaultAction,this.target="function"==typeof t.target?t.target:this.defaultTarget,this.text="function"==typeof t.text?t.text:this.defaultText,this.container="object"===r(t.container)?t.container:document.body}},{key:"listenClick",value:function(t){var e=this;this.listener=(0,s.default)(t,"click",(function(t){return e.onClick(t)}))}},{key:"onClick",value:function(t){var e=t.delegateTarget||t.currentTarget;this.clipboardAction&&(this.clipboardAction=null),this.clipboardAction=new o.default({action:this.action(e),target:this.target(e),text:this.text(e),container:this.container,trigger:e,emitter:this})}},{key:"defaultAction",value:function(t){return f("action",t)}},{key:"defaultTarget",value:function(t){var e=f("target",t);if(e)return document.querySelector(e)}},{key:"defaultText",value:function(t){return f("text",t)}},{key:"destroy",value:function(){this.listener.destroy(),this.clipboardAction&&(this.clipboardAction.destroy(),this.clipboardAction=null)}}],[{key:"isSupported",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:["copy","cut"],e="string"==typeof t?[t]:t,n=!!document.queryCommandSupported;return e.forEach((function(t){n=n&&!!document.queryCommandSupported(t)})),n}}]),e}(u.default);function f(t,e){var n="data-clipboard-"+t;if(e.hasAttribute(n))return e.getAttribute(n)}t.exports=a},function(t,e,n){"use strict";var r,i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},o=function(){function t(t,e){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:{};this.action=t.action,this.container=t.container,this.emitter=t.emitter,this.target=t.target,this.text=t.text,this.trigger=t.trigger,this.selectedText=""}},{key:"initSelection",value:function(){this.text?this.selectFake():this.target&&this.selectTarget()}},{key:"selectFake",value:function(){var t=this,e="rtl"==document.documentElement.getAttribute("dir");this.removeFake(),this.fakeHandlerCallback=function(){return t.removeFake()},this.fakeHandler=this.container.addEventListener("click",this.fakeHandlerCallback)||!0,this.fakeElem=document.createElement("textarea"),this.fakeElem.style.fontSize="12pt",this.fakeElem.style.border="0",this.fakeElem.style.padding="0",this.fakeElem.style.margin="0",this.fakeElem.style.position="absolute",this.fakeElem.style[e?"right":"left"]="-9999px";var n=window.pageYOffset||document.documentElement.scrollTop;this.fakeElem.style.top=n+"px",this.fakeElem.setAttribute("readonly",""),this.fakeElem.value=this.text,this.container.appendChild(this.fakeElem),this.selectedText=(0,s.default)(this.fakeElem),this.copyText()}},{key:"removeFake",value:function(){this.fakeHandler&&(this.container.removeEventListener("click",this.fakeHandlerCallback),this.fakeHandler=null,this.fakeHandlerCallback=null),this.fakeElem&&(this.container.removeChild(this.fakeElem),this.fakeElem=null)}},{key:"selectTarget",value:function(){this.selectedText=(0,s.default)(this.target),this.copyText()}},{key:"copyText",value:function(){var t=void 0;try{t=document.execCommand(this.action)}catch(e){t=!1}this.handleResult(t)}},{key:"handleResult",value:function(t){this.emitter.emit(t?"success":"error",{action:this.action,text:this.selectedText,trigger:this.trigger,clearSelection:this.clearSelection.bind(this)})}},{key:"clearSelection",value:function(){this.trigger&&this.trigger.focus(),window.getSelection().removeAllRanges()}},{key:"destroy",value:function(){this.removeFake()}},{key:"action",set:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"copy";if(this._action=t,"copy"!==this._action&&"cut"!==this._action)throw new Error('Invalid "action" value, use either "copy" or "cut"')},get:function(){return this._action}},{key:"target",set:function(t){if(void 0!==t){if(!t||"object"!==(void 0===t?"undefined":i(t))||1!==t.nodeType)throw new Error('Invalid "target" value, use a valid Element');if("copy"===this.action&&t.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if("cut"===this.action&&(t.hasAttribute("readonly")||t.hasAttribute("disabled")))throw new Error('Invalid "target" attribute. You can\'t cut text from elements with "readonly" or "disabled" attributes');this._target=t}},get:function(){return this._target}}]),t}();t.exports=c},function(t,e){t.exports=function(t){var e;if("SELECT"===t.nodeName)t.focus(),e=t.value;else if("INPUT"===t.nodeName||"TEXTAREA"===t.nodeName){var n=t.hasAttribute("readonly");n||t.setAttribute("readonly",""),t.select(),t.setSelectionRange(0,t.value.length),n||t.removeAttribute("readonly"),e=t.value}else{t.hasAttribute("contenteditable")&&t.focus();var r=window.getSelection(),i=document.createRange();i.selectNodeContents(t),r.removeAllRanges(),r.addRange(i),e=r.toString()}return e}},function(t,e){function n(){}n.prototype={on:function(t,e,n){var r=this.e||(this.e={});return(r[t]||(r[t]=[])).push({fn:e,ctx:n}),this},once:function(t,e,n){var r=this;function i(){r.off(t,i),e.apply(n,arguments)}return i._=e,this.on(t,i,n)},emit:function(t){for(var e=[].slice.call(arguments,1),n=((this.e||(this.e={}))[t]||[]).slice(),r=0,i=n.length;r0){var u=o.indexOf(n);-1!==u&&o.splice(u,1)}},e.prototype.notifyComplete=function(){},e.prototype._next=function(t){if(0===this.toRespond.length){var e=[t].concat(this.values);this.project?this._tryProject(e):this.destination.next(e)}},e.prototype._tryProject=function(t){var e;try{e=this.project.apply(this,t)}catch(t){return void this.destination.error(t)}this.destination.next(e)},e}(i.a)},function(t,e,n){"use strict";n.d(e,"a",(function(){return o}));var r=n(0),i=n(3);function o(t,e){var n=!1;return arguments.length>=2&&(n=!0),function(r){return r.lift(new u(t,e,n))}}var u=function(){function t(t,e,n){void 0===n&&(n=!1),this.accumulator=t,this.seed=e,this.hasSeed=n}return t.prototype.call=function(t,e){return e.subscribe(new s(t,this.accumulator,this.seed,this.hasSeed))},t}(),s=function(t){function e(e,n,r,i){var o=t.call(this,e)||this;return o.accumulator=n,o._seed=r,o.hasSeed=i,o.index=0,o}return r.b(e,t),Object.defineProperty(e.prototype,"seed",{get:function(){return this._seed},set:function(t){this.hasSeed=!0,this._seed=t},enumerable:!0,configurable:!0}),e.prototype._next=function(t){if(this.hasSeed)return this._tryNext(t);this.seed=t,this.destination.next(t)},e.prototype._tryNext=function(t){var e,n=this.index++;try{e=this.accumulator(this.seed,t,n)}catch(t){this.destination.error(t)}this.seed=e,this.destination.next(e)},e}(i.a)},function(t,e,n){"use strict";n.d(e,"a",(function(){return u}));var r=n(0),i=n(3),o=n(9);function u(t){return function(e){return e.lift(new s(t))}}var s=function(){function t(t){this.callback=t}return t.prototype.call=function(t,e){return e.subscribe(new c(t,this.callback))},t}(),c=function(t){function e(e,n){var r=t.call(this,e)||this;return r.add(new o.a(n)),r}return r.b(e,t),e}(i.a)},,,,,,,,,,,,,,,,,function(t,e,n){"use strict";n.d(e,"a",(function(){return u}));var r=n(6),i=n(40),o=n(18);function u(t){return new r.a((function(e){var n;try{n=t()}catch(t){return void e.error(t)}return(n?Object(i.a)(n):Object(o.b)()).subscribe(e)}))}},function(t,e,n){"use strict";var r=n(14);function i(t,e){return Object.prototype.hasOwnProperty.call(e,t)}var o=Object.prototype.toString,u=function(){return"[object Arguments]"===o.call(arguments)?function(t){return"[object Arguments]"===o.call(t)}:function(t){return i("callee",t)}}(),s=!{toString:null}.propertyIsEnumerable("toString"),c=["constructor","valueOf","isPrototypeOf","toString","propertyIsEnumerable","hasOwnProperty","toLocaleString"],a=function(){return arguments.propertyIsEnumerable("length")}(),f=function(t,e){for(var n=0;n=0;)i(e=c[n],t)&&!f(r,e)&&(r[r.length]=e),n-=1;return r})):Object(r.a)((function(t){return Object(t)!==t?[]:Object.keys(t)}));e.a=l},function(t,e,n){"use strict";n.d(e,"a",(function(){return i}));var r=n(36);function i(t,e){return Object(r.a)((function(n,r){return e?e(n[t],r[t]):n[t]===r[t]}))}},function(t,e){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(t){"object"==typeof window&&(n=window)}t.exports=n},function(t){t.exports=JSON.parse('"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"')},function(t){t.exports=JSON.parse('"M14,2H6A2,2 0 0,0 4,4V20A2,2 0 0,0 6,22H13C12.59,21.75 12.2,21.44 11.86,21.1C11.53,20.77 11.25,20.4 11,20H6V4H13V9H18V10.18C18.71,10.34 19.39,10.61 20,11V8L14,2M20.31,18.9C21.64,16.79 21,14 18.91,12.68C16.8,11.35 14,12 12.69,14.08C11.35,16.19 12,18.97 14.09,20.3C15.55,21.23 17.41,21.23 18.88,20.32L22,23.39L23.39,22L20.31,18.9M16.5,19A2.5,2.5 0 0,1 14,16.5A2.5,2.5 0 0,1 16.5,14A2.5,2.5 0 0,1 19,16.5A2.5,2.5 0 0,1 16.5,19Z"')},,function(t,e,n){"use strict";n.d(e,"a",(function(){return s}));var r=n(6),i=n(26),o=n(16),u=n(8);function s(t,e,n,c){return Object(o.a)(n)&&(c=n,n=void 0),c?s(t,e,n).pipe(Object(u.a)((function(t){return Object(i.a)(t)?c.apply(void 0,t):c(t)}))):new r.a((function(r){!function t(e,n,r,i,o){var u;if(function(t){return t&&"function"==typeof t.addEventListener&&"function"==typeof t.removeEventListener}(e)){var s=e;e.addEventListener(n,r,o),u=function(){return s.removeEventListener(n,r,o)}}else if(function(t){return t&&"function"==typeof t.on&&"function"==typeof t.off}(e)){var c=e;e.on(n,r),u=function(){return c.off(n,r)}}else if(function(t){return t&&"function"==typeof t.addListener&&"function"==typeof t.removeListener}(e)){var a=e;e.addListener(n,r),u=function(){return a.removeListener(n,r)}}else{if(!e||!e.length)throw new TypeError("Invalid event target");for(var f=0,l=e.length;f1?r.next(Array.prototype.slice.call(arguments)):r.next(t)}),r,n)}))}},function(t,e,n){"use strict";n.d(e,"a",(function(){return s}));var r=n(6),i=n(27),o=n(57),u=n(38);function s(){for(var t=[],e=0;e1&&"number"==typeof t[t.length-1]&&(n=t.pop())):"number"==typeof c&&(n=t.pop()),null===s&&1===t.length&&t[0]instanceof r.a?t[0]:Object(o.a)(n)(Object(u.a)(t,s))}},function(t,e,n){"use strict";n.d(e,"a",(function(){return o}));var r=n(0),i=n(3);function o(t,e){return void 0===e&&(e=null),function(n){return n.lift(new u(t,e))}}var u=function(){function t(t,e){this.bufferSize=t,this.startBufferEvery=e,this.subscriberClass=e&&t!==e?c:s}return t.prototype.call=function(t,e){return e.subscribe(new this.subscriberClass(t,this.bufferSize,this.startBufferEvery))},t}(),s=function(t){function e(e,n){var r=t.call(this,e)||this;return r.bufferSize=n,r.buffer=[],r}return r.b(e,t),e.prototype._next=function(t){var e=this.buffer;e.push(t),e.length==this.bufferSize&&(this.destination.next(e),this.buffer=[])},e.prototype._complete=function(){var e=this.buffer;e.length>0&&this.destination.next(e),t.prototype._complete.call(this)},e}(i.a),c=function(t){function e(e,n,r){var i=t.call(this,e)||this;return i.bufferSize=n,i.startBufferEvery=r,i.buffers=[],i.count=0,i}return r.b(e,t),e.prototype._next=function(t){var e=this.bufferSize,n=this.startBufferEvery,r=this.buffers,i=this.count;this.count++,i%n==0&&r.push([]);for(var o=r.length;o--;){var u=r[o];u.push(t),u.length===e&&(r.splice(o,1),this.destination.next(u))}},e.prototype._complete=function(){for(var e=this.buffers,n=this.destination;e.length>0;){var r=e.shift();r.length>0&&n.next(r)}t.prototype._complete.call(this)},e}(i.a)},function(t,e,n){"use strict";var r=n(14),i=n(32);function o(t){return function e(n,o){switch(arguments.length){case 0:return e;case 1:return Object(i.a)(n)?e:Object(r.a)((function(e){return t(n,e)}));default:return Object(i.a)(n)&&Object(i.a)(o)?e:Object(i.a)(n)?Object(r.a)((function(e){return t(e,o)})):Object(i.a)(o)?Object(r.a)((function(e){return t(n,e)})):t(n,o)}}}var u=Array.isArray||function(t){return null!=t&&t.length>=0&&"[object Array]"===Object.prototype.toString.call(t)};function s(t){return null!=t&&"function"==typeof t["@@transducer/step"]}function c(t,e,n){return function(){if(0===arguments.length)return n();var r=Array.prototype.slice.call(arguments,0),i=r.pop();if(!u(i)){for(var o=0;o=0;){if(t(e[n]))return e[n];n-=1}})));e.a=l},function(t,e,n){"use strict";var r=n(0),i=n(25),o=function(t){function e(e,n){var r=t.call(this,e,n)||this;return r.scheduler=e,r.work=n,r}return r.b(e,t),e.prototype.schedule=function(e,n){return void 0===n&&(n=0),n>0?t.prototype.schedule.call(this,e,n):(this.delay=n,this.state=e,this.scheduler.flush(this),this)},e.prototype.execute=function(e,n){return n>0||this.closed?t.prototype.execute.call(this,e,n):this._execute(e,n)},e.prototype.requestAsyncId=function(e,n,r){return void 0===r&&(r=0),null!==r&&r>0||null===r&&this.delay>0?t.prototype.requestAsyncId.call(this,e,n,r):e.flush(this)},e}(n(43).a),u=new(function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return r.b(e,t),e}(n(42).a))(o),s=n(9),c=n(46),a=n(19),f=n(51),l=function(t){function e(e,n,r){void 0===e&&(e=Number.POSITIVE_INFINITY),void 0===n&&(n=Number.POSITIVE_INFINITY);var i=t.call(this)||this;return i.scheduler=r,i._events=[],i._infiniteTimeWindow=!1,i._bufferSize=e<1?1:e,i._windowTime=n<1?1:n,n===Number.POSITIVE_INFINITY?(i._infiniteTimeWindow=!0,i.next=i.nextInfiniteTimeWindow):i.next=i.nextTimeWindow,i}return r.b(e,t),e.prototype.nextInfiniteTimeWindow=function(e){var n=this._events;n.push(e),n.length>this._bufferSize&&n.shift(),t.prototype.next.call(this,e)},e.prototype.nextTimeWindow=function(e){this._events.push(new h(this._getNow(),e)),this._trimBufferThenGetEvents(),t.prototype.next.call(this,e)},e.prototype._subscribe=function(t){var e,n=this._infiniteTimeWindow,r=n?this._events:this._trimBufferThenGetEvents(),i=this.scheduler,o=r.length;if(this.closed)throw new a.a;if(this.isStopped||this.hasError?e=s.a.EMPTY:(this.observers.push(t),e=new f.a(this,t)),i&&t.add(t=new c.a(t,i)),n)for(var u=0;ue&&(o=Math.max(o,i-e)),o>0&&r.splice(0,o),r},e}(i.a),h=function(){return function(t,e){this.time=t,this.value=e}}();function p(t,e,n){var r;return r=t&&"object"==typeof t?t:{bufferSize:t,windowTime:e,refCount:!1,scheduler:n},function(t){return t.lift(function(t){var e,n,r=t.bufferSize,i=void 0===r?Number.POSITIVE_INFINITY:r,o=t.windowTime,u=void 0===o?Number.POSITIVE_INFINITY:o,s=t.refCount,c=t.scheduler,a=0,f=!1,h=!1;return function(t){a++,e&&!f||(f=!1,e=new l(i,u,c),n=t.subscribe({next:function(t){e.next(t)},error:function(t){f=!0,e.error(t)},complete:function(){h=!0,e.complete()}}));var r=e.subscribe(this);this.add((function(){a--,r.unsubscribe(),n&&!h&&s&&0===a&&(n.unsubscribe(),n=void 0,e=void 0)}))}}(r))}}n.d(e,"a",(function(){return p}))},function(t,e,n){"use strict";var r=n(45),i=n(57);function o(){for(var t=[],e=0;e0&&n[0].time-r.now()<=0;)n.shift().notification.observe(i);if(n.length>0){var o=Math.max(0,n[0].time-r.now());this.schedule(t,o)}else this.unsubscribe(),e.active=!1},e.prototype._schedule=function(t){this.active=!0,this.destination.add(t.schedule(e.dispatch,this.delay,{source:this,destination:this.destination,scheduler:t}))},e.prototype.scheduleNotification=function(t){if(!0!==this.errored){var e=this.scheduler,n=new f(e.now()+this.delay,t);this.queue.push(n),!1===this.active&&this._schedule(e)}},e.prototype._next=function(t){this.scheduleNotification(u.a.createNext(t))},e.prototype._error=function(t){this.errored=!0,this.queue=[],this.destination.error(t),this.unsubscribe()},e.prototype._complete=function(){this.scheduleNotification(u.a.createComplete()),this.unsubscribe()},e}(o.a),f=function(){return function(t,e){this.time=t,this.notification=e}}()},function(t,e,n){"use strict";var r=n(14);var i=Object(r.a)((function(t){return e=t,"[object String]"===Object.prototype.toString.call(e)?t.split("").reverse().join(""):Array.prototype.slice.call(t,0).reverse();var e}));e.a=i},function(t,e,n){"use strict";n.d(e,"a",(function(){return u}));var r=n(0),i=n(25),o=n(19),u=function(t){function e(e){var n=t.call(this)||this;return n._value=e,n}return r.b(e,t),Object.defineProperty(e.prototype,"value",{get:function(){return this.getValue()},enumerable:!0,configurable:!0}),e.prototype._subscribe=function(e){var n=t.prototype._subscribe.call(this,e);return n&&!n.closed&&e.next(this._value),n},e.prototype.getValue=function(){if(this.hasError)throw this.thrownError;if(this.closed)throw new o.a;return this._value},e.prototype.next=function(e){t.prototype.next.call(this,this._value=e)},e}(i.a)},function(t,e,n){"use strict";n.d(e,"a",(function(){return o}));var r=n(0),i=n(3);function o(t,e){return function(n){return n.lift(new u(t,e))}}var u=function(){function t(t,e){this.predicate=t,this.thisArg=e}return t.prototype.call=function(t,e){return e.subscribe(new s(t,this.predicate,this.thisArg))},t}(),s=function(t){function e(e,n,r){var i=t.call(this,e)||this;return i.predicate=n,i.thisArg=r,i.count=0,i}return r.b(e,t),e.prototype._next=function(t){var e;try{e=this.predicate.call(this.thisArg,t,this.count++)}catch(t){return void this.destination.error(t)}e&&this.destination.next(t)},e}(i.a)},function(t,e,n){"use strict";n.d(e,"a",(function(){return o}));var r=n(0),i=n(3);function o(t){return function(e){return e.lift(new u(t))}}var u=function(){function t(t){this.total=t}return t.prototype.call=function(t,e){return e.subscribe(new s(t,this.total))},t}(),s=function(t){function e(e,n){var r=t.call(this,e)||this;return r.total=n,r.count=0,r}return r.b(e,t),e.prototype._next=function(t){++this.count>this.total&&this.destination.next(t)},e}(i.a)},function(t,e,n){"use strict";n.d(e,"a",(function(){return i}));var r=n(8);function i(){for(var t=[],e=0;e1)this.connection=null;else{var n=this.connection,r=t._connection;this.connection=null,!r||n&&r!==n||r.unsubscribe()}}else this.connection=null},e}(u.a),l=function(t){function e(e,n){var r=t.call(this)||this;return r.source=e,r.subjectFactory=n,r._refCount=0,r._isComplete=!1,r}return r.b(e,t),e.prototype._subscribe=function(t){return this.getSubject().subscribe(t)},e.prototype.getSubject=function(){var t=this._subject;return t&&!t.isStopped||(this._subject=this.subjectFactory()),this._subject},e.prototype.connect=function(){var t=this._connection;return t||(this._isComplete=!1,(t=this._connection=new s.a).add(this.source.subscribe(new p(this.getSubject(),this))),t.closed&&(this._connection=null,t=s.a.EMPTY)),t},e.prototype.refCount=function(){return c()(this)},e}(o.a),h=function(){var t=l.prototype;return{operator:{value:null},_refCount:{value:0,writable:!0},_subject:{value:null,writable:!0},_connection:{value:null,writable:!0},_subscribe:{value:t._subscribe},_isComplete:{value:t._isComplete,writable:!0},getSubject:{value:t.getSubject},connect:{value:t.connect},refCount:{value:t.refCount}}}(),p=function(t){function e(e,n){var r=t.call(this,e)||this;return r.connectable=n,r}return r.b(e,t),e.prototype._error=function(e){this._unsubscribe(),t.prototype._error.call(this,e)},e.prototype._complete=function(){this.connectable._isComplete=!0,this._unsubscribe(),t.prototype._complete.call(this)},e.prototype._unsubscribe=function(){var t=this.connectable;if(t){this.connectable=null;var e=t._connection;t._refCount=0,t._subject=null,t._connection=null,e&&e.unsubscribe()}},e}(i.b);u.a;var d=function(){function t(t,e){this.subjectFactory=t,this.selector=e}return t.prototype.call=function(t,e){var n=this.selector,r=this.subjectFactory(),i=n(r).subscribe(t);return i.add(e.subscribe(r)),i},t}();function b(){return new i.a}function y(){return function(t){return c()((e=b,function(t){var r;if(r="function"==typeof e?e:function(){return e},"function"==typeof n)return t.lift(new d(r,n));var i=Object.create(t,h);return i.source=t,i.subjectFactory=r,i})(t));var e,n}}n.d(e,"a",(function(){return y}))},function(t,e,n){"use strict";var r=n(0),i=n(3),o=function(){function t(){return Error.call(this),this.message="argument out of range",this.name="ArgumentOutOfRangeError",this}return t.prototype=Object.create(Error.prototype),t}(),u=n(18);function s(t){return function(e){return 0===t?Object(u.b)():e.lift(new c(t))}}n.d(e,"a",(function(){return s}));var c=function(){function t(t){if(this.total=t,this.total<0)throw new o}return t.prototype.call=function(t,e){return e.subscribe(new a(t,this.total))},t}(),a=function(t){function e(e,n){var r=t.call(this,e)||this;return r.total=n,r.count=0,r}return r.b(e,t),e.prototype._next=function(t){var e=this.total,n=++this.count;n<=e&&(this.destination.next(t),n===e&&(this.destination.complete(),this.unsubscribe()))},e}(i.a)},function(t,e,n){"use strict";var r=n(14);function i(t){return t}var o=Object(r.a)(i);e.a=o},function(t,e,n){"use strict";var r=n(0),i=n(13),o=n(6),u=n(3),s=n(8);function c(t,e){return void 0===e&&(e=null),new b({method:"GET",url:t,headers:e})}function a(t,e,n){return new b({method:"POST",url:t,body:e,headers:n})}function f(t,e){return new b({method:"DELETE",url:t,headers:e})}function l(t,e,n){return new b({method:"PUT",url:t,body:e,headers:n})}function h(t,e,n){return new b({method:"PATCH",url:t,body:e,headers:n})}var p=Object(s.a)((function(t,e){return t.response}));function d(t,e){return p(new b({method:"GET",url:t,responseType:"json",headers:e}))}var b=function(t){function e(e){var n=t.call(this)||this,r={async:!0,createXHR:function(){return this.crossDomain?function(){if(i.a.XMLHttpRequest)return new i.a.XMLHttpRequest;if(i.a.XDomainRequest)return new i.a.XDomainRequest;throw new Error("CORS is not supported by your browser")}():function(){if(i.a.XMLHttpRequest)return new i.a.XMLHttpRequest;var t=void 0;try{for(var e=["Msxml2.XMLHTTP","Microsoft.XMLHTTP","Msxml2.XMLHTTP.4.0"],n=0;n<3;n++)try{if(t=e[n],new i.a.ActiveXObject(t))break}catch(t){}return new i.a.ActiveXObject(t)}catch(t){throw new Error("XMLHttpRequest is not supported by your browser")}}()},crossDomain:!0,withCredentials:!1,headers:{},method:"GET",responseType:"json",timeout:0};if("string"==typeof e)r.url=e;else for(var o in e)e.hasOwnProperty(o)&&(r[o]=e[o]);return n.request=r,n}var n;return r.b(e,t),e.prototype._subscribe=function(t){return new y(t,this.request)},e.create=((n=function(t){return new e(t)}).get=c,n.post=a,n.delete=f,n.put=l,n.patch=h,n.getJSON=d,n),e}(o.a),y=function(t){function e(e,n){var r=t.call(this,e)||this;r.request=n,r.done=!1;var o=n.headers=n.headers||{};return n.crossDomain||r.getHeader(o,"X-Requested-With")||(o["X-Requested-With"]="XMLHttpRequest"),r.getHeader(o,"Content-Type")||i.a.FormData&&n.body instanceof i.a.FormData||void 0===n.body||(o["Content-Type"]="application/x-www-form-urlencoded; charset=UTF-8"),n.body=r.serializeBody(n.body,r.getHeader(n.headers,"Content-Type")),r.send(),r}return r.b(e,t),e.prototype.next=function(t){this.done=!0;var e,n=this.xhr,r=this.request,i=this.destination;try{e=new v(t,n,r)}catch(t){return i.error(t)}i.next(e)},e.prototype.send=function(){var t=this.request,e=this.request,n=e.user,r=e.method,i=e.url,o=e.async,u=e.password,s=e.headers,c=e.body;try{var a=this.xhr=t.createXHR();this.setupEvents(a,t),n?a.open(r,i,o,n,u):a.open(r,i,o),o&&(a.timeout=t.timeout,a.responseType=t.responseType),"withCredentials"in a&&(a.withCredentials=!!t.withCredentials),this.setHeaders(a,s),c?a.send(c):a.send()}catch(t){this.error(t)}},e.prototype.serializeBody=function(t,e){if(!t||"string"==typeof t)return t;if(i.a.FormData&&t instanceof i.a.FormData)return t;if(e){var n=e.indexOf(";");-1!==n&&(e=e.substring(0,n))}switch(e){case"application/x-www-form-urlencoded":return Object.keys(t).map((function(e){return encodeURIComponent(e)+"="+encodeURIComponent(t[e])})).join("&");case"application/json":return JSON.stringify(t);default:return t}},e.prototype.setHeaders=function(t,e){for(var n in e)e.hasOwnProperty(n)&&t.setRequestHeader(n,e[n])},e.prototype.getHeader=function(t,e){for(var n in t)if(n.toLowerCase()===e.toLowerCase())return t[n]},e.prototype.setupEvents=function(t,e){var n=e.progressSubscriber;function r(t){var e,n=r,i=n.subscriber,o=n.progressSubscriber,u=n.request;o&&o.error(t);try{e=new g(this,u)}catch(t){e=t}i.error(e)}if(t.ontimeout=r,r.request=e,r.subscriber=this,r.progressSubscriber=n,t.upload&&"withCredentials"in t){var o,u;if(n)o=function(t){o.progressSubscriber.next(t)},i.a.XDomainRequest?t.onprogress=o:t.upload.onprogress=o,o.progressSubscriber=n;u=function(t){var e,n=u,r=n.progressSubscriber,i=n.subscriber,o=n.request;r&&r.error(t);try{e=new m("ajax error",this,o)}catch(t){e=t}i.error(e)},t.onerror=u,u.request=e,u.subscriber=this,u.progressSubscriber=n}function s(t){}function c(t){var e=c,n=e.subscriber,r=e.progressSubscriber,i=e.request;if(4===this.readyState){var o=1223===this.status?204:this.status,u="text"===this.responseType?this.response||this.responseText:this.response;if(0===o&&(o=u?200:0),o<400)r&&r.complete(),n.next(t),n.complete();else{r&&r.error(t);var s=void 0;try{s=new m("ajax error "+o,this,i)}catch(t){s=t}n.error(s)}}}t.onreadystatechange=s,s.subscriber=this,s.progressSubscriber=n,s.request=e,t.onload=c,c.subscriber=this,c.progressSubscriber=n,c.request=e},e.prototype.unsubscribe=function(){var e=this.done,n=this.xhr;!e&&n&&4!==n.readyState&&"function"==typeof n.abort&&n.abort(),t.prototype.unsubscribe.call(this)},e}(u.a),v=function(){return function(t,e,n){this.originalEvent=t,this.xhr=e,this.request=n,this.status=e.status,this.responseType=e.responseType||n.responseType,this.response=w(this.responseType,e)}}(),m=function(){function t(t,e,n){return Error.call(this),this.message=t,this.name="AjaxError",this.xhr=e,this.request=n,this.status=e.status,this.responseType=e.responseType||n.responseType,this.response=w(this.responseType,e),this}return t.prototype=Object.create(Error.prototype),t}();function w(t,e){switch(t){case"json":return function(t){return"response"in t?t.responseType?t.response:JSON.parse(t.response||t.responseText||"null"):JSON.parse(t.responseText||"null")}(e);case"xml":return e.responseXML;case"text":default:return"response"in e?e.response:e.responseText}}var g=function(t,e){return m.call(this,"ajax timeout",t,e),this.name="AjaxTimeoutError",this};n.d(e,"a",(function(){return _}));var _=function(){return b.create}()}]]); +//# sourceMappingURL=vendor.31a2e7b9.min.js.map \ No newline at end of file diff --git a/material/assets/javascripts/vendor.31a2e7b9.min.js.map b/material/assets/javascripts/vendor.31a2e7b9.min.js.map new file mode 100644 index 000000000..b3eb66a8a --- /dev/null +++ b/material/assets/javascripts/vendor.31a2e7b9.min.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///./node_modules/tslib/tslib.es6.js","webpack:///./node_modules/rxjs/_esm5/internal/Subscriber.js","webpack:///./node_modules/rxjs/_esm5/internal/Observable.js","webpack:///./node_modules/rxjs/_esm5/internal/util/toSubscriber.js","webpack:///./node_modules/rxjs/_esm5/internal/util/canReportError.js","webpack:///./node_modules/rxjs/_esm5/internal/operators/map.js","webpack:///./node_modules/rxjs/_esm5/internal/util/UnsubscriptionError.js","webpack:///./node_modules/rxjs/_esm5/internal/Subscription.js","webpack:///./node_modules/rxjs/_esm5/internal/util/subscribeToResult.js","webpack:///./node_modules/rxjs/_esm5/internal/OuterSubscriber.js","webpack:///./node_modules/rxjs/_esm5/internal/config.js","webpack:///./node_modules/rxjs/_esm5/internal/util/root.js","webpack:///./node_modules/ramda/es/internal/_curry1.js","webpack:///./node_modules/rxjs/_esm5/internal/util/noop.js","webpack:///./node_modules/rxjs/_esm5/internal/util/isFunction.js","webpack:///./node_modules/rxjs/_esm5/internal/symbol/observable.js","webpack:///./node_modules/rxjs/_esm5/internal/observable/empty.js","webpack:///./node_modules/rxjs/_esm5/internal/util/ObjectUnsubscribedError.js","webpack:///./node_modules/rxjs/_esm5/internal/util/hostReportError.js","webpack:///./node_modules/rxjs/_esm5/internal/operators/switchMap.js","webpack:///./node_modules/rxjs/_esm5/internal/Subject.js","webpack:///./node_modules/rxjs/_esm5/internal/util/isArray.js","webpack:///./node_modules/rxjs/_esm5/internal/util/isScheduler.js","webpack:///./node_modules/rxjs/_esm5/internal/symbol/iterator.js","webpack:///./node_modules/rxjs/_esm5/internal/InnerSubscriber.js","webpack:///./node_modules/ramda/es/internal/_isPlaceholder.js","webpack:///./node_modules/rxjs/_esm5/internal/symbol/rxSubscriber.js","webpack:///./node_modules/rxjs/_esm5/internal/Notification.js","webpack:///./node_modules/rxjs/_esm5/internal/observable/throwError.js","webpack:///./node_modules/rxjs/_esm5/internal/util/pipe.js","webpack:///./node_modules/rxjs/_esm5/internal/operators/distinctUntilChanged.js","webpack:///./node_modules/rxjs/_esm5/internal/scheduled/scheduleArray.js","webpack:///./node_modules/rxjs/_esm5/internal/observable/fromArray.js","webpack:///./node_modules/rxjs/_esm5/internal/scheduled/scheduled.js","webpack:///./node_modules/rxjs/_esm5/internal/util/isInteropObservable.js","webpack:///./node_modules/rxjs/_esm5/internal/scheduled/scheduleObservable.js","webpack:///./node_modules/rxjs/_esm5/internal/scheduled/schedulePromise.js","webpack:///./node_modules/rxjs/_esm5/internal/util/isIterable.js","webpack:///./node_modules/rxjs/_esm5/internal/scheduled/scheduleIterable.js","webpack:///./node_modules/rxjs/_esm5/internal/observable/from.js","webpack:///./node_modules/rxjs/_esm5/internal/Scheduler.js","webpack:///./node_modules/rxjs/_esm5/internal/scheduler/AsyncScheduler.js","webpack:///./node_modules/rxjs/_esm5/internal/scheduler/Action.js","webpack:///./node_modules/rxjs/_esm5/internal/scheduler/AsyncAction.js","webpack:///./node_modules/rxjs/_esm5/internal/Observer.js","webpack:///./node_modules/rxjs/_esm5/internal/observable/of.js","webpack:///./node_modules/rxjs/_esm5/internal/operators/observeOn.js","webpack:///./node_modules/rxjs/_esm5/internal/util/isObject.js","webpack:///./node_modules/rxjs/_esm5/internal/SubjectSubscription.js","webpack:///./node_modules/rxjs/_esm5/internal/util/isArrayLike.js","webpack:///./node_modules/rxjs/_esm5/internal/util/subscribeToArray.js","webpack:///./node_modules/rxjs/_esm5/internal/util/isPromise.js","webpack:///./node_modules/rxjs/_esm5/internal/scheduler/async.js","webpack:///./node_modules/rxjs/_esm5/internal/util/subscribeTo.js","webpack:///./node_modules/rxjs/_esm5/internal/util/subscribeToObservable.js","webpack:///./node_modules/rxjs/_esm5/internal/util/subscribeToPromise.js","webpack:///./node_modules/rxjs/_esm5/internal/util/subscribeToIterable.js","webpack:///./node_modules/rxjs/_esm5/internal/operators/mergeMap.js","webpack:///./node_modules/rxjs/_esm5/internal/util/identity.js","webpack:///./node_modules/rxjs/_esm5/internal/operators/mergeAll.js","webpack:///./node_modules/rxjs/_esm5/internal/operators/tap.js","webpack:///./node_modules/rxjs/_esm5/internal/scheduler/AnimationFrameAction.js","webpack:///./node_modules/rxjs/_esm5/internal/scheduler/AnimationFrameScheduler.js","webpack:///./node_modules/rxjs/_esm5/internal/scheduler/animationFrame.js","webpack:///./node_modules/clipboard/dist/clipboard.js","webpack:///./node_modules/rxjs/_esm5/internal/observable/combineLatest.js","webpack:///./node_modules/rxjs/_esm5/internal/operators/withLatestFrom.js","webpack:///./node_modules/rxjs/_esm5/internal/operators/scan.js","webpack:///./node_modules/rxjs/_esm5/internal/operators/finalize.js","webpack:///./node_modules/rxjs/_esm5/internal/observable/defer.js","webpack:///./node_modules/ramda/es/internal/_has.js","webpack:///./node_modules/ramda/es/internal/_isArguments.js","webpack:///./node_modules/ramda/es/keys.js","webpack:///./node_modules/rxjs/_esm5/internal/operators/distinctUntilKeyChanged.js","webpack:///(webpack)/buildin/global.js","webpack:///./node_modules/rxjs/_esm5/internal/observable/fromEvent.js","webpack:///./node_modules/rxjs/_esm5/internal/observable/merge.js","webpack:///./node_modules/rxjs/_esm5/internal/operators/bufferCount.js","webpack:///./node_modules/ramda/es/internal/_curry2.js","webpack:///./node_modules/ramda/es/internal/_isArray.js","webpack:///./node_modules/ramda/es/internal/_isTransformer.js","webpack:///./node_modules/ramda/es/internal/_dispatchable.js","webpack:///./node_modules/ramda/es/internal/_xfBase.js","webpack:///./node_modules/ramda/es/internal/_xfindLast.js","webpack:///./node_modules/ramda/es/findLast.js","webpack:///./node_modules/rxjs/_esm5/internal/scheduler/QueueAction.js","webpack:///./node_modules/rxjs/_esm5/internal/scheduler/queue.js","webpack:///./node_modules/rxjs/_esm5/internal/scheduler/QueueScheduler.js","webpack:///./node_modules/rxjs/_esm5/internal/ReplaySubject.js","webpack:///./node_modules/rxjs/_esm5/internal/operators/shareReplay.js","webpack:///./node_modules/rxjs/_esm5/internal/observable/concat.js","webpack:///./node_modules/rxjs/_esm5/internal/operators/concatAll.js","webpack:///./node_modules/rxjs/_esm5/internal/operators/startWith.js","webpack:///./node_modules/rxjs/_esm5/internal/operators/delay.js","webpack:///./node_modules/rxjs/_esm5/internal/util/isDate.js","webpack:///./node_modules/ramda/es/reverse.js","webpack:///./node_modules/ramda/es/internal/_isString.js","webpack:///./node_modules/rxjs/_esm5/internal/BehaviorSubject.js","webpack:///./node_modules/rxjs/_esm5/internal/operators/filter.js","webpack:///./node_modules/rxjs/_esm5/internal/operators/skip.js","webpack:///./node_modules/rxjs/_esm5/internal/operators/pluck.js","webpack:///./node_modules/rxjs/_esm5/internal/operators/catchError.js","webpack:///./node_modules/rxjs/_esm5/internal/observable/never.js","webpack:///./node_modules/rxjs/_esm5/internal/operators/mapTo.js","webpack:///./node_modules/rxjs/_esm5/internal/observable/fromEventPattern.js","webpack:///./node_modules/rxjs/_esm5/internal/operators/throttle.js","webpack:///./node_modules/rxjs/_esm5/internal/operators/switchMapTo.js","webpack:///./node_modules/rxjs/_esm5/internal/operators/debounceTime.js","webpack:///./node_modules/rxjs/_esm5/internal/operators/sample.js","webpack:///./node_modules/rxjs/_esm5/internal/observable/iif.js","webpack:///./node_modules/ramda/es/values.js","webpack:///./node_modules/rxjs/_esm5/internal/operators/refCount.js","webpack:///./node_modules/rxjs/_esm5/internal/observable/ConnectableObservable.js","webpack:///./node_modules/rxjs/_esm5/internal/operators/multicast.js","webpack:///./node_modules/rxjs/_esm5/internal/operators/share.js","webpack:///./node_modules/rxjs/_esm5/internal/util/ArgumentOutOfRangeError.js","webpack:///./node_modules/rxjs/_esm5/internal/operators/take.js","webpack:///./node_modules/ramda/es/internal/_identity.js","webpack:///./node_modules/ramda/es/identity.js","webpack:///./node_modules/rxjs/_esm5/internal/observable/dom/AjaxObservable.js","webpack:///./node_modules/rxjs/_esm5/internal/observable/dom/ajax.js"],"names":["extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__extends","__","this","constructor","prototype","create","__assign","assign","t","s","i","n","arguments","length","call","apply","__rest","e","indexOf","getOwnPropertySymbols","propertyIsEnumerable","__values","o","m","Symbol","iterator","next","value","done","__read","r","ar","push","error","__spread","concat","Subscriber","_super","destinationOrNext","complete","_this","syncErrorValue","syncErrorThrown","syncErrorThrowable","isStopped","destination","add","SafeSubscriber","subscriber","_next","err","_error","_complete","unsubscribe","closed","_unsubscribeAndRecycle","_parentOrParents","_parentSubscriber","observerOrNext","context","bind","_context","useDeprecatedSynchronousErrorHandling","__tryOrSetError","__tryOrUnsub","wrappedComplete","fn","parent","Error","_unsubscribe","Observable","subscribe","_isScalar","_subscribe","lift","operator","observable","source","sink","nextOrObserver","rxSubscriber","toSubscriber","config","_trySubscribe","observer","_a","closed_1","canReportError","console","warn","forEach","promiseCtor","getPromiseCtor","resolve","reject","subscription","pipe","operations","_i","toPromise","x","Promise","map","project","thisArg","TypeError","MapOperator","MapSubscriber","count","result","UnsubscriptionError","UnsubscriptionErrorImpl","errors","message","toString","join","name","Subscription","_subscriptions","empty","remove","index","isFunction","flattenUnsubscriptionErrors","isArray","len","sub","isObject","teardown","EMPTY","tmp","subscriptions","subscriptionIndex","splice","reduce","errs","subscribeToResult","outerSubscriber","outerValue","outerIndex","OuterSubscriber","notifyNext","innerValue","innerIndex","innerSub","notifyError","notifyComplete","_enable_super_gross_mode_that_will_cause_bad_things","undefined","stack","__window","window","__self","self","WorkerGlobalScope","_root","global","_curry1","f1","a","noop","scheduler","schedule","emptyScheduled","ObjectUnsubscribedError","ObjectUnsubscribedErrorImpl","hostReportError","setTimeout","switchMap","resultSelector","ii","SwitchMapOperator","SwitchMapSubscriber","_innerSub","innerSubscription","innerSubscriber","SubjectSubscriber","Subject","observers","hasError","thrownError","subject","AnonymousSubject","copy","slice","asObservable","isScheduler","getSymbolIterator","InnerSubscriber","_isPlaceholder","Math","random","NotificationKind","dispatch","Notification","kind","hasValue","observe","do","accept","toObservable","of","createNext","undefinedValueNotification","createError","createComplete","completeNotification","fns","pipeFromArray","input","prev","distinctUntilChanged","compare","keySelector","DistinctUntilChangedOperator","DistinctUntilChangedSubscriber","hasKey","y","key","scheduleArray","fromArray","scheduled","isInteropObservable","scheduleObservable","isPromise","then","schedulePromise","isArrayLike","isIterable","return","scheduleIterable","from","subscribeTo","Scheduler","SchedulerAction","now","work","delay","state","Date","AsyncScheduler","delegate","actions","active","flush","action","execute","shift","Action","AsyncAction","pending","id","recycleAsyncId","requestAsyncId","setInterval","clearInterval","_execute","errored","errorValue","args","pop","observeOn","ObserveOnOperator","ObserveOnSubscriber","arg","notification","scheduleMessage","ObserveOnMessage","SubjectSubscription","subscriberIndex","subscribeToArray","array","async","obj","obs","promise","iterable","item","MergeMapOperator","concurrent","Number","POSITIVE_INFINITY","MergeMapSubscriber","hasCompleted","buffer","_tryNext","ish","identity","mergeAll","mergeMap","tap","DoOperator","TapSubscriber","_tapNext","_tapError","_tapComplete","AnimationFrameAction","requestAnimationFrame","cancelAnimationFrame","AnimationFrameScheduler","animationFrame","factory","modules","installedModules","__webpack_require__","moduleId","exports","module","l","c","getter","defineProperty","enumerable","get","toStringTag","mode","__esModule","ns","object","property","_typeof","_createClass","defineProperties","target","props","descriptor","configurable","writable","Constructor","protoProps","staticProps","_clipboardAction2","_interopRequireDefault","_tinyEmitter2","_goodListener2","default","Clipboard","_Emitter","trigger","options","instance","_classCallCheck","ReferenceError","_possibleConstructorReturn","getPrototypeOf","resolveOptions","listenClick","subClass","superClass","_inherits","defaultAction","defaultTarget","text","defaultText","container","document","body","_this2","listener","onClick","delegateTarget","currentTarget","clipboardAction","emitter","getAttributeValue","selector","querySelector","destroy","support","queryCommandSupported","suffix","element","attribute","hasAttribute","getAttribute","_select","_select2","ClipboardAction","initSelection","selectedText","selectFake","selectTarget","isRTL","documentElement","removeFake","fakeHandlerCallback","fakeHandler","addEventListener","fakeElem","createElement","style","fontSize","border","padding","margin","position","yPosition","pageYOffset","scrollTop","top","setAttribute","appendChild","copyText","removeEventListener","removeChild","succeeded","execCommand","handleResult","emit","clearSelection","focus","getSelection","removeAllRanges","set","_action","nodeType","_target","nodeName","isReadOnly","select","setSelectionRange","removeAttribute","selection","range","createRange","selectNodeContents","addRange","E","on","callback","ctx","once","off","_","data","evtArr","evts","liveEvents","is","type","string","node","listenNode","nodeList","listenNodeList","listenSelector","HTMLElement","String","closest","_delegate","useCapture","listenerFn","elements","querySelectorAll","DOCUMENT_NODE_TYPE","Element","matches","proto","matchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","webkitMatchesSelector","parentNode","NONE","combineLatest","observables","CombineLatestOperator","CombineLatestSubscriber","values","toRespond","unused","oldVal","_tryResultSelector","withLatestFrom","WithLatestFromOperator","WithLatestFromSubscriber","found","_tryProject","scan","accumulator","seed","hasSeed","ScanOperator","ScanSubscriber","_seed","finalize","FinallyOperator","FinallySubscriber","defer","observableFactory","_has","prop","hasEnumBug","nonEnumerableProps","hasArgsEnumBug","contains","list","idx","keys","nIdx","ks","checkArgsLength","distinctUntilKeyChanged","g","Function","fromEvent","eventName","setupSubscription","sourceObj","handler","isEventTarget","source_1","isJQueryStyleEventEmitter","source_2","addListener","removeListener","isNodeStyleEventEmitter","source_3","merge","last","bufferCount","bufferSize","startBufferEvery","BufferCountOperator","subscriberClass","BufferSkipCountSubscriber","BufferCountSubscriber","buffers","_curry2","f2","_b","val","_isTransformer","_dispatchable","methodNames","xf","_isArray","transducer","XFindLast","f","_xfBase","findLast","QueueAction","queue","QueueScheduler","ReplaySubject","windowTime","_events","_infiniteTimeWindow","_bufferSize","_windowTime","nextInfiniteTimeWindow","nextTimeWindow","ReplayEvent","_getNow","_trimBufferThenGetEvents","eventsCount","spliceCount","time","max","shareReplay","configOrBufferSize","refCount","_c","useRefCount","isComplete","shareReplayOperator","concatAll","startWith","delayFor","isNaN","abs","DelayOperator","DelaySubscriber","delay_1","_schedule","scheduleNotification","DelayMessage","split","reverse","BehaviorSubject","_value","getValue","filter","predicate","FilterOperator","FilterSubscriber","skip","SkipOperator","total","SkipSubscriber","pluck","properties","currentProp","plucker","catchError","CatchOperator","caught","CatchSubscriber","err2","NEVER","mapTo","MapToOperator","MapToSubscriber","fromEventPattern","addHandler","removeHandler","retValue","defaultThrottleConfig","leading","trailing","throttle","durationSelector","ThrottleOperator","ThrottleSubscriber","_leading","_trailing","_hasValue","_sendValue","_throttled","send","duration","tryDurationSelector","throttlingDone","switchMapTo","innerObservable","debounceTime","dueTime","DebounceTimeOperator","DebounceTimeSubscriber","debouncedSubscription","lastValue","clearDebounce","dispatchNext","debouncedNext","sample","notifier","SampleOperator","sampleSubscriber","SampleSubscriber","emitValue","iif","condition","trueResult","falseResult","vals","RefCountOperator","connectable","_refCount","refCounter","connection","connect","RefCountSubscriber","sharedConnection","_connection","ConnectableObservable","subjectFactory","_isComplete","getSubject","_subject","connectableObservableDescriptor","connectableProto","ConnectableSubscriber","MulticastOperator","shareSubjectFactory","share","subjectOrSubjectFactory","ArgumentOutOfRangeError","ArgumentOutOfRangeErrorImpl","take","TakeOperator","TakeSubscriber","_identity","ajaxGet","url","headers","method","ajaxPost","ajaxDelete","ajaxPut","ajaxPatch","mapResponse","response","ajaxGetJSON","responseType","AjaxObservable","urlOrRequest","request","createXHR","crossDomain","root","XMLHttpRequest","XDomainRequest","getCORSRequest","progId","progIds","ActiveXObject","getXMLHttpRequest","withCredentials","timeout","post","delete","put","patch","getJSON","AjaxSubscriber","getHeader","FormData","serializeBody","xhr","AjaxResponse","user","password","setupEvents","open","setHeaders","contentType","splitIndex","substring","encodeURIComponent","JSON","stringify","setRequestHeader","headerName","toLowerCase","progressSubscriber","xhrTimeout","AjaxTimeoutError","ontimeout","upload","xhrProgress_1","xhrError_1","onprogress","AjaxError","onerror","xhrReadyStateChange","xhrLoad","readyState","status_1","status","responseText","onreadystatechange","onload","abort","originalEvent","parseXhrResponse","AjaxErrorImpl","parse","parseJson","responseXML","ajax"],"mappings":"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","file":"assets/javascripts/vendor.31a2e7b9.min.js","sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n","/** PURE_IMPORTS_START tslib,_util_isFunction,_Observer,_Subscription,_internal_symbol_rxSubscriber,_config,_util_hostReportError PURE_IMPORTS_END */\nimport * as tslib_1 from \"tslib\";\nimport { isFunction } from './util/isFunction';\nimport { empty as emptyObserver } from './Observer';\nimport { Subscription } from './Subscription';\nimport { rxSubscriber as rxSubscriberSymbol } from '../internal/symbol/rxSubscriber';\nimport { config } from './config';\nimport { hostReportError } from './util/hostReportError';\nvar Subscriber = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(Subscriber, _super);\n function Subscriber(destinationOrNext, error, complete) {\n var _this = _super.call(this) || this;\n _this.syncErrorValue = null;\n _this.syncErrorThrown = false;\n _this.syncErrorThrowable = false;\n _this.isStopped = false;\n switch (arguments.length) {\n case 0:\n _this.destination = emptyObserver;\n break;\n case 1:\n if (!destinationOrNext) {\n _this.destination = emptyObserver;\n break;\n }\n if (typeof destinationOrNext === 'object') {\n if (destinationOrNext instanceof Subscriber) {\n _this.syncErrorThrowable = destinationOrNext.syncErrorThrowable;\n _this.destination = destinationOrNext;\n destinationOrNext.add(_this);\n }\n else {\n _this.syncErrorThrowable = true;\n _this.destination = new SafeSubscriber(_this, destinationOrNext);\n }\n break;\n }\n default:\n _this.syncErrorThrowable = true;\n _this.destination = new SafeSubscriber(_this, destinationOrNext, error, complete);\n break;\n }\n return _this;\n }\n Subscriber.prototype[rxSubscriberSymbol] = function () { return this; };\n Subscriber.create = function (next, error, complete) {\n var subscriber = new Subscriber(next, error, complete);\n subscriber.syncErrorThrowable = false;\n return subscriber;\n };\n Subscriber.prototype.next = function (value) {\n if (!this.isStopped) {\n this._next(value);\n }\n };\n Subscriber.prototype.error = function (err) {\n if (!this.isStopped) {\n this.isStopped = true;\n this._error(err);\n }\n };\n Subscriber.prototype.complete = function () {\n if (!this.isStopped) {\n this.isStopped = true;\n this._complete();\n }\n };\n Subscriber.prototype.unsubscribe = function () {\n if (this.closed) {\n return;\n }\n this.isStopped = true;\n _super.prototype.unsubscribe.call(this);\n };\n Subscriber.prototype._next = function (value) {\n this.destination.next(value);\n };\n Subscriber.prototype._error = function (err) {\n this.destination.error(err);\n this.unsubscribe();\n };\n Subscriber.prototype._complete = function () {\n this.destination.complete();\n this.unsubscribe();\n };\n Subscriber.prototype._unsubscribeAndRecycle = function () {\n var _parentOrParents = this._parentOrParents;\n this._parentOrParents = null;\n this.unsubscribe();\n this.closed = false;\n this.isStopped = false;\n this._parentOrParents = _parentOrParents;\n return this;\n };\n return Subscriber;\n}(Subscription));\nexport { Subscriber };\nvar SafeSubscriber = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(SafeSubscriber, _super);\n function SafeSubscriber(_parentSubscriber, observerOrNext, error, complete) {\n var _this = _super.call(this) || this;\n _this._parentSubscriber = _parentSubscriber;\n var next;\n var context = _this;\n if (isFunction(observerOrNext)) {\n next = observerOrNext;\n }\n else if (observerOrNext) {\n next = observerOrNext.next;\n error = observerOrNext.error;\n complete = observerOrNext.complete;\n if (observerOrNext !== emptyObserver) {\n context = Object.create(observerOrNext);\n if (isFunction(context.unsubscribe)) {\n _this.add(context.unsubscribe.bind(context));\n }\n context.unsubscribe = _this.unsubscribe.bind(_this);\n }\n }\n _this._context = context;\n _this._next = next;\n _this._error = error;\n _this._complete = complete;\n return _this;\n }\n SafeSubscriber.prototype.next = function (value) {\n if (!this.isStopped && this._next) {\n var _parentSubscriber = this._parentSubscriber;\n if (!config.useDeprecatedSynchronousErrorHandling || !_parentSubscriber.syncErrorThrowable) {\n this.__tryOrUnsub(this._next, value);\n }\n else if (this.__tryOrSetError(_parentSubscriber, this._next, value)) {\n this.unsubscribe();\n }\n }\n };\n SafeSubscriber.prototype.error = function (err) {\n if (!this.isStopped) {\n var _parentSubscriber = this._parentSubscriber;\n var useDeprecatedSynchronousErrorHandling = config.useDeprecatedSynchronousErrorHandling;\n if (this._error) {\n if (!useDeprecatedSynchronousErrorHandling || !_parentSubscriber.syncErrorThrowable) {\n this.__tryOrUnsub(this._error, err);\n this.unsubscribe();\n }\n else {\n this.__tryOrSetError(_parentSubscriber, this._error, err);\n this.unsubscribe();\n }\n }\n else if (!_parentSubscriber.syncErrorThrowable) {\n this.unsubscribe();\n if (useDeprecatedSynchronousErrorHandling) {\n throw err;\n }\n hostReportError(err);\n }\n else {\n if (useDeprecatedSynchronousErrorHandling) {\n _parentSubscriber.syncErrorValue = err;\n _parentSubscriber.syncErrorThrown = true;\n }\n else {\n hostReportError(err);\n }\n this.unsubscribe();\n }\n }\n };\n SafeSubscriber.prototype.complete = function () {\n var _this = this;\n if (!this.isStopped) {\n var _parentSubscriber = this._parentSubscriber;\n if (this._complete) {\n var wrappedComplete = function () { return _this._complete.call(_this._context); };\n if (!config.useDeprecatedSynchronousErrorHandling || !_parentSubscriber.syncErrorThrowable) {\n this.__tryOrUnsub(wrappedComplete);\n this.unsubscribe();\n }\n else {\n this.__tryOrSetError(_parentSubscriber, wrappedComplete);\n this.unsubscribe();\n }\n }\n else {\n this.unsubscribe();\n }\n }\n };\n SafeSubscriber.prototype.__tryOrUnsub = function (fn, value) {\n try {\n fn.call(this._context, value);\n }\n catch (err) {\n this.unsubscribe();\n if (config.useDeprecatedSynchronousErrorHandling) {\n throw err;\n }\n else {\n hostReportError(err);\n }\n }\n };\n SafeSubscriber.prototype.__tryOrSetError = function (parent, fn, value) {\n if (!config.useDeprecatedSynchronousErrorHandling) {\n throw new Error('bad call');\n }\n try {\n fn.call(this._context, value);\n }\n catch (err) {\n if (config.useDeprecatedSynchronousErrorHandling) {\n parent.syncErrorValue = err;\n parent.syncErrorThrown = true;\n return true;\n }\n else {\n hostReportError(err);\n return true;\n }\n }\n return false;\n };\n SafeSubscriber.prototype._unsubscribe = function () {\n var _parentSubscriber = this._parentSubscriber;\n this._context = null;\n this._parentSubscriber = null;\n _parentSubscriber.unsubscribe();\n };\n return SafeSubscriber;\n}(Subscriber));\nexport { SafeSubscriber };\n//# sourceMappingURL=Subscriber.js.map\n","/** PURE_IMPORTS_START _util_canReportError,_util_toSubscriber,_symbol_observable,_util_pipe,_config PURE_IMPORTS_END */\nimport { canReportError } from './util/canReportError';\nimport { toSubscriber } from './util/toSubscriber';\nimport { observable as Symbol_observable } from './symbol/observable';\nimport { pipeFromArray } from './util/pipe';\nimport { config } from './config';\nvar Observable = /*@__PURE__*/ (function () {\n function Observable(subscribe) {\n this._isScalar = false;\n if (subscribe) {\n this._subscribe = subscribe;\n }\n }\n Observable.prototype.lift = function (operator) {\n var observable = new Observable();\n observable.source = this;\n observable.operator = operator;\n return observable;\n };\n Observable.prototype.subscribe = function (observerOrNext, error, complete) {\n var operator = this.operator;\n var sink = toSubscriber(observerOrNext, error, complete);\n if (operator) {\n sink.add(operator.call(sink, this.source));\n }\n else {\n sink.add(this.source || (config.useDeprecatedSynchronousErrorHandling && !sink.syncErrorThrowable) ?\n this._subscribe(sink) :\n this._trySubscribe(sink));\n }\n if (config.useDeprecatedSynchronousErrorHandling) {\n if (sink.syncErrorThrowable) {\n sink.syncErrorThrowable = false;\n if (sink.syncErrorThrown) {\n throw sink.syncErrorValue;\n }\n }\n }\n return sink;\n };\n Observable.prototype._trySubscribe = function (sink) {\n try {\n return this._subscribe(sink);\n }\n catch (err) {\n if (config.useDeprecatedSynchronousErrorHandling) {\n sink.syncErrorThrown = true;\n sink.syncErrorValue = err;\n }\n if (canReportError(sink)) {\n sink.error(err);\n }\n else {\n console.warn(err);\n }\n }\n };\n Observable.prototype.forEach = function (next, promiseCtor) {\n var _this = this;\n promiseCtor = getPromiseCtor(promiseCtor);\n return new promiseCtor(function (resolve, reject) {\n var subscription;\n subscription = _this.subscribe(function (value) {\n try {\n next(value);\n }\n catch (err) {\n reject(err);\n if (subscription) {\n subscription.unsubscribe();\n }\n }\n }, reject, resolve);\n });\n };\n Observable.prototype._subscribe = function (subscriber) {\n var source = this.source;\n return source && source.subscribe(subscriber);\n };\n Observable.prototype[Symbol_observable] = function () {\n return this;\n };\n Observable.prototype.pipe = function () {\n var operations = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n operations[_i] = arguments[_i];\n }\n if (operations.length === 0) {\n return this;\n }\n return pipeFromArray(operations)(this);\n };\n Observable.prototype.toPromise = function (promiseCtor) {\n var _this = this;\n promiseCtor = getPromiseCtor(promiseCtor);\n return new promiseCtor(function (resolve, reject) {\n var value;\n _this.subscribe(function (x) { return value = x; }, function (err) { return reject(err); }, function () { return resolve(value); });\n });\n };\n Observable.create = function (subscribe) {\n return new Observable(subscribe);\n };\n return Observable;\n}());\nexport { Observable };\nfunction getPromiseCtor(promiseCtor) {\n if (!promiseCtor) {\n promiseCtor = config.Promise || Promise;\n }\n if (!promiseCtor) {\n throw new Error('no Promise impl found');\n }\n return promiseCtor;\n}\n//# sourceMappingURL=Observable.js.map\n","/** PURE_IMPORTS_START _Subscriber,_symbol_rxSubscriber,_Observer PURE_IMPORTS_END */\nimport { Subscriber } from '../Subscriber';\nimport { rxSubscriber as rxSubscriberSymbol } from '../symbol/rxSubscriber';\nimport { empty as emptyObserver } from '../Observer';\nexport function toSubscriber(nextOrObserver, error, complete) {\n if (nextOrObserver) {\n if (nextOrObserver instanceof Subscriber) {\n return nextOrObserver;\n }\n if (nextOrObserver[rxSubscriberSymbol]) {\n return nextOrObserver[rxSubscriberSymbol]();\n }\n }\n if (!nextOrObserver && !error && !complete) {\n return new Subscriber(emptyObserver);\n }\n return new Subscriber(nextOrObserver, error, complete);\n}\n//# sourceMappingURL=toSubscriber.js.map\n","/** PURE_IMPORTS_START _Subscriber PURE_IMPORTS_END */\nimport { Subscriber } from '../Subscriber';\nexport function canReportError(observer) {\n while (observer) {\n var _a = observer, closed_1 = _a.closed, destination = _a.destination, isStopped = _a.isStopped;\n if (closed_1 || isStopped) {\n return false;\n }\n else if (destination && destination instanceof Subscriber) {\n observer = destination;\n }\n else {\n observer = null;\n }\n }\n return true;\n}\n//# sourceMappingURL=canReportError.js.map\n","/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */\nimport * as tslib_1 from \"tslib\";\nimport { Subscriber } from '../Subscriber';\nexport function map(project, thisArg) {\n return function mapOperation(source) {\n if (typeof project !== 'function') {\n throw new TypeError('argument is not a function. Are you looking for `mapTo()`?');\n }\n return source.lift(new MapOperator(project, thisArg));\n };\n}\nvar MapOperator = /*@__PURE__*/ (function () {\n function MapOperator(project, thisArg) {\n this.project = project;\n this.thisArg = thisArg;\n }\n MapOperator.prototype.call = function (subscriber, source) {\n return source.subscribe(new MapSubscriber(subscriber, this.project, this.thisArg));\n };\n return MapOperator;\n}());\nexport { MapOperator };\nvar MapSubscriber = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(MapSubscriber, _super);\n function MapSubscriber(destination, project, thisArg) {\n var _this = _super.call(this, destination) || this;\n _this.project = project;\n _this.count = 0;\n _this.thisArg = thisArg || _this;\n return _this;\n }\n MapSubscriber.prototype._next = function (value) {\n var result;\n try {\n result = this.project.call(this.thisArg, value, this.count++);\n }\n catch (err) {\n this.destination.error(err);\n return;\n }\n this.destination.next(result);\n };\n return MapSubscriber;\n}(Subscriber));\n//# sourceMappingURL=map.js.map\n","/** PURE_IMPORTS_START PURE_IMPORTS_END */\nvar UnsubscriptionErrorImpl = /*@__PURE__*/ (function () {\n function UnsubscriptionErrorImpl(errors) {\n Error.call(this);\n this.message = errors ?\n errors.length + \" errors occurred during unsubscription:\\n\" + errors.map(function (err, i) { return i + 1 + \") \" + err.toString(); }).join('\\n ') : '';\n this.name = 'UnsubscriptionError';\n this.errors = errors;\n return this;\n }\n UnsubscriptionErrorImpl.prototype = /*@__PURE__*/ Object.create(Error.prototype);\n return UnsubscriptionErrorImpl;\n})();\nexport var UnsubscriptionError = UnsubscriptionErrorImpl;\n//# sourceMappingURL=UnsubscriptionError.js.map\n","/** PURE_IMPORTS_START _util_isArray,_util_isObject,_util_isFunction,_util_UnsubscriptionError PURE_IMPORTS_END */\nimport { isArray } from './util/isArray';\nimport { isObject } from './util/isObject';\nimport { isFunction } from './util/isFunction';\nimport { UnsubscriptionError } from './util/UnsubscriptionError';\nvar Subscription = /*@__PURE__*/ (function () {\n function Subscription(unsubscribe) {\n this.closed = false;\n this._parentOrParents = null;\n this._subscriptions = null;\n if (unsubscribe) {\n this._unsubscribe = unsubscribe;\n }\n }\n Subscription.prototype.unsubscribe = function () {\n var errors;\n if (this.closed) {\n return;\n }\n var _a = this, _parentOrParents = _a._parentOrParents, _unsubscribe = _a._unsubscribe, _subscriptions = _a._subscriptions;\n this.closed = true;\n this._parentOrParents = null;\n this._subscriptions = null;\n if (_parentOrParents instanceof Subscription) {\n _parentOrParents.remove(this);\n }\n else if (_parentOrParents !== null) {\n for (var index = 0; index < _parentOrParents.length; ++index) {\n var parent_1 = _parentOrParents[index];\n parent_1.remove(this);\n }\n }\n if (isFunction(_unsubscribe)) {\n try {\n _unsubscribe.call(this);\n }\n catch (e) {\n errors = e instanceof UnsubscriptionError ? flattenUnsubscriptionErrors(e.errors) : [e];\n }\n }\n if (isArray(_subscriptions)) {\n var index = -1;\n var len = _subscriptions.length;\n while (++index < len) {\n var sub = _subscriptions[index];\n if (isObject(sub)) {\n try {\n sub.unsubscribe();\n }\n catch (e) {\n errors = errors || [];\n if (e instanceof UnsubscriptionError) {\n errors = errors.concat(flattenUnsubscriptionErrors(e.errors));\n }\n else {\n errors.push(e);\n }\n }\n }\n }\n }\n if (errors) {\n throw new UnsubscriptionError(errors);\n }\n };\n Subscription.prototype.add = function (teardown) {\n var subscription = teardown;\n if (!teardown) {\n return Subscription.EMPTY;\n }\n switch (typeof teardown) {\n case 'function':\n subscription = new Subscription(teardown);\n case 'object':\n if (subscription === this || subscription.closed || typeof subscription.unsubscribe !== 'function') {\n return subscription;\n }\n else if (this.closed) {\n subscription.unsubscribe();\n return subscription;\n }\n else if (!(subscription instanceof Subscription)) {\n var tmp = subscription;\n subscription = new Subscription();\n subscription._subscriptions = [tmp];\n }\n break;\n default: {\n throw new Error('unrecognized teardown ' + teardown + ' added to Subscription.');\n }\n }\n var _parentOrParents = subscription._parentOrParents;\n if (_parentOrParents === null) {\n subscription._parentOrParents = this;\n }\n else if (_parentOrParents instanceof Subscription) {\n if (_parentOrParents === this) {\n return subscription;\n }\n subscription._parentOrParents = [_parentOrParents, this];\n }\n else if (_parentOrParents.indexOf(this) === -1) {\n _parentOrParents.push(this);\n }\n else {\n return subscription;\n }\n var subscriptions = this._subscriptions;\n if (subscriptions === null) {\n this._subscriptions = [subscription];\n }\n else {\n subscriptions.push(subscription);\n }\n return subscription;\n };\n Subscription.prototype.remove = function (subscription) {\n var subscriptions = this._subscriptions;\n if (subscriptions) {\n var subscriptionIndex = subscriptions.indexOf(subscription);\n if (subscriptionIndex !== -1) {\n subscriptions.splice(subscriptionIndex, 1);\n }\n }\n };\n Subscription.EMPTY = (function (empty) {\n empty.closed = true;\n return empty;\n }(new Subscription()));\n return Subscription;\n}());\nexport { Subscription };\nfunction flattenUnsubscriptionErrors(errors) {\n return errors.reduce(function (errs, err) { return errs.concat((err instanceof UnsubscriptionError) ? err.errors : err); }, []);\n}\n//# sourceMappingURL=Subscription.js.map\n","/** PURE_IMPORTS_START _InnerSubscriber,_subscribeTo,_Observable PURE_IMPORTS_END */\nimport { InnerSubscriber } from '../InnerSubscriber';\nimport { subscribeTo } from './subscribeTo';\nimport { Observable } from '../Observable';\nexport function subscribeToResult(outerSubscriber, result, outerValue, outerIndex, destination) {\n if (destination === void 0) {\n destination = new InnerSubscriber(outerSubscriber, outerValue, outerIndex);\n }\n if (destination.closed) {\n return undefined;\n }\n if (result instanceof Observable) {\n return result.subscribe(destination);\n }\n return subscribeTo(result)(destination);\n}\n//# sourceMappingURL=subscribeToResult.js.map\n","/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */\nimport * as tslib_1 from \"tslib\";\nimport { Subscriber } from './Subscriber';\nvar OuterSubscriber = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(OuterSubscriber, _super);\n function OuterSubscriber() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n OuterSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {\n this.destination.next(innerValue);\n };\n OuterSubscriber.prototype.notifyError = function (error, innerSub) {\n this.destination.error(error);\n };\n OuterSubscriber.prototype.notifyComplete = function (innerSub) {\n this.destination.complete();\n };\n return OuterSubscriber;\n}(Subscriber));\nexport { OuterSubscriber };\n//# sourceMappingURL=OuterSubscriber.js.map\n","/** PURE_IMPORTS_START PURE_IMPORTS_END */\nvar _enable_super_gross_mode_that_will_cause_bad_things = false;\nexport var config = {\n Promise: undefined,\n set useDeprecatedSynchronousErrorHandling(value) {\n if (value) {\n var error = /*@__PURE__*/ new Error();\n /*@__PURE__*/ console.warn('DEPRECATED! RxJS was set to use deprecated synchronous error handling behavior by code at: \\n' + error.stack);\n }\n else if (_enable_super_gross_mode_that_will_cause_bad_things) {\n /*@__PURE__*/ console.log('RxJS: Back to a better error behavior. Thank you. <3');\n }\n _enable_super_gross_mode_that_will_cause_bad_things = value;\n },\n get useDeprecatedSynchronousErrorHandling() {\n return _enable_super_gross_mode_that_will_cause_bad_things;\n },\n};\n//# sourceMappingURL=config.js.map\n","/** PURE_IMPORTS_START PURE_IMPORTS_END */\nvar __window = typeof window !== 'undefined' && window;\nvar __self = typeof self !== 'undefined' && typeof WorkerGlobalScope !== 'undefined' &&\n self instanceof WorkerGlobalScope && self;\nvar __global = typeof global !== 'undefined' && global;\nvar _root = __window || __global || __self;\n/*@__PURE__*/ (function () {\n if (!_root) {\n throw /*@__PURE__*/ new Error('RxJS could not find any global context (window, self, global)');\n }\n})();\nexport { _root as root };\n//# sourceMappingURL=root.js.map\n","import _isPlaceholder from './_isPlaceholder.js';\n\n/**\n * Optimized internal one-arity curry function.\n *\n * @private\n * @category Function\n * @param {Function} fn The function to curry.\n * @return {Function} The curried function.\n */\nexport default function _curry1(fn) {\n return function f1(a) {\n if (arguments.length === 0 || _isPlaceholder(a)) {\n return f1;\n } else {\n return fn.apply(this, arguments);\n }\n };\n}","/** PURE_IMPORTS_START PURE_IMPORTS_END */\nexport function noop() { }\n//# sourceMappingURL=noop.js.map\n","/** PURE_IMPORTS_START PURE_IMPORTS_END */\nexport function isFunction(x) {\n return typeof x === 'function';\n}\n//# sourceMappingURL=isFunction.js.map\n","/** PURE_IMPORTS_START PURE_IMPORTS_END */\nexport var observable = /*@__PURE__*/ (function () { return typeof Symbol === 'function' && Symbol.observable || '@@observable'; })();\n//# sourceMappingURL=observable.js.map\n","/** PURE_IMPORTS_START _Observable PURE_IMPORTS_END */\nimport { Observable } from '../Observable';\nexport var EMPTY = /*@__PURE__*/ new Observable(function (subscriber) { return subscriber.complete(); });\nexport function empty(scheduler) {\n return scheduler ? emptyScheduled(scheduler) : EMPTY;\n}\nfunction emptyScheduled(scheduler) {\n return new Observable(function (subscriber) { return scheduler.schedule(function () { return subscriber.complete(); }); });\n}\n//# sourceMappingURL=empty.js.map\n","/** PURE_IMPORTS_START PURE_IMPORTS_END */\nvar ObjectUnsubscribedErrorImpl = /*@__PURE__*/ (function () {\n function ObjectUnsubscribedErrorImpl() {\n Error.call(this);\n this.message = 'object unsubscribed';\n this.name = 'ObjectUnsubscribedError';\n return this;\n }\n ObjectUnsubscribedErrorImpl.prototype = /*@__PURE__*/ Object.create(Error.prototype);\n return ObjectUnsubscribedErrorImpl;\n})();\nexport var ObjectUnsubscribedError = ObjectUnsubscribedErrorImpl;\n//# sourceMappingURL=ObjectUnsubscribedError.js.map\n","/** PURE_IMPORTS_START PURE_IMPORTS_END */\nexport function hostReportError(err) {\n setTimeout(function () { throw err; }, 0);\n}\n//# sourceMappingURL=hostReportError.js.map\n","/** PURE_IMPORTS_START tslib,_OuterSubscriber,_InnerSubscriber,_util_subscribeToResult,_map,_observable_from PURE_IMPORTS_END */\nimport * as tslib_1 from \"tslib\";\nimport { OuterSubscriber } from '../OuterSubscriber';\nimport { InnerSubscriber } from '../InnerSubscriber';\nimport { subscribeToResult } from '../util/subscribeToResult';\nimport { map } from './map';\nimport { from } from '../observable/from';\nexport function switchMap(project, resultSelector) {\n if (typeof resultSelector === 'function') {\n return function (source) { return source.pipe(switchMap(function (a, i) { return from(project(a, i)).pipe(map(function (b, ii) { return resultSelector(a, b, i, ii); })); })); };\n }\n return function (source) { return source.lift(new SwitchMapOperator(project)); };\n}\nvar SwitchMapOperator = /*@__PURE__*/ (function () {\n function SwitchMapOperator(project) {\n this.project = project;\n }\n SwitchMapOperator.prototype.call = function (subscriber, source) {\n return source.subscribe(new SwitchMapSubscriber(subscriber, this.project));\n };\n return SwitchMapOperator;\n}());\nvar SwitchMapSubscriber = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(SwitchMapSubscriber, _super);\n function SwitchMapSubscriber(destination, project) {\n var _this = _super.call(this, destination) || this;\n _this.project = project;\n _this.index = 0;\n return _this;\n }\n SwitchMapSubscriber.prototype._next = function (value) {\n var result;\n var index = this.index++;\n try {\n result = this.project(value, index);\n }\n catch (error) {\n this.destination.error(error);\n return;\n }\n this._innerSub(result, value, index);\n };\n SwitchMapSubscriber.prototype._innerSub = function (result, value, index) {\n var innerSubscription = this.innerSubscription;\n if (innerSubscription) {\n innerSubscription.unsubscribe();\n }\n var innerSubscriber = new InnerSubscriber(this, undefined, undefined);\n var destination = this.destination;\n destination.add(innerSubscriber);\n this.innerSubscription = subscribeToResult(this, result, value, index, innerSubscriber);\n };\n SwitchMapSubscriber.prototype._complete = function () {\n var innerSubscription = this.innerSubscription;\n if (!innerSubscription || innerSubscription.closed) {\n _super.prototype._complete.call(this);\n }\n this.unsubscribe();\n };\n SwitchMapSubscriber.prototype._unsubscribe = function () {\n this.innerSubscription = null;\n };\n SwitchMapSubscriber.prototype.notifyComplete = function (innerSub) {\n var destination = this.destination;\n destination.remove(innerSub);\n this.innerSubscription = null;\n if (this.isStopped) {\n _super.prototype._complete.call(this);\n }\n };\n SwitchMapSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {\n this.destination.next(innerValue);\n };\n return SwitchMapSubscriber;\n}(OuterSubscriber));\n//# sourceMappingURL=switchMap.js.map\n","/** PURE_IMPORTS_START tslib,_Observable,_Subscriber,_Subscription,_util_ObjectUnsubscribedError,_SubjectSubscription,_internal_symbol_rxSubscriber PURE_IMPORTS_END */\nimport * as tslib_1 from \"tslib\";\nimport { Observable } from './Observable';\nimport { Subscriber } from './Subscriber';\nimport { Subscription } from './Subscription';\nimport { ObjectUnsubscribedError } from './util/ObjectUnsubscribedError';\nimport { SubjectSubscription } from './SubjectSubscription';\nimport { rxSubscriber as rxSubscriberSymbol } from '../internal/symbol/rxSubscriber';\nvar SubjectSubscriber = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(SubjectSubscriber, _super);\n function SubjectSubscriber(destination) {\n var _this = _super.call(this, destination) || this;\n _this.destination = destination;\n return _this;\n }\n return SubjectSubscriber;\n}(Subscriber));\nexport { SubjectSubscriber };\nvar Subject = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(Subject, _super);\n function Subject() {\n var _this = _super.call(this) || this;\n _this.observers = [];\n _this.closed = false;\n _this.isStopped = false;\n _this.hasError = false;\n _this.thrownError = null;\n return _this;\n }\n Subject.prototype[rxSubscriberSymbol] = function () {\n return new SubjectSubscriber(this);\n };\n Subject.prototype.lift = function (operator) {\n var subject = new AnonymousSubject(this, this);\n subject.operator = operator;\n return subject;\n };\n Subject.prototype.next = function (value) {\n if (this.closed) {\n throw new ObjectUnsubscribedError();\n }\n if (!this.isStopped) {\n var observers = this.observers;\n var len = observers.length;\n var copy = observers.slice();\n for (var i = 0; i < len; i++) {\n copy[i].next(value);\n }\n }\n };\n Subject.prototype.error = function (err) {\n if (this.closed) {\n throw new ObjectUnsubscribedError();\n }\n this.hasError = true;\n this.thrownError = err;\n this.isStopped = true;\n var observers = this.observers;\n var len = observers.length;\n var copy = observers.slice();\n for (var i = 0; i < len; i++) {\n copy[i].error(err);\n }\n this.observers.length = 0;\n };\n Subject.prototype.complete = function () {\n if (this.closed) {\n throw new ObjectUnsubscribedError();\n }\n this.isStopped = true;\n var observers = this.observers;\n var len = observers.length;\n var copy = observers.slice();\n for (var i = 0; i < len; i++) {\n copy[i].complete();\n }\n this.observers.length = 0;\n };\n Subject.prototype.unsubscribe = function () {\n this.isStopped = true;\n this.closed = true;\n this.observers = null;\n };\n Subject.prototype._trySubscribe = function (subscriber) {\n if (this.closed) {\n throw new ObjectUnsubscribedError();\n }\n else {\n return _super.prototype._trySubscribe.call(this, subscriber);\n }\n };\n Subject.prototype._subscribe = function (subscriber) {\n if (this.closed) {\n throw new ObjectUnsubscribedError();\n }\n else if (this.hasError) {\n subscriber.error(this.thrownError);\n return Subscription.EMPTY;\n }\n else if (this.isStopped) {\n subscriber.complete();\n return Subscription.EMPTY;\n }\n else {\n this.observers.push(subscriber);\n return new SubjectSubscription(this, subscriber);\n }\n };\n Subject.prototype.asObservable = function () {\n var observable = new Observable();\n observable.source = this;\n return observable;\n };\n Subject.create = function (destination, source) {\n return new AnonymousSubject(destination, source);\n };\n return Subject;\n}(Observable));\nexport { Subject };\nvar AnonymousSubject = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(AnonymousSubject, _super);\n function AnonymousSubject(destination, source) {\n var _this = _super.call(this) || this;\n _this.destination = destination;\n _this.source = source;\n return _this;\n }\n AnonymousSubject.prototype.next = function (value) {\n var destination = this.destination;\n if (destination && destination.next) {\n destination.next(value);\n }\n };\n AnonymousSubject.prototype.error = function (err) {\n var destination = this.destination;\n if (destination && destination.error) {\n this.destination.error(err);\n }\n };\n AnonymousSubject.prototype.complete = function () {\n var destination = this.destination;\n if (destination && destination.complete) {\n this.destination.complete();\n }\n };\n AnonymousSubject.prototype._subscribe = function (subscriber) {\n var source = this.source;\n if (source) {\n return this.source.subscribe(subscriber);\n }\n else {\n return Subscription.EMPTY;\n }\n };\n return AnonymousSubject;\n}(Subject));\nexport { AnonymousSubject };\n//# sourceMappingURL=Subject.js.map\n","/** PURE_IMPORTS_START PURE_IMPORTS_END */\nexport var isArray = /*@__PURE__*/ (function () { return Array.isArray || (function (x) { return x && typeof x.length === 'number'; }); })();\n//# sourceMappingURL=isArray.js.map\n","/** PURE_IMPORTS_START PURE_IMPORTS_END */\nexport function isScheduler(value) {\n return value && typeof value.schedule === 'function';\n}\n//# sourceMappingURL=isScheduler.js.map\n","/** PURE_IMPORTS_START PURE_IMPORTS_END */\nexport function getSymbolIterator() {\n if (typeof Symbol !== 'function' || !Symbol.iterator) {\n return '@@iterator';\n }\n return Symbol.iterator;\n}\nexport var iterator = /*@__PURE__*/ getSymbolIterator();\nexport var $$iterator = iterator;\n//# sourceMappingURL=iterator.js.map\n","/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */\nimport * as tslib_1 from \"tslib\";\nimport { Subscriber } from './Subscriber';\nvar InnerSubscriber = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(InnerSubscriber, _super);\n function InnerSubscriber(parent, outerValue, outerIndex) {\n var _this = _super.call(this) || this;\n _this.parent = parent;\n _this.outerValue = outerValue;\n _this.outerIndex = outerIndex;\n _this.index = 0;\n return _this;\n }\n InnerSubscriber.prototype._next = function (value) {\n this.parent.notifyNext(this.outerValue, value, this.outerIndex, this.index++, this);\n };\n InnerSubscriber.prototype._error = function (error) {\n this.parent.notifyError(error, this);\n this.unsubscribe();\n };\n InnerSubscriber.prototype._complete = function () {\n this.parent.notifyComplete(this);\n this.unsubscribe();\n };\n return InnerSubscriber;\n}(Subscriber));\nexport { InnerSubscriber };\n//# sourceMappingURL=InnerSubscriber.js.map\n","export default function _isPlaceholder(a) {\n return a != null && typeof a === 'object' && a['@@functional/placeholder'] === true;\n}","/** PURE_IMPORTS_START PURE_IMPORTS_END */\nexport var rxSubscriber = /*@__PURE__*/ (function () {\n return typeof Symbol === 'function'\n ? /*@__PURE__*/ Symbol('rxSubscriber')\n : '@@rxSubscriber_' + /*@__PURE__*/ Math.random();\n})();\nexport var $$rxSubscriber = rxSubscriber;\n//# sourceMappingURL=rxSubscriber.js.map\n","/** PURE_IMPORTS_START _observable_empty,_observable_of,_observable_throwError PURE_IMPORTS_END */\nimport { empty } from './observable/empty';\nimport { of } from './observable/of';\nimport { throwError } from './observable/throwError';\nexport var NotificationKind;\n/*@__PURE__*/ (function (NotificationKind) {\n NotificationKind[\"NEXT\"] = \"N\";\n NotificationKind[\"ERROR\"] = \"E\";\n NotificationKind[\"COMPLETE\"] = \"C\";\n})(NotificationKind || (NotificationKind = {}));\nvar Notification = /*@__PURE__*/ (function () {\n function Notification(kind, value, error) {\n this.kind = kind;\n this.value = value;\n this.error = error;\n this.hasValue = kind === 'N';\n }\n Notification.prototype.observe = function (observer) {\n switch (this.kind) {\n case 'N':\n return observer.next && observer.next(this.value);\n case 'E':\n return observer.error && observer.error(this.error);\n case 'C':\n return observer.complete && observer.complete();\n }\n };\n Notification.prototype.do = function (next, error, complete) {\n var kind = this.kind;\n switch (kind) {\n case 'N':\n return next && next(this.value);\n case 'E':\n return error && error(this.error);\n case 'C':\n return complete && complete();\n }\n };\n Notification.prototype.accept = function (nextOrObserver, error, complete) {\n if (nextOrObserver && typeof nextOrObserver.next === 'function') {\n return this.observe(nextOrObserver);\n }\n else {\n return this.do(nextOrObserver, error, complete);\n }\n };\n Notification.prototype.toObservable = function () {\n var kind = this.kind;\n switch (kind) {\n case 'N':\n return of(this.value);\n case 'E':\n return throwError(this.error);\n case 'C':\n return empty();\n }\n throw new Error('unexpected notification kind value');\n };\n Notification.createNext = function (value) {\n if (typeof value !== 'undefined') {\n return new Notification('N', value);\n }\n return Notification.undefinedValueNotification;\n };\n Notification.createError = function (err) {\n return new Notification('E', undefined, err);\n };\n Notification.createComplete = function () {\n return Notification.completeNotification;\n };\n Notification.completeNotification = new Notification('C');\n Notification.undefinedValueNotification = new Notification('N', undefined);\n return Notification;\n}());\nexport { Notification };\n//# sourceMappingURL=Notification.js.map\n","/** PURE_IMPORTS_START _Observable PURE_IMPORTS_END */\nimport { Observable } from '../Observable';\nexport function throwError(error, scheduler) {\n if (!scheduler) {\n return new Observable(function (subscriber) { return subscriber.error(error); });\n }\n else {\n return new Observable(function (subscriber) { return scheduler.schedule(dispatch, 0, { error: error, subscriber: subscriber }); });\n }\n}\nfunction dispatch(_a) {\n var error = _a.error, subscriber = _a.subscriber;\n subscriber.error(error);\n}\n//# sourceMappingURL=throwError.js.map\n","/** PURE_IMPORTS_START _noop PURE_IMPORTS_END */\nimport { noop } from './noop';\nexport function pipe() {\n var fns = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n fns[_i] = arguments[_i];\n }\n return pipeFromArray(fns);\n}\nexport function pipeFromArray(fns) {\n if (!fns) {\n return noop;\n }\n if (fns.length === 1) {\n return fns[0];\n }\n return function piped(input) {\n return fns.reduce(function (prev, fn) { return fn(prev); }, input);\n };\n}\n//# sourceMappingURL=pipe.js.map\n","/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */\nimport * as tslib_1 from \"tslib\";\nimport { Subscriber } from '../Subscriber';\nexport function distinctUntilChanged(compare, keySelector) {\n return function (source) { return source.lift(new DistinctUntilChangedOperator(compare, keySelector)); };\n}\nvar DistinctUntilChangedOperator = /*@__PURE__*/ (function () {\n function DistinctUntilChangedOperator(compare, keySelector) {\n this.compare = compare;\n this.keySelector = keySelector;\n }\n DistinctUntilChangedOperator.prototype.call = function (subscriber, source) {\n return source.subscribe(new DistinctUntilChangedSubscriber(subscriber, this.compare, this.keySelector));\n };\n return DistinctUntilChangedOperator;\n}());\nvar DistinctUntilChangedSubscriber = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(DistinctUntilChangedSubscriber, _super);\n function DistinctUntilChangedSubscriber(destination, compare, keySelector) {\n var _this = _super.call(this, destination) || this;\n _this.keySelector = keySelector;\n _this.hasKey = false;\n if (typeof compare === 'function') {\n _this.compare = compare;\n }\n return _this;\n }\n DistinctUntilChangedSubscriber.prototype.compare = function (x, y) {\n return x === y;\n };\n DistinctUntilChangedSubscriber.prototype._next = function (value) {\n var key;\n try {\n var keySelector = this.keySelector;\n key = keySelector ? keySelector(value) : value;\n }\n catch (err) {\n return this.destination.error(err);\n }\n var result = false;\n if (this.hasKey) {\n try {\n var compare = this.compare;\n result = compare(this.key, key);\n }\n catch (err) {\n return this.destination.error(err);\n }\n }\n else {\n this.hasKey = true;\n }\n if (!result) {\n this.key = key;\n this.destination.next(value);\n }\n };\n return DistinctUntilChangedSubscriber;\n}(Subscriber));\n//# sourceMappingURL=distinctUntilChanged.js.map\n","/** PURE_IMPORTS_START _Observable,_Subscription PURE_IMPORTS_END */\nimport { Observable } from '../Observable';\nimport { Subscription } from '../Subscription';\nexport function scheduleArray(input, scheduler) {\n return new Observable(function (subscriber) {\n var sub = new Subscription();\n var i = 0;\n sub.add(scheduler.schedule(function () {\n if (i === input.length) {\n subscriber.complete();\n return;\n }\n subscriber.next(input[i++]);\n if (!subscriber.closed) {\n sub.add(this.schedule());\n }\n }));\n return sub;\n });\n}\n//# sourceMappingURL=scheduleArray.js.map\n","/** PURE_IMPORTS_START _Observable,_util_subscribeToArray,_scheduled_scheduleArray PURE_IMPORTS_END */\nimport { Observable } from '../Observable';\nimport { subscribeToArray } from '../util/subscribeToArray';\nimport { scheduleArray } from '../scheduled/scheduleArray';\nexport function fromArray(input, scheduler) {\n if (!scheduler) {\n return new Observable(subscribeToArray(input));\n }\n else {\n return scheduleArray(input, scheduler);\n }\n}\n//# sourceMappingURL=fromArray.js.map\n","/** PURE_IMPORTS_START _scheduleObservable,_schedulePromise,_scheduleArray,_scheduleIterable,_util_isInteropObservable,_util_isPromise,_util_isArrayLike,_util_isIterable PURE_IMPORTS_END */\nimport { scheduleObservable } from './scheduleObservable';\nimport { schedulePromise } from './schedulePromise';\nimport { scheduleArray } from './scheduleArray';\nimport { scheduleIterable } from './scheduleIterable';\nimport { isInteropObservable } from '../util/isInteropObservable';\nimport { isPromise } from '../util/isPromise';\nimport { isArrayLike } from '../util/isArrayLike';\nimport { isIterable } from '../util/isIterable';\nexport function scheduled(input, scheduler) {\n if (input != null) {\n if (isInteropObservable(input)) {\n return scheduleObservable(input, scheduler);\n }\n else if (isPromise(input)) {\n return schedulePromise(input, scheduler);\n }\n else if (isArrayLike(input)) {\n return scheduleArray(input, scheduler);\n }\n else if (isIterable(input) || typeof input === 'string') {\n return scheduleIterable(input, scheduler);\n }\n }\n throw new TypeError((input !== null && typeof input || input) + ' is not observable');\n}\n//# sourceMappingURL=scheduled.js.map\n","/** PURE_IMPORTS_START _symbol_observable PURE_IMPORTS_END */\nimport { observable as Symbol_observable } from '../symbol/observable';\nexport function isInteropObservable(input) {\n return input && typeof input[Symbol_observable] === 'function';\n}\n//# sourceMappingURL=isInteropObservable.js.map\n","/** PURE_IMPORTS_START _Observable,_Subscription,_symbol_observable PURE_IMPORTS_END */\nimport { Observable } from '../Observable';\nimport { Subscription } from '../Subscription';\nimport { observable as Symbol_observable } from '../symbol/observable';\nexport function scheduleObservable(input, scheduler) {\n return new Observable(function (subscriber) {\n var sub = new Subscription();\n sub.add(scheduler.schedule(function () {\n var observable = input[Symbol_observable]();\n sub.add(observable.subscribe({\n next: function (value) { sub.add(scheduler.schedule(function () { return subscriber.next(value); })); },\n error: function (err) { sub.add(scheduler.schedule(function () { return subscriber.error(err); })); },\n complete: function () { sub.add(scheduler.schedule(function () { return subscriber.complete(); })); },\n }));\n }));\n return sub;\n });\n}\n//# sourceMappingURL=scheduleObservable.js.map\n","/** PURE_IMPORTS_START _Observable,_Subscription PURE_IMPORTS_END */\nimport { Observable } from '../Observable';\nimport { Subscription } from '../Subscription';\nexport function schedulePromise(input, scheduler) {\n return new Observable(function (subscriber) {\n var sub = new Subscription();\n sub.add(scheduler.schedule(function () {\n return input.then(function (value) {\n sub.add(scheduler.schedule(function () {\n subscriber.next(value);\n sub.add(scheduler.schedule(function () { return subscriber.complete(); }));\n }));\n }, function (err) {\n sub.add(scheduler.schedule(function () { return subscriber.error(err); }));\n });\n }));\n return sub;\n });\n}\n//# sourceMappingURL=schedulePromise.js.map\n","/** PURE_IMPORTS_START _symbol_iterator PURE_IMPORTS_END */\nimport { iterator as Symbol_iterator } from '../symbol/iterator';\nexport function isIterable(input) {\n return input && typeof input[Symbol_iterator] === 'function';\n}\n//# sourceMappingURL=isIterable.js.map\n","/** PURE_IMPORTS_START _Observable,_Subscription,_symbol_iterator PURE_IMPORTS_END */\nimport { Observable } from '../Observable';\nimport { Subscription } from '../Subscription';\nimport { iterator as Symbol_iterator } from '../symbol/iterator';\nexport function scheduleIterable(input, scheduler) {\n if (!input) {\n throw new Error('Iterable cannot be null');\n }\n return new Observable(function (subscriber) {\n var sub = new Subscription();\n var iterator;\n sub.add(function () {\n if (iterator && typeof iterator.return === 'function') {\n iterator.return();\n }\n });\n sub.add(scheduler.schedule(function () {\n iterator = input[Symbol_iterator]();\n sub.add(scheduler.schedule(function () {\n if (subscriber.closed) {\n return;\n }\n var value;\n var done;\n try {\n var result = iterator.next();\n value = result.value;\n done = result.done;\n }\n catch (err) {\n subscriber.error(err);\n return;\n }\n if (done) {\n subscriber.complete();\n }\n else {\n subscriber.next(value);\n this.schedule();\n }\n }));\n }));\n return sub;\n });\n}\n//# sourceMappingURL=scheduleIterable.js.map\n","/** PURE_IMPORTS_START _Observable,_util_subscribeTo,_scheduled_scheduled PURE_IMPORTS_END */\nimport { Observable } from '../Observable';\nimport { subscribeTo } from '../util/subscribeTo';\nimport { scheduled } from '../scheduled/scheduled';\nexport function from(input, scheduler) {\n if (!scheduler) {\n if (input instanceof Observable) {\n return input;\n }\n return new Observable(subscribeTo(input));\n }\n else {\n return scheduled(input, scheduler);\n }\n}\n//# sourceMappingURL=from.js.map\n","var Scheduler = /*@__PURE__*/ (function () {\n function Scheduler(SchedulerAction, now) {\n if (now === void 0) {\n now = Scheduler.now;\n }\n this.SchedulerAction = SchedulerAction;\n this.now = now;\n }\n Scheduler.prototype.schedule = function (work, delay, state) {\n if (delay === void 0) {\n delay = 0;\n }\n return new this.SchedulerAction(this, work).schedule(state, delay);\n };\n Scheduler.now = function () { return Date.now(); };\n return Scheduler;\n}());\nexport { Scheduler };\n//# sourceMappingURL=Scheduler.js.map\n","/** PURE_IMPORTS_START tslib,_Scheduler PURE_IMPORTS_END */\nimport * as tslib_1 from \"tslib\";\nimport { Scheduler } from '../Scheduler';\nvar AsyncScheduler = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(AsyncScheduler, _super);\n function AsyncScheduler(SchedulerAction, now) {\n if (now === void 0) {\n now = Scheduler.now;\n }\n var _this = _super.call(this, SchedulerAction, function () {\n if (AsyncScheduler.delegate && AsyncScheduler.delegate !== _this) {\n return AsyncScheduler.delegate.now();\n }\n else {\n return now();\n }\n }) || this;\n _this.actions = [];\n _this.active = false;\n _this.scheduled = undefined;\n return _this;\n }\n AsyncScheduler.prototype.schedule = function (work, delay, state) {\n if (delay === void 0) {\n delay = 0;\n }\n if (AsyncScheduler.delegate && AsyncScheduler.delegate !== this) {\n return AsyncScheduler.delegate.schedule(work, delay, state);\n }\n else {\n return _super.prototype.schedule.call(this, work, delay, state);\n }\n };\n AsyncScheduler.prototype.flush = function (action) {\n var actions = this.actions;\n if (this.active) {\n actions.push(action);\n return;\n }\n var error;\n this.active = true;\n do {\n if (error = action.execute(action.state, action.delay)) {\n break;\n }\n } while (action = actions.shift());\n this.active = false;\n if (error) {\n while (action = actions.shift()) {\n action.unsubscribe();\n }\n throw error;\n }\n };\n return AsyncScheduler;\n}(Scheduler));\nexport { AsyncScheduler };\n//# sourceMappingURL=AsyncScheduler.js.map\n","/** PURE_IMPORTS_START tslib,_Subscription PURE_IMPORTS_END */\nimport * as tslib_1 from \"tslib\";\nimport { Subscription } from '../Subscription';\nvar Action = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(Action, _super);\n function Action(scheduler, work) {\n return _super.call(this) || this;\n }\n Action.prototype.schedule = function (state, delay) {\n if (delay === void 0) {\n delay = 0;\n }\n return this;\n };\n return Action;\n}(Subscription));\nexport { Action };\n//# sourceMappingURL=Action.js.map\n","/** PURE_IMPORTS_START tslib,_Action PURE_IMPORTS_END */\nimport * as tslib_1 from \"tslib\";\nimport { Action } from './Action';\nvar AsyncAction = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(AsyncAction, _super);\n function AsyncAction(scheduler, work) {\n var _this = _super.call(this, scheduler, work) || this;\n _this.scheduler = scheduler;\n _this.work = work;\n _this.pending = false;\n return _this;\n }\n AsyncAction.prototype.schedule = function (state, delay) {\n if (delay === void 0) {\n delay = 0;\n }\n if (this.closed) {\n return this;\n }\n this.state = state;\n var id = this.id;\n var scheduler = this.scheduler;\n if (id != null) {\n this.id = this.recycleAsyncId(scheduler, id, delay);\n }\n this.pending = true;\n this.delay = delay;\n this.id = this.id || this.requestAsyncId(scheduler, this.id, delay);\n return this;\n };\n AsyncAction.prototype.requestAsyncId = function (scheduler, id, delay) {\n if (delay === void 0) {\n delay = 0;\n }\n return setInterval(scheduler.flush.bind(scheduler, this), delay);\n };\n AsyncAction.prototype.recycleAsyncId = function (scheduler, id, delay) {\n if (delay === void 0) {\n delay = 0;\n }\n if (delay !== null && this.delay === delay && this.pending === false) {\n return id;\n }\n clearInterval(id);\n return undefined;\n };\n AsyncAction.prototype.execute = function (state, delay) {\n if (this.closed) {\n return new Error('executing a cancelled action');\n }\n this.pending = false;\n var error = this._execute(state, delay);\n if (error) {\n return error;\n }\n else if (this.pending === false && this.id != null) {\n this.id = this.recycleAsyncId(this.scheduler, this.id, null);\n }\n };\n AsyncAction.prototype._execute = function (state, delay) {\n var errored = false;\n var errorValue = undefined;\n try {\n this.work(state);\n }\n catch (e) {\n errored = true;\n errorValue = !!e && e || new Error(e);\n }\n if (errored) {\n this.unsubscribe();\n return errorValue;\n }\n };\n AsyncAction.prototype._unsubscribe = function () {\n var id = this.id;\n var scheduler = this.scheduler;\n var actions = scheduler.actions;\n var index = actions.indexOf(this);\n this.work = null;\n this.state = null;\n this.pending = false;\n this.scheduler = null;\n if (index !== -1) {\n actions.splice(index, 1);\n }\n if (id != null) {\n this.id = this.recycleAsyncId(scheduler, id, null);\n }\n this.delay = null;\n };\n return AsyncAction;\n}(Action));\nexport { AsyncAction };\n//# sourceMappingURL=AsyncAction.js.map\n","/** PURE_IMPORTS_START _config,_util_hostReportError PURE_IMPORTS_END */\nimport { config } from './config';\nimport { hostReportError } from './util/hostReportError';\nexport var empty = {\n closed: true,\n next: function (value) { },\n error: function (err) {\n if (config.useDeprecatedSynchronousErrorHandling) {\n throw err;\n }\n else {\n hostReportError(err);\n }\n },\n complete: function () { }\n};\n//# sourceMappingURL=Observer.js.map\n","/** PURE_IMPORTS_START _util_isScheduler,_fromArray,_scheduled_scheduleArray PURE_IMPORTS_END */\nimport { isScheduler } from '../util/isScheduler';\nimport { fromArray } from './fromArray';\nimport { scheduleArray } from '../scheduled/scheduleArray';\nexport function of() {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var scheduler = args[args.length - 1];\n if (isScheduler(scheduler)) {\n args.pop();\n return scheduleArray(args, scheduler);\n }\n else {\n return fromArray(args);\n }\n}\n//# sourceMappingURL=of.js.map\n","/** PURE_IMPORTS_START tslib,_Subscriber,_Notification PURE_IMPORTS_END */\nimport * as tslib_1 from \"tslib\";\nimport { Subscriber } from '../Subscriber';\nimport { Notification } from '../Notification';\nexport function observeOn(scheduler, delay) {\n if (delay === void 0) {\n delay = 0;\n }\n return function observeOnOperatorFunction(source) {\n return source.lift(new ObserveOnOperator(scheduler, delay));\n };\n}\nvar ObserveOnOperator = /*@__PURE__*/ (function () {\n function ObserveOnOperator(scheduler, delay) {\n if (delay === void 0) {\n delay = 0;\n }\n this.scheduler = scheduler;\n this.delay = delay;\n }\n ObserveOnOperator.prototype.call = function (subscriber, source) {\n return source.subscribe(new ObserveOnSubscriber(subscriber, this.scheduler, this.delay));\n };\n return ObserveOnOperator;\n}());\nexport { ObserveOnOperator };\nvar ObserveOnSubscriber = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(ObserveOnSubscriber, _super);\n function ObserveOnSubscriber(destination, scheduler, delay) {\n if (delay === void 0) {\n delay = 0;\n }\n var _this = _super.call(this, destination) || this;\n _this.scheduler = scheduler;\n _this.delay = delay;\n return _this;\n }\n ObserveOnSubscriber.dispatch = function (arg) {\n var notification = arg.notification, destination = arg.destination;\n notification.observe(destination);\n this.unsubscribe();\n };\n ObserveOnSubscriber.prototype.scheduleMessage = function (notification) {\n var destination = this.destination;\n destination.add(this.scheduler.schedule(ObserveOnSubscriber.dispatch, this.delay, new ObserveOnMessage(notification, this.destination)));\n };\n ObserveOnSubscriber.prototype._next = function (value) {\n this.scheduleMessage(Notification.createNext(value));\n };\n ObserveOnSubscriber.prototype._error = function (err) {\n this.scheduleMessage(Notification.createError(err));\n this.unsubscribe();\n };\n ObserveOnSubscriber.prototype._complete = function () {\n this.scheduleMessage(Notification.createComplete());\n this.unsubscribe();\n };\n return ObserveOnSubscriber;\n}(Subscriber));\nexport { ObserveOnSubscriber };\nvar ObserveOnMessage = /*@__PURE__*/ (function () {\n function ObserveOnMessage(notification, destination) {\n this.notification = notification;\n this.destination = destination;\n }\n return ObserveOnMessage;\n}());\nexport { ObserveOnMessage };\n//# sourceMappingURL=observeOn.js.map\n","/** PURE_IMPORTS_START PURE_IMPORTS_END */\nexport function isObject(x) {\n return x !== null && typeof x === 'object';\n}\n//# sourceMappingURL=isObject.js.map\n","/** PURE_IMPORTS_START tslib,_Subscription PURE_IMPORTS_END */\nimport * as tslib_1 from \"tslib\";\nimport { Subscription } from './Subscription';\nvar SubjectSubscription = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(SubjectSubscription, _super);\n function SubjectSubscription(subject, subscriber) {\n var _this = _super.call(this) || this;\n _this.subject = subject;\n _this.subscriber = subscriber;\n _this.closed = false;\n return _this;\n }\n SubjectSubscription.prototype.unsubscribe = function () {\n if (this.closed) {\n return;\n }\n this.closed = true;\n var subject = this.subject;\n var observers = subject.observers;\n this.subject = null;\n if (!observers || observers.length === 0 || subject.isStopped || subject.closed) {\n return;\n }\n var subscriberIndex = observers.indexOf(this.subscriber);\n if (subscriberIndex !== -1) {\n observers.splice(subscriberIndex, 1);\n }\n };\n return SubjectSubscription;\n}(Subscription));\nexport { SubjectSubscription };\n//# sourceMappingURL=SubjectSubscription.js.map\n","/** PURE_IMPORTS_START PURE_IMPORTS_END */\nexport var isArrayLike = (function (x) { return x && typeof x.length === 'number' && typeof x !== 'function'; });\n//# sourceMappingURL=isArrayLike.js.map\n","/** PURE_IMPORTS_START PURE_IMPORTS_END */\nexport var subscribeToArray = function (array) {\n return function (subscriber) {\n for (var i = 0, len = array.length; i < len && !subscriber.closed; i++) {\n subscriber.next(array[i]);\n }\n subscriber.complete();\n };\n};\n//# sourceMappingURL=subscribeToArray.js.map\n","/** PURE_IMPORTS_START PURE_IMPORTS_END */\nexport function isPromise(value) {\n return !!value && typeof value.subscribe !== 'function' && typeof value.then === 'function';\n}\n//# sourceMappingURL=isPromise.js.map\n","/** PURE_IMPORTS_START _AsyncAction,_AsyncScheduler PURE_IMPORTS_END */\nimport { AsyncAction } from './AsyncAction';\nimport { AsyncScheduler } from './AsyncScheduler';\nexport var async = /*@__PURE__*/ new AsyncScheduler(AsyncAction);\n//# sourceMappingURL=async.js.map\n","/** PURE_IMPORTS_START _subscribeToArray,_subscribeToPromise,_subscribeToIterable,_subscribeToObservable,_isArrayLike,_isPromise,_isObject,_symbol_iterator,_symbol_observable PURE_IMPORTS_END */\nimport { subscribeToArray } from './subscribeToArray';\nimport { subscribeToPromise } from './subscribeToPromise';\nimport { subscribeToIterable } from './subscribeToIterable';\nimport { subscribeToObservable } from './subscribeToObservable';\nimport { isArrayLike } from './isArrayLike';\nimport { isPromise } from './isPromise';\nimport { isObject } from './isObject';\nimport { iterator as Symbol_iterator } from '../symbol/iterator';\nimport { observable as Symbol_observable } from '../symbol/observable';\nexport var subscribeTo = function (result) {\n if (!!result && typeof result[Symbol_observable] === 'function') {\n return subscribeToObservable(result);\n }\n else if (isArrayLike(result)) {\n return subscribeToArray(result);\n }\n else if (isPromise(result)) {\n return subscribeToPromise(result);\n }\n else if (!!result && typeof result[Symbol_iterator] === 'function') {\n return subscribeToIterable(result);\n }\n else {\n var value = isObject(result) ? 'an invalid object' : \"'\" + result + \"'\";\n var msg = \"You provided \" + value + \" where a stream was expected.\"\n + ' You can provide an Observable, Promise, Array, or Iterable.';\n throw new TypeError(msg);\n }\n};\n//# sourceMappingURL=subscribeTo.js.map\n","/** PURE_IMPORTS_START _symbol_observable PURE_IMPORTS_END */\nimport { observable as Symbol_observable } from '../symbol/observable';\nexport var subscribeToObservable = function (obj) {\n return function (subscriber) {\n var obs = obj[Symbol_observable]();\n if (typeof obs.subscribe !== 'function') {\n throw new TypeError('Provided object does not correctly implement Symbol.observable');\n }\n else {\n return obs.subscribe(subscriber);\n }\n };\n};\n//# sourceMappingURL=subscribeToObservable.js.map\n","/** PURE_IMPORTS_START _hostReportError PURE_IMPORTS_END */\nimport { hostReportError } from './hostReportError';\nexport var subscribeToPromise = function (promise) {\n return function (subscriber) {\n promise.then(function (value) {\n if (!subscriber.closed) {\n subscriber.next(value);\n subscriber.complete();\n }\n }, function (err) { return subscriber.error(err); })\n .then(null, hostReportError);\n return subscriber;\n };\n};\n//# sourceMappingURL=subscribeToPromise.js.map\n","/** PURE_IMPORTS_START _symbol_iterator PURE_IMPORTS_END */\nimport { iterator as Symbol_iterator } from '../symbol/iterator';\nexport var subscribeToIterable = function (iterable) {\n return function (subscriber) {\n var iterator = iterable[Symbol_iterator]();\n do {\n var item = iterator.next();\n if (item.done) {\n subscriber.complete();\n break;\n }\n subscriber.next(item.value);\n if (subscriber.closed) {\n break;\n }\n } while (true);\n if (typeof iterator.return === 'function') {\n subscriber.add(function () {\n if (iterator.return) {\n iterator.return();\n }\n });\n }\n return subscriber;\n };\n};\n//# sourceMappingURL=subscribeToIterable.js.map\n","/** PURE_IMPORTS_START tslib,_util_subscribeToResult,_OuterSubscriber,_InnerSubscriber,_map,_observable_from PURE_IMPORTS_END */\nimport * as tslib_1 from \"tslib\";\nimport { subscribeToResult } from '../util/subscribeToResult';\nimport { OuterSubscriber } from '../OuterSubscriber';\nimport { InnerSubscriber } from '../InnerSubscriber';\nimport { map } from './map';\nimport { from } from '../observable/from';\nexport function mergeMap(project, resultSelector, concurrent) {\n if (concurrent === void 0) {\n concurrent = Number.POSITIVE_INFINITY;\n }\n if (typeof resultSelector === 'function') {\n return function (source) { return source.pipe(mergeMap(function (a, i) { return from(project(a, i)).pipe(map(function (b, ii) { return resultSelector(a, b, i, ii); })); }, concurrent)); };\n }\n else if (typeof resultSelector === 'number') {\n concurrent = resultSelector;\n }\n return function (source) { return source.lift(new MergeMapOperator(project, concurrent)); };\n}\nvar MergeMapOperator = /*@__PURE__*/ (function () {\n function MergeMapOperator(project, concurrent) {\n if (concurrent === void 0) {\n concurrent = Number.POSITIVE_INFINITY;\n }\n this.project = project;\n this.concurrent = concurrent;\n }\n MergeMapOperator.prototype.call = function (observer, source) {\n return source.subscribe(new MergeMapSubscriber(observer, this.project, this.concurrent));\n };\n return MergeMapOperator;\n}());\nexport { MergeMapOperator };\nvar MergeMapSubscriber = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(MergeMapSubscriber, _super);\n function MergeMapSubscriber(destination, project, concurrent) {\n if (concurrent === void 0) {\n concurrent = Number.POSITIVE_INFINITY;\n }\n var _this = _super.call(this, destination) || this;\n _this.project = project;\n _this.concurrent = concurrent;\n _this.hasCompleted = false;\n _this.buffer = [];\n _this.active = 0;\n _this.index = 0;\n return _this;\n }\n MergeMapSubscriber.prototype._next = function (value) {\n if (this.active < this.concurrent) {\n this._tryNext(value);\n }\n else {\n this.buffer.push(value);\n }\n };\n MergeMapSubscriber.prototype._tryNext = function (value) {\n var result;\n var index = this.index++;\n try {\n result = this.project(value, index);\n }\n catch (err) {\n this.destination.error(err);\n return;\n }\n this.active++;\n this._innerSub(result, value, index);\n };\n MergeMapSubscriber.prototype._innerSub = function (ish, value, index) {\n var innerSubscriber = new InnerSubscriber(this, undefined, undefined);\n var destination = this.destination;\n destination.add(innerSubscriber);\n subscribeToResult(this, ish, value, index, innerSubscriber);\n };\n MergeMapSubscriber.prototype._complete = function () {\n this.hasCompleted = true;\n if (this.active === 0 && this.buffer.length === 0) {\n this.destination.complete();\n }\n this.unsubscribe();\n };\n MergeMapSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {\n this.destination.next(innerValue);\n };\n MergeMapSubscriber.prototype.notifyComplete = function (innerSub) {\n var buffer = this.buffer;\n this.remove(innerSub);\n this.active--;\n if (buffer.length > 0) {\n this._next(buffer.shift());\n }\n else if (this.active === 0 && this.hasCompleted) {\n this.destination.complete();\n }\n };\n return MergeMapSubscriber;\n}(OuterSubscriber));\nexport { MergeMapSubscriber };\n//# sourceMappingURL=mergeMap.js.map\n","/** PURE_IMPORTS_START PURE_IMPORTS_END */\nexport function identity(x) {\n return x;\n}\n//# sourceMappingURL=identity.js.map\n","/** PURE_IMPORTS_START _mergeMap,_util_identity PURE_IMPORTS_END */\nimport { mergeMap } from './mergeMap';\nimport { identity } from '../util/identity';\nexport function mergeAll(concurrent) {\n if (concurrent === void 0) {\n concurrent = Number.POSITIVE_INFINITY;\n }\n return mergeMap(identity, concurrent);\n}\n//# sourceMappingURL=mergeAll.js.map\n","/** PURE_IMPORTS_START tslib,_Subscriber,_util_noop,_util_isFunction PURE_IMPORTS_END */\nimport * as tslib_1 from \"tslib\";\nimport { Subscriber } from '../Subscriber';\nimport { noop } from '../util/noop';\nimport { isFunction } from '../util/isFunction';\nexport function tap(nextOrObserver, error, complete) {\n return function tapOperatorFunction(source) {\n return source.lift(new DoOperator(nextOrObserver, error, complete));\n };\n}\nvar DoOperator = /*@__PURE__*/ (function () {\n function DoOperator(nextOrObserver, error, complete) {\n this.nextOrObserver = nextOrObserver;\n this.error = error;\n this.complete = complete;\n }\n DoOperator.prototype.call = function (subscriber, source) {\n return source.subscribe(new TapSubscriber(subscriber, this.nextOrObserver, this.error, this.complete));\n };\n return DoOperator;\n}());\nvar TapSubscriber = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(TapSubscriber, _super);\n function TapSubscriber(destination, observerOrNext, error, complete) {\n var _this = _super.call(this, destination) || this;\n _this._tapNext = noop;\n _this._tapError = noop;\n _this._tapComplete = noop;\n _this._tapError = error || noop;\n _this._tapComplete = complete || noop;\n if (isFunction(observerOrNext)) {\n _this._context = _this;\n _this._tapNext = observerOrNext;\n }\n else if (observerOrNext) {\n _this._context = observerOrNext;\n _this._tapNext = observerOrNext.next || noop;\n _this._tapError = observerOrNext.error || noop;\n _this._tapComplete = observerOrNext.complete || noop;\n }\n return _this;\n }\n TapSubscriber.prototype._next = function (value) {\n try {\n this._tapNext.call(this._context, value);\n }\n catch (err) {\n this.destination.error(err);\n return;\n }\n this.destination.next(value);\n };\n TapSubscriber.prototype._error = function (err) {\n try {\n this._tapError.call(this._context, err);\n }\n catch (err) {\n this.destination.error(err);\n return;\n }\n this.destination.error(err);\n };\n TapSubscriber.prototype._complete = function () {\n try {\n this._tapComplete.call(this._context);\n }\n catch (err) {\n this.destination.error(err);\n return;\n }\n return this.destination.complete();\n };\n return TapSubscriber;\n}(Subscriber));\n//# sourceMappingURL=tap.js.map\n","/** PURE_IMPORTS_START tslib,_AsyncAction PURE_IMPORTS_END */\nimport * as tslib_1 from \"tslib\";\nimport { AsyncAction } from './AsyncAction';\nvar AnimationFrameAction = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(AnimationFrameAction, _super);\n function AnimationFrameAction(scheduler, work) {\n var _this = _super.call(this, scheduler, work) || this;\n _this.scheduler = scheduler;\n _this.work = work;\n return _this;\n }\n AnimationFrameAction.prototype.requestAsyncId = function (scheduler, id, delay) {\n if (delay === void 0) {\n delay = 0;\n }\n if (delay !== null && delay > 0) {\n return _super.prototype.requestAsyncId.call(this, scheduler, id, delay);\n }\n scheduler.actions.push(this);\n return scheduler.scheduled || (scheduler.scheduled = requestAnimationFrame(function () { return scheduler.flush(null); }));\n };\n AnimationFrameAction.prototype.recycleAsyncId = function (scheduler, id, delay) {\n if (delay === void 0) {\n delay = 0;\n }\n if ((delay !== null && delay > 0) || (delay === null && this.delay > 0)) {\n return _super.prototype.recycleAsyncId.call(this, scheduler, id, delay);\n }\n if (scheduler.actions.length === 0) {\n cancelAnimationFrame(id);\n scheduler.scheduled = undefined;\n }\n return undefined;\n };\n return AnimationFrameAction;\n}(AsyncAction));\nexport { AnimationFrameAction };\n//# sourceMappingURL=AnimationFrameAction.js.map\n","/** PURE_IMPORTS_START tslib,_AsyncScheduler PURE_IMPORTS_END */\nimport * as tslib_1 from \"tslib\";\nimport { AsyncScheduler } from './AsyncScheduler';\nvar AnimationFrameScheduler = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(AnimationFrameScheduler, _super);\n function AnimationFrameScheduler() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n AnimationFrameScheduler.prototype.flush = function (action) {\n this.active = true;\n this.scheduled = undefined;\n var actions = this.actions;\n var error;\n var index = -1;\n var count = actions.length;\n action = action || actions.shift();\n do {\n if (error = action.execute(action.state, action.delay)) {\n break;\n }\n } while (++index < count && (action = actions.shift()));\n this.active = false;\n if (error) {\n while (++index < count && (action = actions.shift())) {\n action.unsubscribe();\n }\n throw error;\n }\n };\n return AnimationFrameScheduler;\n}(AsyncScheduler));\nexport { AnimationFrameScheduler };\n//# sourceMappingURL=AnimationFrameScheduler.js.map\n","/** PURE_IMPORTS_START _AnimationFrameAction,_AnimationFrameScheduler PURE_IMPORTS_END */\nimport { AnimationFrameAction } from './AnimationFrameAction';\nimport { AnimationFrameScheduler } from './AnimationFrameScheduler';\nexport var animationFrame = /*@__PURE__*/ new AnimationFrameScheduler(AnimationFrameAction);\n//# sourceMappingURL=animationFrame.js.map\n","/*!\n * clipboard.js v2.0.4\n * https://zenorocha.github.io/clipboard.js\n * \n * Licensed MIT © Zeno Rocha\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ClipboardJS\"] = factory();\n\telse\n\t\troot[\"ClipboardJS\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _clipboardAction = __webpack_require__(1);\n\nvar _clipboardAction2 = _interopRequireDefault(_clipboardAction);\n\nvar _tinyEmitter = __webpack_require__(3);\n\nvar _tinyEmitter2 = _interopRequireDefault(_tinyEmitter);\n\nvar _goodListener = __webpack_require__(4);\n\nvar _goodListener2 = _interopRequireDefault(_goodListener);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n/**\n * Base class which takes one or more elements, adds event listeners to them,\n * and instantiates a new `ClipboardAction` on each click.\n */\nvar Clipboard = function (_Emitter) {\n _inherits(Clipboard, _Emitter);\n\n /**\n * @param {String|HTMLElement|HTMLCollection|NodeList} trigger\n * @param {Object} options\n */\n function Clipboard(trigger, options) {\n _classCallCheck(this, Clipboard);\n\n var _this = _possibleConstructorReturn(this, (Clipboard.__proto__ || Object.getPrototypeOf(Clipboard)).call(this));\n\n _this.resolveOptions(options);\n _this.listenClick(trigger);\n return _this;\n }\n\n /**\n * Defines if attributes would be resolved using internal setter functions\n * or custom functions that were passed in the constructor.\n * @param {Object} options\n */\n\n\n _createClass(Clipboard, [{\n key: 'resolveOptions',\n value: function resolveOptions() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n this.action = typeof options.action === 'function' ? options.action : this.defaultAction;\n this.target = typeof options.target === 'function' ? options.target : this.defaultTarget;\n this.text = typeof options.text === 'function' ? options.text : this.defaultText;\n this.container = _typeof(options.container) === 'object' ? options.container : document.body;\n }\n\n /**\n * Adds a click event listener to the passed trigger.\n * @param {String|HTMLElement|HTMLCollection|NodeList} trigger\n */\n\n }, {\n key: 'listenClick',\n value: function listenClick(trigger) {\n var _this2 = this;\n\n this.listener = (0, _goodListener2.default)(trigger, 'click', function (e) {\n return _this2.onClick(e);\n });\n }\n\n /**\n * Defines a new `ClipboardAction` on each click event.\n * @param {Event} e\n */\n\n }, {\n key: 'onClick',\n value: function onClick(e) {\n var trigger = e.delegateTarget || e.currentTarget;\n\n if (this.clipboardAction) {\n this.clipboardAction = null;\n }\n\n this.clipboardAction = new _clipboardAction2.default({\n action: this.action(trigger),\n target: this.target(trigger),\n text: this.text(trigger),\n container: this.container,\n trigger: trigger,\n emitter: this\n });\n }\n\n /**\n * Default `action` lookup function.\n * @param {Element} trigger\n */\n\n }, {\n key: 'defaultAction',\n value: function defaultAction(trigger) {\n return getAttributeValue('action', trigger);\n }\n\n /**\n * Default `target` lookup function.\n * @param {Element} trigger\n */\n\n }, {\n key: 'defaultTarget',\n value: function defaultTarget(trigger) {\n var selector = getAttributeValue('target', trigger);\n\n if (selector) {\n return document.querySelector(selector);\n }\n }\n\n /**\n * Returns the support of the given action, or all actions if no action is\n * given.\n * @param {String} [action]\n */\n\n }, {\n key: 'defaultText',\n\n\n /**\n * Default `text` lookup function.\n * @param {Element} trigger\n */\n value: function defaultText(trigger) {\n return getAttributeValue('text', trigger);\n }\n\n /**\n * Destroy lifecycle.\n */\n\n }, {\n key: 'destroy',\n value: function destroy() {\n this.listener.destroy();\n\n if (this.clipboardAction) {\n this.clipboardAction.destroy();\n this.clipboardAction = null;\n }\n }\n }], [{\n key: 'isSupported',\n value: function isSupported() {\n var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['copy', 'cut'];\n\n var actions = typeof action === 'string' ? [action] : action;\n var support = !!document.queryCommandSupported;\n\n actions.forEach(function (action) {\n support = support && !!document.queryCommandSupported(action);\n });\n\n return support;\n }\n }]);\n\n return Clipboard;\n}(_tinyEmitter2.default);\n\n/**\n * Helper function to retrieve attribute value.\n * @param {String} suffix\n * @param {Element} element\n */\n\n\nfunction getAttributeValue(suffix, element) {\n var attribute = 'data-clipboard-' + suffix;\n\n if (!element.hasAttribute(attribute)) {\n return;\n }\n\n return element.getAttribute(attribute);\n}\n\nmodule.exports = Clipboard;\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _select = __webpack_require__(2);\n\nvar _select2 = _interopRequireDefault(_select);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * Inner class which performs selection from either `text` or `target`\n * properties and then executes copy or cut operations.\n */\nvar ClipboardAction = function () {\n /**\n * @param {Object} options\n */\n function ClipboardAction(options) {\n _classCallCheck(this, ClipboardAction);\n\n this.resolveOptions(options);\n this.initSelection();\n }\n\n /**\n * Defines base properties passed from constructor.\n * @param {Object} options\n */\n\n\n _createClass(ClipboardAction, [{\n key: 'resolveOptions',\n value: function resolveOptions() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n this.action = options.action;\n this.container = options.container;\n this.emitter = options.emitter;\n this.target = options.target;\n this.text = options.text;\n this.trigger = options.trigger;\n\n this.selectedText = '';\n }\n\n /**\n * Decides which selection strategy is going to be applied based\n * on the existence of `text` and `target` properties.\n */\n\n }, {\n key: 'initSelection',\n value: function initSelection() {\n if (this.text) {\n this.selectFake();\n } else if (this.target) {\n this.selectTarget();\n }\n }\n\n /**\n * Creates a fake textarea element, sets its value from `text` property,\n * and makes a selection on it.\n */\n\n }, {\n key: 'selectFake',\n value: function selectFake() {\n var _this = this;\n\n var isRTL = document.documentElement.getAttribute('dir') == 'rtl';\n\n this.removeFake();\n\n this.fakeHandlerCallback = function () {\n return _this.removeFake();\n };\n this.fakeHandler = this.container.addEventListener('click', this.fakeHandlerCallback) || true;\n\n this.fakeElem = document.createElement('textarea');\n // Prevent zooming on iOS\n this.fakeElem.style.fontSize = '12pt';\n // Reset box model\n this.fakeElem.style.border = '0';\n this.fakeElem.style.padding = '0';\n this.fakeElem.style.margin = '0';\n // Move element out of screen horizontally\n this.fakeElem.style.position = 'absolute';\n this.fakeElem.style[isRTL ? 'right' : 'left'] = '-9999px';\n // Move element to the same position vertically\n var yPosition = window.pageYOffset || document.documentElement.scrollTop;\n this.fakeElem.style.top = yPosition + 'px';\n\n this.fakeElem.setAttribute('readonly', '');\n this.fakeElem.value = this.text;\n\n this.container.appendChild(this.fakeElem);\n\n this.selectedText = (0, _select2.default)(this.fakeElem);\n this.copyText();\n }\n\n /**\n * Only removes the fake element after another click event, that way\n * a user can hit `Ctrl+C` to copy because selection still exists.\n */\n\n }, {\n key: 'removeFake',\n value: function removeFake() {\n if (this.fakeHandler) {\n this.container.removeEventListener('click', this.fakeHandlerCallback);\n this.fakeHandler = null;\n this.fakeHandlerCallback = null;\n }\n\n if (this.fakeElem) {\n this.container.removeChild(this.fakeElem);\n this.fakeElem = null;\n }\n }\n\n /**\n * Selects the content from element passed on `target` property.\n */\n\n }, {\n key: 'selectTarget',\n value: function selectTarget() {\n this.selectedText = (0, _select2.default)(this.target);\n this.copyText();\n }\n\n /**\n * Executes the copy operation based on the current selection.\n */\n\n }, {\n key: 'copyText',\n value: function copyText() {\n var succeeded = void 0;\n\n try {\n succeeded = document.execCommand(this.action);\n } catch (err) {\n succeeded = false;\n }\n\n this.handleResult(succeeded);\n }\n\n /**\n * Fires an event based on the copy operation result.\n * @param {Boolean} succeeded\n */\n\n }, {\n key: 'handleResult',\n value: function handleResult(succeeded) {\n this.emitter.emit(succeeded ? 'success' : 'error', {\n action: this.action,\n text: this.selectedText,\n trigger: this.trigger,\n clearSelection: this.clearSelection.bind(this)\n });\n }\n\n /**\n * Moves focus away from `target` and back to the trigger, removes current selection.\n */\n\n }, {\n key: 'clearSelection',\n value: function clearSelection() {\n if (this.trigger) {\n this.trigger.focus();\n }\n\n window.getSelection().removeAllRanges();\n }\n\n /**\n * Sets the `action` to be performed which can be either 'copy' or 'cut'.\n * @param {String} action\n */\n\n }, {\n key: 'destroy',\n\n\n /**\n * Destroy lifecycle.\n */\n value: function destroy() {\n this.removeFake();\n }\n }, {\n key: 'action',\n set: function set() {\n var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'copy';\n\n this._action = action;\n\n if (this._action !== 'copy' && this._action !== 'cut') {\n throw new Error('Invalid \"action\" value, use either \"copy\" or \"cut\"');\n }\n }\n\n /**\n * Gets the `action` property.\n * @return {String}\n */\n ,\n get: function get() {\n return this._action;\n }\n\n /**\n * Sets the `target` property using an element\n * that will be have its content copied.\n * @param {Element} target\n */\n\n }, {\n key: 'target',\n set: function set(target) {\n if (target !== undefined) {\n if (target && (typeof target === 'undefined' ? 'undefined' : _typeof(target)) === 'object' && target.nodeType === 1) {\n if (this.action === 'copy' && target.hasAttribute('disabled')) {\n throw new Error('Invalid \"target\" attribute. Please use \"readonly\" instead of \"disabled\" attribute');\n }\n\n if (this.action === 'cut' && (target.hasAttribute('readonly') || target.hasAttribute('disabled'))) {\n throw new Error('Invalid \"target\" attribute. You can\\'t cut text from elements with \"readonly\" or \"disabled\" attributes');\n }\n\n this._target = target;\n } else {\n throw new Error('Invalid \"target\" value, use a valid Element');\n }\n }\n }\n\n /**\n * Gets the `target` property.\n * @return {String|HTMLElement}\n */\n ,\n get: function get() {\n return this._target;\n }\n }]);\n\n return ClipboardAction;\n}();\n\nmodule.exports = ClipboardAction;\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports) {\n\nfunction select(element) {\n var selectedText;\n\n if (element.nodeName === 'SELECT') {\n element.focus();\n\n selectedText = element.value;\n }\n else if (element.nodeName === 'INPUT' || element.nodeName === 'TEXTAREA') {\n var isReadOnly = element.hasAttribute('readonly');\n\n if (!isReadOnly) {\n element.setAttribute('readonly', '');\n }\n\n element.select();\n element.setSelectionRange(0, element.value.length);\n\n if (!isReadOnly) {\n element.removeAttribute('readonly');\n }\n\n selectedText = element.value;\n }\n else {\n if (element.hasAttribute('contenteditable')) {\n element.focus();\n }\n\n var selection = window.getSelection();\n var range = document.createRange();\n\n range.selectNodeContents(element);\n selection.removeAllRanges();\n selection.addRange(range);\n\n selectedText = selection.toString();\n }\n\n return selectedText;\n}\n\nmodule.exports = select;\n\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports) {\n\nfunction E () {\n // Keep this empty so it's easier to inherit from\n // (via https://github.com/lipsmack from https://github.com/scottcorgan/tiny-emitter/issues/3)\n}\n\nE.prototype = {\n on: function (name, callback, ctx) {\n var e = this.e || (this.e = {});\n\n (e[name] || (e[name] = [])).push({\n fn: callback,\n ctx: ctx\n });\n\n return this;\n },\n\n once: function (name, callback, ctx) {\n var self = this;\n function listener () {\n self.off(name, listener);\n callback.apply(ctx, arguments);\n };\n\n listener._ = callback\n return this.on(name, listener, ctx);\n },\n\n emit: function (name) {\n var data = [].slice.call(arguments, 1);\n var evtArr = ((this.e || (this.e = {}))[name] || []).slice();\n var i = 0;\n var len = evtArr.length;\n\n for (i; i < len; i++) {\n evtArr[i].fn.apply(evtArr[i].ctx, data);\n }\n\n return this;\n },\n\n off: function (name, callback) {\n var e = this.e || (this.e = {});\n var evts = e[name];\n var liveEvents = [];\n\n if (evts && callback) {\n for (var i = 0, len = evts.length; i < len; i++) {\n if (evts[i].fn !== callback && evts[i].fn._ !== callback)\n liveEvents.push(evts[i]);\n }\n }\n\n // Remove event from queue to prevent memory leak\n // Suggested by https://github.com/lazd\n // Ref: https://github.com/scottcorgan/tiny-emitter/commit/c6ebfaa9bc973b33d110a84a307742b7cf94c953#commitcomment-5024910\n\n (liveEvents.length)\n ? e[name] = liveEvents\n : delete e[name];\n\n return this;\n }\n};\n\nmodule.exports = E;\n\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar is = __webpack_require__(5);\nvar delegate = __webpack_require__(6);\n\n/**\n * Validates all params and calls the right\n * listener function based on its target type.\n *\n * @param {String|HTMLElement|HTMLCollection|NodeList} target\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listen(target, type, callback) {\n if (!target && !type && !callback) {\n throw new Error('Missing required arguments');\n }\n\n if (!is.string(type)) {\n throw new TypeError('Second argument must be a String');\n }\n\n if (!is.fn(callback)) {\n throw new TypeError('Third argument must be a Function');\n }\n\n if (is.node(target)) {\n return listenNode(target, type, callback);\n }\n else if (is.nodeList(target)) {\n return listenNodeList(target, type, callback);\n }\n else if (is.string(target)) {\n return listenSelector(target, type, callback);\n }\n else {\n throw new TypeError('First argument must be a String, HTMLElement, HTMLCollection, or NodeList');\n }\n}\n\n/**\n * Adds an event listener to a HTML element\n * and returns a remove listener function.\n *\n * @param {HTMLElement} node\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenNode(node, type, callback) {\n node.addEventListener(type, callback);\n\n return {\n destroy: function() {\n node.removeEventListener(type, callback);\n }\n }\n}\n\n/**\n * Add an event listener to a list of HTML elements\n * and returns a remove listener function.\n *\n * @param {NodeList|HTMLCollection} nodeList\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenNodeList(nodeList, type, callback) {\n Array.prototype.forEach.call(nodeList, function(node) {\n node.addEventListener(type, callback);\n });\n\n return {\n destroy: function() {\n Array.prototype.forEach.call(nodeList, function(node) {\n node.removeEventListener(type, callback);\n });\n }\n }\n}\n\n/**\n * Add an event listener to a selector\n * and returns a remove listener function.\n *\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenSelector(selector, type, callback) {\n return delegate(document.body, selector, type, callback);\n}\n\nmodule.exports = listen;\n\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports) {\n\n/**\n * Check if argument is a HTML element.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.node = function(value) {\n return value !== undefined\n && value instanceof HTMLElement\n && value.nodeType === 1;\n};\n\n/**\n * Check if argument is a list of HTML elements.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.nodeList = function(value) {\n var type = Object.prototype.toString.call(value);\n\n return value !== undefined\n && (type === '[object NodeList]' || type === '[object HTMLCollection]')\n && ('length' in value)\n && (value.length === 0 || exports.node(value[0]));\n};\n\n/**\n * Check if argument is a string.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.string = function(value) {\n return typeof value === 'string'\n || value instanceof String;\n};\n\n/**\n * Check if argument is a function.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.fn = function(value) {\n var type = Object.prototype.toString.call(value);\n\n return type === '[object Function]';\n};\n\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar closest = __webpack_require__(7);\n\n/**\n * Delegates event to a selector.\n *\n * @param {Element} element\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @param {Boolean} useCapture\n * @return {Object}\n */\nfunction _delegate(element, selector, type, callback, useCapture) {\n var listenerFn = listener.apply(this, arguments);\n\n element.addEventListener(type, listenerFn, useCapture);\n\n return {\n destroy: function() {\n element.removeEventListener(type, listenerFn, useCapture);\n }\n }\n}\n\n/**\n * Delegates event to a selector.\n *\n * @param {Element|String|Array} [elements]\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @param {Boolean} useCapture\n * @return {Object}\n */\nfunction delegate(elements, selector, type, callback, useCapture) {\n // Handle the regular Element usage\n if (typeof elements.addEventListener === 'function') {\n return _delegate.apply(null, arguments);\n }\n\n // Handle Element-less usage, it defaults to global delegation\n if (typeof type === 'function') {\n // Use `document` as the first parameter, then apply arguments\n // This is a short way to .unshift `arguments` without running into deoptimizations\n return _delegate.bind(null, document).apply(null, arguments);\n }\n\n // Handle Selector-based usage\n if (typeof elements === 'string') {\n elements = document.querySelectorAll(elements);\n }\n\n // Handle Array-like based usage\n return Array.prototype.map.call(elements, function (element) {\n return _delegate(element, selector, type, callback, useCapture);\n });\n}\n\n/**\n * Finds closest match and invokes callback.\n *\n * @param {Element} element\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @return {Function}\n */\nfunction listener(element, selector, type, callback) {\n return function(e) {\n e.delegateTarget = closest(e.target, selector);\n\n if (e.delegateTarget) {\n callback.call(element, e);\n }\n }\n}\n\nmodule.exports = delegate;\n\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports) {\n\nvar DOCUMENT_NODE_TYPE = 9;\n\n/**\n * A polyfill for Element.matches()\n */\nif (typeof Element !== 'undefined' && !Element.prototype.matches) {\n var proto = Element.prototype;\n\n proto.matches = proto.matchesSelector ||\n proto.mozMatchesSelector ||\n proto.msMatchesSelector ||\n proto.oMatchesSelector ||\n proto.webkitMatchesSelector;\n}\n\n/**\n * Finds the closest parent that matches a selector.\n *\n * @param {Element} element\n * @param {String} selector\n * @return {Function}\n */\nfunction closest (element, selector) {\n while (element && element.nodeType !== DOCUMENT_NODE_TYPE) {\n if (typeof element.matches === 'function' &&\n element.matches(selector)) {\n return element;\n }\n element = element.parentNode;\n }\n}\n\nmodule.exports = closest;\n\n\n/***/ })\n/******/ ]);\n});","/** PURE_IMPORTS_START tslib,_util_isScheduler,_util_isArray,_OuterSubscriber,_util_subscribeToResult,_fromArray PURE_IMPORTS_END */\nimport * as tslib_1 from \"tslib\";\nimport { isScheduler } from '../util/isScheduler';\nimport { isArray } from '../util/isArray';\nimport { OuterSubscriber } from '../OuterSubscriber';\nimport { subscribeToResult } from '../util/subscribeToResult';\nimport { fromArray } from './fromArray';\nvar NONE = {};\nexport function combineLatest() {\n var observables = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n observables[_i] = arguments[_i];\n }\n var resultSelector = null;\n var scheduler = null;\n if (isScheduler(observables[observables.length - 1])) {\n scheduler = observables.pop();\n }\n if (typeof observables[observables.length - 1] === 'function') {\n resultSelector = observables.pop();\n }\n if (observables.length === 1 && isArray(observables[0])) {\n observables = observables[0];\n }\n return fromArray(observables, scheduler).lift(new CombineLatestOperator(resultSelector));\n}\nvar CombineLatestOperator = /*@__PURE__*/ (function () {\n function CombineLatestOperator(resultSelector) {\n this.resultSelector = resultSelector;\n }\n CombineLatestOperator.prototype.call = function (subscriber, source) {\n return source.subscribe(new CombineLatestSubscriber(subscriber, this.resultSelector));\n };\n return CombineLatestOperator;\n}());\nexport { CombineLatestOperator };\nvar CombineLatestSubscriber = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(CombineLatestSubscriber, _super);\n function CombineLatestSubscriber(destination, resultSelector) {\n var _this = _super.call(this, destination) || this;\n _this.resultSelector = resultSelector;\n _this.active = 0;\n _this.values = [];\n _this.observables = [];\n return _this;\n }\n CombineLatestSubscriber.prototype._next = function (observable) {\n this.values.push(NONE);\n this.observables.push(observable);\n };\n CombineLatestSubscriber.prototype._complete = function () {\n var observables = this.observables;\n var len = observables.length;\n if (len === 0) {\n this.destination.complete();\n }\n else {\n this.active = len;\n this.toRespond = len;\n for (var i = 0; i < len; i++) {\n var observable = observables[i];\n this.add(subscribeToResult(this, observable, observable, i));\n }\n }\n };\n CombineLatestSubscriber.prototype.notifyComplete = function (unused) {\n if ((this.active -= 1) === 0) {\n this.destination.complete();\n }\n };\n CombineLatestSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {\n var values = this.values;\n var oldVal = values[outerIndex];\n var toRespond = !this.toRespond\n ? 0\n : oldVal === NONE ? --this.toRespond : this.toRespond;\n values[outerIndex] = innerValue;\n if (toRespond === 0) {\n if (this.resultSelector) {\n this._tryResultSelector(values);\n }\n else {\n this.destination.next(values.slice());\n }\n }\n };\n CombineLatestSubscriber.prototype._tryResultSelector = function (values) {\n var result;\n try {\n result = this.resultSelector.apply(this, values);\n }\n catch (err) {\n this.destination.error(err);\n return;\n }\n this.destination.next(result);\n };\n return CombineLatestSubscriber;\n}(OuterSubscriber));\nexport { CombineLatestSubscriber };\n//# sourceMappingURL=combineLatest.js.map\n","/** PURE_IMPORTS_START tslib,_OuterSubscriber,_util_subscribeToResult PURE_IMPORTS_END */\nimport * as tslib_1 from \"tslib\";\nimport { OuterSubscriber } from '../OuterSubscriber';\nimport { subscribeToResult } from '../util/subscribeToResult';\nexport function withLatestFrom() {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return function (source) {\n var project;\n if (typeof args[args.length - 1] === 'function') {\n project = args.pop();\n }\n var observables = args;\n return source.lift(new WithLatestFromOperator(observables, project));\n };\n}\nvar WithLatestFromOperator = /*@__PURE__*/ (function () {\n function WithLatestFromOperator(observables, project) {\n this.observables = observables;\n this.project = project;\n }\n WithLatestFromOperator.prototype.call = function (subscriber, source) {\n return source.subscribe(new WithLatestFromSubscriber(subscriber, this.observables, this.project));\n };\n return WithLatestFromOperator;\n}());\nvar WithLatestFromSubscriber = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(WithLatestFromSubscriber, _super);\n function WithLatestFromSubscriber(destination, observables, project) {\n var _this = _super.call(this, destination) || this;\n _this.observables = observables;\n _this.project = project;\n _this.toRespond = [];\n var len = observables.length;\n _this.values = new Array(len);\n for (var i = 0; i < len; i++) {\n _this.toRespond.push(i);\n }\n for (var i = 0; i < len; i++) {\n var observable = observables[i];\n _this.add(subscribeToResult(_this, observable, observable, i));\n }\n return _this;\n }\n WithLatestFromSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {\n this.values[outerIndex] = innerValue;\n var toRespond = this.toRespond;\n if (toRespond.length > 0) {\n var found = toRespond.indexOf(outerIndex);\n if (found !== -1) {\n toRespond.splice(found, 1);\n }\n }\n };\n WithLatestFromSubscriber.prototype.notifyComplete = function () {\n };\n WithLatestFromSubscriber.prototype._next = function (value) {\n if (this.toRespond.length === 0) {\n var args = [value].concat(this.values);\n if (this.project) {\n this._tryProject(args);\n }\n else {\n this.destination.next(args);\n }\n }\n };\n WithLatestFromSubscriber.prototype._tryProject = function (args) {\n var result;\n try {\n result = this.project.apply(this, args);\n }\n catch (err) {\n this.destination.error(err);\n return;\n }\n this.destination.next(result);\n };\n return WithLatestFromSubscriber;\n}(OuterSubscriber));\n//# sourceMappingURL=withLatestFrom.js.map\n","/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */\nimport * as tslib_1 from \"tslib\";\nimport { Subscriber } from '../Subscriber';\nexport function scan(accumulator, seed) {\n var hasSeed = false;\n if (arguments.length >= 2) {\n hasSeed = true;\n }\n return function scanOperatorFunction(source) {\n return source.lift(new ScanOperator(accumulator, seed, hasSeed));\n };\n}\nvar ScanOperator = /*@__PURE__*/ (function () {\n function ScanOperator(accumulator, seed, hasSeed) {\n if (hasSeed === void 0) {\n hasSeed = false;\n }\n this.accumulator = accumulator;\n this.seed = seed;\n this.hasSeed = hasSeed;\n }\n ScanOperator.prototype.call = function (subscriber, source) {\n return source.subscribe(new ScanSubscriber(subscriber, this.accumulator, this.seed, this.hasSeed));\n };\n return ScanOperator;\n}());\nvar ScanSubscriber = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(ScanSubscriber, _super);\n function ScanSubscriber(destination, accumulator, _seed, hasSeed) {\n var _this = _super.call(this, destination) || this;\n _this.accumulator = accumulator;\n _this._seed = _seed;\n _this.hasSeed = hasSeed;\n _this.index = 0;\n return _this;\n }\n Object.defineProperty(ScanSubscriber.prototype, \"seed\", {\n get: function () {\n return this._seed;\n },\n set: function (value) {\n this.hasSeed = true;\n this._seed = value;\n },\n enumerable: true,\n configurable: true\n });\n ScanSubscriber.prototype._next = function (value) {\n if (!this.hasSeed) {\n this.seed = value;\n this.destination.next(value);\n }\n else {\n return this._tryNext(value);\n }\n };\n ScanSubscriber.prototype._tryNext = function (value) {\n var index = this.index++;\n var result;\n try {\n result = this.accumulator(this.seed, value, index);\n }\n catch (err) {\n this.destination.error(err);\n }\n this.seed = result;\n this.destination.next(result);\n };\n return ScanSubscriber;\n}(Subscriber));\n//# sourceMappingURL=scan.js.map\n","/** PURE_IMPORTS_START tslib,_Subscriber,_Subscription PURE_IMPORTS_END */\nimport * as tslib_1 from \"tslib\";\nimport { Subscriber } from '../Subscriber';\nimport { Subscription } from '../Subscription';\nexport function finalize(callback) {\n return function (source) { return source.lift(new FinallyOperator(callback)); };\n}\nvar FinallyOperator = /*@__PURE__*/ (function () {\n function FinallyOperator(callback) {\n this.callback = callback;\n }\n FinallyOperator.prototype.call = function (subscriber, source) {\n return source.subscribe(new FinallySubscriber(subscriber, this.callback));\n };\n return FinallyOperator;\n}());\nvar FinallySubscriber = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(FinallySubscriber, _super);\n function FinallySubscriber(destination, callback) {\n var _this = _super.call(this, destination) || this;\n _this.add(new Subscription(callback));\n return _this;\n }\n return FinallySubscriber;\n}(Subscriber));\n//# sourceMappingURL=finalize.js.map\n","/** PURE_IMPORTS_START _Observable,_from,_empty PURE_IMPORTS_END */\nimport { Observable } from '../Observable';\nimport { from } from './from';\nimport { empty } from './empty';\nexport function defer(observableFactory) {\n return new Observable(function (subscriber) {\n var input;\n try {\n input = observableFactory();\n }\n catch (err) {\n subscriber.error(err);\n return undefined;\n }\n var source = input ? from(input) : empty();\n return source.subscribe(subscriber);\n });\n}\n//# sourceMappingURL=defer.js.map\n","export default function _has(prop, obj) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}","import _has from './_has.js';\n\nvar toString = Object.prototype.toString;\nvar _isArguments = /*#__PURE__*/function () {\n return toString.call(arguments) === '[object Arguments]' ? function _isArguments(x) {\n return toString.call(x) === '[object Arguments]';\n } : function _isArguments(x) {\n return _has('callee', x);\n };\n}();\n\nexport default _isArguments;","import _curry1 from './internal/_curry1.js';\nimport _has from './internal/_has.js';\nimport _isArguments from './internal/_isArguments.js';\n\n// cover IE < 9 keys issues\nvar hasEnumBug = ! /*#__PURE__*/{ toString: null }.propertyIsEnumerable('toString');\nvar nonEnumerableProps = ['constructor', 'valueOf', 'isPrototypeOf', 'toString', 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString'];\n// Safari bug\nvar hasArgsEnumBug = /*#__PURE__*/function () {\n 'use strict';\n\n return arguments.propertyIsEnumerable('length');\n}();\n\nvar contains = function contains(list, item) {\n var idx = 0;\n while (idx < list.length) {\n if (list[idx] === item) {\n return true;\n }\n idx += 1;\n }\n return false;\n};\n\n/**\n * Returns a list containing the names of all the enumerable own properties of\n * the supplied object.\n * Note that the order of the output array is not guaranteed to be consistent\n * across different JS platforms.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category Object\n * @sig {k: v} -> [k]\n * @param {Object} obj The object to extract properties from\n * @return {Array} An array of the object's own properties.\n * @see R.keysIn, R.values\n * @example\n *\n * R.keys({a: 1, b: 2, c: 3}); //=> ['a', 'b', 'c']\n */\nvar keys = typeof Object.keys === 'function' && !hasArgsEnumBug ? /*#__PURE__*/_curry1(function keys(obj) {\n return Object(obj) !== obj ? [] : Object.keys(obj);\n}) : /*#__PURE__*/_curry1(function keys(obj) {\n if (Object(obj) !== obj) {\n return [];\n }\n var prop, nIdx;\n var ks = [];\n var checkArgsLength = hasArgsEnumBug && _isArguments(obj);\n for (prop in obj) {\n if (_has(prop, obj) && (!checkArgsLength || prop !== 'length')) {\n ks[ks.length] = prop;\n }\n }\n if (hasEnumBug) {\n nIdx = nonEnumerableProps.length - 1;\n while (nIdx >= 0) {\n prop = nonEnumerableProps[nIdx];\n if (_has(prop, obj) && !contains(ks, prop)) {\n ks[ks.length] = prop;\n }\n nIdx -= 1;\n }\n }\n return ks;\n});\nexport default keys;","/** PURE_IMPORTS_START _distinctUntilChanged PURE_IMPORTS_END */\nimport { distinctUntilChanged } from './distinctUntilChanged';\nexport function distinctUntilKeyChanged(key, compare) {\n return distinctUntilChanged(function (x, y) { return compare ? compare(x[key], y[key]) : x[key] === y[key]; });\n}\n//# sourceMappingURL=distinctUntilKeyChanged.js.map\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","/** PURE_IMPORTS_START _Observable,_util_isArray,_util_isFunction,_operators_map PURE_IMPORTS_END */\nimport { Observable } from '../Observable';\nimport { isArray } from '../util/isArray';\nimport { isFunction } from '../util/isFunction';\nimport { map } from '../operators/map';\nvar toString = /*@__PURE__*/ (function () { return Object.prototype.toString; })();\nexport function fromEvent(target, eventName, options, resultSelector) {\n if (isFunction(options)) {\n resultSelector = options;\n options = undefined;\n }\n if (resultSelector) {\n return fromEvent(target, eventName, options).pipe(map(function (args) { return isArray(args) ? resultSelector.apply(void 0, args) : resultSelector(args); }));\n }\n return new Observable(function (subscriber) {\n function handler(e) {\n if (arguments.length > 1) {\n subscriber.next(Array.prototype.slice.call(arguments));\n }\n else {\n subscriber.next(e);\n }\n }\n setupSubscription(target, eventName, handler, subscriber, options);\n });\n}\nfunction setupSubscription(sourceObj, eventName, handler, subscriber, options) {\n var unsubscribe;\n if (isEventTarget(sourceObj)) {\n var source_1 = sourceObj;\n sourceObj.addEventListener(eventName, handler, options);\n unsubscribe = function () { return source_1.removeEventListener(eventName, handler, options); };\n }\n else if (isJQueryStyleEventEmitter(sourceObj)) {\n var source_2 = sourceObj;\n sourceObj.on(eventName, handler);\n unsubscribe = function () { return source_2.off(eventName, handler); };\n }\n else if (isNodeStyleEventEmitter(sourceObj)) {\n var source_3 = sourceObj;\n sourceObj.addListener(eventName, handler);\n unsubscribe = function () { return source_3.removeListener(eventName, handler); };\n }\n else if (sourceObj && sourceObj.length) {\n for (var i = 0, len = sourceObj.length; i < len; i++) {\n setupSubscription(sourceObj[i], eventName, handler, subscriber, options);\n }\n }\n else {\n throw new TypeError('Invalid event target');\n }\n subscriber.add(unsubscribe);\n}\nfunction isNodeStyleEventEmitter(sourceObj) {\n return sourceObj && typeof sourceObj.addListener === 'function' && typeof sourceObj.removeListener === 'function';\n}\nfunction isJQueryStyleEventEmitter(sourceObj) {\n return sourceObj && typeof sourceObj.on === 'function' && typeof sourceObj.off === 'function';\n}\nfunction isEventTarget(sourceObj) {\n return sourceObj && typeof sourceObj.addEventListener === 'function' && typeof sourceObj.removeEventListener === 'function';\n}\n//# sourceMappingURL=fromEvent.js.map\n","/** PURE_IMPORTS_START _Observable,_util_isScheduler,_operators_mergeAll,_fromArray PURE_IMPORTS_END */\nimport { Observable } from '../Observable';\nimport { isScheduler } from '../util/isScheduler';\nimport { mergeAll } from '../operators/mergeAll';\nimport { fromArray } from './fromArray';\nexport function merge() {\n var observables = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n observables[_i] = arguments[_i];\n }\n var concurrent = Number.POSITIVE_INFINITY;\n var scheduler = null;\n var last = observables[observables.length - 1];\n if (isScheduler(last)) {\n scheduler = observables.pop();\n if (observables.length > 1 && typeof observables[observables.length - 1] === 'number') {\n concurrent = observables.pop();\n }\n }\n else if (typeof last === 'number') {\n concurrent = observables.pop();\n }\n if (scheduler === null && observables.length === 1 && observables[0] instanceof Observable) {\n return observables[0];\n }\n return mergeAll(concurrent)(fromArray(observables, scheduler));\n}\n//# sourceMappingURL=merge.js.map\n","/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */\nimport * as tslib_1 from \"tslib\";\nimport { Subscriber } from '../Subscriber';\nexport function bufferCount(bufferSize, startBufferEvery) {\n if (startBufferEvery === void 0) {\n startBufferEvery = null;\n }\n return function bufferCountOperatorFunction(source) {\n return source.lift(new BufferCountOperator(bufferSize, startBufferEvery));\n };\n}\nvar BufferCountOperator = /*@__PURE__*/ (function () {\n function BufferCountOperator(bufferSize, startBufferEvery) {\n this.bufferSize = bufferSize;\n this.startBufferEvery = startBufferEvery;\n if (!startBufferEvery || bufferSize === startBufferEvery) {\n this.subscriberClass = BufferCountSubscriber;\n }\n else {\n this.subscriberClass = BufferSkipCountSubscriber;\n }\n }\n BufferCountOperator.prototype.call = function (subscriber, source) {\n return source.subscribe(new this.subscriberClass(subscriber, this.bufferSize, this.startBufferEvery));\n };\n return BufferCountOperator;\n}());\nvar BufferCountSubscriber = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(BufferCountSubscriber, _super);\n function BufferCountSubscriber(destination, bufferSize) {\n var _this = _super.call(this, destination) || this;\n _this.bufferSize = bufferSize;\n _this.buffer = [];\n return _this;\n }\n BufferCountSubscriber.prototype._next = function (value) {\n var buffer = this.buffer;\n buffer.push(value);\n if (buffer.length == this.bufferSize) {\n this.destination.next(buffer);\n this.buffer = [];\n }\n };\n BufferCountSubscriber.prototype._complete = function () {\n var buffer = this.buffer;\n if (buffer.length > 0) {\n this.destination.next(buffer);\n }\n _super.prototype._complete.call(this);\n };\n return BufferCountSubscriber;\n}(Subscriber));\nvar BufferSkipCountSubscriber = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(BufferSkipCountSubscriber, _super);\n function BufferSkipCountSubscriber(destination, bufferSize, startBufferEvery) {\n var _this = _super.call(this, destination) || this;\n _this.bufferSize = bufferSize;\n _this.startBufferEvery = startBufferEvery;\n _this.buffers = [];\n _this.count = 0;\n return _this;\n }\n BufferSkipCountSubscriber.prototype._next = function (value) {\n var _a = this, bufferSize = _a.bufferSize, startBufferEvery = _a.startBufferEvery, buffers = _a.buffers, count = _a.count;\n this.count++;\n if (count % startBufferEvery === 0) {\n buffers.push([]);\n }\n for (var i = buffers.length; i--;) {\n var buffer = buffers[i];\n buffer.push(value);\n if (buffer.length === bufferSize) {\n buffers.splice(i, 1);\n this.destination.next(buffer);\n }\n }\n };\n BufferSkipCountSubscriber.prototype._complete = function () {\n var _a = this, buffers = _a.buffers, destination = _a.destination;\n while (buffers.length > 0) {\n var buffer = buffers.shift();\n if (buffer.length > 0) {\n destination.next(buffer);\n }\n }\n _super.prototype._complete.call(this);\n };\n return BufferSkipCountSubscriber;\n}(Subscriber));\n//# sourceMappingURL=bufferCount.js.map\n","import _curry1 from './_curry1.js';\nimport _isPlaceholder from './_isPlaceholder.js';\n\n/**\n * Optimized internal two-arity curry function.\n *\n * @private\n * @category Function\n * @param {Function} fn The function to curry.\n * @return {Function} The curried function.\n */\nexport default function _curry2(fn) {\n return function f2(a, b) {\n switch (arguments.length) {\n case 0:\n return f2;\n case 1:\n return _isPlaceholder(a) ? f2 : _curry1(function (_b) {\n return fn(a, _b);\n });\n default:\n return _isPlaceholder(a) && _isPlaceholder(b) ? f2 : _isPlaceholder(a) ? _curry1(function (_a) {\n return fn(_a, b);\n }) : _isPlaceholder(b) ? _curry1(function (_b) {\n return fn(a, _b);\n }) : fn(a, b);\n }\n };\n}","/**\n * Tests whether or not an object is an array.\n *\n * @private\n * @param {*} val The object to test.\n * @return {Boolean} `true` if `val` is an array, `false` otherwise.\n * @example\n *\n * _isArray([]); //=> true\n * _isArray(null); //=> false\n * _isArray({}); //=> false\n */\nexport default Array.isArray || function _isArray(val) {\n return val != null && val.length >= 0 && Object.prototype.toString.call(val) === '[object Array]';\n};","export default function _isTransformer(obj) {\n return obj != null && typeof obj['@@transducer/step'] === 'function';\n}","import _isArray from './_isArray.js';\nimport _isTransformer from './_isTransformer.js';\n\n/**\n * Returns a function that dispatches with different strategies based on the\n * object in list position (last argument). If it is an array, executes [fn].\n * Otherwise, if it has a function with one of the given method names, it will\n * execute that function (functor case). Otherwise, if it is a transformer,\n * uses transducer [xf] to return a new transformer (transducer case).\n * Otherwise, it will default to executing [fn].\n *\n * @private\n * @param {Array} methodNames properties to check for a custom implementation\n * @param {Function} xf transducer to initialize if object is transformer\n * @param {Function} fn default ramda implementation\n * @return {Function} A function that dispatches on object in list position\n */\nexport default function _dispatchable(methodNames, xf, fn) {\n return function () {\n if (arguments.length === 0) {\n return fn();\n }\n var args = Array.prototype.slice.call(arguments, 0);\n var obj = args.pop();\n if (!_isArray(obj)) {\n var idx = 0;\n while (idx < methodNames.length) {\n if (typeof obj[methodNames[idx]] === 'function') {\n return obj[methodNames[idx]].apply(obj, args);\n }\n idx += 1;\n }\n if (_isTransformer(obj)) {\n var transducer = xf.apply(null, args);\n return transducer(obj);\n }\n }\n return fn.apply(this, arguments);\n };\n}","export default {\n init: function () {\n return this.xf['@@transducer/init']();\n },\n result: function (result) {\n return this.xf['@@transducer/result'](result);\n }\n};","import _curry2 from './_curry2.js';\nimport _xfBase from './_xfBase.js';\n\nvar XFindLast = /*#__PURE__*/function () {\n function XFindLast(f, xf) {\n this.xf = xf;\n this.f = f;\n }\n XFindLast.prototype['@@transducer/init'] = _xfBase.init;\n XFindLast.prototype['@@transducer/result'] = function (result) {\n return this.xf['@@transducer/result'](this.xf['@@transducer/step'](result, this.last));\n };\n XFindLast.prototype['@@transducer/step'] = function (result, input) {\n if (this.f(input)) {\n this.last = input;\n }\n return result;\n };\n\n return XFindLast;\n}();\n\nvar _xfindLast = /*#__PURE__*/_curry2(function _xfindLast(f, xf) {\n return new XFindLast(f, xf);\n});\nexport default _xfindLast;","import _curry2 from './internal/_curry2.js';\nimport _dispatchable from './internal/_dispatchable.js';\nimport _xfindLast from './internal/_xfindLast.js';\n\n/**\n * Returns the last element of the list which matches the predicate, or\n * `undefined` if no element matches.\n *\n * Acts as a transducer if a transformer is given in list position.\n *\n * @func\n * @memberOf R\n * @since v0.1.1\n * @category List\n * @sig (a -> Boolean) -> [a] -> a | undefined\n * @param {Function} fn The predicate function used to determine if the element is the\n * desired one.\n * @param {Array} list The array to consider.\n * @return {Object} The element found, or `undefined`.\n * @see R.transduce\n * @example\n *\n * const xs = [{a: 1, b: 0}, {a:1, b: 1}];\n * R.findLast(R.propEq('a', 1))(xs); //=> {a: 1, b: 1}\n * R.findLast(R.propEq('a', 4))(xs); //=> undefined\n */\nvar findLast = /*#__PURE__*/_curry2( /*#__PURE__*/_dispatchable([], _xfindLast, function findLast(fn, list) {\n var idx = list.length - 1;\n while (idx >= 0) {\n if (fn(list[idx])) {\n return list[idx];\n }\n idx -= 1;\n }\n}));\nexport default findLast;","/** PURE_IMPORTS_START tslib,_AsyncAction PURE_IMPORTS_END */\nimport * as tslib_1 from \"tslib\";\nimport { AsyncAction } from './AsyncAction';\nvar QueueAction = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(QueueAction, _super);\n function QueueAction(scheduler, work) {\n var _this = _super.call(this, scheduler, work) || this;\n _this.scheduler = scheduler;\n _this.work = work;\n return _this;\n }\n QueueAction.prototype.schedule = function (state, delay) {\n if (delay === void 0) {\n delay = 0;\n }\n if (delay > 0) {\n return _super.prototype.schedule.call(this, state, delay);\n }\n this.delay = delay;\n this.state = state;\n this.scheduler.flush(this);\n return this;\n };\n QueueAction.prototype.execute = function (state, delay) {\n return (delay > 0 || this.closed) ?\n _super.prototype.execute.call(this, state, delay) :\n this._execute(state, delay);\n };\n QueueAction.prototype.requestAsyncId = function (scheduler, id, delay) {\n if (delay === void 0) {\n delay = 0;\n }\n if ((delay !== null && delay > 0) || (delay === null && this.delay > 0)) {\n return _super.prototype.requestAsyncId.call(this, scheduler, id, delay);\n }\n return scheduler.flush(this);\n };\n return QueueAction;\n}(AsyncAction));\nexport { QueueAction };\n//# sourceMappingURL=QueueAction.js.map\n","/** PURE_IMPORTS_START _QueueAction,_QueueScheduler PURE_IMPORTS_END */\nimport { QueueAction } from './QueueAction';\nimport { QueueScheduler } from './QueueScheduler';\nexport var queue = /*@__PURE__*/ new QueueScheduler(QueueAction);\n//# sourceMappingURL=queue.js.map\n","/** PURE_IMPORTS_START tslib,_AsyncScheduler PURE_IMPORTS_END */\nimport * as tslib_1 from \"tslib\";\nimport { AsyncScheduler } from './AsyncScheduler';\nvar QueueScheduler = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(QueueScheduler, _super);\n function QueueScheduler() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n return QueueScheduler;\n}(AsyncScheduler));\nexport { QueueScheduler };\n//# sourceMappingURL=QueueScheduler.js.map\n","/** PURE_IMPORTS_START tslib,_Subject,_scheduler_queue,_Subscription,_operators_observeOn,_util_ObjectUnsubscribedError,_SubjectSubscription PURE_IMPORTS_END */\nimport * as tslib_1 from \"tslib\";\nimport { Subject } from './Subject';\nimport { queue } from './scheduler/queue';\nimport { Subscription } from './Subscription';\nimport { ObserveOnSubscriber } from './operators/observeOn';\nimport { ObjectUnsubscribedError } from './util/ObjectUnsubscribedError';\nimport { SubjectSubscription } from './SubjectSubscription';\nvar ReplaySubject = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(ReplaySubject, _super);\n function ReplaySubject(bufferSize, windowTime, scheduler) {\n if (bufferSize === void 0) {\n bufferSize = Number.POSITIVE_INFINITY;\n }\n if (windowTime === void 0) {\n windowTime = Number.POSITIVE_INFINITY;\n }\n var _this = _super.call(this) || this;\n _this.scheduler = scheduler;\n _this._events = [];\n _this._infiniteTimeWindow = false;\n _this._bufferSize = bufferSize < 1 ? 1 : bufferSize;\n _this._windowTime = windowTime < 1 ? 1 : windowTime;\n if (windowTime === Number.POSITIVE_INFINITY) {\n _this._infiniteTimeWindow = true;\n _this.next = _this.nextInfiniteTimeWindow;\n }\n else {\n _this.next = _this.nextTimeWindow;\n }\n return _this;\n }\n ReplaySubject.prototype.nextInfiniteTimeWindow = function (value) {\n var _events = this._events;\n _events.push(value);\n if (_events.length > this._bufferSize) {\n _events.shift();\n }\n _super.prototype.next.call(this, value);\n };\n ReplaySubject.prototype.nextTimeWindow = function (value) {\n this._events.push(new ReplayEvent(this._getNow(), value));\n this._trimBufferThenGetEvents();\n _super.prototype.next.call(this, value);\n };\n ReplaySubject.prototype._subscribe = function (subscriber) {\n var _infiniteTimeWindow = this._infiniteTimeWindow;\n var _events = _infiniteTimeWindow ? this._events : this._trimBufferThenGetEvents();\n var scheduler = this.scheduler;\n var len = _events.length;\n var subscription;\n if (this.closed) {\n throw new ObjectUnsubscribedError();\n }\n else if (this.isStopped || this.hasError) {\n subscription = Subscription.EMPTY;\n }\n else {\n this.observers.push(subscriber);\n subscription = new SubjectSubscription(this, subscriber);\n }\n if (scheduler) {\n subscriber.add(subscriber = new ObserveOnSubscriber(subscriber, scheduler));\n }\n if (_infiniteTimeWindow) {\n for (var i = 0; i < len && !subscriber.closed; i++) {\n subscriber.next(_events[i]);\n }\n }\n else {\n for (var i = 0; i < len && !subscriber.closed; i++) {\n subscriber.next(_events[i].value);\n }\n }\n if (this.hasError) {\n subscriber.error(this.thrownError);\n }\n else if (this.isStopped) {\n subscriber.complete();\n }\n return subscription;\n };\n ReplaySubject.prototype._getNow = function () {\n return (this.scheduler || queue).now();\n };\n ReplaySubject.prototype._trimBufferThenGetEvents = function () {\n var now = this._getNow();\n var _bufferSize = this._bufferSize;\n var _windowTime = this._windowTime;\n var _events = this._events;\n var eventsCount = _events.length;\n var spliceCount = 0;\n while (spliceCount < eventsCount) {\n if ((now - _events[spliceCount].time) < _windowTime) {\n break;\n }\n spliceCount++;\n }\n if (eventsCount > _bufferSize) {\n spliceCount = Math.max(spliceCount, eventsCount - _bufferSize);\n }\n if (spliceCount > 0) {\n _events.splice(0, spliceCount);\n }\n return _events;\n };\n return ReplaySubject;\n}(Subject));\nexport { ReplaySubject };\nvar ReplayEvent = /*@__PURE__*/ (function () {\n function ReplayEvent(time, value) {\n this.time = time;\n this.value = value;\n }\n return ReplayEvent;\n}());\n//# sourceMappingURL=ReplaySubject.js.map\n","/** PURE_IMPORTS_START _ReplaySubject PURE_IMPORTS_END */\nimport { ReplaySubject } from '../ReplaySubject';\nexport function shareReplay(configOrBufferSize, windowTime, scheduler) {\n var config;\n if (configOrBufferSize && typeof configOrBufferSize === 'object') {\n config = configOrBufferSize;\n }\n else {\n config = {\n bufferSize: configOrBufferSize,\n windowTime: windowTime,\n refCount: false,\n scheduler: scheduler\n };\n }\n return function (source) { return source.lift(shareReplayOperator(config)); };\n}\nfunction shareReplayOperator(_a) {\n var _b = _a.bufferSize, bufferSize = _b === void 0 ? Number.POSITIVE_INFINITY : _b, _c = _a.windowTime, windowTime = _c === void 0 ? Number.POSITIVE_INFINITY : _c, useRefCount = _a.refCount, scheduler = _a.scheduler;\n var subject;\n var refCount = 0;\n var subscription;\n var hasError = false;\n var isComplete = false;\n return function shareReplayOperation(source) {\n refCount++;\n if (!subject || hasError) {\n hasError = false;\n subject = new ReplaySubject(bufferSize, windowTime, scheduler);\n subscription = source.subscribe({\n next: function (value) { subject.next(value); },\n error: function (err) {\n hasError = true;\n subject.error(err);\n },\n complete: function () {\n isComplete = true;\n subject.complete();\n },\n });\n }\n var innerSub = subject.subscribe(this);\n this.add(function () {\n refCount--;\n innerSub.unsubscribe();\n if (subscription && !isComplete && useRefCount && refCount === 0) {\n subscription.unsubscribe();\n subscription = undefined;\n subject = undefined;\n }\n });\n };\n}\n//# sourceMappingURL=shareReplay.js.map\n","/** PURE_IMPORTS_START _of,_operators_concatAll PURE_IMPORTS_END */\nimport { of } from './of';\nimport { concatAll } from '../operators/concatAll';\nexport function concat() {\n var observables = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n observables[_i] = arguments[_i];\n }\n return concatAll()(of.apply(void 0, observables));\n}\n//# sourceMappingURL=concat.js.map\n","/** PURE_IMPORTS_START _mergeAll PURE_IMPORTS_END */\nimport { mergeAll } from './mergeAll';\nexport function concatAll() {\n return mergeAll(1);\n}\n//# sourceMappingURL=concatAll.js.map\n","/** PURE_IMPORTS_START _observable_concat,_util_isScheduler PURE_IMPORTS_END */\nimport { concat } from '../observable/concat';\nimport { isScheduler } from '../util/isScheduler';\nexport function startWith() {\n var array = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n array[_i] = arguments[_i];\n }\n var scheduler = array[array.length - 1];\n if (isScheduler(scheduler)) {\n array.pop();\n return function (source) { return concat(array, source, scheduler); };\n }\n else {\n return function (source) { return concat(array, source); };\n }\n}\n//# sourceMappingURL=startWith.js.map\n","/** PURE_IMPORTS_START tslib,_scheduler_async,_util_isDate,_Subscriber,_Notification PURE_IMPORTS_END */\nimport * as tslib_1 from \"tslib\";\nimport { async } from '../scheduler/async';\nimport { isDate } from '../util/isDate';\nimport { Subscriber } from '../Subscriber';\nimport { Notification } from '../Notification';\nexport function delay(delay, scheduler) {\n if (scheduler === void 0) {\n scheduler = async;\n }\n var absoluteDelay = isDate(delay);\n var delayFor = absoluteDelay ? (+delay - scheduler.now()) : Math.abs(delay);\n return function (source) { return source.lift(new DelayOperator(delayFor, scheduler)); };\n}\nvar DelayOperator = /*@__PURE__*/ (function () {\n function DelayOperator(delay, scheduler) {\n this.delay = delay;\n this.scheduler = scheduler;\n }\n DelayOperator.prototype.call = function (subscriber, source) {\n return source.subscribe(new DelaySubscriber(subscriber, this.delay, this.scheduler));\n };\n return DelayOperator;\n}());\nvar DelaySubscriber = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(DelaySubscriber, _super);\n function DelaySubscriber(destination, delay, scheduler) {\n var _this = _super.call(this, destination) || this;\n _this.delay = delay;\n _this.scheduler = scheduler;\n _this.queue = [];\n _this.active = false;\n _this.errored = false;\n return _this;\n }\n DelaySubscriber.dispatch = function (state) {\n var source = state.source;\n var queue = source.queue;\n var scheduler = state.scheduler;\n var destination = state.destination;\n while (queue.length > 0 && (queue[0].time - scheduler.now()) <= 0) {\n queue.shift().notification.observe(destination);\n }\n if (queue.length > 0) {\n var delay_1 = Math.max(0, queue[0].time - scheduler.now());\n this.schedule(state, delay_1);\n }\n else {\n this.unsubscribe();\n source.active = false;\n }\n };\n DelaySubscriber.prototype._schedule = function (scheduler) {\n this.active = true;\n var destination = this.destination;\n destination.add(scheduler.schedule(DelaySubscriber.dispatch, this.delay, {\n source: this, destination: this.destination, scheduler: scheduler\n }));\n };\n DelaySubscriber.prototype.scheduleNotification = function (notification) {\n if (this.errored === true) {\n return;\n }\n var scheduler = this.scheduler;\n var message = new DelayMessage(scheduler.now() + this.delay, notification);\n this.queue.push(message);\n if (this.active === false) {\n this._schedule(scheduler);\n }\n };\n DelaySubscriber.prototype._next = function (value) {\n this.scheduleNotification(Notification.createNext(value));\n };\n DelaySubscriber.prototype._error = function (err) {\n this.errored = true;\n this.queue = [];\n this.destination.error(err);\n this.unsubscribe();\n };\n DelaySubscriber.prototype._complete = function () {\n this.scheduleNotification(Notification.createComplete());\n this.unsubscribe();\n };\n return DelaySubscriber;\n}(Subscriber));\nvar DelayMessage = /*@__PURE__*/ (function () {\n function DelayMessage(time, notification) {\n this.time = time;\n this.notification = notification;\n }\n return DelayMessage;\n}());\n//# sourceMappingURL=delay.js.map\n","/** PURE_IMPORTS_START PURE_IMPORTS_END */\nexport function isDate(value) {\n return value instanceof Date && !isNaN(+value);\n}\n//# sourceMappingURL=isDate.js.map\n","import _curry1 from './internal/_curry1.js';\nimport _isString from './internal/_isString.js';\n\n/**\n * Returns a new list or string with the elements or characters in reverse\n * order.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category List\n * @sig [a] -> [a]\n * @sig String -> String\n * @param {Array|String} list\n * @return {Array|String}\n * @example\n *\n * R.reverse([1, 2, 3]); //=> [3, 2, 1]\n * R.reverse([1, 2]); //=> [2, 1]\n * R.reverse([1]); //=> [1]\n * R.reverse([]); //=> []\n *\n * R.reverse('abc'); //=> 'cba'\n * R.reverse('ab'); //=> 'ba'\n * R.reverse('a'); //=> 'a'\n * R.reverse(''); //=> ''\n */\nvar reverse = /*#__PURE__*/_curry1(function reverse(list) {\n return _isString(list) ? list.split('').reverse().join('') : Array.prototype.slice.call(list, 0).reverse();\n});\nexport default reverse;","export default function _isString(x) {\n return Object.prototype.toString.call(x) === '[object String]';\n}","/** PURE_IMPORTS_START tslib,_Subject,_util_ObjectUnsubscribedError PURE_IMPORTS_END */\nimport * as tslib_1 from \"tslib\";\nimport { Subject } from './Subject';\nimport { ObjectUnsubscribedError } from './util/ObjectUnsubscribedError';\nvar BehaviorSubject = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(BehaviorSubject, _super);\n function BehaviorSubject(_value) {\n var _this = _super.call(this) || this;\n _this._value = _value;\n return _this;\n }\n Object.defineProperty(BehaviorSubject.prototype, \"value\", {\n get: function () {\n return this.getValue();\n },\n enumerable: true,\n configurable: true\n });\n BehaviorSubject.prototype._subscribe = function (subscriber) {\n var subscription = _super.prototype._subscribe.call(this, subscriber);\n if (subscription && !subscription.closed) {\n subscriber.next(this._value);\n }\n return subscription;\n };\n BehaviorSubject.prototype.getValue = function () {\n if (this.hasError) {\n throw this.thrownError;\n }\n else if (this.closed) {\n throw new ObjectUnsubscribedError();\n }\n else {\n return this._value;\n }\n };\n BehaviorSubject.prototype.next = function (value) {\n _super.prototype.next.call(this, this._value = value);\n };\n return BehaviorSubject;\n}(Subject));\nexport { BehaviorSubject };\n//# sourceMappingURL=BehaviorSubject.js.map\n","/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */\nimport * as tslib_1 from \"tslib\";\nimport { Subscriber } from '../Subscriber';\nexport function filter(predicate, thisArg) {\n return function filterOperatorFunction(source) {\n return source.lift(new FilterOperator(predicate, thisArg));\n };\n}\nvar FilterOperator = /*@__PURE__*/ (function () {\n function FilterOperator(predicate, thisArg) {\n this.predicate = predicate;\n this.thisArg = thisArg;\n }\n FilterOperator.prototype.call = function (subscriber, source) {\n return source.subscribe(new FilterSubscriber(subscriber, this.predicate, this.thisArg));\n };\n return FilterOperator;\n}());\nvar FilterSubscriber = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(FilterSubscriber, _super);\n function FilterSubscriber(destination, predicate, thisArg) {\n var _this = _super.call(this, destination) || this;\n _this.predicate = predicate;\n _this.thisArg = thisArg;\n _this.count = 0;\n return _this;\n }\n FilterSubscriber.prototype._next = function (value) {\n var result;\n try {\n result = this.predicate.call(this.thisArg, value, this.count++);\n }\n catch (err) {\n this.destination.error(err);\n return;\n }\n if (result) {\n this.destination.next(value);\n }\n };\n return FilterSubscriber;\n}(Subscriber));\n//# sourceMappingURL=filter.js.map\n","/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */\nimport * as tslib_1 from \"tslib\";\nimport { Subscriber } from '../Subscriber';\nexport function skip(count) {\n return function (source) { return source.lift(new SkipOperator(count)); };\n}\nvar SkipOperator = /*@__PURE__*/ (function () {\n function SkipOperator(total) {\n this.total = total;\n }\n SkipOperator.prototype.call = function (subscriber, source) {\n return source.subscribe(new SkipSubscriber(subscriber, this.total));\n };\n return SkipOperator;\n}());\nvar SkipSubscriber = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(SkipSubscriber, _super);\n function SkipSubscriber(destination, total) {\n var _this = _super.call(this, destination) || this;\n _this.total = total;\n _this.count = 0;\n return _this;\n }\n SkipSubscriber.prototype._next = function (x) {\n if (++this.count > this.total) {\n this.destination.next(x);\n }\n };\n return SkipSubscriber;\n}(Subscriber));\n//# sourceMappingURL=skip.js.map\n","/** PURE_IMPORTS_START _map PURE_IMPORTS_END */\nimport { map } from './map';\nexport function pluck() {\n var properties = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n properties[_i] = arguments[_i];\n }\n var length = properties.length;\n if (length === 0) {\n throw new Error('list of properties cannot be empty.');\n }\n return function (source) { return map(plucker(properties, length))(source); };\n}\nfunction plucker(props, length) {\n var mapper = function (x) {\n var currentProp = x;\n for (var i = 0; i < length; i++) {\n var p = currentProp[props[i]];\n if (typeof p !== 'undefined') {\n currentProp = p;\n }\n else {\n return undefined;\n }\n }\n return currentProp;\n };\n return mapper;\n}\n//# sourceMappingURL=pluck.js.map\n","/** PURE_IMPORTS_START tslib,_OuterSubscriber,_InnerSubscriber,_util_subscribeToResult PURE_IMPORTS_END */\nimport * as tslib_1 from \"tslib\";\nimport { OuterSubscriber } from '../OuterSubscriber';\nimport { InnerSubscriber } from '../InnerSubscriber';\nimport { subscribeToResult } from '../util/subscribeToResult';\nexport function catchError(selector) {\n return function catchErrorOperatorFunction(source) {\n var operator = new CatchOperator(selector);\n var caught = source.lift(operator);\n return (operator.caught = caught);\n };\n}\nvar CatchOperator = /*@__PURE__*/ (function () {\n function CatchOperator(selector) {\n this.selector = selector;\n }\n CatchOperator.prototype.call = function (subscriber, source) {\n return source.subscribe(new CatchSubscriber(subscriber, this.selector, this.caught));\n };\n return CatchOperator;\n}());\nvar CatchSubscriber = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(CatchSubscriber, _super);\n function CatchSubscriber(destination, selector, caught) {\n var _this = _super.call(this, destination) || this;\n _this.selector = selector;\n _this.caught = caught;\n return _this;\n }\n CatchSubscriber.prototype.error = function (err) {\n if (!this.isStopped) {\n var result = void 0;\n try {\n result = this.selector(err, this.caught);\n }\n catch (err2) {\n _super.prototype.error.call(this, err2);\n return;\n }\n this._unsubscribeAndRecycle();\n var innerSubscriber = new InnerSubscriber(this, undefined, undefined);\n this.add(innerSubscriber);\n subscribeToResult(this, result, undefined, undefined, innerSubscriber);\n }\n };\n return CatchSubscriber;\n}(OuterSubscriber));\n//# sourceMappingURL=catchError.js.map\n","/** PURE_IMPORTS_START _Observable,_util_noop PURE_IMPORTS_END */\nimport { Observable } from '../Observable';\nimport { noop } from '../util/noop';\nexport var NEVER = /*@__PURE__*/ new Observable(noop);\nexport function never() {\n return NEVER;\n}\n//# sourceMappingURL=never.js.map\n","/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */\nimport * as tslib_1 from \"tslib\";\nimport { Subscriber } from '../Subscriber';\nexport function mapTo(value) {\n return function (source) { return source.lift(new MapToOperator(value)); };\n}\nvar MapToOperator = /*@__PURE__*/ (function () {\n function MapToOperator(value) {\n this.value = value;\n }\n MapToOperator.prototype.call = function (subscriber, source) {\n return source.subscribe(new MapToSubscriber(subscriber, this.value));\n };\n return MapToOperator;\n}());\nvar MapToSubscriber = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(MapToSubscriber, _super);\n function MapToSubscriber(destination, value) {\n var _this = _super.call(this, destination) || this;\n _this.value = value;\n return _this;\n }\n MapToSubscriber.prototype._next = function (x) {\n this.destination.next(this.value);\n };\n return MapToSubscriber;\n}(Subscriber));\n//# sourceMappingURL=mapTo.js.map\n","/** PURE_IMPORTS_START _Observable,_util_isArray,_util_isFunction,_operators_map PURE_IMPORTS_END */\nimport { Observable } from '../Observable';\nimport { isArray } from '../util/isArray';\nimport { isFunction } from '../util/isFunction';\nimport { map } from '../operators/map';\nexport function fromEventPattern(addHandler, removeHandler, resultSelector) {\n if (resultSelector) {\n return fromEventPattern(addHandler, removeHandler).pipe(map(function (args) { return isArray(args) ? resultSelector.apply(void 0, args) : resultSelector(args); }));\n }\n return new Observable(function (subscriber) {\n var handler = function () {\n var e = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n e[_i] = arguments[_i];\n }\n return subscriber.next(e.length === 1 ? e[0] : e);\n };\n var retValue;\n try {\n retValue = addHandler(handler);\n }\n catch (err) {\n subscriber.error(err);\n return undefined;\n }\n if (!isFunction(removeHandler)) {\n return undefined;\n }\n return function () { return removeHandler(handler, retValue); };\n });\n}\n//# sourceMappingURL=fromEventPattern.js.map\n","/** PURE_IMPORTS_START tslib,_OuterSubscriber,_util_subscribeToResult PURE_IMPORTS_END */\nimport * as tslib_1 from \"tslib\";\nimport { OuterSubscriber } from '../OuterSubscriber';\nimport { subscribeToResult } from '../util/subscribeToResult';\nexport var defaultThrottleConfig = {\n leading: true,\n trailing: false\n};\nexport function throttle(durationSelector, config) {\n if (config === void 0) {\n config = defaultThrottleConfig;\n }\n return function (source) { return source.lift(new ThrottleOperator(durationSelector, config.leading, config.trailing)); };\n}\nvar ThrottleOperator = /*@__PURE__*/ (function () {\n function ThrottleOperator(durationSelector, leading, trailing) {\n this.durationSelector = durationSelector;\n this.leading = leading;\n this.trailing = trailing;\n }\n ThrottleOperator.prototype.call = function (subscriber, source) {\n return source.subscribe(new ThrottleSubscriber(subscriber, this.durationSelector, this.leading, this.trailing));\n };\n return ThrottleOperator;\n}());\nvar ThrottleSubscriber = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(ThrottleSubscriber, _super);\n function ThrottleSubscriber(destination, durationSelector, _leading, _trailing) {\n var _this = _super.call(this, destination) || this;\n _this.destination = destination;\n _this.durationSelector = durationSelector;\n _this._leading = _leading;\n _this._trailing = _trailing;\n _this._hasValue = false;\n return _this;\n }\n ThrottleSubscriber.prototype._next = function (value) {\n this._hasValue = true;\n this._sendValue = value;\n if (!this._throttled) {\n if (this._leading) {\n this.send();\n }\n else {\n this.throttle(value);\n }\n }\n };\n ThrottleSubscriber.prototype.send = function () {\n var _a = this, _hasValue = _a._hasValue, _sendValue = _a._sendValue;\n if (_hasValue) {\n this.destination.next(_sendValue);\n this.throttle(_sendValue);\n }\n this._hasValue = false;\n this._sendValue = null;\n };\n ThrottleSubscriber.prototype.throttle = function (value) {\n var duration = this.tryDurationSelector(value);\n if (!!duration) {\n this.add(this._throttled = subscribeToResult(this, duration));\n }\n };\n ThrottleSubscriber.prototype.tryDurationSelector = function (value) {\n try {\n return this.durationSelector(value);\n }\n catch (err) {\n this.destination.error(err);\n return null;\n }\n };\n ThrottleSubscriber.prototype.throttlingDone = function () {\n var _a = this, _throttled = _a._throttled, _trailing = _a._trailing;\n if (_throttled) {\n _throttled.unsubscribe();\n }\n this._throttled = null;\n if (_trailing) {\n this.send();\n }\n };\n ThrottleSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {\n this.throttlingDone();\n };\n ThrottleSubscriber.prototype.notifyComplete = function () {\n this.throttlingDone();\n };\n return ThrottleSubscriber;\n}(OuterSubscriber));\n//# sourceMappingURL=throttle.js.map\n","/** PURE_IMPORTS_START _switchMap PURE_IMPORTS_END */\nimport { switchMap } from './switchMap';\nexport function switchMapTo(innerObservable, resultSelector) {\n return resultSelector ? switchMap(function () { return innerObservable; }, resultSelector) : switchMap(function () { return innerObservable; });\n}\n//# sourceMappingURL=switchMapTo.js.map\n","/** PURE_IMPORTS_START tslib,_Subscriber,_scheduler_async PURE_IMPORTS_END */\nimport * as tslib_1 from \"tslib\";\nimport { Subscriber } from '../Subscriber';\nimport { async } from '../scheduler/async';\nexport function debounceTime(dueTime, scheduler) {\n if (scheduler === void 0) {\n scheduler = async;\n }\n return function (source) { return source.lift(new DebounceTimeOperator(dueTime, scheduler)); };\n}\nvar DebounceTimeOperator = /*@__PURE__*/ (function () {\n function DebounceTimeOperator(dueTime, scheduler) {\n this.dueTime = dueTime;\n this.scheduler = scheduler;\n }\n DebounceTimeOperator.prototype.call = function (subscriber, source) {\n return source.subscribe(new DebounceTimeSubscriber(subscriber, this.dueTime, this.scheduler));\n };\n return DebounceTimeOperator;\n}());\nvar DebounceTimeSubscriber = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(DebounceTimeSubscriber, _super);\n function DebounceTimeSubscriber(destination, dueTime, scheduler) {\n var _this = _super.call(this, destination) || this;\n _this.dueTime = dueTime;\n _this.scheduler = scheduler;\n _this.debouncedSubscription = null;\n _this.lastValue = null;\n _this.hasValue = false;\n return _this;\n }\n DebounceTimeSubscriber.prototype._next = function (value) {\n this.clearDebounce();\n this.lastValue = value;\n this.hasValue = true;\n this.add(this.debouncedSubscription = this.scheduler.schedule(dispatchNext, this.dueTime, this));\n };\n DebounceTimeSubscriber.prototype._complete = function () {\n this.debouncedNext();\n this.destination.complete();\n };\n DebounceTimeSubscriber.prototype.debouncedNext = function () {\n this.clearDebounce();\n if (this.hasValue) {\n var lastValue = this.lastValue;\n this.lastValue = null;\n this.hasValue = false;\n this.destination.next(lastValue);\n }\n };\n DebounceTimeSubscriber.prototype.clearDebounce = function () {\n var debouncedSubscription = this.debouncedSubscription;\n if (debouncedSubscription !== null) {\n this.remove(debouncedSubscription);\n debouncedSubscription.unsubscribe();\n this.debouncedSubscription = null;\n }\n };\n return DebounceTimeSubscriber;\n}(Subscriber));\nfunction dispatchNext(subscriber) {\n subscriber.debouncedNext();\n}\n//# sourceMappingURL=debounceTime.js.map\n","/** PURE_IMPORTS_START tslib,_OuterSubscriber,_util_subscribeToResult PURE_IMPORTS_END */\nimport * as tslib_1 from \"tslib\";\nimport { OuterSubscriber } from '../OuterSubscriber';\nimport { subscribeToResult } from '../util/subscribeToResult';\nexport function sample(notifier) {\n return function (source) { return source.lift(new SampleOperator(notifier)); };\n}\nvar SampleOperator = /*@__PURE__*/ (function () {\n function SampleOperator(notifier) {\n this.notifier = notifier;\n }\n SampleOperator.prototype.call = function (subscriber, source) {\n var sampleSubscriber = new SampleSubscriber(subscriber);\n var subscription = source.subscribe(sampleSubscriber);\n subscription.add(subscribeToResult(sampleSubscriber, this.notifier));\n return subscription;\n };\n return SampleOperator;\n}());\nvar SampleSubscriber = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(SampleSubscriber, _super);\n function SampleSubscriber() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.hasValue = false;\n return _this;\n }\n SampleSubscriber.prototype._next = function (value) {\n this.value = value;\n this.hasValue = true;\n };\n SampleSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {\n this.emitValue();\n };\n SampleSubscriber.prototype.notifyComplete = function () {\n this.emitValue();\n };\n SampleSubscriber.prototype.emitValue = function () {\n if (this.hasValue) {\n this.hasValue = false;\n this.destination.next(this.value);\n }\n };\n return SampleSubscriber;\n}(OuterSubscriber));\n//# sourceMappingURL=sample.js.map\n","/** PURE_IMPORTS_START _defer,_empty PURE_IMPORTS_END */\nimport { defer } from './defer';\nimport { EMPTY } from './empty';\nexport function iif(condition, trueResult, falseResult) {\n if (trueResult === void 0) {\n trueResult = EMPTY;\n }\n if (falseResult === void 0) {\n falseResult = EMPTY;\n }\n return defer(function () { return condition() ? trueResult : falseResult; });\n}\n//# sourceMappingURL=iif.js.map\n","import _curry1 from './internal/_curry1.js';\nimport keys from './keys.js';\n\n/**\n * Returns a list of all the enumerable own properties of the supplied object.\n * Note that the order of the output array is not guaranteed across different\n * JS platforms.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category Object\n * @sig {k: v} -> [v]\n * @param {Object} obj The object to extract values from\n * @return {Array} An array of the values of the object's own properties.\n * @see R.valuesIn, R.keys\n * @example\n *\n * R.values({a: 1, b: 2, c: 3}); //=> [1, 2, 3]\n */\nvar values = /*#__PURE__*/_curry1(function values(obj) {\n var props = keys(obj);\n var len = props.length;\n var vals = [];\n var idx = 0;\n while (idx < len) {\n vals[idx] = obj[props[idx]];\n idx += 1;\n }\n return vals;\n});\nexport default values;","/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */\nimport * as tslib_1 from \"tslib\";\nimport { Subscriber } from '../Subscriber';\nexport function refCount() {\n return function refCountOperatorFunction(source) {\n return source.lift(new RefCountOperator(source));\n };\n}\nvar RefCountOperator = /*@__PURE__*/ (function () {\n function RefCountOperator(connectable) {\n this.connectable = connectable;\n }\n RefCountOperator.prototype.call = function (subscriber, source) {\n var connectable = this.connectable;\n connectable._refCount++;\n var refCounter = new RefCountSubscriber(subscriber, connectable);\n var subscription = source.subscribe(refCounter);\n if (!refCounter.closed) {\n refCounter.connection = connectable.connect();\n }\n return subscription;\n };\n return RefCountOperator;\n}());\nvar RefCountSubscriber = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(RefCountSubscriber, _super);\n function RefCountSubscriber(destination, connectable) {\n var _this = _super.call(this, destination) || this;\n _this.connectable = connectable;\n return _this;\n }\n RefCountSubscriber.prototype._unsubscribe = function () {\n var connectable = this.connectable;\n if (!connectable) {\n this.connection = null;\n return;\n }\n this.connectable = null;\n var refCount = connectable._refCount;\n if (refCount <= 0) {\n this.connection = null;\n return;\n }\n connectable._refCount = refCount - 1;\n if (refCount > 1) {\n this.connection = null;\n return;\n }\n var connection = this.connection;\n var sharedConnection = connectable._connection;\n this.connection = null;\n if (sharedConnection && (!connection || sharedConnection === connection)) {\n sharedConnection.unsubscribe();\n }\n };\n return RefCountSubscriber;\n}(Subscriber));\n//# sourceMappingURL=refCount.js.map\n","/** PURE_IMPORTS_START tslib,_Subject,_Observable,_Subscriber,_Subscription,_operators_refCount PURE_IMPORTS_END */\nimport * as tslib_1 from \"tslib\";\nimport { SubjectSubscriber } from '../Subject';\nimport { Observable } from '../Observable';\nimport { Subscriber } from '../Subscriber';\nimport { Subscription } from '../Subscription';\nimport { refCount as higherOrderRefCount } from '../operators/refCount';\nvar ConnectableObservable = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(ConnectableObservable, _super);\n function ConnectableObservable(source, subjectFactory) {\n var _this = _super.call(this) || this;\n _this.source = source;\n _this.subjectFactory = subjectFactory;\n _this._refCount = 0;\n _this._isComplete = false;\n return _this;\n }\n ConnectableObservable.prototype._subscribe = function (subscriber) {\n return this.getSubject().subscribe(subscriber);\n };\n ConnectableObservable.prototype.getSubject = function () {\n var subject = this._subject;\n if (!subject || subject.isStopped) {\n this._subject = this.subjectFactory();\n }\n return this._subject;\n };\n ConnectableObservable.prototype.connect = function () {\n var connection = this._connection;\n if (!connection) {\n this._isComplete = false;\n connection = this._connection = new Subscription();\n connection.add(this.source\n .subscribe(new ConnectableSubscriber(this.getSubject(), this)));\n if (connection.closed) {\n this._connection = null;\n connection = Subscription.EMPTY;\n }\n }\n return connection;\n };\n ConnectableObservable.prototype.refCount = function () {\n return higherOrderRefCount()(this);\n };\n return ConnectableObservable;\n}(Observable));\nexport { ConnectableObservable };\nexport var connectableObservableDescriptor = /*@__PURE__*/ (function () {\n var connectableProto = ConnectableObservable.prototype;\n return {\n operator: { value: null },\n _refCount: { value: 0, writable: true },\n _subject: { value: null, writable: true },\n _connection: { value: null, writable: true },\n _subscribe: { value: connectableProto._subscribe },\n _isComplete: { value: connectableProto._isComplete, writable: true },\n getSubject: { value: connectableProto.getSubject },\n connect: { value: connectableProto.connect },\n refCount: { value: connectableProto.refCount }\n };\n})();\nvar ConnectableSubscriber = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(ConnectableSubscriber, _super);\n function ConnectableSubscriber(destination, connectable) {\n var _this = _super.call(this, destination) || this;\n _this.connectable = connectable;\n return _this;\n }\n ConnectableSubscriber.prototype._error = function (err) {\n this._unsubscribe();\n _super.prototype._error.call(this, err);\n };\n ConnectableSubscriber.prototype._complete = function () {\n this.connectable._isComplete = true;\n this._unsubscribe();\n _super.prototype._complete.call(this);\n };\n ConnectableSubscriber.prototype._unsubscribe = function () {\n var connectable = this.connectable;\n if (connectable) {\n this.connectable = null;\n var connection = connectable._connection;\n connectable._refCount = 0;\n connectable._subject = null;\n connectable._connection = null;\n if (connection) {\n connection.unsubscribe();\n }\n }\n };\n return ConnectableSubscriber;\n}(SubjectSubscriber));\nvar RefCountOperator = /*@__PURE__*/ (function () {\n function RefCountOperator(connectable) {\n this.connectable = connectable;\n }\n RefCountOperator.prototype.call = function (subscriber, source) {\n var connectable = this.connectable;\n connectable._refCount++;\n var refCounter = new RefCountSubscriber(subscriber, connectable);\n var subscription = source.subscribe(refCounter);\n if (!refCounter.closed) {\n refCounter.connection = connectable.connect();\n }\n return subscription;\n };\n return RefCountOperator;\n}());\nvar RefCountSubscriber = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(RefCountSubscriber, _super);\n function RefCountSubscriber(destination, connectable) {\n var _this = _super.call(this, destination) || this;\n _this.connectable = connectable;\n return _this;\n }\n RefCountSubscriber.prototype._unsubscribe = function () {\n var connectable = this.connectable;\n if (!connectable) {\n this.connection = null;\n return;\n }\n this.connectable = null;\n var refCount = connectable._refCount;\n if (refCount <= 0) {\n this.connection = null;\n return;\n }\n connectable._refCount = refCount - 1;\n if (refCount > 1) {\n this.connection = null;\n return;\n }\n var connection = this.connection;\n var sharedConnection = connectable._connection;\n this.connection = null;\n if (sharedConnection && (!connection || sharedConnection === connection)) {\n sharedConnection.unsubscribe();\n }\n };\n return RefCountSubscriber;\n}(Subscriber));\n//# sourceMappingURL=ConnectableObservable.js.map\n","/** PURE_IMPORTS_START _observable_ConnectableObservable PURE_IMPORTS_END */\nimport { connectableObservableDescriptor } from '../observable/ConnectableObservable';\nexport function multicast(subjectOrSubjectFactory, selector) {\n return function multicastOperatorFunction(source) {\n var subjectFactory;\n if (typeof subjectOrSubjectFactory === 'function') {\n subjectFactory = subjectOrSubjectFactory;\n }\n else {\n subjectFactory = function subjectFactory() {\n return subjectOrSubjectFactory;\n };\n }\n if (typeof selector === 'function') {\n return source.lift(new MulticastOperator(subjectFactory, selector));\n }\n var connectable = Object.create(source, connectableObservableDescriptor);\n connectable.source = source;\n connectable.subjectFactory = subjectFactory;\n return connectable;\n };\n}\nvar MulticastOperator = /*@__PURE__*/ (function () {\n function MulticastOperator(subjectFactory, selector) {\n this.subjectFactory = subjectFactory;\n this.selector = selector;\n }\n MulticastOperator.prototype.call = function (subscriber, source) {\n var selector = this.selector;\n var subject = this.subjectFactory();\n var subscription = selector(subject).subscribe(subscriber);\n subscription.add(source.subscribe(subject));\n return subscription;\n };\n return MulticastOperator;\n}());\nexport { MulticastOperator };\n//# sourceMappingURL=multicast.js.map\n","/** PURE_IMPORTS_START _multicast,_refCount,_Subject PURE_IMPORTS_END */\nimport { multicast } from './multicast';\nimport { refCount } from './refCount';\nimport { Subject } from '../Subject';\nfunction shareSubjectFactory() {\n return new Subject();\n}\nexport function share() {\n return function (source) { return refCount()(multicast(shareSubjectFactory)(source)); };\n}\n//# sourceMappingURL=share.js.map\n","/** PURE_IMPORTS_START PURE_IMPORTS_END */\nvar ArgumentOutOfRangeErrorImpl = /*@__PURE__*/ (function () {\n function ArgumentOutOfRangeErrorImpl() {\n Error.call(this);\n this.message = 'argument out of range';\n this.name = 'ArgumentOutOfRangeError';\n return this;\n }\n ArgumentOutOfRangeErrorImpl.prototype = /*@__PURE__*/ Object.create(Error.prototype);\n return ArgumentOutOfRangeErrorImpl;\n})();\nexport var ArgumentOutOfRangeError = ArgumentOutOfRangeErrorImpl;\n//# sourceMappingURL=ArgumentOutOfRangeError.js.map\n","/** PURE_IMPORTS_START tslib,_Subscriber,_util_ArgumentOutOfRangeError,_observable_empty PURE_IMPORTS_END */\nimport * as tslib_1 from \"tslib\";\nimport { Subscriber } from '../Subscriber';\nimport { ArgumentOutOfRangeError } from '../util/ArgumentOutOfRangeError';\nimport { empty } from '../observable/empty';\nexport function take(count) {\n return function (source) {\n if (count === 0) {\n return empty();\n }\n else {\n return source.lift(new TakeOperator(count));\n }\n };\n}\nvar TakeOperator = /*@__PURE__*/ (function () {\n function TakeOperator(total) {\n this.total = total;\n if (this.total < 0) {\n throw new ArgumentOutOfRangeError;\n }\n }\n TakeOperator.prototype.call = function (subscriber, source) {\n return source.subscribe(new TakeSubscriber(subscriber, this.total));\n };\n return TakeOperator;\n}());\nvar TakeSubscriber = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(TakeSubscriber, _super);\n function TakeSubscriber(destination, total) {\n var _this = _super.call(this, destination) || this;\n _this.total = total;\n _this.count = 0;\n return _this;\n }\n TakeSubscriber.prototype._next = function (value) {\n var total = this.total;\n var count = ++this.count;\n if (count <= total) {\n this.destination.next(value);\n if (count === total) {\n this.destination.complete();\n this.unsubscribe();\n }\n }\n };\n return TakeSubscriber;\n}(Subscriber));\n//# sourceMappingURL=take.js.map\n","export default function _identity(x) {\n return x;\n}","import _curry1 from './internal/_curry1.js';\nimport _identity from './internal/_identity.js';\n\n/**\n * A function that does nothing but return the parameter supplied to it. Good\n * as a default or placeholder function.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category Function\n * @sig a -> a\n * @param {*} x The value to return.\n * @return {*} The input value, `x`.\n * @example\n *\n * R.identity(1); //=> 1\n *\n * const obj = {};\n * R.identity(obj) === obj; //=> true\n * @symb R.identity(a) = a\n */\nvar identity = /*#__PURE__*/_curry1(_identity);\nexport default identity;","/** PURE_IMPORTS_START tslib,_.._util_root,_.._Observable,_.._Subscriber,_.._operators_map PURE_IMPORTS_END */\nimport * as tslib_1 from \"tslib\";\nimport { root } from '../../util/root';\nimport { Observable } from '../../Observable';\nimport { Subscriber } from '../../Subscriber';\nimport { map } from '../../operators/map';\nfunction getCORSRequest() {\n if (root.XMLHttpRequest) {\n return new root.XMLHttpRequest();\n }\n else if (!!root.XDomainRequest) {\n return new root.XDomainRequest();\n }\n else {\n throw new Error('CORS is not supported by your browser');\n }\n}\nfunction getXMLHttpRequest() {\n if (root.XMLHttpRequest) {\n return new root.XMLHttpRequest();\n }\n else {\n var progId = void 0;\n try {\n var progIds = ['Msxml2.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.4.0'];\n for (var i = 0; i < 3; i++) {\n try {\n progId = progIds[i];\n if (new root.ActiveXObject(progId)) {\n break;\n }\n }\n catch (e) {\n }\n }\n return new root.ActiveXObject(progId);\n }\n catch (e) {\n throw new Error('XMLHttpRequest is not supported by your browser');\n }\n }\n}\nexport function ajaxGet(url, headers) {\n if (headers === void 0) {\n headers = null;\n }\n return new AjaxObservable({ method: 'GET', url: url, headers: headers });\n}\nexport function ajaxPost(url, body, headers) {\n return new AjaxObservable({ method: 'POST', url: url, body: body, headers: headers });\n}\nexport function ajaxDelete(url, headers) {\n return new AjaxObservable({ method: 'DELETE', url: url, headers: headers });\n}\nexport function ajaxPut(url, body, headers) {\n return new AjaxObservable({ method: 'PUT', url: url, body: body, headers: headers });\n}\nexport function ajaxPatch(url, body, headers) {\n return new AjaxObservable({ method: 'PATCH', url: url, body: body, headers: headers });\n}\nvar mapResponse = /*@__PURE__*/ map(function (x, index) { return x.response; });\nexport function ajaxGetJSON(url, headers) {\n return mapResponse(new AjaxObservable({\n method: 'GET',\n url: url,\n responseType: 'json',\n headers: headers\n }));\n}\nvar AjaxObservable = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(AjaxObservable, _super);\n function AjaxObservable(urlOrRequest) {\n var _this = _super.call(this) || this;\n var request = {\n async: true,\n createXHR: function () {\n return this.crossDomain ? getCORSRequest() : getXMLHttpRequest();\n },\n crossDomain: true,\n withCredentials: false,\n headers: {},\n method: 'GET',\n responseType: 'json',\n timeout: 0\n };\n if (typeof urlOrRequest === 'string') {\n request.url = urlOrRequest;\n }\n else {\n for (var prop in urlOrRequest) {\n if (urlOrRequest.hasOwnProperty(prop)) {\n request[prop] = urlOrRequest[prop];\n }\n }\n }\n _this.request = request;\n return _this;\n }\n AjaxObservable.prototype._subscribe = function (subscriber) {\n return new AjaxSubscriber(subscriber, this.request);\n };\n AjaxObservable.create = (function () {\n var create = function (urlOrRequest) {\n return new AjaxObservable(urlOrRequest);\n };\n create.get = ajaxGet;\n create.post = ajaxPost;\n create.delete = ajaxDelete;\n create.put = ajaxPut;\n create.patch = ajaxPatch;\n create.getJSON = ajaxGetJSON;\n return create;\n })();\n return AjaxObservable;\n}(Observable));\nexport { AjaxObservable };\nvar AjaxSubscriber = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(AjaxSubscriber, _super);\n function AjaxSubscriber(destination, request) {\n var _this = _super.call(this, destination) || this;\n _this.request = request;\n _this.done = false;\n var headers = request.headers = request.headers || {};\n if (!request.crossDomain && !_this.getHeader(headers, 'X-Requested-With')) {\n headers['X-Requested-With'] = 'XMLHttpRequest';\n }\n var contentTypeHeader = _this.getHeader(headers, 'Content-Type');\n if (!contentTypeHeader && !(root.FormData && request.body instanceof root.FormData) && typeof request.body !== 'undefined') {\n headers['Content-Type'] = 'application/x-www-form-urlencoded; charset=UTF-8';\n }\n request.body = _this.serializeBody(request.body, _this.getHeader(request.headers, 'Content-Type'));\n _this.send();\n return _this;\n }\n AjaxSubscriber.prototype.next = function (e) {\n this.done = true;\n var _a = this, xhr = _a.xhr, request = _a.request, destination = _a.destination;\n var result;\n try {\n result = new AjaxResponse(e, xhr, request);\n }\n catch (err) {\n return destination.error(err);\n }\n destination.next(result);\n };\n AjaxSubscriber.prototype.send = function () {\n var _a = this, request = _a.request, _b = _a.request, user = _b.user, method = _b.method, url = _b.url, async = _b.async, password = _b.password, headers = _b.headers, body = _b.body;\n try {\n var xhr = this.xhr = request.createXHR();\n this.setupEvents(xhr, request);\n if (user) {\n xhr.open(method, url, async, user, password);\n }\n else {\n xhr.open(method, url, async);\n }\n if (async) {\n xhr.timeout = request.timeout;\n xhr.responseType = request.responseType;\n }\n if ('withCredentials' in xhr) {\n xhr.withCredentials = !!request.withCredentials;\n }\n this.setHeaders(xhr, headers);\n if (body) {\n xhr.send(body);\n }\n else {\n xhr.send();\n }\n }\n catch (err) {\n this.error(err);\n }\n };\n AjaxSubscriber.prototype.serializeBody = function (body, contentType) {\n if (!body || typeof body === 'string') {\n return body;\n }\n else if (root.FormData && body instanceof root.FormData) {\n return body;\n }\n if (contentType) {\n var splitIndex = contentType.indexOf(';');\n if (splitIndex !== -1) {\n contentType = contentType.substring(0, splitIndex);\n }\n }\n switch (contentType) {\n case 'application/x-www-form-urlencoded':\n return Object.keys(body).map(function (key) { return encodeURIComponent(key) + \"=\" + encodeURIComponent(body[key]); }).join('&');\n case 'application/json':\n return JSON.stringify(body);\n default:\n return body;\n }\n };\n AjaxSubscriber.prototype.setHeaders = function (xhr, headers) {\n for (var key in headers) {\n if (headers.hasOwnProperty(key)) {\n xhr.setRequestHeader(key, headers[key]);\n }\n }\n };\n AjaxSubscriber.prototype.getHeader = function (headers, headerName) {\n for (var key in headers) {\n if (key.toLowerCase() === headerName.toLowerCase()) {\n return headers[key];\n }\n }\n return undefined;\n };\n AjaxSubscriber.prototype.setupEvents = function (xhr, request) {\n var progressSubscriber = request.progressSubscriber;\n function xhrTimeout(e) {\n var _a = xhrTimeout, subscriber = _a.subscriber, progressSubscriber = _a.progressSubscriber, request = _a.request;\n if (progressSubscriber) {\n progressSubscriber.error(e);\n }\n var error;\n try {\n error = new AjaxTimeoutError(this, request);\n }\n catch (err) {\n error = err;\n }\n subscriber.error(error);\n }\n xhr.ontimeout = xhrTimeout;\n xhrTimeout.request = request;\n xhrTimeout.subscriber = this;\n xhrTimeout.progressSubscriber = progressSubscriber;\n if (xhr.upload && 'withCredentials' in xhr) {\n if (progressSubscriber) {\n var xhrProgress_1;\n xhrProgress_1 = function (e) {\n var progressSubscriber = xhrProgress_1.progressSubscriber;\n progressSubscriber.next(e);\n };\n if (root.XDomainRequest) {\n xhr.onprogress = xhrProgress_1;\n }\n else {\n xhr.upload.onprogress = xhrProgress_1;\n }\n xhrProgress_1.progressSubscriber = progressSubscriber;\n }\n var xhrError_1;\n xhrError_1 = function (e) {\n var _a = xhrError_1, progressSubscriber = _a.progressSubscriber, subscriber = _a.subscriber, request = _a.request;\n if (progressSubscriber) {\n progressSubscriber.error(e);\n }\n var error;\n try {\n error = new AjaxError('ajax error', this, request);\n }\n catch (err) {\n error = err;\n }\n subscriber.error(error);\n };\n xhr.onerror = xhrError_1;\n xhrError_1.request = request;\n xhrError_1.subscriber = this;\n xhrError_1.progressSubscriber = progressSubscriber;\n }\n function xhrReadyStateChange(e) {\n return;\n }\n xhr.onreadystatechange = xhrReadyStateChange;\n xhrReadyStateChange.subscriber = this;\n xhrReadyStateChange.progressSubscriber = progressSubscriber;\n xhrReadyStateChange.request = request;\n function xhrLoad(e) {\n var _a = xhrLoad, subscriber = _a.subscriber, progressSubscriber = _a.progressSubscriber, request = _a.request;\n if (this.readyState === 4) {\n var status_1 = this.status === 1223 ? 204 : this.status;\n var response = (this.responseType === 'text' ? (this.response || this.responseText) : this.response);\n if (status_1 === 0) {\n status_1 = response ? 200 : 0;\n }\n if (status_1 < 400) {\n if (progressSubscriber) {\n progressSubscriber.complete();\n }\n subscriber.next(e);\n subscriber.complete();\n }\n else {\n if (progressSubscriber) {\n progressSubscriber.error(e);\n }\n var error = void 0;\n try {\n error = new AjaxError('ajax error ' + status_1, this, request);\n }\n catch (err) {\n error = err;\n }\n subscriber.error(error);\n }\n }\n }\n xhr.onload = xhrLoad;\n xhrLoad.subscriber = this;\n xhrLoad.progressSubscriber = progressSubscriber;\n xhrLoad.request = request;\n };\n AjaxSubscriber.prototype.unsubscribe = function () {\n var _a = this, done = _a.done, xhr = _a.xhr;\n if (!done && xhr && xhr.readyState !== 4 && typeof xhr.abort === 'function') {\n xhr.abort();\n }\n _super.prototype.unsubscribe.call(this);\n };\n return AjaxSubscriber;\n}(Subscriber));\nexport { AjaxSubscriber };\nvar AjaxResponse = /*@__PURE__*/ (function () {\n function AjaxResponse(originalEvent, xhr, request) {\n this.originalEvent = originalEvent;\n this.xhr = xhr;\n this.request = request;\n this.status = xhr.status;\n this.responseType = xhr.responseType || request.responseType;\n this.response = parseXhrResponse(this.responseType, xhr);\n }\n return AjaxResponse;\n}());\nexport { AjaxResponse };\nvar AjaxErrorImpl = /*@__PURE__*/ (function () {\n function AjaxErrorImpl(message, xhr, request) {\n Error.call(this);\n this.message = message;\n this.name = 'AjaxError';\n this.xhr = xhr;\n this.request = request;\n this.status = xhr.status;\n this.responseType = xhr.responseType || request.responseType;\n this.response = parseXhrResponse(this.responseType, xhr);\n return this;\n }\n AjaxErrorImpl.prototype = /*@__PURE__*/ Object.create(Error.prototype);\n return AjaxErrorImpl;\n})();\nexport var AjaxError = AjaxErrorImpl;\nfunction parseJson(xhr) {\n if ('response' in xhr) {\n return xhr.responseType ? xhr.response : JSON.parse(xhr.response || xhr.responseText || 'null');\n }\n else {\n return JSON.parse(xhr.responseText || 'null');\n }\n}\nfunction parseXhrResponse(responseType, xhr) {\n switch (responseType) {\n case 'json':\n return parseJson(xhr);\n case 'xml':\n return xhr.responseXML;\n case 'text':\n default:\n return ('response' in xhr) ? xhr.response : xhr.responseText;\n }\n}\nfunction AjaxTimeoutErrorImpl(xhr, request) {\n AjaxError.call(this, 'ajax timeout', xhr, request);\n this.name = 'AjaxTimeoutError';\n return this;\n}\nexport var AjaxTimeoutError = AjaxTimeoutErrorImpl;\n//# sourceMappingURL=AjaxObservable.js.map\n","/** PURE_IMPORTS_START _AjaxObservable PURE_IMPORTS_END */\nimport { AjaxObservable } from './AjaxObservable';\nexport var ajax = /*@__PURE__*/ (function () { return AjaxObservable.create; })();\n//# sourceMappingURL=ajax.js.map\n"],"sourceRoot":""} \ No newline at end of file diff --git a/material/assets/javascripts/worker/search.926ffd9e.min.js.map b/material/assets/javascripts/worker/search.926ffd9e.min.js.map deleted file mode 100644 index 7152b06bc..000000000 --- a/material/assets/javascripts/worker/search.926ffd9e.min.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/escape-html/index.js","webpack:///./node_modules/escape-string-regexp/index.js","webpack:///./node_modules/lunr/lunr.js-exposed","webpack:///(webpack)/buildin/global.js","webpack:///./node_modules/lunr/lunr.js","webpack:///./node_modules/tslib/tslib.es6.js","webpack:///./src/assets/javascripts/integrations/search/_/index.ts","webpack:///./src/assets/javascripts/workers/search/message/index.ts","webpack:///./src/assets/javascripts/workers/search/main/index.ts","webpack:///./src/assets/javascripts/integrations/search/document/index.ts","webpack:///./src/assets/javascripts/integrations/search/highlight/index.ts"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","matchHtmlRegExp","string","escape","str","match","exec","html","index","lastIndex","length","charCodeAt","substring","matchOperatorsRegex","TypeError","replace","g","this","Function","e","window","global","step2list","step3list","v","C","re_mgr0","re_mgr1","re_meq1","re_s_v","re_1a","re2_1a","re_1b","re2_1b","re_1b_2","re2_1b_2","re3_1b_2","re4_1b_2","re_1c","re_2","re_3","re_4","re2_4","re_5","re_5_1","re3_5","porterStemmer","lunr","config","builder","Builder","pipeline","add","trimmer","stopWordFilter","stemmer","searchPipeline","build","version","utils","warn","message","console","asString","obj","toString","clone","keys","val","Array","isArray","slice","FieldRef","docRef","fieldName","stringValue","_stringValue","joiner","fromString","indexOf","fieldRef","undefined","Set","elements","complete","intersect","other","union","contains","empty","a","b","intersection","element","push","concat","idf","posting","documentCount","documentsWithTerm","x","Math","log","abs","Token","metadata","update","fn","tokenizer","map","toLowerCase","len","tokens","sliceEnd","sliceStart","sliceLength","charAt","separator","tokenMetadata","Pipeline","_stack","registeredFunctions","registerFunction","label","warnIfFunctionNotRegistered","load","serialised","forEach","fnName","Error","fns","arguments","after","existingFn","newFn","pos","splice","before","remove","run","stackLength","memo","j","result","k","runString","token","reset","toJSON","Vector","_magnitude","positionForIndex","start","end","pivotPoint","floor","pivotIndex","insert","insertIdx","upsert","position","magnitude","sumOfSquares","elementsLength","sqrt","dot","otherVector","dotProduct","aLen","bLen","aVal","bVal","similarity","toArray","output","RegExp","w","stem","suffix","firstch","re","re2","re3","re4","substr","toUpperCase","test","fp","generateStopWordFilter","stopWords","words","reduce","stopWord","TokenSet","final","edges","id","_nextId","fromArray","arr","finish","root","fromClause","clause","fromFuzzyString","term","editDistance","stack","node","editsRemaining","frame","pop","noEditNode","char","insertionNode","substitutionNode","transposeNode","charA","charB","next","prefix","edge","_str","labels","sort","qNode","qEdges","qLen","nEdges","nLen","q","qEdge","nEdge","previousWord","uncheckedNodes","minimizedNodes","word","commonPrefix","minimize","child","nextNode","parent","downTo","childKey","Index","attrs","invertedIndex","fieldVectors","tokenSet","fields","search","queryString","query","QueryParser","parse","Query","matchingFields","queryVectors","termFieldCache","requiredMatches","prohibitedMatches","clauses","terms","clauseMatches","usePipeline","termTokenSet","expandedTerms","presence","REQUIRED","field","expandedTerm","termIndex","_index","fieldPosting","matchingDocumentRefs","termField","matchingDocumentsSet","PROHIBITED","boost","fieldMatch","matchingDocumentRef","matchingFieldRef","MatchData","allRequiredMatches","allProhibitedMatches","matchingFieldRefs","results","matches","isNegated","docMatch","fieldVector","score","matchData","combine","ref","serializedIndex","serializedVectors","serializedInvertedIndex","tokenSetBuilder","tuple","_ref","_fields","_documents","fieldTermFrequencies","fieldLengths","_b","_k1","metadataWhitelist","attributes","RangeError","number","k1","doc","extractor","fieldTerms","metadataKey","calculateAverageFieldLengths","fieldRefs","numberOfFields","accumulator","documentsWithField","averageFieldLength","createFieldVectors","fieldRefsLength","termIdfCache","fieldLength","termFrequencies","termsLength","fieldBoost","docBoost","scoreWithPrecision","tf","round","createTokenSet","use","args","unshift","apply","clonedMetadata","metadataKeys","otherMatchData","allFields","wildcard","String","NONE","LEADING","TRAILING","OPTIONAL","options","QueryParseError","QueryLexer","lexemes","escapeCharPositions","state","lexText","sliceString","subSlices","join","emit","type","escapeCharacter","EOS","width","ignore","backup","acceptDigitRun","charCode","more","FIELD","TERM","EDIT_DISTANCE","BOOST","PRESENCE","lexField","lexer","lexTerm","lexEditDistance","lexBoost","lexEOS","termSeparator","currentClause","lexemeIdx","parseClause","peekLexeme","consumeLexeme","lexeme","nextClause","completedClause","parser","parsePresence","parseField","parseTerm","errorMessage","nextLexeme","possibleFields","f","parseEditDistance","parseBoost","parseInt","isNaN","__assign","assign","__values","iterator","done","__read","ar","error","__spread","SearchMessageType","docs","documents","Map","path","hash","location","title","text","linked","set","setupSearchDocumentMap","highlight","_","data","trim","document","setupSearchHighlighter","stopwords","lang","multiLanguage","JSON","groups","sections","article","section","err","stringify","handler","SETUP","base","scripts","self","importScripts","setupLunrLanguages","DUMP","QUERY","RESULT","addEventListener","ev","postMessage"],"mappings":"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AQrE,cAAgBkE,EAAEQ,OAAO,IAGhCR,GAGF,SAAU9B,GACf,OAAOA,EAAMxC,OAAO5D,KAIxBC,EAAKwE,SAASG,iBAAiB3E,EAAKQ,QAAS;;;;IAmB7CR,EAAK6I,uBAAyB,SAAUC,GACtC,IAAIC,EAAQD,EAAUE,QAAO,SAAUlD,EAAMmD,GAE3C,OADAnD,EAAKmD,GAAYA,EACVnD,IACN,IAEH,OAAO,SAAUK,GACf,GAAIA,GAAS4C,EAAM5C,EAAMjF,cAAgBiF,EAAMjF,WAAY,OAAOiF,IAiBtEnG,EAAKO,eAAiBP,EAAK6I,uBAAuB,CAChD,IACA,OACA,QACA,SACA,QACA,MACA,SACA,OACA,KACA,QACA,KACA,MACA,MACA,MACA,KACA,KACA,KACA,UACA,OACA,MACA,KACA,MACA,SACA,QACA,OACA,MACA,KACA,OACA,SACA,OACA,OACA,QACA,MACA,OACA,MACA,MACA,MACA,MACA,OACA,KACA,MACA,OACA,MACA,MACA,MACA,UACA,IACA,KACA,KACA,OACA,KACA,KACA,MACA,OACA,QACA,MACA,OACA,SACA,MACA,KACA,QACA,OACA,OACA,KACA,UACA,KACA,MACA,MACA,KACA,MACA,QACA,KACA,OACA,KACA,QACA,MACA,MACA,SACA,OACA,MACA,OACA,MACA,SACA,QACA,KACA,OACA,OACA,OACA,MACA,QACA,OACA,OACA,QACA,QACA,OACA,OACA,MACA,KACA,MACA,OACA,KACA,QACA,MACA,KACA,OACA,OACA,OACA,QACA,QACA,QACA,MACA,OACA,MACA,OACA,OACA,QACA,MACA,MACA,SAGF7I,EAAKwE,SAASG,iBAAiB3E,EAAKO,eAAgB;;;;IAqBpDP,EAAKM,QAAU,SAAU6F,GACvB,OAAOA,EAAMxC,QAAO,SAAU1G,GAC5B,OAAOA,EAAEe,QAAQ,OAAQ,IAAIA,QAAQ,OAAQ,QAIjDgC,EAAKwE,SAASG,iBAAiB3E,EAAKM,QAAS;;;;IA2B7CN,EAAKkJ,SAAW,WACdhL,KAAKiL,OAAQ,EACbjL,KAAKkL,MAAQ,GACblL,KAAKmL,GAAKrJ,EAAKk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","file":"assets/javascripts/worker/search.926ffd9e.min.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 5);\n","/*!\n * escape-html\n * Copyright(c) 2012-2013 TJ Holowaychuk\n * Copyright(c) 2015 Andreas Lubbe\n * Copyright(c) 2015 Tiancheng \"Timothy\" Gu\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module variables.\n * @private\n */\n\nvar matchHtmlRegExp = /[\"'&<>]/;\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = escapeHtml;\n\n/**\n * Escape special characters in the given string of html.\n *\n * @param {string} string The string to escape for inserting into HTML\n * @return {string}\n * @public\n */\n\nfunction escapeHtml(string) {\n var str = '' + string;\n var match = matchHtmlRegExp.exec(str);\n\n if (!match) {\n return str;\n }\n\n var escape;\n var html = '';\n var index = 0;\n var lastIndex = 0;\n\n for (index = match.index; index < str.length; index++) {\n switch (str.charCodeAt(index)) {\n case 34: // \"\n escape = '"';\n break;\n case 38: // &\n escape = '&';\n break;\n case 39: // '\n escape = ''';\n break;\n case 60: // <\n escape = '<';\n break;\n case 62: // >\n escape = '>';\n break;\n default:\n continue;\n }\n\n if (lastIndex !== index) {\n html += str.substring(lastIndex, index);\n }\n\n lastIndex = index + 1;\n html += escape;\n }\n\n return lastIndex !== index\n ? html + str.substring(lastIndex, index)\n : html;\n}\n","'use strict';\n\nconst matchOperatorsRegex = /[|\\\\{}()[\\]^$+*?.-]/g;\n\nmodule.exports = string => {\n\tif (typeof string !== 'string') {\n\t\tthrow new TypeError('Expected a string');\n\t}\n\n\treturn string.replace(matchOperatorsRegex, '\\\\$&');\n};\n","module.exports = global[\"lunr\"] = require(\"-!./lunr.js\");","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","/**\n * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 2.3.8\n * Copyright (C) 2019 Oliver Nightingale\n * @license MIT\n */\n\n;(function(){\n\n/**\n * A convenience function for configuring and constructing\n * a new lunr Index.\n *\n * A lunr.Builder instance is created and the pipeline setup\n * with a trimmer, stop word filter and stemmer.\n *\n * This builder object is yielded to the configuration function\n * that is passed as a parameter, allowing the list of fields\n * and other builder parameters to be customised.\n *\n * All documents _must_ be added within the passed config function.\n *\n * @example\n * var idx = lunr(function () {\n * this.field('title')\n * this.field('body')\n * this.ref('id')\n *\n * documents.forEach(function (doc) {\n * this.add(doc)\n * }, this)\n * })\n *\n * @see {@link lunr.Builder}\n * @see {@link lunr.Pipeline}\n * @see {@link lunr.trimmer}\n * @see {@link lunr.stopWordFilter}\n * @see {@link lunr.stemmer}\n * @namespace {function} lunr\n */\nvar lunr = function (config) {\n var builder = new lunr.Builder\n\n builder.pipeline.add(\n lunr.trimmer,\n lunr.stopWordFilter,\n lunr.stemmer\n )\n\n builder.searchPipeline.add(\n lunr.stemmer\n )\n\n config.call(builder, builder)\n return builder.build()\n}\n\nlunr.version = \"2.3.8\"\n/*!\n * lunr.utils\n * Copyright (C) 2019 Oliver Nightingale\n */\n\n/**\n * A namespace containing utils for the rest of the lunr library\n * @namespace lunr.utils\n */\nlunr.utils = {}\n\n/**\n * Print a warning message to the console.\n *\n * @param {String} message The message to be printed.\n * @memberOf lunr.utils\n * @function\n */\nlunr.utils.warn = (function (global) {\n /* eslint-disable no-console */\n return function (message) {\n if (global.console && console.warn) {\n console.warn(message)\n }\n }\n /* eslint-enable no-console */\n})(this)\n\n/**\n * Convert an object to a string.\n *\n * In the case of `null` and `undefined` the function returns\n * the empty string, in all other cases the result of calling\n * `toString` on the passed object is returned.\n *\n * @param {Any} obj The object to convert to a string.\n * @return {String} string representation of the passed object.\n * @memberOf lunr.utils\n */\nlunr.utils.asString = function (obj) {\n if (obj === void 0 || obj === null) {\n return \"\"\n } else {\n return obj.toString()\n }\n}\n\n/**\n * Clones an object.\n *\n * Will create a copy of an existing object such that any mutations\n * on the copy cannot affect the original.\n *\n * Only shallow objects are supported, passing a nested object to this\n * function will cause a TypeError.\n *\n * Objects with primitives, and arrays of primitives are supported.\n *\n * @param {Object} obj The object to clone.\n * @return {Object} a clone of the passed object.\n * @throws {TypeError} when a nested object is passed.\n * @memberOf Utils\n */\nlunr.utils.clone = function (obj) {\n if (obj === null || obj === undefined) {\n return obj\n }\n\n var clone = Object.create(null),\n keys = Object.keys(obj)\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i],\n val = obj[key]\n\n if (Array.isArray(val)) {\n clone[key] = val.slice()\n continue\n }\n\n if (typeof val === 'string' ||\n typeof val === 'number' ||\n typeof val === 'boolean') {\n clone[key] = val\n continue\n }\n\n throw new TypeError(\"clone is not deep and does not support nested objects\")\n }\n\n return clone\n}\nlunr.FieldRef = function (docRef, fieldName, stringValue) {\n this.docRef = docRef\n this.fieldName = fieldName\n this._stringValue = stringValue\n}\n\nlunr.FieldRef.joiner = \"/\"\n\nlunr.FieldRef.fromString = function (s) {\n var n = s.indexOf(lunr.FieldRef.joiner)\n\n if (n === -1) {\n throw \"malformed field ref string\"\n }\n\n var fieldRef = s.slice(0, n),\n docRef = s.slice(n + 1)\n\n return new lunr.FieldRef (docRef, fieldRef, s)\n}\n\nlunr.FieldRef.prototype.toString = function () {\n if (this._stringValue == undefined) {\n this._stringValue = this.fieldName + lunr.FieldRef.joiner + this.docRef\n }\n\n return this._stringValue\n}\n/*!\n * lunr.Set\n * Copyright (C) 2019 Oliver Nightingale\n */\n\n/**\n * A lunr set.\n *\n * @constructor\n */\nlunr.Set = function (elements) {\n this.elements = Object.create(null)\n\n if (elements) {\n this.length = elements.length\n\n for (var i = 0; i < this.length; i++) {\n this.elements[elements[i]] = true\n }\n } else {\n this.length = 0\n }\n}\n\n/**\n * A complete set that contains all elements.\n *\n * @static\n * @readonly\n * @type {lunr.Set}\n */\nlunr.Set.complete = {\n intersect: function (other) {\n return other\n },\n\n union: function (other) {\n return other\n },\n\n contains: function () {\n return true\n }\n}\n\n/**\n * An empty set that contains no elements.\n *\n * @static\n * @readonly\n * @type {lunr.Set}\n */\nlunr.Set.empty = {\n intersect: function () {\n return this\n },\n\n union: function (other) {\n return other\n },\n\n contains: function () {\n return false\n }\n}\n\n/**\n * Returns true if this set contains the specified object.\n *\n * @param {object} object - Object whose presence in this set is to be tested.\n * @returns {boolean} - True if this set contains the specified object.\n */\nlunr.Set.prototype.contains = function (object) {\n return !!this.elements[object]\n}\n\n/**\n * Returns a new set containing only the elements that are present in both\n * this set and the specified set.\n *\n * @param {lunr.Set} other - set to intersect with this set.\n * @returns {lunr.Set} a new set that is the intersection of this and the specified set.\n */\n\nlunr.Set.prototype.intersect = function (other) {\n var a, b, elements, intersection = []\n\n if (other === lunr.Set.complete) {\n return this\n }\n\n if (other === lunr.Set.empty) {\n return other\n }\n\n if (this.length < other.length) {\n a = this\n b = other\n } else {\n a = other\n b = this\n }\n\n elements = Object.keys(a.elements)\n\n for (var i = 0; i < elements.length; i++) {\n var element = elements[i]\n if (element in b.elements) {\n intersection.push(element)\n }\n }\n\n return new lunr.Set (intersection)\n}\n\n/**\n * Returns a new set combining the elements of this and the specified set.\n *\n * @param {lunr.Set} other - set to union with this set.\n * @return {lunr.Set} a new set that is the union of this and the specified set.\n */\n\nlunr.Set.prototype.union = function (other) {\n if (other === lunr.Set.complete) {\n return lunr.Set.complete\n }\n\n if (other === lunr.Set.empty) {\n return this\n }\n\n return new lunr.Set(Object.keys(this.elements).concat(Object.keys(other.elements)))\n}\n/**\n * A function to calculate the inverse document frequency for\n * a posting. This is shared between the builder and the index\n *\n * @private\n * @param {object} posting - The posting for a given term\n * @param {number} documentCount - The total number of documents.\n */\nlunr.idf = function (posting, documentCount) {\n var documentsWithTerm = 0\n\n for (var fieldName in posting) {\n if (fieldName == '_index') continue // Ignore the term index, its not a field\n documentsWithTerm += Object.keys(posting[fieldName]).length\n }\n\n var x = (documentCount - documentsWithTerm + 0.5) / (documentsWithTerm + 0.5)\n\n return Math.log(1 + Math.abs(x))\n}\n\n/**\n * A token wraps a string representation of a token\n * as it is passed through the text processing pipeline.\n *\n * @constructor\n * @param {string} [str=''] - The string token being wrapped.\n * @param {object} [metadata={}] - Metadata associated with this token.\n */\nlunr.Token = function (str, metadata) {\n this.str = str || \"\"\n this.metadata = metadata || {}\n}\n\n/**\n * Returns the token string that is being wrapped by this object.\n *\n * @returns {string}\n */\nlunr.Token.prototype.toString = function () {\n return this.str\n}\n\n/**\n * A token update function is used when updating or optionally\n * when cloning a token.\n *\n * @callback lunr.Token~updateFunction\n * @param {string} str - The string representation of the token.\n * @param {Object} metadata - All metadata associated with this token.\n */\n\n/**\n * Applies the given function to the wrapped string token.\n *\n * @example\n * token.update(function (str, metadata) {\n * return str.toUpperCase()\n * })\n *\n * @param {lunr.Token~updateFunction} fn - A function to apply to the token string.\n * @returns {lunr.Token}\n */\nlunr.Token.prototype.update = function (fn) {\n this.str = fn(this.str, this.metadata)\n return this\n}\n\n/**\n * Creates a clone of this token. Optionally a function can be\n * applied to the cloned token.\n *\n * @param {lunr.Token~updateFunction} [fn] - An optional function to apply to the cloned token.\n * @returns {lunr.Token}\n */\nlunr.Token.prototype.clone = function (fn) {\n fn = fn || function (s) { return s }\n return new lunr.Token (fn(this.str, this.metadata), this.metadata)\n}\n/*!\n * lunr.tokenizer\n * Copyright (C) 2019 Oliver Nightingale\n */\n\n/**\n * A function for splitting a string into tokens ready to be inserted into\n * the search index. Uses `lunr.tokenizer.separator` to split strings, change\n * the value of this property to change how strings are split into tokens.\n *\n * This tokenizer will convert its parameter to a string by calling `toString` and\n * then will split this string on the character in `lunr.tokenizer.separator`.\n * Arrays will have their elements converted to strings and wrapped in a lunr.Token.\n *\n * Optional metadata can be passed to the tokenizer, this metadata will be cloned and\n * added as metadata to every token that is created from the object to be tokenized.\n *\n * @static\n * @param {?(string|object|object[])} obj - The object to convert into tokens\n * @param {?object} metadata - Optional metadata to associate with every token\n * @returns {lunr.Token[]}\n * @see {@link lunr.Pipeline}\n */\nlunr.tokenizer = function (obj, metadata) {\n if (obj == null || obj == undefined) {\n return []\n }\n\n if (Array.isArray(obj)) {\n return obj.map(function (t) {\n return new lunr.Token(\n lunr.utils.asString(t).toLowerCase(),\n lunr.utils.clone(metadata)\n )\n })\n }\n\n var str = obj.toString().toLowerCase(),\n len = str.length,\n tokens = []\n\n for (var sliceEnd = 0, sliceStart = 0; sliceEnd <= len; sliceEnd++) {\n var char = str.charAt(sliceEnd),\n sliceLength = sliceEnd - sliceStart\n\n if ((char.match(lunr.tokenizer.separator) || sliceEnd == len)) {\n\n if (sliceLength > 0) {\n var tokenMetadata = lunr.utils.clone(metadata) || {}\n tokenMetadata[\"position\"] = [sliceStart, sliceLength]\n tokenMetadata[\"index\"] = tokens.length\n\n tokens.push(\n new lunr.Token (\n str.slice(sliceStart, sliceEnd),\n tokenMetadata\n )\n )\n }\n\n sliceStart = sliceEnd + 1\n }\n\n }\n\n return tokens\n}\n\n/**\n * The separator used to split a string into tokens. Override this property to change the behaviour of\n * `lunr.tokenizer` behaviour when tokenizing strings. By default this splits on whitespace and hyphens.\n *\n * @static\n * @see lunr.tokenizer\n */\nlunr.tokenizer.separator = /[\\s\\-]+/\n/*!\n * lunr.Pipeline\n * Copyright (C) 2019 Oliver Nightingale\n */\n\n/**\n * lunr.Pipelines maintain an ordered list of functions to be applied to all\n * tokens in documents entering the search index and queries being ran against\n * the index.\n *\n * An instance of lunr.Index created with the lunr shortcut will contain a\n * pipeline with a stop word filter and an English language stemmer. Extra\n * functions can be added before or after either of these functions or these\n * default functions can be removed.\n *\n * When run the pipeline will call each function in turn, passing a token, the\n * index of that token in the original list of all tokens and finally a list of\n * all the original tokens.\n *\n * The output of functions in the pipeline will be passed to the next function\n * in the pipeline. To exclude a token from entering the index the function\n * should return undefined, the rest of the pipeline will not be called with\n * this token.\n *\n * For serialisation of pipelines to work, all functions used in an instance of\n * a pipeline should be registered with lunr.Pipeline. Registered functions can\n * then be loaded. If trying to load a serialised pipeline that uses functions\n * that are not registered an error will be thrown.\n *\n * If not planning on serialising the pipeline then registering pipeline functions\n * is not necessary.\n *\n * @constructor\n */\nlunr.Pipeline = function () {\n this._stack = []\n}\n\nlunr.Pipeline.registeredFunctions = Object.create(null)\n\n/**\n * A pipeline function maps lunr.Token to lunr.Token. A lunr.Token contains the token\n * string as well as all known metadata. A pipeline function can mutate the token string\n * or mutate (or add) metadata for a given token.\n *\n * A pipeline function can indicate that the passed token should be discarded by returning\n * null, undefined or an empty string. This token will not be passed to any downstream pipeline\n * functions and will not be added to the index.\n *\n * Multiple tokens can be returned by returning an array of tokens. Each token will be passed\n * to any downstream pipeline functions and all will returned tokens will be added to the index.\n *\n * Any number of pipeline functions may be chained together using a lunr.Pipeline.\n *\n * @interface lunr.PipelineFunction\n * @param {lunr.Token} token - A token from the document being processed.\n * @param {number} i - The index of this token in the complete list of tokens for this document/field.\n * @param {lunr.Token[]} tokens - All tokens for this document/field.\n * @returns {(?lunr.Token|lunr.Token[])}\n */\n\n/**\n * Register a function with the pipeline.\n *\n * Functions that are used in the pipeline should be registered if the pipeline\n * needs to be serialised, or a serialised pipeline needs to be loaded.\n *\n * Registering a function does not add it to a pipeline, functions must still be\n * added to instances of the pipeline for them to be used when running a pipeline.\n *\n * @param {lunr.PipelineFunction} fn - The function to check for.\n * @param {String} label - The label to register this function with\n */\nlunr.Pipeline.registerFunction = function (fn, label) {\n if (label in this.registeredFunctions) {\n lunr.utils.warn('Overwriting existing registered function: ' + label)\n }\n\n fn.label = label\n lunr.Pipeline.registeredFunctions[fn.label] = fn\n}\n\n/**\n * Warns if the function is not registered as a Pipeline function.\n *\n * @param {lunr.PipelineFunction} fn - The function to check for.\n * @private\n */\nlunr.Pipeline.warnIfFunctionNotRegistered = function (fn) {\n var isRegistered = fn.label && (fn.label in this.registeredFunctions)\n\n if (!isRegistered) {\n lunr.utils.warn('Function is not registered with pipeline. This may cause problems when serialising the index.\\n', fn)\n }\n}\n\n/**\n * Loads a previously serialised pipeline.\n *\n * All functions to be loaded must already be registered with lunr.Pipeline.\n * If any function from the serialised data has not been registered then an\n * error will be thrown.\n *\n * @param {Object} serialised - The serialised pipeline to load.\n * @returns {lunr.Pipeline}\n */\nlunr.Pipeline.load = function (serialised) {\n var pipeline = new lunr.Pipeline\n\n serialised.forEach(function (fnName) {\n var fn = lunr.Pipeline.registeredFunctions[fnName]\n\n if (fn) {\n pipeline.add(fn)\n } else {\n throw new Error('Cannot load unregistered function: ' + fnName)\n }\n })\n\n return pipeline\n}\n\n/**\n * Adds new functions to the end of the pipeline.\n *\n * Logs a warning if the function has not been registered.\n *\n * @param {lunr.PipelineFunction[]} functions - Any number of functions to add to the pipeline.\n */\nlunr.Pipeline.prototype.add = function () {\n var fns = Array.prototype.slice.call(arguments)\n\n fns.forEach(function (fn) {\n lunr.Pipeline.warnIfFunctionNotRegistered(fn)\n this._stack.push(fn)\n }, this)\n}\n\n/**\n * Adds a single function after a function that already exists in the\n * pipeline.\n *\n * Logs a warning if the function has not been registered.\n *\n * @param {lunr.PipelineFunction} existingFn - A function that already exists in the pipeline.\n * @param {lunr.PipelineFunction} newFn - The new function to add to the pipeline.\n */\nlunr.Pipeline.prototype.after = function (existingFn, newFn) {\n lunr.Pipeline.warnIfFunctionNotRegistered(newFn)\n\n var pos = this._stack.indexOf(existingFn)\n if (pos == -1) {\n throw new Error('Cannot find existingFn')\n }\n\n pos = pos + 1\n this._stack.splice(pos, 0, newFn)\n}\n\n/**\n * Adds a single function before a function that already exists in the\n * pipeline.\n *\n * Logs a warning if the function has not been registered.\n *\n * @param {lunr.PipelineFunction} existingFn - A function that already exists in the pipeline.\n * @param {lunr.PipelineFunction} newFn - The new function to add to the pipeline.\n */\nlunr.Pipeline.prototype.before = function (existingFn, newFn) {\n lunr.Pipeline.warnIfFunctionNotRegistered(newFn)\n\n var pos = this._stack.indexOf(existingFn)\n if (pos == -1) {\n throw new Error('Cannot find existingFn')\n }\n\n this._stack.splice(pos, 0, newFn)\n}\n\n/**\n * Removes a function from the pipeline.\n *\n * @param {lunr.PipelineFunction} fn The function to remove from the pipeline.\n */\nlunr.Pipeline.prototype.remove = function (fn) {\n var pos = this._stack.indexOf(fn)\n if (pos == -1) {\n return\n }\n\n this._stack.splice(pos, 1)\n}\n\n/**\n * Runs the current list of functions that make up the pipeline against the\n * passed tokens.\n *\n * @param {Array} tokens The tokens to run through the pipeline.\n * @returns {Array}\n */\nlunr.Pipeline.prototype.run = function (tokens) {\n var stackLength = this._stack.length\n\n for (var i = 0; i < stackLength; i++) {\n var fn = this._stack[i]\n var memo = []\n\n for (var j = 0; j < tokens.length; j++) {\n var result = fn(tokens[j], j, tokens)\n\n if (result === null || result === void 0 || result === '') continue\n\n if (Array.isArray(result)) {\n for (var k = 0; k < result.length; k++) {\n memo.push(result[k])\n }\n } else {\n memo.push(result)\n }\n }\n\n tokens = memo\n }\n\n return tokens\n}\n\n/**\n * Convenience method for passing a string through a pipeline and getting\n * strings out. This method takes care of wrapping the passed string in a\n * token and mapping the resulting tokens back to strings.\n *\n * @param {string} str - The string to pass through the pipeline.\n * @param {?object} metadata - Optional metadata to associate with the token\n * passed to the pipeline.\n * @returns {string[]}\n */\nlunr.Pipeline.prototype.runString = function (str, metadata) {\n var token = new lunr.Token (str, metadata)\n\n return this.run([token]).map(function (t) {\n return t.toString()\n })\n}\n\n/**\n * Resets the pipeline by removing any existing processors.\n *\n */\nlunr.Pipeline.prototype.reset = function () {\n this._stack = []\n}\n\n/**\n * Returns a representation of the pipeline ready for serialisation.\n *\n * Logs a warning if the function has not been registered.\n *\n * @returns {Array}\n */\nlunr.Pipeline.prototype.toJSON = function () {\n return this._stack.map(function (fn) {\n lunr.Pipeline.warnIfFunctionNotRegistered(fn)\n\n return fn.label\n })\n}\n/*!\n * lunr.Vector\n * Copyright (C) 2019 Oliver Nightingale\n */\n\n/**\n * A vector is used to construct the vector space of documents and queries. These\n * vectors support operations to determine the similarity between two documents or\n * a document and a query.\n *\n * Normally no parameters are required for initializing a vector, but in the case of\n * loading a previously dumped vector the raw elements can be provided to the constructor.\n *\n * For performance reasons vectors are implemented with a flat array, where an elements\n * index is immediately followed by its value. E.g. [index, value, index, value]. This\n * allows the underlying array to be as sparse as possible and still offer decent\n * performance when being used for vector calculations.\n *\n * @constructor\n * @param {Number[]} [elements] - The flat list of element index and element value pairs.\n */\nlunr.Vector = function (elements) {\n this._magnitude = 0\n this.elements = elements || []\n}\n\n\n/**\n * Calculates the position within the vector to insert a given index.\n *\n * This is used internally by insert and upsert. If there are duplicate indexes then\n * the position is returned as if the value for that index were to be updated, but it\n * is the callers responsibility to check whether there is a duplicate at that index\n *\n * @param {Number} insertIdx - The index at which the element should be inserted.\n * @returns {Number}\n */\nlunr.Vector.prototype.positionForIndex = function (index) {\n // For an empty vector the tuple can be inserted at the beginning\n if (this.elements.length == 0) {\n return 0\n }\n\n var start = 0,\n end = this.elements.length / 2,\n sliceLength = end - start,\n pivotPoint = Math.floor(sliceLength / 2),\n pivotIndex = this.elements[pivotPoint * 2]\n\n while (sliceLength > 1) {\n if (pivotIndex < index) {\n start = pivotPoint\n }\n\n if (pivotIndex > index) {\n end = pivotPoint\n }\n\n if (pivotIndex == index) {\n break\n }\n\n sliceLength = end - start\n pivotPoint = start + Math.floor(sliceLength / 2)\n pivotIndex = this.elements[pivotPoint * 2]\n }\n\n if (pivotIndex == index) {\n return pivotPoint * 2\n }\n\n if (pivotIndex > index) {\n return pivotPoint * 2\n }\n\n if (pivotIndex < index) {\n return (pivotPoint + 1) * 2\n }\n}\n\n/**\n * Inserts an element at an index within the vector.\n *\n * Does not allow duplicates, will throw an error if there is already an entry\n * for this index.\n *\n * @param {Number} insertIdx - The index at which the element should be inserted.\n * @param {Number} val - The value to be inserted into the vector.\n */\nlunr.Vector.prototype.insert = function (insertIdx, val) {\n this.upsert(insertIdx, val, function () {\n throw \"duplicate index\"\n })\n}\n\n/**\n * Inserts or updates an existing index within the vector.\n *\n * @param {Number} insertIdx - The index at which the element should be inserted.\n * @param {Number} val - The value to be inserted into the vector.\n * @param {function} fn - A function that is called for updates, the existing value and the\n * requested value are passed as arguments\n */\nlunr.Vector.prototype.upsert = function (insertIdx, val, fn) {\n this._magnitude = 0\n var position = this.positionForIndex(insertIdx)\n\n if (this.elements[position] == insertIdx) {\n this.elements[position + 1] = fn(this.elements[position + 1], val)\n } else {\n this.elements.splice(position, 0, insertIdx, val)\n }\n}\n\n/**\n * Calculates the magnitude of this vector.\n *\n * @returns {Number}\n */\nlunr.Vector.prototype.magnitude = function () {\n if (this._magnitude) return this._magnitude\n\n var sumOfSquares = 0,\n elementsLength = this.elements.length\n\n for (var i = 1; i < elementsLength; i += 2) {\n var val = this.elements[i]\n sumOfSquares += val * val\n }\n\n return this._magnitude = Math.sqrt(sumOfSquares)\n}\n\n/**\n * Calculates the dot product of this vector and another vector.\n *\n * @param {lunr.Vector} otherVector - The vector to compute the dot product with.\n * @returns {Number}\n */\nlunr.Vector.prototype.dot = function (otherVector) {\n var dotProduct = 0,\n a = this.elements, b = otherVector.elements,\n aLen = a.length, bLen = b.length,\n aVal = 0, bVal = 0,\n i = 0, j = 0\n\n while (i < aLen && j < bLen) {\n aVal = a[i], bVal = b[j]\n if (aVal < bVal) {\n i += 2\n } else if (aVal > bVal) {\n j += 2\n } else if (aVal == bVal) {\n dotProduct += a[i + 1] * b[j + 1]\n i += 2\n j += 2\n }\n }\n\n return dotProduct\n}\n\n/**\n * Calculates the similarity between this vector and another vector.\n *\n * @param {lunr.Vector} otherVector - The other vector to calculate the\n * similarity with.\n * @returns {Number}\n */\nlunr.Vector.prototype.similarity = function (otherVector) {\n return this.dot(otherVector) / this.magnitude() || 0\n}\n\n/**\n * Converts the vector to an array of the elements within the vector.\n *\n * @returns {Number[]}\n */\nlunr.Vector.prototype.toArray = function () {\n var output = new Array (this.elements.length / 2)\n\n for (var i = 1, j = 0; i < this.elements.length; i += 2, j++) {\n output[j] = this.elements[i]\n }\n\n return output\n}\n\n/**\n * A JSON serializable representation of the vector.\n *\n * @returns {Number[]}\n */\nlunr.Vector.prototype.toJSON = function () {\n return this.elements\n}\n/* eslint-disable */\n/*!\n * lunr.stemmer\n * Copyright (C) 2019 Oliver Nightingale\n * Includes code from - http://tartarus.org/~martin/PorterStemmer/js.txt\n */\n\n/**\n * lunr.stemmer is an english language stemmer, this is a JavaScript\n * implementation of the PorterStemmer taken from http://tartarus.org/~martin\n *\n * @static\n * @implements {lunr.PipelineFunction}\n * @param {lunr.Token} token - The string to stem\n * @returns {lunr.Token}\n * @see {@link lunr.Pipeline}\n * @function\n */\nlunr.stemmer = (function(){\n var step2list = {\n \"ational\" : \"ate\",\n \"tional\" : \"tion\",\n \"enci\" : \"ence\",\n \"anci\" : \"ance\",\n \"izer\" : \"ize\",\n \"bli\" : \"ble\",\n \"alli\" : \"al\",\n \"entli\" : \"ent\",\n \"eli\" : \"e\",\n \"ousli\" : \"ous\",\n \"ization\" : \"ize\",\n \"ation\" : \"ate\",\n \"ator\" : \"ate\",\n \"alism\" : \"al\",\n \"iveness\" : \"ive\",\n \"fulness\" : \"ful\",\n \"ousness\" : \"ous\",\n \"aliti\" : \"al\",\n \"iviti\" : \"ive\",\n \"biliti\" : \"ble\",\n \"logi\" : \"log\"\n },\n\n step3list = {\n \"icate\" : \"ic\",\n \"ative\" : \"\",\n \"alize\" : \"al\",\n \"iciti\" : \"ic\",\n \"ical\" : \"ic\",\n \"ful\" : \"\",\n \"ness\" : \"\"\n },\n\n c = \"[^aeiou]\", // consonant\n v = \"[aeiouy]\", // vowel\n C = c + \"[^aeiouy]*\", // consonant sequence\n V = v + \"[aeiou]*\", // vowel sequence\n\n mgr0 = \"^(\" + C + \")?\" + V + C, // [C]VC... is m>0\n meq1 = \"^(\" + C + \")?\" + V + C + \"(\" + V + \")?$\", // [C]VC[V] is m=1\n mgr1 = \"^(\" + C + \")?\" + V + C + V + C, // [C]VCVC... is m>1\n s_v = \"^(\" + C + \")?\" + v; // vowel in stem\n\n var re_mgr0 = new RegExp(mgr0);\n var re_mgr1 = new RegExp(mgr1);\n var re_meq1 = new RegExp(meq1);\n var re_s_v = new RegExp(s_v);\n\n var re_1a = /^(.+?)(ss|i)es$/;\n var re2_1a = /^(.+?)([^s])s$/;\n var re_1b = /^(.+?)eed$/;\n var re2_1b = /^(.+?)(ed|ing)$/;\n var re_1b_2 = /.$/;\n var re2_1b_2 = /(at|bl|iz)$/;\n var re3_1b_2 = new RegExp(\"([^aeiouylsz])\\\\1$\");\n var re4_1b_2 = new RegExp(\"^\" + C + v + \"[^aeiouwxy]$\");\n\n var re_1c = /^(.+?[^aeiou])y$/;\n var re_2 = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/;\n\n var re_3 = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/;\n\n var re_4 = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/;\n var re2_4 = /^(.+?)(s|t)(ion)$/;\n\n var re_5 = /^(.+?)e$/;\n var re_5_1 = /ll$/;\n var re3_5 = new RegExp(\"^\" + C + v + \"[^aeiouwxy]$\");\n\n var porterStemmer = function porterStemmer(w) {\n var stem,\n suffix,\n firstch,\n re,\n re2,\n re3,\n re4;\n\n if (w.length < 3) { return w; }\n\n firstch = w.substr(0,1);\n if (firstch == \"y\") {\n w = firstch.toUpperCase() + w.substr(1);\n }\n\n // Step 1a\n re = re_1a\n re2 = re2_1a;\n\n if (re.test(w)) { w = w.replace(re,\"$1$2\"); }\n else if (re2.test(w)) { w = w.replace(re2,\"$1$2\"); }\n\n // Step 1b\n re = re_1b;\n re2 = re2_1b;\n if (re.test(w)) {\n var fp = re.exec(w);\n re = re_mgr0;\n if (re.test(fp[1])) {\n re = re_1b_2;\n w = w.replace(re,\"\");\n }\n } else if (re2.test(w)) {\n var fp = re2.exec(w);\n stem = fp[1];\n re2 = re_s_v;\n if (re2.test(stem)) {\n w = stem;\n re2 = re2_1b_2;\n re3 = re3_1b_2;\n re4 = re4_1b_2;\n if (re2.test(w)) { w = w + \"e\"; }\n else if (re3.test(w)) { re = re_1b_2; w = w.replace(re,\"\"); }\n else if (re4.test(w)) { w = w + \"e\"; }\n }\n }\n\n // Step 1c - replace suffix y or Y by i if preceded by a non-vowel which is not the first letter of the word (so cry -> cri, by -> by, say -> say)\n re = re_1c;\n if (re.test(w)) {\n var fp = re.exec(w);\n stem = fp[1];\n w = stem + \"i\";\n }\n\n // Step 2\n re = re_2;\n if (re.test(w)) {\n var fp = re.exec(w);\n stem = fp[1];\n suffix = fp[2];\n re = re_mgr0;\n if (re.test(stem)) {\n w = stem + step2list[suffix];\n }\n }\n\n // Step 3\n re = re_3;\n if (re.test(w)) {\n var fp = re.exec(w);\n stem = fp[1];\n suffix = fp[2];\n re = re_mgr0;\n if (re.test(stem)) {\n w = stem + step3list[suffix];\n }\n }\n\n // Step 4\n re = re_4;\n re2 = re2_4;\n if (re.test(w)) {\n var fp = re.exec(w);\n stem = fp[1];\n re = re_mgr1;\n if (re.test(stem)) {\n w = stem;\n }\n } else if (re2.test(w)) {\n var fp = re2.exec(w);\n stem = fp[1] + fp[2];\n re2 = re_mgr1;\n if (re2.test(stem)) {\n w = stem;\n }\n }\n\n // Step 5\n re = re_5;\n if (re.test(w)) {\n var fp = re.exec(w);\n stem = fp[1];\n re = re_mgr1;\n re2 = re_meq1;\n re3 = re3_5;\n if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) {\n w = stem;\n }\n }\n\n re = re_5_1;\n re2 = re_mgr1;\n if (re.test(w) && re2.test(w)) {\n re = re_1b_2;\n w = w.replace(re,\"\");\n }\n\n // and turn initial Y back to y\n\n if (firstch == \"y\") {\n w = firstch.toLowerCase() + w.substr(1);\n }\n\n return w;\n };\n\n return function (token) {\n return token.update(porterStemmer);\n }\n})();\n\nlunr.Pipeline.registerFunction(lunr.stemmer, 'stemmer')\n/*!\n * lunr.stopWordFilter\n * Copyright (C) 2019 Oliver Nightingale\n */\n\n/**\n * lunr.generateStopWordFilter builds a stopWordFilter function from the provided\n * list of stop words.\n *\n * The built in lunr.stopWordFilter is built using this generator and can be used\n * to generate custom stopWordFilters for applications or non English languages.\n *\n * @function\n * @param {Array} token The token to pass through the filter\n * @returns {lunr.PipelineFunction}\n * @see lunr.Pipeline\n * @see lunr.stopWordFilter\n */\nlunr.generateStopWordFilter = function (stopWords) {\n var words = stopWords.reduce(function (memo, stopWord) {\n memo[stopWord] = stopWord\n return memo\n }, {})\n\n return function (token) {\n if (token && words[token.toString()] !== token.toString()) return token\n }\n}\n\n/**\n * lunr.stopWordFilter is an English language stop word list filter, any words\n * contained in the list will not be passed through the filter.\n *\n * This is intended to be used in the Pipeline. If the token does not pass the\n * filter then undefined will be returned.\n *\n * @function\n * @implements {lunr.PipelineFunction}\n * @params {lunr.Token} token - A token to check for being a stop word.\n * @returns {lunr.Token}\n * @see {@link lunr.Pipeline}\n */\nlunr.stopWordFilter = lunr.generateStopWordFilter([\n 'a',\n 'able',\n 'about',\n 'across',\n 'after',\n 'all',\n 'almost',\n 'also',\n 'am',\n 'among',\n 'an',\n 'and',\n 'any',\n 'are',\n 'as',\n 'at',\n 'be',\n 'because',\n 'been',\n 'but',\n 'by',\n 'can',\n 'cannot',\n 'could',\n 'dear',\n 'did',\n 'do',\n 'does',\n 'either',\n 'else',\n 'ever',\n 'every',\n 'for',\n 'from',\n 'get',\n 'got',\n 'had',\n 'has',\n 'have',\n 'he',\n 'her',\n 'hers',\n 'him',\n 'his',\n 'how',\n 'however',\n 'i',\n 'if',\n 'in',\n 'into',\n 'is',\n 'it',\n 'its',\n 'just',\n 'least',\n 'let',\n 'like',\n 'likely',\n 'may',\n 'me',\n 'might',\n 'most',\n 'must',\n 'my',\n 'neither',\n 'no',\n 'nor',\n 'not',\n 'of',\n 'off',\n 'often',\n 'on',\n 'only',\n 'or',\n 'other',\n 'our',\n 'own',\n 'rather',\n 'said',\n 'say',\n 'says',\n 'she',\n 'should',\n 'since',\n 'so',\n 'some',\n 'than',\n 'that',\n 'the',\n 'their',\n 'them',\n 'then',\n 'there',\n 'these',\n 'they',\n 'this',\n 'tis',\n 'to',\n 'too',\n 'twas',\n 'us',\n 'wants',\n 'was',\n 'we',\n 'were',\n 'what',\n 'when',\n 'where',\n 'which',\n 'while',\n 'who',\n 'whom',\n 'why',\n 'will',\n 'with',\n 'would',\n 'yet',\n 'you',\n 'your'\n])\n\nlunr.Pipeline.registerFunction(lunr.stopWordFilter, 'stopWordFilter')\n/*!\n * lunr.trimmer\n * Copyright (C) 2019 Oliver Nightingale\n */\n\n/**\n * lunr.trimmer is a pipeline function for trimming non word\n * characters from the beginning and end of tokens before they\n * enter the index.\n *\n * This implementation may not work correctly for non latin\n * characters and should either be removed or adapted for use\n * with languages with non-latin characters.\n *\n * @static\n * @implements {lunr.PipelineFunction}\n * @param {lunr.Token} token The token to pass through the filter\n * @returns {lunr.Token}\n * @see lunr.Pipeline\n */\nlunr.trimmer = function (token) {\n return token.update(function (s) {\n return s.replace(/^\\W+/, '').replace(/\\W+$/, '')\n })\n}\n\nlunr.Pipeline.registerFunction(lunr.trimmer, 'trimmer')\n/*!\n * lunr.TokenSet\n * Copyright (C) 2019 Oliver Nightingale\n */\n\n/**\n * A token set is used to store the unique list of all tokens\n * within an index. Token sets are also used to represent an\n * incoming query to the index, this query token set and index\n * token set are then intersected to find which tokens to look\n * up in the inverted index.\n *\n * A token set can hold multiple tokens, as in the case of the\n * index token set, or it can hold a single token as in the\n * case of a simple query token set.\n *\n * Additionally token sets are used to perform wildcard matching.\n * Leading, contained and trailing wildcards are supported, and\n * from this edit distance matching can also be provided.\n *\n * Token sets are implemented as a minimal finite state automata,\n * where both common prefixes and suffixes are shared between tokens.\n * This helps to reduce the space used for storing the token set.\n *\n * @constructor\n */\nlunr.TokenSet = function () {\n this.final = false\n this.edges = {}\n this.id = lunr.TokenSet._nextId\n lunr.TokenSet._nextId += 1\n}\n\n/**\n * Keeps track of the next, auto increment, identifier to assign\n * to a new tokenSet.\n *\n * TokenSets require a unique identifier to be correctly minimised.\n *\n * @private\n */\nlunr.TokenSet._nextId = 1\n\n/**\n * Creates a TokenSet instance from the given sorted array of words.\n *\n * @param {String[]} arr - A sorted array of strings to create the set from.\n * @returns {lunr.TokenSet}\n * @throws Will throw an error if the input array is not sorted.\n */\nlunr.TokenSet.fromArray = function (arr) {\n var builder = new lunr.TokenSet.Builder\n\n for (var i = 0, len = arr.length; i < len; i++) {\n builder.insert(arr[i])\n }\n\n builder.finish()\n return builder.root\n}\n\n/**\n * Creates a token set from a query clause.\n *\n * @private\n * @param {Object} clause - A single clause from lunr.Query.\n * @param {string} clause.term - The query clause term.\n * @param {number} [clause.editDistance] - The optional edit distance for the term.\n * @returns {lunr.TokenSet}\n */\nlunr.TokenSet.fromClause = function (clause) {\n if ('editDistance' in clause) {\n return lunr.TokenSet.fromFuzzyString(clause.term, clause.editDistance)\n } else {\n return lunr.TokenSet.fromString(clause.term)\n }\n}\n\n/**\n * Creates a token set representing a single string with a specified\n * edit distance.\n *\n * Insertions, deletions, substitutions and transpositions are each\n * treated as an edit distance of 1.\n *\n * Increasing the allowed edit distance will have a dramatic impact\n * on the performance of both creating and intersecting these TokenSets.\n * It is advised to keep the edit distance less than 3.\n *\n * @param {string} str - The string to create the token set from.\n * @param {number} editDistance - The allowed edit distance to match.\n * @returns {lunr.Vector}\n */\nlunr.TokenSet.fromFuzzyString = function (str, editDistance) {\n var root = new lunr.TokenSet\n\n var stack = [{\n node: root,\n editsRemaining: editDistance,\n str: str\n }]\n\n while (stack.length) {\n var frame = stack.pop()\n\n // no edit\n if (frame.str.length > 0) {\n var char = frame.str.charAt(0),\n noEditNode\n\n if (char in frame.node.edges) {\n noEditNode = frame.node.edges[char]\n } else {\n noEditNode = new lunr.TokenSet\n frame.node.edges[char] = noEditNode\n }\n\n if (frame.str.length == 1) {\n noEditNode.final = true\n }\n\n stack.push({\n node: noEditNode,\n editsRemaining: frame.editsRemaining,\n str: frame.str.slice(1)\n })\n }\n\n if (frame.editsRemaining == 0) {\n continue\n }\n\n // insertion\n if (\"*\" in frame.node.edges) {\n var insertionNode = frame.node.edges[\"*\"]\n } else {\n var insertionNode = new lunr.TokenSet\n frame.node.edges[\"*\"] = insertionNode\n }\n\n if (frame.str.length == 0) {\n insertionNode.final = true\n }\n\n stack.push({\n node: insertionNode,\n editsRemaining: frame.editsRemaining - 1,\n str: frame.str\n })\n\n // deletion\n // can only do a deletion if we have enough edits remaining\n // and if there are characters left to delete in the string\n if (frame.str.length > 1) {\n stack.push({\n node: frame.node,\n editsRemaining: frame.editsRemaining - 1,\n str: frame.str.slice(1)\n })\n }\n\n // deletion\n // just removing the last character from the str\n if (frame.str.length == 1) {\n frame.node.final = true\n }\n\n // substitution\n // can only do a substitution if we have enough edits remaining\n // and if there are characters left to substitute\n if (frame.str.length >= 1) {\n if (\"*\" in frame.node.edges) {\n var substitutionNode = frame.node.edges[\"*\"]\n } else {\n var substitutionNode = new lunr.TokenSet\n frame.node.edges[\"*\"] = substitutionNode\n }\n\n if (frame.str.length == 1) {\n substitutionNode.final = true\n }\n\n stack.push({\n node: substitutionNode,\n editsRemaining: frame.editsRemaining - 1,\n str: frame.str.slice(1)\n })\n }\n\n // transposition\n // can only do a transposition if there are edits remaining\n // and there are enough characters to transpose\n if (frame.str.length > 1) {\n var charA = frame.str.charAt(0),\n charB = frame.str.charAt(1),\n transposeNode\n\n if (charB in frame.node.edges) {\n transposeNode = frame.node.edges[charB]\n } else {\n transposeNode = new lunr.TokenSet\n frame.node.edges[charB] = transposeNode\n }\n\n if (frame.str.length == 1) {\n transposeNode.final = true\n }\n\n stack.push({\n node: transposeNode,\n editsRemaining: frame.editsRemaining - 1,\n str: charA + frame.str.slice(2)\n })\n }\n }\n\n return root\n}\n\n/**\n * Creates a TokenSet from a string.\n *\n * The string may contain one or more wildcard characters (*)\n * that will allow wildcard matching when intersecting with\n * another TokenSet.\n *\n * @param {string} str - The string to create a TokenSet from.\n * @returns {lunr.TokenSet}\n */\nlunr.TokenSet.fromString = function (str) {\n var node = new lunr.TokenSet,\n root = node\n\n /*\n * Iterates through all characters within the passed string\n * appending a node for each character.\n *\n * When a wildcard character is found then a self\n * referencing edge is introduced to continually match\n * any number of any characters.\n */\n for (var i = 0, len = str.length; i < len; i++) {\n var char = str[i],\n final = (i == len - 1)\n\n if (char == \"*\") {\n node.edges[char] = node\n node.final = final\n\n } else {\n var next = new lunr.TokenSet\n next.final = final\n\n node.edges[char] = next\n node = next\n }\n }\n\n return root\n}\n\n/**\n * Converts this TokenSet into an array of strings\n * contained within the TokenSet.\n *\n * This is not intended to be used on a TokenSet that\n * contains wildcards, in these cases the results are\n * undefined and are likely to cause an infinite loop.\n *\n * @returns {string[]}\n */\nlunr.TokenSet.prototype.toArray = function () {\n var words = []\n\n var stack = [{\n prefix: \"\",\n node: this\n }]\n\n while (stack.length) {\n var frame = stack.pop(),\n edges = Object.keys(frame.node.edges),\n len = edges.length\n\n if (frame.node.final) {\n /* In Safari, at this point the prefix is sometimes corrupted, see:\n * https://github.com/olivernn/lunr.js/issues/279 Calling any\n * String.prototype method forces Safari to \"cast\" this string to what\n * it's supposed to be, fixing the bug. */\n frame.prefix.charAt(0)\n words.push(frame.prefix)\n }\n\n for (var i = 0; i < len; i++) {\n var edge = edges[i]\n\n stack.push({\n prefix: frame.prefix.concat(edge),\n node: frame.node.edges[edge]\n })\n }\n }\n\n return words\n}\n\n/**\n * Generates a string representation of a TokenSet.\n *\n * This is intended to allow TokenSets to be used as keys\n * in objects, largely to aid the construction and minimisation\n * of a TokenSet. As such it is not designed to be a human\n * friendly representation of the TokenSet.\n *\n * @returns {string}\n */\nlunr.TokenSet.prototype.toString = function () {\n // NOTE: Using Object.keys here as this.edges is very likely\n // to enter 'hash-mode' with many keys being added\n //\n // avoiding a for-in loop here as it leads to the function\n // being de-optimised (at least in V8). From some simple\n // benchmarks the performance is comparable, but allowing\n // V8 to optimize may mean easy performance wins in the future.\n\n if (this._str) {\n return this._str\n }\n\n var str = this.final ? '1' : '0',\n labels = Object.keys(this.edges).sort(),\n len = labels.length\n\n for (var i = 0; i < len; i++) {\n var label = labels[i],\n node = this.edges[label]\n\n str = str + label + node.id\n }\n\n return str\n}\n\n/**\n * Returns a new TokenSet that is the intersection of\n * this TokenSet and the passed TokenSet.\n *\n * This intersection will take into account any wildcards\n * contained within the TokenSet.\n *\n * @param {lunr.TokenSet} b - An other TokenSet to intersect with.\n * @returns {lunr.TokenSet}\n */\nlunr.TokenSet.prototype.intersect = function (b) {\n var output = new lunr.TokenSet,\n frame = undefined\n\n var stack = [{\n qNode: b,\n output: output,\n node: this\n }]\n\n while (stack.length) {\n frame = stack.pop()\n\n // NOTE: As with the #toString method, we are using\n // Object.keys and a for loop instead of a for-in loop\n // as both of these objects enter 'hash' mode, causing\n // the function to be de-optimised in V8\n var qEdges = Object.keys(frame.qNode.edges),\n qLen = qEdges.length,\n nEdges = Object.keys(frame.node.edges),\n nLen = nEdges.length\n\n for (var q = 0; q < qLen; q++) {\n var qEdge = qEdges[q]\n\n for (var n = 0; n < nLen; n++) {\n var nEdge = nEdges[n]\n\n if (nEdge == qEdge || qEdge == '*') {\n var node = frame.node.edges[nEdge],\n qNode = frame.qNode.edges[qEdge],\n final = node.final && qNode.final,\n next = undefined\n\n if (nEdge in frame.output.edges) {\n // an edge already exists for this character\n // no need to create a new node, just set the finality\n // bit unless this node is already final\n next = frame.output.edges[nEdge]\n next.final = next.final || final\n\n } else {\n // no edge exists yet, must create one\n // set the finality bit and insert it\n // into the output\n next = new lunr.TokenSet\n next.final = final\n frame.output.edges[nEdge] = next\n }\n\n stack.push({\n qNode: qNode,\n output: next,\n node: node\n })\n }\n }\n }\n }\n\n return output\n}\nlunr.TokenSet.Builder = function () {\n this.previousWord = \"\"\n this.root = new lunr.TokenSet\n this.uncheckedNodes = []\n this.minimizedNodes = {}\n}\n\nlunr.TokenSet.Builder.prototype.insert = function (word) {\n var node,\n commonPrefix = 0\n\n if (word < this.previousWord) {\n throw new Error (\"Out of order word insertion\")\n }\n\n for (var i = 0; i < word.length && i < this.previousWord.length; i++) {\n if (word[i] != this.previousWord[i]) break\n commonPrefix++\n }\n\n this.minimize(commonPrefix)\n\n if (this.uncheckedNodes.length == 0) {\n node = this.root\n } else {\n node = this.uncheckedNodes[this.uncheckedNodes.length - 1].child\n }\n\n for (var i = commonPrefix; i < word.length; i++) {\n var nextNode = new lunr.TokenSet,\n char = word[i]\n\n node.edges[char] = nextNode\n\n this.uncheckedNodes.push({\n parent: node,\n char: char,\n child: nextNode\n })\n\n node = nextNode\n }\n\n node.final = true\n this.previousWord = word\n}\n\nlunr.TokenSet.Builder.prototype.finish = function () {\n this.minimize(0)\n}\n\nlunr.TokenSet.Builder.prototype.minimize = function (downTo) {\n for (var i = this.uncheckedNodes.length - 1; i >= downTo; i--) {\n var node = this.uncheckedNodes[i],\n childKey = node.child.toString()\n\n if (childKey in this.minimizedNodes) {\n node.parent.edges[node.char] = this.minimizedNodes[childKey]\n } else {\n // Cache the key for this node since\n // we know it can't change anymore\n node.child._str = childKey\n\n this.minimizedNodes[childKey] = node.child\n }\n\n this.uncheckedNodes.pop()\n }\n}\n/*!\n * lunr.Index\n * Copyright (C) 2019 Oliver Nightingale\n */\n\n/**\n * An index contains the built index of all documents and provides a query interface\n * to the index.\n *\n * Usually instances of lunr.Index will not be created using this constructor, instead\n * lunr.Builder should be used to construct new indexes, or lunr.Index.load should be\n * used to load previously built and serialized indexes.\n *\n * @constructor\n * @param {Object} attrs - The attributes of the built search index.\n * @param {Object} attrs.invertedIndex - An index of term/field to document reference.\n * @param {Object} attrs.fieldVectors - Field vectors\n * @param {lunr.TokenSet} attrs.tokenSet - An set of all corpus tokens.\n * @param {string[]} attrs.fields - The names of indexed document fields.\n * @param {lunr.Pipeline} attrs.pipeline - The pipeline to use for search terms.\n */\nlunr.Index = function (attrs) {\n this.invertedIndex = attrs.invertedIndex\n this.fieldVectors = attrs.fieldVectors\n this.tokenSet = attrs.tokenSet\n this.fields = attrs.fields\n this.pipeline = attrs.pipeline\n}\n\n/**\n * A result contains details of a document matching a search query.\n * @typedef {Object} lunr.Index~Result\n * @property {string} ref - The reference of the document this result represents.\n * @property {number} score - A number between 0 and 1 representing how similar this document is to the query.\n * @property {lunr.MatchData} matchData - Contains metadata about this match including which term(s) caused the match.\n */\n\n/**\n * Although lunr provides the ability to create queries using lunr.Query, it also provides a simple\n * query language which itself is parsed into an instance of lunr.Query.\n *\n * For programmatically building queries it is advised to directly use lunr.Query, the query language\n * is best used for human entered text rather than program generated text.\n *\n * At its simplest queries can just be a single term, e.g. `hello`, multiple terms are also supported\n * and will be combined with OR, e.g `hello world` will match documents that contain either 'hello'\n * or 'world', though those that contain both will rank higher in the results.\n *\n * Wildcards can be included in terms to match one or more unspecified characters, these wildcards can\n * be inserted anywhere within the term, and more than one wildcard can exist in a single term. Adding\n * wildcards will increase the number of documents that will be found but can also have a negative\n * impact on query performance, especially with wildcards at the beginning of a term.\n *\n * Terms can be restricted to specific fields, e.g. `title:hello`, only documents with the term\n * hello in the title field will match this query. Using a field not present in the index will lead\n * to an error being thrown.\n *\n * Modifiers can also be added to terms, lunr supports edit distance and boost modifiers on terms. A term\n * boost will make documents matching that term score higher, e.g. `foo^5`. Edit distance is also supported\n * to provide fuzzy matching, e.g. 'hello~2' will match documents with hello with an edit distance of 2.\n * Avoid large values for edit distance to improve query performance.\n *\n * Each term also supports a presence modifier. By default a term's presence in document is optional, however\n * this can be changed to either required or prohibited. For a term's presence to be required in a document the\n * term should be prefixed with a '+', e.g. `+foo bar` is a search for documents that must contain 'foo' and\n * optionally contain 'bar'. Conversely a leading '-' sets the terms presence to prohibited, i.e. it must not\n * appear in a document, e.g. `-foo bar` is a search for documents that do not contain 'foo' but may contain 'bar'.\n *\n * To escape special characters the backslash character '\\' can be used, this allows searches to include\n * characters that would normally be considered modifiers, e.g. `foo\\~2` will search for a term \"foo~2\" instead\n * of attempting to apply a boost of 2 to the search term \"foo\".\n *\n * @typedef {string} lunr.Index~QueryString\n * @example Simple single term query\n * hello\n * @example Multiple term query\n * hello world\n * @example term scoped to a field\n * title:hello\n * @example term with a boost of 10\n * hello^10\n * @example term with an edit distance of 2\n * hello~2\n * @example terms with presence modifiers\n * -foo +bar baz\n */\n\n/**\n * Performs a search against the index using lunr query syntax.\n *\n * Results will be returned sorted by their score, the most relevant results\n * will be returned first. For details on how the score is calculated, please see\n * the {@link https://lunrjs.com/guides/searching.html#scoring|guide}.\n *\n * For more programmatic querying use lunr.Index#query.\n *\n * @param {lunr.Index~QueryString} queryString - A string containing a lunr query.\n * @throws {lunr.QueryParseError} If the passed query string cannot be parsed.\n * @returns {lunr.Index~Result[]}\n */\nlunr.Index.prototype.search = function (queryString) {\n return this.query(function (query) {\n var parser = new lunr.QueryParser(queryString, query)\n parser.parse()\n })\n}\n\n/**\n * A query builder callback provides a query object to be used to express\n * the query to perform on the index.\n *\n * @callback lunr.Index~queryBuilder\n * @param {lunr.Query} query - The query object to build up.\n * @this lunr.Query\n */\n\n/**\n * Performs a query against the index using the yielded lunr.Query object.\n *\n * If performing programmatic queries against the index, this method is preferred\n * over lunr.Index#search so as to avoid the additional query parsing overhead.\n *\n * A query object is yielded to the supplied function which should be used to\n * express the query to be run against the index.\n *\n * Note that although this function takes a callback parameter it is _not_ an\n * asynchronous operation, the callback is just yielded a query object to be\n * customized.\n *\n * @param {lunr.Index~queryBuilder} fn - A function that is used to build the query.\n * @returns {lunr.Index~Result[]}\n */\nlunr.Index.prototype.query = function (fn) {\n // for each query clause\n // * process terms\n // * expand terms from token set\n // * find matching documents and metadata\n // * get document vectors\n // * score documents\n\n var query = new lunr.Query(this.fields),\n matchingFields = Object.create(null),\n queryVectors = Object.create(null),\n termFieldCache = Object.create(null),\n requiredMatches = Object.create(null),\n prohibitedMatches = Object.create(null)\n\n /*\n * To support field level boosts a query vector is created per\n * field. An empty vector is eagerly created to support negated\n * queries.\n */\n for (var i = 0; i < this.fields.length; i++) {\n queryVectors[this.fields[i]] = new lunr.Vector\n }\n\n fn.call(query, query)\n\n for (var i = 0; i < query.clauses.length; i++) {\n /*\n * Unless the pipeline has been disabled for this term, which is\n * the case for terms with wildcards, we need to pass the clause\n * term through the search pipeline. A pipeline returns an array\n * of processed terms. Pipeline functions may expand the passed\n * term, which means we may end up performing multiple index lookups\n * for a single query term.\n */\n var clause = query.clauses[i],\n terms = null,\n clauseMatches = lunr.Set.complete\n\n if (clause.usePipeline) {\n terms = this.pipeline.runString(clause.term, {\n fields: clause.fields\n })\n } else {\n terms = [clause.term]\n }\n\n for (var m = 0; m < terms.length; m++) {\n var term = terms[m]\n\n /*\n * Each term returned from the pipeline needs to use the same query\n * clause object, e.g. the same boost and or edit distance. The\n * simplest way to do this is to re-use the clause object but mutate\n * its term property.\n */\n clause.term = term\n\n /*\n * From the term in the clause we create a token set which will then\n * be used to intersect the indexes token set to get a list of terms\n * to lookup in the inverted index\n */\n var termTokenSet = lunr.TokenSet.fromClause(clause),\n expandedTerms = this.tokenSet.intersect(termTokenSet).toArray()\n\n /*\n * If a term marked as required does not exist in the tokenSet it is\n * impossible for the search to return any matches. We set all the field\n * scoped required matches set to empty and stop examining any further\n * clauses.\n */\n if (expandedTerms.length === 0 && clause.presence === lunr.Query.presence.REQUIRED) {\n for (var k = 0; k < clause.fields.length; k++) {\n var field = clause.fields[k]\n requiredMatches[field] = lunr.Set.empty\n }\n\n break\n }\n\n for (var j = 0; j < expandedTerms.length; j++) {\n /*\n * For each term get the posting and termIndex, this is required for\n * building the query vector.\n */\n var expandedTerm = expandedTerms[j],\n posting = this.invertedIndex[expandedTerm],\n termIndex = posting._index\n\n for (var k = 0; k < clause.fields.length; k++) {\n /*\n * For each field that this query term is scoped by (by default\n * all fields are in scope) we need to get all the document refs\n * that have this term in that field.\n *\n * The posting is the entry in the invertedIndex for the matching\n * term from above.\n */\n var field = clause.fields[k],\n fieldPosting = posting[field],\n matchingDocumentRefs = Object.keys(fieldPosting),\n termField = expandedTerm + \"/\" + field,\n matchingDocumentsSet = new lunr.Set(matchingDocumentRefs)\n\n /*\n * if the presence of this term is required ensure that the matching\n * documents are added to the set of required matches for this clause.\n *\n */\n if (clause.presence == lunr.Query.presence.REQUIRED) {\n clauseMatches = clauseMatches.union(matchingDocumentsSet)\n\n if (requiredMatches[field] === undefined) {\n requiredMatches[field] = lunr.Set.complete\n }\n }\n\n /*\n * if the presence of this term is prohibited ensure that the matching\n * documents are added to the set of prohibited matches for this field,\n * creating that set if it does not yet exist.\n */\n if (clause.presence == lunr.Query.presence.PROHIBITED) {\n if (prohibitedMatches[field] === undefined) {\n prohibitedMatches[field] = lunr.Set.empty\n }\n\n prohibitedMatches[field] = prohibitedMatches[field].union(matchingDocumentsSet)\n\n /*\n * Prohibited matches should not be part of the query vector used for\n * similarity scoring and no metadata should be extracted so we continue\n * to the next field\n */\n continue\n }\n\n /*\n * The query field vector is populated using the termIndex found for\n * the term and a unit value with the appropriate boost applied.\n * Using upsert because there could already be an entry in the vector\n * for the term we are working with. In that case we just add the scores\n * together.\n */\n queryVectors[field].upsert(termIndex, clause.boost, function (a, b) { return a + b })\n\n /**\n * If we've already seen this term, field combo then we've already collected\n * the matching documents and metadata, no need to go through all that again\n */\n if (termFieldCache[termField]) {\n continue\n }\n\n for (var l = 0; l < matchingDocumentRefs.length; l++) {\n /*\n * All metadata for this term/field/document triple\n * are then extracted and collected into an instance\n * of lunr.MatchData ready to be returned in the query\n * results\n */\n var matchingDocumentRef = matchingDocumentRefs[l],\n matchingFieldRef = new lunr.FieldRef (matchingDocumentRef, field),\n metadata = fieldPosting[matchingDocumentRef],\n fieldMatch\n\n if ((fieldMatch = matchingFields[matchingFieldRef]) === undefined) {\n matchingFields[matchingFieldRef] = new lunr.MatchData (expandedTerm, field, metadata)\n } else {\n fieldMatch.add(expandedTerm, field, metadata)\n }\n\n }\n\n termFieldCache[termField] = true\n }\n }\n }\n\n /**\n * If the presence was required we need to update the requiredMatches field sets.\n * We do this after all fields for the term have collected their matches because\n * the clause terms presence is required in _any_ of the fields not _all_ of the\n * fields.\n */\n if (clause.presence === lunr.Query.presence.REQUIRED) {\n for (var k = 0; k < clause.fields.length; k++) {\n var field = clause.fields[k]\n requiredMatches[field] = requiredMatches[field].intersect(clauseMatches)\n }\n }\n }\n\n /**\n * Need to combine the field scoped required and prohibited\n * matching documents into a global set of required and prohibited\n * matches\n */\n var allRequiredMatches = lunr.Set.complete,\n allProhibitedMatches = lunr.Set.empty\n\n for (var i = 0; i < this.fields.length; i++) {\n var field = this.fields[i]\n\n if (requiredMatches[field]) {\n allRequiredMatches = allRequiredMatches.intersect(requiredMatches[field])\n }\n\n if (prohibitedMatches[field]) {\n allProhibitedMatches = allProhibitedMatches.union(prohibitedMatches[field])\n }\n }\n\n var matchingFieldRefs = Object.keys(matchingFields),\n results = [],\n matches = Object.create(null)\n\n /*\n * If the query is negated (contains only prohibited terms)\n * we need to get _all_ fieldRefs currently existing in the\n * index. This is only done when we know that the query is\n * entirely prohibited terms to avoid any cost of getting all\n * fieldRefs unnecessarily.\n *\n * Additionally, blank MatchData must be created to correctly\n * populate the results.\n */\n if (query.isNegated()) {\n matchingFieldRefs = Object.keys(this.fieldVectors)\n\n for (var i = 0; i < matchingFieldRefs.length; i++) {\n var matchingFieldRef = matchingFieldRefs[i]\n var fieldRef = lunr.FieldRef.fromString(matchingFieldRef)\n matchingFields[matchingFieldRef] = new lunr.MatchData\n }\n }\n\n for (var i = 0; i < matchingFieldRefs.length; i++) {\n /*\n * Currently we have document fields that match the query, but we\n * need to return documents. The matchData and scores are combined\n * from multiple fields belonging to the same document.\n *\n * Scores are calculated by field, using the query vectors created\n * above, and combined into a final document score using addition.\n */\n var fieldRef = lunr.FieldRef.fromString(matchingFieldRefs[i]),\n docRef = fieldRef.docRef\n\n if (!allRequiredMatches.contains(docRef)) {\n continue\n }\n\n if (allProhibitedMatches.contains(docRef)) {\n continue\n }\n\n var fieldVector = this.fieldVectors[fieldRef],\n score = queryVectors[fieldRef.fieldName].similarity(fieldVector),\n docMatch\n\n if ((docMatch = matches[docRef]) !== undefined) {\n docMatch.score += score\n docMatch.matchData.combine(matchingFields[fieldRef])\n } else {\n var match = {\n ref: docRef,\n score: score,\n matchData: matchingFields[fieldRef]\n }\n matches[docRef] = match\n results.push(match)\n }\n }\n\n /*\n * Sort the results objects by score, highest first.\n */\n return results.sort(function (a, b) {\n return b.score - a.score\n })\n}\n\n/**\n * Prepares the index for JSON serialization.\n *\n * The schema for this JSON blob will be described in a\n * separate JSON schema file.\n *\n * @returns {Object}\n */\nlunr.Index.prototype.toJSON = function () {\n var invertedIndex = Object.keys(this.invertedIndex)\n .sort()\n .map(function (term) {\n return [term, this.invertedIndex[term]]\n }, this)\n\n var fieldVectors = Object.keys(this.fieldVectors)\n .map(function (ref) {\n return [ref, this.fieldVectors[ref].toJSON()]\n }, this)\n\n return {\n version: lunr.version,\n fields: this.fields,\n fieldVectors: fieldVectors,\n invertedIndex: invertedIndex,\n pipeline: this.pipeline.toJSON()\n }\n}\n\n/**\n * Loads a previously serialized lunr.Index\n *\n * @param {Object} serializedIndex - A previously serialized lunr.Index\n * @returns {lunr.Index}\n */\nlunr.Index.load = function (serializedIndex) {\n var attrs = {},\n fieldVectors = {},\n serializedVectors = serializedIndex.fieldVectors,\n invertedIndex = Object.create(null),\n serializedInvertedIndex = serializedIndex.invertedIndex,\n tokenSetBuilder = new lunr.TokenSet.Builder,\n pipeline = lunr.Pipeline.load(serializedIndex.pipeline)\n\n if (serializedIndex.version != lunr.version) {\n lunr.utils.warn(\"Version mismatch when loading serialised index. Current version of lunr '\" + lunr.version + \"' does not match serialized index '\" + serializedIndex.version + \"'\")\n }\n\n for (var i = 0; i < serializedVectors.length; i++) {\n var tuple = serializedVectors[i],\n ref = tuple[0],\n elements = tuple[1]\n\n fieldVectors[ref] = new lunr.Vector(elements)\n }\n\n for (var i = 0; i < serializedInvertedIndex.length; i++) {\n var tuple = serializedInvertedIndex[i],\n term = tuple[0],\n posting = tuple[1]\n\n tokenSetBuilder.insert(term)\n invertedIndex[term] = posting\n }\n\n tokenSetBuilder.finish()\n\n attrs.fields = serializedIndex.fields\n\n attrs.fieldVectors = fieldVectors\n attrs.invertedIndex = invertedIndex\n attrs.tokenSet = tokenSetBuilder.root\n attrs.pipeline = pipeline\n\n return new lunr.Index(attrs)\n}\n/*!\n * lunr.Builder\n * Copyright (C) 2019 Oliver Nightingale\n */\n\n/**\n * lunr.Builder performs indexing on a set of documents and\n * returns instances of lunr.Index ready for querying.\n *\n * All configuration of the index is done via the builder, the\n * fields to index, the document reference, the text processing\n * pipeline and document scoring parameters are all set on the\n * builder before indexing.\n *\n * @constructor\n * @property {string} _ref - Internal reference to the document reference field.\n * @property {string[]} _fields - Internal reference to the document fields to index.\n * @property {object} invertedIndex - The inverted index maps terms to document fields.\n * @property {object} documentTermFrequencies - Keeps track of document term frequencies.\n * @property {object} documentLengths - Keeps track of the length of documents added to the index.\n * @property {lunr.tokenizer} tokenizer - Function for splitting strings into tokens for indexing.\n * @property {lunr.Pipeline} pipeline - The pipeline performs text processing on tokens before indexing.\n * @property {lunr.Pipeline} searchPipeline - A pipeline for processing search terms before querying the index.\n * @property {number} documentCount - Keeps track of the total number of documents indexed.\n * @property {number} _b - A parameter to control field length normalization, setting this to 0 disabled normalization, 1 fully normalizes field lengths, the default value is 0.75.\n * @property {number} _k1 - A parameter to control how quickly an increase in term frequency results in term frequency saturation, the default value is 1.2.\n * @property {number} termIndex - A counter incremented for each unique term, used to identify a terms position in the vector space.\n * @property {array} metadataWhitelist - A list of metadata keys that have been whitelisted for entry in the index.\n */\nlunr.Builder = function () {\n this._ref = \"id\"\n this._fields = Object.create(null)\n this._documents = Object.create(null)\n this.invertedIndex = Object.create(null)\n this.fieldTermFrequencies = {}\n this.fieldLengths = {}\n this.tokenizer = lunr.tokenizer\n this.pipeline = new lunr.Pipeline\n this.searchPipeline = new lunr.Pipeline\n this.documentCount = 0\n this._b = 0.75\n this._k1 = 1.2\n this.termIndex = 0\n this.metadataWhitelist = []\n}\n\n/**\n * Sets the document field used as the document reference. Every document must have this field.\n * The type of this field in the document should be a string, if it is not a string it will be\n * coerced into a string by calling toString.\n *\n * The default ref is 'id'.\n *\n * The ref should _not_ be changed during indexing, it should be set before any documents are\n * added to the index. Changing it during indexing can lead to inconsistent results.\n *\n * @param {string} ref - The name of the reference field in the document.\n */\nlunr.Builder.prototype.ref = function (ref) {\n this._ref = ref\n}\n\n/**\n * A function that is used to extract a field from a document.\n *\n * Lunr expects a field to be at the top level of a document, if however the field\n * is deeply nested within a document an extractor function can be used to extract\n * the right field for indexing.\n *\n * @callback fieldExtractor\n * @param {object} doc - The document being added to the index.\n * @returns {?(string|object|object[])} obj - The object that will be indexed for this field.\n * @example Extracting a nested field\n * function (doc) { return doc.nested.field }\n */\n\n/**\n * Adds a field to the list of document fields that will be indexed. Every document being\n * indexed should have this field. Null values for this field in indexed documents will\n * not cause errors but will limit the chance of that document being retrieved by searches.\n *\n * All fields should be added before adding documents to the index. Adding fields after\n * a document has been indexed will have no effect on already indexed documents.\n *\n * Fields can be boosted at build time. This allows terms within that field to have more\n * importance when ranking search results. Use a field boost to specify that matches within\n * one field are more important than other fields.\n *\n * @param {string} fieldName - The name of a field to index in all documents.\n * @param {object} attributes - Optional attributes associated with this field.\n * @param {number} [attributes.boost=1] - Boost applied to all terms within this field.\n * @param {fieldExtractor} [attributes.extractor] - Function to extract a field from a document.\n * @throws {RangeError} fieldName cannot contain unsupported characters '/'\n */\nlunr.Builder.prototype.field = function (fieldName, attributes) {\n if (/\\//.test(fieldName)) {\n throw new RangeError (\"Field '\" + fieldName + \"' contains illegal character '/'\")\n }\n\n this._fields[fieldName] = attributes || {}\n}\n\n/**\n * A parameter to tune the amount of field length normalisation that is applied when\n * calculating relevance scores. A value of 0 will completely disable any normalisation\n * and a value of 1 will fully normalise field lengths. The default is 0.75. Values of b\n * will be clamped to the range 0 - 1.\n *\n * @param {number} number - The value to set for this tuning parameter.\n */\nlunr.Builder.prototype.b = function (number) {\n if (number < 0) {\n this._b = 0\n } else if (number > 1) {\n this._b = 1\n } else {\n this._b = number\n }\n}\n\n/**\n * A parameter that controls the speed at which a rise in term frequency results in term\n * frequency saturation. The default value is 1.2. Setting this to a higher value will give\n * slower saturation levels, a lower value will result in quicker saturation.\n *\n * @param {number} number - The value to set for this tuning parameter.\n */\nlunr.Builder.prototype.k1 = function (number) {\n this._k1 = number\n}\n\n/**\n * Adds a document to the index.\n *\n * Before adding fields to the index the index should have been fully setup, with the document\n * ref and all fields to index already having been specified.\n *\n * The document must have a field name as specified by the ref (by default this is 'id') and\n * it should have all fields defined for indexing, though null or undefined values will not\n * cause errors.\n *\n * Entire documents can be boosted at build time. Applying a boost to a document indicates that\n * this document should rank higher in search results than other documents.\n *\n * @param {object} doc - The document to add to the index.\n * @param {object} attributes - Optional attributes associated with this document.\n * @param {number} [attributes.boost=1] - Boost applied to all terms within this document.\n */\nlunr.Builder.prototype.add = function (doc, attributes) {\n var docRef = doc[this._ref],\n fields = Object.keys(this._fields)\n\n this._documents[docRef] = attributes || {}\n this.documentCount += 1\n\n for (var i = 0; i < fields.length; i++) {\n var fieldName = fields[i],\n extractor = this._fields[fieldName].extractor,\n field = extractor ? extractor(doc) : doc[fieldName],\n tokens = this.tokenizer(field, {\n fields: [fieldName]\n }),\n terms = this.pipeline.run(tokens),\n fieldRef = new lunr.FieldRef (docRef, fieldName),\n fieldTerms = Object.create(null)\n\n this.fieldTermFrequencies[fieldRef] = fieldTerms\n this.fieldLengths[fieldRef] = 0\n\n // store the length of this field for this document\n this.fieldLengths[fieldRef] += terms.length\n\n // calculate term frequencies for this field\n for (var j = 0; j < terms.length; j++) {\n var term = terms[j]\n\n if (fieldTerms[term] == undefined) {\n fieldTerms[term] = 0\n }\n\n fieldTerms[term] += 1\n\n // add to inverted index\n // create an initial posting if one doesn't exist\n if (this.invertedIndex[term] == undefined) {\n var posting = Object.create(null)\n posting[\"_index\"] = this.termIndex\n this.termIndex += 1\n\n for (var k = 0; k < fields.length; k++) {\n posting[fields[k]] = Object.create(null)\n }\n\n this.invertedIndex[term] = posting\n }\n\n // add an entry for this term/fieldName/docRef to the invertedIndex\n if (this.invertedIndex[term][fieldName][docRef] == undefined) {\n this.invertedIndex[term][fieldName][docRef] = Object.create(null)\n }\n\n // store all whitelisted metadata about this token in the\n // inverted index\n for (var l = 0; l < this.metadataWhitelist.length; l++) {\n var metadataKey = this.metadataWhitelist[l],\n metadata = term.metadata[metadataKey]\n\n if (this.invertedIndex[term][fieldName][docRef][metadataKey] == undefined) {\n this.invertedIndex[term][fieldName][docRef][metadataKey] = []\n }\n\n this.invertedIndex[term][fieldName][docRef][metadataKey].push(metadata)\n }\n }\n\n }\n}\n\n/**\n * Calculates the average document length for this index\n *\n * @private\n */\nlunr.Builder.prototype.calculateAverageFieldLengths = function () {\n\n var fieldRefs = Object.keys(this.fieldLengths),\n numberOfFields = fieldRefs.length,\n accumulator = {},\n documentsWithField = {}\n\n for (var i = 0; i < numberOfFields; i++) {\n var fieldRef = lunr.FieldRef.fromString(fieldRefs[i]),\n field = fieldRef.fieldName\n\n documentsWithField[field] || (documentsWithField[field] = 0)\n documentsWithField[field] += 1\n\n accumulator[field] || (accumulator[field] = 0)\n accumulator[field] += this.fieldLengths[fieldRef]\n }\n\n var fields = Object.keys(this._fields)\n\n for (var i = 0; i < fields.length; i++) {\n var fieldName = fields[i]\n accumulator[fieldName] = accumulator[fieldName] / documentsWithField[fieldName]\n }\n\n this.averageFieldLength = accumulator\n}\n\n/**\n * Builds a vector space model of every document using lunr.Vector\n *\n * @private\n */\nlunr.Builder.prototype.createFieldVectors = function () {\n var fieldVectors = {},\n fieldRefs = Object.keys(this.fieldTermFrequencies),\n fieldRefsLength = fieldRefs.length,\n termIdfCache = Object.create(null)\n\n for (var i = 0; i < fieldRefsLength; i++) {\n var fieldRef = lunr.FieldRef.fromString(fieldRefs[i]),\n fieldName = fieldRef.fieldName,\n fieldLength = this.fieldLengths[fieldRef],\n fieldVector = new lunr.Vector,\n termFrequencies = this.fieldTermFrequencies[fieldRef],\n terms = Object.keys(termFrequencies),\n termsLength = terms.length\n\n\n var fieldBoost = this._fields[fieldName].boost || 1,\n docBoost = this._documents[fieldRef.docRef].boost || 1\n\n for (var j = 0; j < termsLength; j++) {\n var term = terms[j],\n tf = termFrequencies[term],\n termIndex = this.invertedIndex[term]._index,\n idf, score, scoreWithPrecision\n\n if (termIdfCache[term] === undefined) {\n idf = lunr.idf(this.invertedIndex[term], this.documentCount)\n termIdfCache[term] = idf\n } else {\n idf = termIdfCache[term]\n }\n\n score = idf * ((this._k1 + 1) * tf) / (this._k1 * (1 - this._b + this._b * (fieldLength / this.averageFieldLength[fieldName])) + tf)\n score *= fieldBoost\n score *= docBoost\n scoreWithPrecision = Math.round(score * 1000) / 1000\n // Converts 1.23456789 to 1.234.\n // Reducing the precision so that the vectors take up less\n // space when serialised. Doing it now so that they behave\n // the same before and after serialisation. Also, this is\n // the fastest approach to reducing a number's precision in\n // JavaScript.\n\n fieldVector.insert(termIndex, scoreWithPrecision)\n }\n\n fieldVectors[fieldRef] = fieldVector\n }\n\n this.fieldVectors = fieldVectors\n}\n\n/**\n * Creates a token set of all tokens in the index using lunr.TokenSet\n *\n * @private\n */\nlunr.Builder.prototype.createTokenSet = function () {\n this.tokenSet = lunr.TokenSet.fromArray(\n Object.keys(this.invertedIndex).sort()\n )\n}\n\n/**\n * Builds the index, creating an instance of lunr.Index.\n *\n * This completes the indexing process and should only be called\n * once all documents have been added to the index.\n *\n * @returns {lunr.Index}\n */\nlunr.Builder.prototype.build = function () {\n this.calculateAverageFieldLengths()\n this.createFieldVectors()\n this.createTokenSet()\n\n return new lunr.Index({\n invertedIndex: this.invertedIndex,\n fieldVectors: this.fieldVectors,\n tokenSet: this.tokenSet,\n fields: Object.keys(this._fields),\n pipeline: this.searchPipeline\n })\n}\n\n/**\n * Applies a plugin to the index builder.\n *\n * A plugin is a function that is called with the index builder as its context.\n * Plugins can be used to customise or extend the behaviour of the index\n * in some way. A plugin is just a function, that encapsulated the custom\n * behaviour that should be applied when building the index.\n *\n * The plugin function will be called with the index builder as its argument, additional\n * arguments can also be passed when calling use. The function will be called\n * with the index builder as its context.\n *\n * @param {Function} plugin The plugin to apply.\n */\nlunr.Builder.prototype.use = function (fn) {\n var args = Array.prototype.slice.call(arguments, 1)\n args.unshift(this)\n fn.apply(this, args)\n}\n/**\n * Contains and collects metadata about a matching document.\n * A single instance of lunr.MatchData is returned as part of every\n * lunr.Index~Result.\n *\n * @constructor\n * @param {string} term - The term this match data is associated with\n * @param {string} field - The field in which the term was found\n * @param {object} metadata - The metadata recorded about this term in this field\n * @property {object} metadata - A cloned collection of metadata associated with this document.\n * @see {@link lunr.Index~Result}\n */\nlunr.MatchData = function (term, field, metadata) {\n var clonedMetadata = Object.create(null),\n metadataKeys = Object.keys(metadata || {})\n\n // Cloning the metadata to prevent the original\n // being mutated during match data combination.\n // Metadata is kept in an array within the inverted\n // index so cloning the data can be done with\n // Array#slice\n for (var i = 0; i < metadataKeys.length; i++) {\n var key = metadataKeys[i]\n clonedMetadata[key] = metadata[key].slice()\n }\n\n this.metadata = Object.create(null)\n\n if (term !== undefined) {\n this.metadata[term] = Object.create(null)\n this.metadata[term][field] = clonedMetadata\n }\n}\n\n/**\n * An instance of lunr.MatchData will be created for every term that matches a\n * document. However only one instance is required in a lunr.Index~Result. This\n * method combines metadata from another instance of lunr.MatchData with this\n * objects metadata.\n *\n * @param {lunr.MatchData} otherMatchData - Another instance of match data to merge with this one.\n * @see {@link lunr.Index~Result}\n */\nlunr.MatchData.prototype.combine = function (otherMatchData) {\n var terms = Object.keys(otherMatchData.metadata)\n\n for (var i = 0; i < terms.length; i++) {\n var term = terms[i],\n fields = Object.keys(otherMatchData.metadata[term])\n\n if (this.metadata[term] == undefined) {\n this.metadata[term] = Object.create(null)\n }\n\n for (var j = 0; j < fields.length; j++) {\n var field = fields[j],\n keys = Object.keys(otherMatchData.metadata[term][field])\n\n if (this.metadata[term][field] == undefined) {\n this.metadata[term][field] = Object.create(null)\n }\n\n for (var k = 0; k < keys.length; k++) {\n var key = keys[k]\n\n if (this.metadata[term][field][key] == undefined) {\n this.metadata[term][field][key] = otherMatchData.metadata[term][field][key]\n } else {\n this.metadata[term][field][key] = this.metadata[term][field][key].concat(otherMatchData.metadata[term][field][key])\n }\n\n }\n }\n }\n}\n\n/**\n * Add metadata for a term/field pair to this instance of match data.\n *\n * @param {string} term - The term this match data is associated with\n * @param {string} field - The field in which the term was found\n * @param {object} metadata - The metadata recorded about this term in this field\n */\nlunr.MatchData.prototype.add = function (term, field, metadata) {\n if (!(term in this.metadata)) {\n this.metadata[term] = Object.create(null)\n this.metadata[term][field] = metadata\n return\n }\n\n if (!(field in this.metadata[term])) {\n this.metadata[term][field] = metadata\n return\n }\n\n var metadataKeys = Object.keys(metadata)\n\n for (var i = 0; i < metadataKeys.length; i++) {\n var key = metadataKeys[i]\n\n if (key in this.metadata[term][field]) {\n this.metadata[term][field][key] = this.metadata[term][field][key].concat(metadata[key])\n } else {\n this.metadata[term][field][key] = metadata[key]\n }\n }\n}\n/**\n * A lunr.Query provides a programmatic way of defining queries to be performed\n * against a {@link lunr.Index}.\n *\n * Prefer constructing a lunr.Query using the {@link lunr.Index#query} method\n * so the query object is pre-initialized with the right index fields.\n *\n * @constructor\n * @property {lunr.Query~Clause[]} clauses - An array of query clauses.\n * @property {string[]} allFields - An array of all available fields in a lunr.Index.\n */\nlunr.Query = function (allFields) {\n this.clauses = []\n this.allFields = allFields\n}\n\n/**\n * Constants for indicating what kind of automatic wildcard insertion will be used when constructing a query clause.\n *\n * This allows wildcards to be added to the beginning and end of a term without having to manually do any string\n * concatenation.\n *\n * The wildcard constants can be bitwise combined to select both leading and trailing wildcards.\n *\n * @constant\n * @default\n * @property {number} wildcard.NONE - The term will have no wildcards inserted, this is the default behaviour\n * @property {number} wildcard.LEADING - Prepend the term with a wildcard, unless a leading wildcard already exists\n * @property {number} wildcard.TRAILING - Append a wildcard to the term, unless a trailing wildcard already exists\n * @see lunr.Query~Clause\n * @see lunr.Query#clause\n * @see lunr.Query#term\n * @example query term with trailing wildcard\n * query.term('foo', { wildcard: lunr.Query.wildcard.TRAILING })\n * @example query term with leading and trailing wildcard\n * query.term('foo', {\n * wildcard: lunr.Query.wildcard.LEADING | lunr.Query.wildcard.TRAILING\n * })\n */\n\nlunr.Query.wildcard = new String (\"*\")\nlunr.Query.wildcard.NONE = 0\nlunr.Query.wildcard.LEADING = 1\nlunr.Query.wildcard.TRAILING = 2\n\n/**\n * Constants for indicating what kind of presence a term must have in matching documents.\n *\n * @constant\n * @enum {number}\n * @see lunr.Query~Clause\n * @see lunr.Query#clause\n * @see lunr.Query#term\n * @example query term with required presence\n * query.term('foo', { presence: lunr.Query.presence.REQUIRED })\n */\nlunr.Query.presence = {\n /**\n * Term's presence in a document is optional, this is the default value.\n */\n OPTIONAL: 1,\n\n /**\n * Term's presence in a document is required, documents that do not contain\n * this term will not be returned.\n */\n REQUIRED: 2,\n\n /**\n * Term's presence in a document is prohibited, documents that do contain\n * this term will not be returned.\n */\n PROHIBITED: 3\n}\n\n/**\n * A single clause in a {@link lunr.Query} contains a term and details on how to\n * match that term against a {@link lunr.Index}.\n *\n * @typedef {Object} lunr.Query~Clause\n * @property {string[]} fields - The fields in an index this clause should be matched against.\n * @property {number} [boost=1] - Any boost that should be applied when matching this clause.\n * @property {number} [editDistance] - Whether the term should have fuzzy matching applied, and how fuzzy the match should be.\n * @property {boolean} [usePipeline] - Whether the term should be passed through the search pipeline.\n * @property {number} [wildcard=lunr.Query.wildcard.NONE] - Whether the term should have wildcards appended or prepended.\n * @property {number} [presence=lunr.Query.presence.OPTIONAL] - The terms presence in any matching documents.\n */\n\n/**\n * Adds a {@link lunr.Query~Clause} to this query.\n *\n * Unless the clause contains the fields to be matched all fields will be matched. In addition\n * a default boost of 1 is applied to the clause.\n *\n * @param {lunr.Query~Clause} clause - The clause to add to this query.\n * @see lunr.Query~Clause\n * @returns {lunr.Query}\n */\nlunr.Query.prototype.clause = function (clause) {\n if (!('fields' in clause)) {\n clause.fields = this.allFields\n }\n\n if (!('boost' in clause)) {\n clause.boost = 1\n }\n\n if (!('usePipeline' in clause)) {\n clause.usePipeline = true\n }\n\n if (!('wildcard' in clause)) {\n clause.wildcard = lunr.Query.wildcard.NONE\n }\n\n if ((clause.wildcard & lunr.Query.wildcard.LEADING) && (clause.term.charAt(0) != lunr.Query.wildcard)) {\n clause.term = \"*\" + clause.term\n }\n\n if ((clause.wildcard & lunr.Query.wildcard.TRAILING) && (clause.term.slice(-1) != lunr.Query.wildcard)) {\n clause.term = \"\" + clause.term + \"*\"\n }\n\n if (!('presence' in clause)) {\n clause.presence = lunr.Query.presence.OPTIONAL\n }\n\n this.clauses.push(clause)\n\n return this\n}\n\n/**\n * A negated query is one in which every clause has a presence of\n * prohibited. These queries require some special processing to return\n * the expected results.\n *\n * @returns boolean\n */\nlunr.Query.prototype.isNegated = function () {\n for (var i = 0; i < this.clauses.length; i++) {\n if (this.clauses[i].presence != lunr.Query.presence.PROHIBITED) {\n return false\n }\n }\n\n return true\n}\n\n/**\n * Adds a term to the current query, under the covers this will create a {@link lunr.Query~Clause}\n * to the list of clauses that make up this query.\n *\n * The term is used as is, i.e. no tokenization will be performed by this method. Instead conversion\n * to a token or token-like string should be done before calling this method.\n *\n * The term will be converted to a string by calling `toString`. Multiple terms can be passed as an\n * array, each term in the array will share the same options.\n *\n * @param {object|object[]} term - The term(s) to add to the query.\n * @param {object} [options] - Any additional properties to add to the query clause.\n * @returns {lunr.Query}\n * @see lunr.Query#clause\n * @see lunr.Query~Clause\n * @example adding a single term to a query\n * query.term(\"foo\")\n * @example adding a single term to a query and specifying search fields, term boost and automatic trailing wildcard\n * query.term(\"foo\", {\n * fields: [\"title\"],\n * boost: 10,\n * wildcard: lunr.Query.wildcard.TRAILING\n * })\n * @example using lunr.tokenizer to convert a string to tokens before using them as terms\n * query.term(lunr.tokenizer(\"foo bar\"))\n */\nlunr.Query.prototype.term = function (term, options) {\n if (Array.isArray(term)) {\n term.forEach(function (t) { this.term(t, lunr.utils.clone(options)) }, this)\n return this\n }\n\n var clause = options || {}\n clause.term = term.toString()\n\n this.clause(clause)\n\n return this\n}\nlunr.QueryParseError = function (message, start, end) {\n this.name = \"QueryParseError\"\n this.message = message\n this.start = start\n this.end = end\n}\n\nlunr.QueryParseError.prototype = new Error\nlunr.QueryLexer = function (str) {\n this.lexemes = []\n this.str = str\n this.length = str.length\n this.pos = 0\n this.start = 0\n this.escapeCharPositions = []\n}\n\nlunr.QueryLexer.prototype.run = function () {\n var state = lunr.QueryLexer.lexText\n\n while (state) {\n state = state(this)\n }\n}\n\nlunr.QueryLexer.prototype.sliceString = function () {\n var subSlices = [],\n sliceStart = this.start,\n sliceEnd = this.pos\n\n for (var i = 0; i < this.escapeCharPositions.length; i++) {\n sliceEnd = this.escapeCharPositions[i]\n subSlices.push(this.str.slice(sliceStart, sliceEnd))\n sliceStart = sliceEnd + 1\n }\n\n subSlices.push(this.str.slice(sliceStart, this.pos))\n this.escapeCharPositions.length = 0\n\n return subSlices.join('')\n}\n\nlunr.QueryLexer.prototype.emit = function (type) {\n this.lexemes.push({\n type: type,\n str: this.sliceString(),\n start: this.start,\n end: this.pos\n })\n\n this.start = this.pos\n}\n\nlunr.QueryLexer.prototype.escapeCharacter = function () {\n this.escapeCharPositions.push(this.pos - 1)\n this.pos += 1\n}\n\nlunr.QueryLexer.prototype.next = function () {\n if (this.pos >= this.length) {\n return lunr.QueryLexer.EOS\n }\n\n var char = this.str.charAt(this.pos)\n this.pos += 1\n return char\n}\n\nlunr.QueryLexer.prototype.width = function () {\n return this.pos - this.start\n}\n\nlunr.QueryLexer.prototype.ignore = function () {\n if (this.start == this.pos) {\n this.pos += 1\n }\n\n this.start = this.pos\n}\n\nlunr.QueryLexer.prototype.backup = function () {\n this.pos -= 1\n}\n\nlunr.QueryLexer.prototype.acceptDigitRun = function () {\n var char, charCode\n\n do {\n char = this.next()\n charCode = char.charCodeAt(0)\n } while (charCode > 47 && charCode < 58)\n\n if (char != lunr.QueryLexer.EOS) {\n this.backup()\n }\n}\n\nlunr.QueryLexer.prototype.more = function () {\n return this.pos < this.length\n}\n\nlunr.QueryLexer.EOS = 'EOS'\nlunr.QueryLexer.FIELD = 'FIELD'\nlunr.QueryLexer.TERM = 'TERM'\nlunr.QueryLexer.EDIT_DISTANCE = 'EDIT_DISTANCE'\nlunr.QueryLexer.BOOST = 'BOOST'\nlunr.QueryLexer.PRESENCE = 'PRESENCE'\n\nlunr.QueryLexer.lexField = function (lexer) {\n lexer.backup()\n lexer.emit(lunr.QueryLexer.FIELD)\n lexer.ignore()\n return lunr.QueryLexer.lexText\n}\n\nlunr.QueryLexer.lexTerm = function (lexer) {\n if (lexer.width() > 1) {\n lexer.backup()\n lexer.emit(lunr.QueryLexer.TERM)\n }\n\n lexer.ignore()\n\n if (lexer.more()) {\n return lunr.QueryLexer.lexText\n }\n}\n\nlunr.QueryLexer.lexEditDistance = function (lexer) {\n lexer.ignore()\n lexer.acceptDigitRun()\n lexer.emit(lunr.QueryLexer.EDIT_DISTANCE)\n return lunr.QueryLexer.lexText\n}\n\nlunr.QueryLexer.lexBoost = function (lexer) {\n lexer.ignore()\n lexer.acceptDigitRun()\n lexer.emit(lunr.QueryLexer.BOOST)\n return lunr.QueryLexer.lexText\n}\n\nlunr.QueryLexer.lexEOS = function (lexer) {\n if (lexer.width() > 0) {\n lexer.emit(lunr.QueryLexer.TERM)\n }\n}\n\n// This matches the separator used when tokenising fields\n// within a document. These should match otherwise it is\n// not possible to search for some tokens within a document.\n//\n// It is possible for the user to change the separator on the\n// tokenizer so it _might_ clash with any other of the special\n// characters already used within the search string, e.g. :.\n//\n// This means that it is possible to change the separator in\n// such a way that makes some words unsearchable using a search\n// string.\nlunr.QueryLexer.termSeparator = lunr.tokenizer.separator\n\nlunr.QueryLexer.lexText = function (lexer) {\n while (true) {\n var char = lexer.next()\n\n if (char == lunr.QueryLexer.EOS) {\n return lunr.QueryLexer.lexEOS\n }\n\n // Escape character is '\\'\n if (char.charCodeAt(0) == 92) {\n lexer.escapeCharacter()\n continue\n }\n\n if (char == \":\") {\n return lunr.QueryLexer.lexField\n }\n\n if (char == \"~\") {\n lexer.backup()\n if (lexer.width() > 0) {\n lexer.emit(lunr.QueryLexer.TERM)\n }\n return lunr.QueryLexer.lexEditDistance\n }\n\n if (char == \"^\") {\n lexer.backup()\n if (lexer.width() > 0) {\n lexer.emit(lunr.QueryLexer.TERM)\n }\n return lunr.QueryLexer.lexBoost\n }\n\n // \"+\" indicates term presence is required\n // checking for length to ensure that only\n // leading \"+\" are considered\n if (char == \"+\" && lexer.width() === 1) {\n lexer.emit(lunr.QueryLexer.PRESENCE)\n return lunr.QueryLexer.lexText\n }\n\n // \"-\" indicates term presence is prohibited\n // checking for length to ensure that only\n // leading \"-\" are considered\n if (char == \"-\" && lexer.width() === 1) {\n lexer.emit(lunr.QueryLexer.PRESENCE)\n return lunr.QueryLexer.lexText\n }\n\n if (char.match(lunr.QueryLexer.termSeparator)) {\n return lunr.QueryLexer.lexTerm\n }\n }\n}\n\nlunr.QueryParser = function (str, query) {\n this.lexer = new lunr.QueryLexer (str)\n this.query = query\n this.currentClause = {}\n this.lexemeIdx = 0\n}\n\nlunr.QueryParser.prototype.parse = function () {\n this.lexer.run()\n this.lexemes = this.lexer.lexemes\n\n var state = lunr.QueryParser.parseClause\n\n while (state) {\n state = state(this)\n }\n\n return this.query\n}\n\nlunr.QueryParser.prototype.peekLexeme = function () {\n return this.lexemes[this.lexemeIdx]\n}\n\nlunr.QueryParser.prototype.consumeLexeme = function () {\n var lexeme = this.peekLexeme()\n this.lexemeIdx += 1\n return lexeme\n}\n\nlunr.QueryParser.prototype.nextClause = function () {\n var completedClause = this.currentClause\n this.query.clause(completedClause)\n this.currentClause = {}\n}\n\nlunr.QueryParser.parseClause = function (parser) {\n var lexeme = parser.peekLexeme()\n\n if (lexeme == undefined) {\n return\n }\n\n switch (lexeme.type) {\n case lunr.QueryLexer.PRESENCE:\n return lunr.QueryParser.parsePresence\n case lunr.QueryLexer.FIELD:\n return lunr.QueryParser.parseField\n case lunr.QueryLexer.TERM:\n return lunr.QueryParser.parseTerm\n default:\n var errorMessage = \"expected either a field or a term, found \" + lexeme.type\n\n if (lexeme.str.length >= 1) {\n errorMessage += \" with value '\" + lexeme.str + \"'\"\n }\n\n throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end)\n }\n}\n\nlunr.QueryParser.parsePresence = function (parser) {\n var lexeme = parser.consumeLexeme()\n\n if (lexeme == undefined) {\n return\n }\n\n switch (lexeme.str) {\n case \"-\":\n parser.currentClause.presence = lunr.Query.presence.PROHIBITED\n break\n case \"+\":\n parser.currentClause.presence = lunr.Query.presence.REQUIRED\n break\n default:\n var errorMessage = \"unrecognised presence operator'\" + lexeme.str + \"'\"\n throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end)\n }\n\n var nextLexeme = parser.peekLexeme()\n\n if (nextLexeme == undefined) {\n var errorMessage = \"expecting term or field, found nothing\"\n throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end)\n }\n\n switch (nextLexeme.type) {\n case lunr.QueryLexer.FIELD:\n return lunr.QueryParser.parseField\n case lunr.QueryLexer.TERM:\n return lunr.QueryParser.parseTerm\n default:\n var errorMessage = \"expecting term or field, found '\" + nextLexeme.type + \"'\"\n throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end)\n }\n}\n\nlunr.QueryParser.parseField = function (parser) {\n var lexeme = parser.consumeLexeme()\n\n if (lexeme == undefined) {\n return\n }\n\n if (parser.query.allFields.indexOf(lexeme.str) == -1) {\n var possibleFields = parser.query.allFields.map(function (f) { return \"'\" + f + \"'\" }).join(', '),\n errorMessage = \"unrecognised field '\" + lexeme.str + \"', possible fields: \" + possibleFields\n\n throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end)\n }\n\n parser.currentClause.fields = [lexeme.str]\n\n var nextLexeme = parser.peekLexeme()\n\n if (nextLexeme == undefined) {\n var errorMessage = \"expecting term, found nothing\"\n throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end)\n }\n\n switch (nextLexeme.type) {\n case lunr.QueryLexer.TERM:\n return lunr.QueryParser.parseTerm\n default:\n var errorMessage = \"expecting term, found '\" + nextLexeme.type + \"'\"\n throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end)\n }\n}\n\nlunr.QueryParser.parseTerm = function (parser) {\n var lexeme = parser.consumeLexeme()\n\n if (lexeme == undefined) {\n return\n }\n\n parser.currentClause.term = lexeme.str.toLowerCase()\n\n if (lexeme.str.indexOf(\"*\") != -1) {\n parser.currentClause.usePipeline = false\n }\n\n var nextLexeme = parser.peekLexeme()\n\n if (nextLexeme == undefined) {\n parser.nextClause()\n return\n }\n\n switch (nextLexeme.type) {\n case lunr.QueryLexer.TERM:\n parser.nextClause()\n return lunr.QueryParser.parseTerm\n case lunr.QueryLexer.FIELD:\n parser.nextClause()\n return lunr.QueryParser.parseField\n case lunr.QueryLexer.EDIT_DISTANCE:\n return lunr.QueryParser.parseEditDistance\n case lunr.QueryLexer.BOOST:\n return lunr.QueryParser.parseBoost\n case lunr.QueryLexer.PRESENCE:\n parser.nextClause()\n return lunr.QueryParser.parsePresence\n default:\n var errorMessage = \"Unexpected lexeme type '\" + nextLexeme.type + \"'\"\n throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end)\n }\n}\n\nlunr.QueryParser.parseEditDistance = function (parser) {\n var lexeme = parser.consumeLexeme()\n\n if (lexeme == undefined) {\n return\n }\n\n var editDistance = parseInt(lexeme.str, 10)\n\n if (isNaN(editDistance)) {\n var errorMessage = \"edit distance must be numeric\"\n throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end)\n }\n\n parser.currentClause.editDistance = editDistance\n\n var nextLexeme = parser.peekLexeme()\n\n if (nextLexeme == undefined) {\n parser.nextClause()\n return\n }\n\n switch (nextLexeme.type) {\n case lunr.QueryLexer.TERM:\n parser.nextClause()\n return lunr.QueryParser.parseTerm\n case lunr.QueryLexer.FIELD:\n parser.nextClause()\n return lunr.QueryParser.parseField\n case lunr.QueryLexer.EDIT_DISTANCE:\n return lunr.QueryParser.parseEditDistance\n case lunr.QueryLexer.BOOST:\n return lunr.QueryParser.parseBoost\n case lunr.QueryLexer.PRESENCE:\n parser.nextClause()\n return lunr.QueryParser.parsePresence\n default:\n var errorMessage = \"Unexpected lexeme type '\" + nextLexeme.type + \"'\"\n throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end)\n }\n}\n\nlunr.QueryParser.parseBoost = function (parser) {\n var lexeme = parser.consumeLexeme()\n\n if (lexeme == undefined) {\n return\n }\n\n var boost = parseInt(lexeme.str, 10)\n\n if (isNaN(boost)) {\n var errorMessage = \"boost must be numeric\"\n throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end)\n }\n\n parser.currentClause.boost = boost\n\n var nextLexeme = parser.peekLexeme()\n\n if (nextLexeme == undefined) {\n parser.nextClause()\n return\n }\n\n switch (nextLexeme.type) {\n case lunr.QueryLexer.TERM:\n parser.nextClause()\n return lunr.QueryParser.parseTerm\n case lunr.QueryLexer.FIELD:\n parser.nextClause()\n return lunr.QueryParser.parseField\n case lunr.QueryLexer.EDIT_DISTANCE:\n return lunr.QueryParser.parseEditDistance\n case lunr.QueryLexer.BOOST:\n return lunr.QueryParser.parseBoost\n case lunr.QueryLexer.PRESENCE:\n parser.nextClause()\n return lunr.QueryParser.parsePresence\n default:\n var errorMessage = \"Unexpected lexeme type '\" + nextLexeme.type + \"'\"\n throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end)\n }\n}\n\n /**\n * export the module via AMD, CommonJS or as a browser global\n * Export code from https://github.com/umdjs/umd/blob/master/returnExports.js\n */\n ;(function (root, factory) {\n if (typeof define === 'function' && define.amd) {\n // AMD. Register as an anonymous module.\n define(factory)\n } else if (typeof exports === 'object') {\n /**\n * Node. Does not work with strict CommonJS, but\n * only CommonJS-like enviroments that support module.exports,\n * like Node.\n */\n module.exports = factory()\n } else {\n // Browser globals (root is window)\n root.lunr = factory()\n }\n }(this, function () {\n /**\n * Just return a value to define the module export.\n * This example returns an object, but the module\n * can return a function as the exported value.\n */\n return lunr\n }))\n})();\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n ArticleDocument,\n SearchDocumentMap,\n SectionDocument,\n setupSearchDocumentMap\n} from \"../document\"\nimport {\n SearchHighlightFactoryFn,\n setupSearchHighlighter\n} from \"../highlight\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Search index configuration\n */\nexport interface SearchIndexConfig {\n lang: string[] /* Search languages */\n separator: string /* Search separator */\n}\n\n/**\n * Search index document\n */\nexport interface SearchIndexDocument {\n location: string /* Document location */\n title: string /* Document title */\n text: string /* Document text */\n}\n\n/**\n * Search index pipeline\n */\nexport interface SearchIndexPipeline {\n trimmer: boolean /* Add trimmer to pipeline */\n stopwords: boolean /* Add stopword filter to pipeline */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Search index options\n *\n * This interfaces describes the format of the `search_index.json` file which\n * is automatically built by the MkDocs search plugin.\n */\nexport interface SearchIndexOptions {\n config: SearchIndexConfig /* Search index configuration */\n docs: SearchIndexDocument[] /* Search index documents */\n pipeline?: SearchIndexPipeline /* Search index pipeline */\n index?: object | string /* Prebuilt or serialized index */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Search result\n */\nexport interface SearchResult {\n article: ArticleDocument /* Article document */\n sections: SectionDocument[] /* Section documents */\n}\n\n/* ----------------------------------------------------------------------------\n * Class\n * ------------------------------------------------------------------------- */\n\n/**\n * Search index\n *\n * Note that `lunr` is injected via Webpack, as it will otherwise also be\n * bundled in the application bundle.\n */\nexport class SearchIndex {\n\n /**\n * Search document mapping\n *\n * A mapping of URLs (including hash fragments) to the actual articles and\n * sections of the documentation. The search document mapping must be created\n * regardless of whether the index was prebuilt or not, as `lunr` itself will\n * only store the actual index.\n */\n protected documents: SearchDocumentMap\n\n /**\n * Search highlight factory function\n */\n protected highlight: SearchHighlightFactoryFn\n\n /**\n * The `lunr` search index\n */\n protected index: lunr.Index\n\n /**\n * Create a search index\n *\n * @param options - Options\n */\n public constructor({ config, docs, pipeline, index }: SearchIndexOptions) {\n this.documents = setupSearchDocumentMap(docs)\n this.highlight = setupSearchHighlighter(config)\n\n /* If no index was given, create it */\n if (typeof index === \"undefined\") {\n this.index = lunr(function() {\n pipeline = pipeline || {\n trimmer: true,\n stopwords: true\n }\n\n /* Remove stemmer, as it cripples search experience */\n this.pipeline.reset()\n if (pipeline.trimmer)\n this.pipeline.add(lunr.trimmer)\n if (pipeline.stopwords)\n this.pipeline.add(lunr.stopWordFilter)\n\n /* Set up alternate search languages */\n if (config.lang.length === 1 && config.lang[0] !== \"en\") {\n this.use((lunr as any)[config.lang[0]])\n } else if (config.lang.length > 1) {\n this.use((lunr as any).multiLanguage(...config.lang))\n }\n\n /* Setup fields and reference */\n this.field(\"title\", { boost: 10 })\n this.field(\"text\")\n this.ref(\"location\")\n\n /* Index documents */\n for (const doc of docs)\n this.add(doc)\n })\n\n /* Prebuilt or serialized index */\n } else {\n this.index = lunr.Index.load(\n typeof index === \"string\"\n ? JSON.parse(index)\n : index\n )\n }\n }\n\n /**\n * Search for matching documents\n *\n * The search index which MkDocs provides is divided up into articles, which\n * contain the whole content of the individual pages, and sections, which only\n * contain the contents of the subsections obtained by breaking the individual\n * pages up at `h1` ... `h6`. As there may be many sections on different pages\n * with indentical titles (for example within this very project, e.g. \"Usage\"\n * or \"Installation\"), they need to be put into the context of the containing\n * page. For this reason, section results are grouped within their respective\n * articles which are the top-level results that are returned.\n *\n * @param query - Query string\n *\n * @return Search results\n */\n public search(query: string): SearchResult[] {\n if (query) {\n try {\n\n /* Group sections by containing article */\n const groups = this.index.search(query)\n .reduce((results, result) => {\n const document = this.documents.get(result.ref)\n if (typeof document !== \"undefined\") {\n if (\"parent\" in document) {\n const ref = document.parent.location\n results.set(ref, [...results.get(ref) || [], result])\n } else {\n const ref = document.location\n results.set(ref, results.get(ref) || [])\n }\n }\n return results\n }, new Map())\n\n /* Create highlighter for query */\n const fn = this.highlight(query)\n\n /* Map groups to search documents */\n return [...groups].map(([ref, sections]) => ({\n article: fn(this.documents.get(ref) as ArticleDocument),\n sections: sections.map(section => {\n return fn(this.documents.get(section.ref) as SectionDocument)\n })\n }))\n\n /* Log errors to console (for now) */\n } catch (err) {\n // tslint:disable-next-line no-console\n console.warn(`Invalid query: ${query} – see https://bit.ly/2s3ChXG`)\n }\n }\n\n /* Return nothing in case of error or empty query */\n return []\n }\n\n /**\n * Serialize search index\n *\n * @return String representation\n */\n public toString(): string {\n return JSON.stringify(this.index)\n }\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A RTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { SearchIndexOptions, SearchResult } from \"integrations/search\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Search message type\n */\nexport const enum SearchMessageType {\n SETUP, /* Search index setup */\n DUMP, /* Search index dump */\n QUERY, /* Search query */\n RESULT /* Search results */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * A message containing the data necessary to setup the search index\n */\nexport interface SearchSetupMessage {\n type: SearchMessageType.SETUP /* Message type */\n data: SearchIndexOptions /* Message data */\n}\n\n/**\n * A message containing the a dump of the search index\n */\nexport interface SearchDumpMessage {\n type: SearchMessageType.DUMP /* Message type */\n data: string /* Message data */\n}\n\n/**\n * A message containing a search query\n */\nexport interface SearchQueryMessage {\n type: SearchMessageType.QUERY /* Message type */\n data: string /* Message data */\n}\n\n/**\n * A message containing results for a search query\n */\nexport interface SearchResultMessage {\n type: SearchMessageType.RESULT /* Message type */\n data: SearchResult[] /* Message data */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * A message exchanged with the search worker\n */\nexport type SearchMessage =\n | SearchSetupMessage\n | SearchDumpMessage\n | SearchQueryMessage\n | SearchResultMessage\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Type guard for search setup messages\n *\n * @param message - Search worker message\n *\n * @return Test result\n */\nexport function isSearchSetupMessage(\n message: SearchMessage\n): message is SearchSetupMessage {\n return message.type === SearchMessageType.SETUP\n}\n\n/**\n * Type guard for search dump messages\n *\n * @param message - Search worker message\n *\n * @return Test result\n */\nexport function isSearchDumpMessage(\n message: SearchMessage\n): message is SearchDumpMessage {\n return message.type === SearchMessageType.DUMP\n}\n\n/**\n * Type guard for search query messages\n *\n * @param message - Search worker message\n *\n * @return Test result\n */\nexport function isSearchQueryMessage(\n message: SearchMessage\n): message is SearchQueryMessage {\n return message.type === SearchMessageType.QUERY\n}\n\n/**\n * Type guard for search result messages\n *\n * @param message - Search worker message\n *\n * @return Test result\n */\nexport function isSearchResultMessage(\n message: SearchMessage\n): message is SearchResultMessage {\n return message.type === SearchMessageType.RESULT\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A RTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport \"expose-loader?lunr!lunr\"\n\nimport { SearchIndex, SearchIndexConfig } from \"integrations/search\"\n\nimport { SearchMessage, SearchMessageType } from \"../message\"\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * Search index\n */\nlet index: SearchIndex\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup multi-language support through `lunr-languages`\n *\n * This function will automatically import the stemmers necessary to process\n * the languages which were given through the search index configuration.\n *\n * @param config - Search index configuration\n */\nfunction setupLunrLanguages(config: SearchIndexConfig): void {\n const base = \"../lunr\"\n\n /* Add scripts for languages */\n const scripts = []\n for (const lang of config.lang) {\n if (lang === \"ja\") scripts.push(`${base}/tinyseg.min.js`)\n if (lang !== \"en\") scripts.push(`${base}/min/lunr.${lang}.min.js`)\n }\n\n /* Add multi-language support */\n if (config.lang.length > 1)\n scripts.push(`${base}/min/lunr.multi.min.js`)\n\n /* Load scripts synchronously */\n if (scripts.length)\n self.importScripts(\n `${base}/min/lunr.stemmer.support.min.js`,\n ...scripts\n )\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Message handler\n *\n * @param message - Source message\n *\n * @return Target message\n */\nexport function handler(message: SearchMessage): SearchMessage {\n switch (message.type) {\n\n /* Setup search index */\n case SearchMessageType.SETUP:\n setupLunrLanguages(message.data.config)\n index = new SearchIndex(message.data)\n return {\n type: SearchMessageType.DUMP,\n data: index.toString()\n }\n\n /* Query search index */\n case SearchMessageType.QUERY:\n return {\n type: SearchMessageType.RESULT,\n data: index ? index.search(message.data) : []\n }\n\n /* All other messages */\n default:\n throw new TypeError(\"Invalid message type\")\n }\n}\n\n/* ----------------------------------------------------------------------------\n * Worker\n * ------------------------------------------------------------------------- */\n\nself.addEventListener(\"message\", ev => {\n self.postMessage(handler(ev.data))\n})\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport * as escapeHTML from \"escape-html\"\n\nimport { SearchIndexDocument } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * A top-level article\n */\nexport interface ArticleDocument extends SearchIndexDocument {\n linked: boolean /* Whether the section was linked */\n}\n\n/**\n * A section of an article\n */\nexport interface SectionDocument extends SearchIndexDocument {\n parent: ArticleDocument /* Parent article */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Search document\n */\nexport type SearchDocument =\n | ArticleDocument\n | SectionDocument\n\n/**\n * Search document mapping\n */\nexport type SearchDocumentMap = Map\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Create a search document mapping\n *\n * @param docs - Search index documents\n *\n * @return Search document map\n */\nexport function setupSearchDocumentMap(\n docs: SearchIndexDocument[]\n): SearchDocumentMap {\n const documents = new Map()\n for (const doc of docs) {\n const [path, hash] = doc.location.split(\"#\")\n\n /* Extract location and title */\n const location = doc.location\n const title = doc.title\n\n /* Escape and cleanup text */\n const text = escapeHTML(doc.text)\n .replace(/\\s+(?=[,.:;!?])/g, \"\")\n .replace(/\\s+/g, \" \")\n\n /* Handle section */\n if (hash) {\n const parent = documents.get(path) as ArticleDocument\n\n /* Ignore first section, override article */\n if (!parent.linked) {\n parent.title = doc.title\n parent.text = text\n parent.linked = true\n\n /* Add subsequent section */\n } else {\n documents.set(location, {\n location,\n title,\n text,\n parent\n })\n }\n\n /* Add article */\n } else {\n documents.set(location, {\n location,\n title,\n text,\n linked: false\n })\n }\n }\n return documents\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport * as escapeRegExp from \"escape-string-regexp\"\n\nimport { SearchIndexConfig } from \"../_\"\nimport { SearchDocument } from \"../document\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Search highlight function\n *\n * @template T - Search document type\n *\n * @param document - Search document\n *\n * @return Highlighted document\n */\nexport type SearchHighlightFn =\n (document: Readonly) => T\n\n/**\n * Search highlight factory function\n *\n * @param query - Query string\n *\n * @return Search highlight function\n */\nexport type SearchHighlightFactoryFn =\n (query: string) => SearchHighlightFn\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Create a search highlighter\n *\n * @param config - Search index configuration\n *\n * @return Search highlight factory function\n */\nexport function setupSearchHighlighter(\n config: SearchIndexConfig\n): SearchHighlightFactoryFn {\n const separator = new RegExp(config.separator, \"img\")\n const highlight = (_: unknown, data: string, term: string) => {\n return `${data}${term}`\n }\n\n /* Return factory function */\n return (query: string) => {\n query = query\n .replace(/[\\s*+-:~^]+/g, \" \")\n .trim()\n\n /* Create search term match expression */\n const match = new RegExp(`(^|${config.separator})(${\n escapeRegExp(query).replace(separator, \"|\")\n })`, \"img\")\n\n /* Highlight document */\n return document => ({\n ...document,\n title: document.title.replace(match, highlight),\n text: document.text.replace(match, highlight)\n })\n }\n}\n"],"sourceRoot":""} \ No newline at end of file diff --git a/material/assets/javascripts/worker/search.926ffd9e.min.js b/material/assets/javascripts/worker/search.edc88caf.min.js similarity index 89% rename from material/assets/javascripts/worker/search.926ffd9e.min.js rename to material/assets/javascripts/worker/search.edc88caf.min.js index 18dac50d1..808bb7cb2 100644 --- a/material/assets/javascripts/worker/search.926ffd9e.min.js +++ b/material/assets/javascripts/worker/search.edc88caf.min.js @@ -1,11 +1,11 @@ -!function(e){var t={};function r(n){if(t[n])return t[n].exports;var i=t[n]={i:n,l:!1,exports:{}};return e[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)r.d(n,i,function(t){return e[t]}.bind(null,i));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=5)}([function(e,t,r){"use strict"; +!function(e){var t={};function r(n){if(t[n])return t[n].exports;var i=t[n]={i:n,l:!1,exports:{}};return e[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)r.d(n,i,function(t){return e[t]}.bind(null,i));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=4)}([function(e,t,r){"use strict"; /*! * escape-html * Copyright(c) 2012-2013 TJ Holowaychuk * Copyright(c) 2015 Andreas Lubbe * Copyright(c) 2015 Tiancheng "Timothy" Gu * MIT Licensed - */var n=/["'&<>]/;e.exports=function(e){var t,r=""+e,i=n.exec(r);if(!i)return r;var s="",o=0,a=0;for(o=i.index;o{if("string"!=typeof e)throw new TypeError("Expected a string");return e.replace(n,"\\$&")}},function(e,t,r){(function(t){e.exports=t.lunr=r(4)}).call(this,r(3))},function(e,t){var r;r=function(){return this}();try{r=r||new Function("return this")()}catch(e){"object"==typeof window&&(r=window)}e.exports=r},function(e,t,r){var n,i; + */var n=/["'&<>]/;e.exports=function(e){var t,r=""+e,i=n.exec(r);if(!i)return r;var s="",o=0,a=0;for(o=i.index;o1?1:e},R.Builder.prototype.k1=function(e){this._k1=e},R.Builder.prototype.add=function(e,t){var r=e[this._ref],n=Object.keys(this._fields);this._documents[r]=t||{},this.documentCount+=1;for(var i=0;i=this.length)return R.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},R.QueryLexer.prototype.width=function(){return this.pos-this.start},R.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},R.QueryLexer.prototype.backup=function(){this.pos-=1},R.QueryLexer.prototype.acceptDigitRun=function(){var e,t;do{t=(e=this.next()).charCodeAt(0)}while(t>47&&t<58);e!=R.QueryLexer.EOS&&this.backup()},R.QueryLexer.prototype.more=function(){return this.pos1&&(e.backup(),e.emit(R.QueryLexer.TERM)),e.ignore(),e.more())return R.QueryLexer.lexText},R.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(R.QueryLexer.EDIT_DISTANCE),R.QueryLexer.lexText},R.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(R.QueryLexer.BOOST),R.QueryLexer.lexText},R.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(R.QueryLexer.TERM)},R.QueryLexer.termSeparator=R.tokenizer.separator,R.QueryLexer.lexText=function(e){for(;;){var t=e.next();if(t==R.QueryLexer.EOS)return R.QueryLexer.lexEOS;if(92!=t.charCodeAt(0)){if(":"==t)return R.QueryLexer.lexField;if("~"==t)return e.backup(),e.width()>0&&e.emit(R.QueryLexer.TERM),R.QueryLexer.lexEditDistance;if("^"==t)return e.backup(),e.width()>0&&e.emit(R.QueryLexer.TERM),R.QueryLexer.lexBoost;if("+"==t&&1===e.width())return e.emit(R.QueryLexer.PRESENCE),R.QueryLexer.lexText;if("-"==t&&1===e.width())return e.emit(R.QueryLexer.PRESENCE),R.QueryLexer.lexText;if(t.match(R.QueryLexer.termSeparator))return R.QueryLexer.lexTerm}else e.escapeCharacter()}},R.QueryParser=function(e,t){this.lexer=new R.QueryLexer(e),this.query=t,this.currentClause={},this.lexemeIdx=0},R.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=R.QueryParser.parseClause;e;)e=e(this);return this.query},R.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},R.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},R.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},R.QueryParser.parseClause=function(e){var t=e.peekLexeme();if(null!=t)switch(t.type){case R.QueryLexer.PRESENCE:return R.QueryParser.parsePresence;case R.QueryLexer.FIELD:return R.QueryParser.parseField;case R.QueryLexer.TERM:return R.QueryParser.parseTerm;default:var r="expected either a field or a term, found "+t.type;throw t.str.length>=1&&(r+=" with value '"+t.str+"'"),new R.QueryParseError(r,t.start,t.end)}},R.QueryParser.parsePresence=function(e){var t=e.consumeLexeme();if(null!=t){switch(t.str){case"-":e.currentClause.presence=R.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=R.Query.presence.REQUIRED;break;default:var r="unrecognised presence operator'"+t.str+"'";throw new R.QueryParseError(r,t.start,t.end)}var n=e.peekLexeme();if(null==n){r="expecting term or field, found nothing";throw new R.QueryParseError(r,t.start,t.end)}switch(n.type){case R.QueryLexer.FIELD:return R.QueryParser.parseField;case R.QueryLexer.TERM:return R.QueryParser.parseTerm;default:r="expecting term or field, found '"+n.type+"'";throw new R.QueryParseError(r,n.start,n.end)}}},R.QueryParser.parseField=function(e){var t=e.consumeLexeme();if(null!=t){if(-1==e.query.allFields.indexOf(t.str)){var r=e.query.allFields.map((function(e){return"'"+e+"'"})).join(", "),n="unrecognised field '"+t.str+"', possible fields: "+r;throw new R.QueryParseError(n,t.start,t.end)}e.currentClause.fields=[t.str];var i=e.peekLexeme();if(null==i){n="expecting term, found nothing";throw new R.QueryParseError(n,t.start,t.end)}switch(i.type){case R.QueryLexer.TERM:return R.QueryParser.parseTerm;default:n="expecting term, found '"+i.type+"'";throw new R.QueryParseError(n,i.start,i.end)}}},R.QueryParser.parseTerm=function(e){var t=e.consumeLexeme();if(null!=t){e.currentClause.term=t.str.toLowerCase(),-1!=t.str.indexOf("*")&&(e.currentClause.usePipeline=!1);var r=e.peekLexeme();if(null!=r)switch(r.type){case R.QueryLexer.TERM:return e.nextClause(),R.QueryParser.parseTerm;case R.QueryLexer.FIELD:return e.nextClause(),R.QueryParser.parseField;case R.QueryLexer.EDIT_DISTANCE:return R.QueryParser.parseEditDistance;case R.QueryLexer.BOOST:return R.QueryParser.parseBoost;case R.QueryLexer.PRESENCE:return e.nextClause(),R.QueryParser.parsePresence;default:var n="Unexpected lexeme type '"+r.type+"'";throw new R.QueryParseError(n,r.start,r.end)}else e.nextClause()}},R.QueryParser.parseEditDistance=function(e){var t=e.consumeLexeme();if(null!=t){var r=parseInt(t.str,10);if(isNaN(r)){var n="edit distance must be numeric";throw new R.QueryParseError(n,t.start,t.end)}e.currentClause.editDistance=r;var i=e.peekLexeme();if(null!=i)switch(i.type){case R.QueryLexer.TERM:return e.nextClause(),R.QueryParser.parseTerm;case R.QueryLexer.FIELD:return e.nextClause(),R.QueryParser.parseField;case R.QueryLexer.EDIT_DISTANCE:return R.QueryParser.parseEditDistance;case R.QueryLexer.BOOST:return R.QueryParser.parseBoost;case R.QueryLexer.PRESENCE:return e.nextClause(),R.QueryParser.parsePresence;default:n="Unexpected lexeme type '"+i.type+"'";throw new R.QueryParseError(n,i.start,i.end)}else e.nextClause()}},R.QueryParser.parseBoost=function(e){var t=e.consumeLexeme();if(null!=t){var r=parseInt(t.str,10);if(isNaN(r)){var n="boost must be numeric";throw new R.QueryParseError(n,t.start,t.end)}e.currentClause.boost=r;var i=e.peekLexeme();if(null!=i)switch(i.type){case R.QueryLexer.TERM:return e.nextClause(),R.QueryParser.parseTerm;case R.QueryLexer.FIELD:return e.nextClause(),R.QueryParser.parseField;case R.QueryLexer.EDIT_DISTANCE:return R.QueryParser.parseEditDistance;case R.QueryLexer.BOOST:return R.QueryParser.parseBoost;case R.QueryLexer.PRESENCE:return e.nextClause(),R.QueryParser.parsePresence;default:n="Unexpected lexeme type '"+i.type+"'";throw new R.QueryParseError(n,i.start,i.end)}else e.nextClause()}},void 0===(i="function"==typeof(n=function(){return R})?n.call(t,r,t,e):n)||(e.exports=i)}()},function(e,t,r){"use strict";r.r(t);var n=function(){return(n=Object.assign||function(e){for(var t,r=1,n=arguments.length;r=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}}}function s(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,i,s=r.call(e),o=[];try{for(;(void 0===t||t-- >0)&&!(n=s.next()).done;)o.push(n.value)}catch(e){i={error:e}}finally{try{n&&!n.done&&(r=s.return)&&r.call(s)}finally{if(i)throw i.error}}return o}function o(){for(var e=[],t=0;t"+r+""};return function(i){i=i.replace(/[\s*+-:~^]+/g," ").trim();var s=new RegExp("(^|"+e.separator+")("+u(i).replace(t,"|")+")","img");return function(e){return n(n({},e),{title:e.title.replace(s,r),text:e.text.replace(s,r)})}}}(t),this.index=void 0===c?lunr((function(){var e,n,s;l=l||{trimmer:!0,stopwords:!0},this.pipeline.reset(),l.trimmer&&this.pipeline.add(lunr.trimmer),l.stopwords&&this.pipeline.add(lunr.stopWordFilter),1===t.lang.length&&"en"!==t.lang[0]?this.use(lunr[t.lang[0]]):t.lang.length>1&&this.use((e=lunr).multiLanguage.apply(e,o(t.lang))),this.field("title",{boost:10}),this.field("text"),this.ref("location");try{for(var a=i(r),u=a.next();!u.done;u=a.next()){var c=u.value;this.add(c)}}catch(e){n={error:e}}finally{try{u&&!u.done&&(s=a.return)&&s.call(a)}finally{if(n)throw n.error}}})):lunr.Index.load("string"==typeof c?JSON.parse(c):c)}return e.prototype.search=function(e){var t=this;if(e)try{var r=this.index.search(e).reduce((function(e,r){var n=t.documents.get(r.ref);if(void 0!==n)if("parent"in n){var i=n.parent.location;e.set(i,o(e.get(i)||[],[r]))}else{i=n.location;e.set(i,e.get(i)||[])}return e}),new Map),n=this.highlight(e);return o(r).map((function(e){var r=s(e,2),i=r[0],o=r[1];return{article:n(t.documents.get(i)),sections:o.map((function(e){return n(t.documents.get(e.ref))}))}}))}catch(t){console.warn("Invalid query: "+e+" – see https://bit.ly/2s3ChXG")}return[]},e.prototype.toString=function(){return JSON.stringify(this.index)},e}();function d(e){switch(e.type){case l.SETUP:return function(e){var t,r,n="../lunr",s=[];try{for(var a=i(e.lang),u=a.next();!u.done;u=a.next()){var l=u.value;"ja"===l&&s.push(n+"/tinyseg.min.js"),"en"!==l&&s.push(n+"/min/lunr."+l+".min.js")}}catch(e){t={error:e}}finally{try{u&&!u.done&&(r=a.return)&&r.call(a)}finally{if(t)throw t.error}}e.lang.length>1&&s.push(n+"/min/lunr.multi.min.js"),s.length&&self.importScripts.apply(self,o([n+"/min/lunr.stemmer.support.min.js"],s))}(e.data.config),c=new h(e.data),{type:l.DUMP,data:c.toString()};case l.QUERY:return{type:l.RESULT,data:c?c.search(e.data):[]};default:throw new TypeError("Invalid message type")}}!function(e){e[e.SETUP=0]="SETUP",e[e.DUMP=1]="DUMP",e[e.QUERY=2]="QUERY",e[e.RESULT=3]="RESULT"}(l||(l={})),r.d(t,"handler",(function(){return d})),self.addEventListener("message",(function(e){self.postMessage(d(e.data))}))}]); -//# sourceMappingURL=search.926ffd9e.min.js.map \ No newline at end of file + */,R.Builder=function(){this._ref="id",this._fields=Object.create(null),this._documents=Object.create(null),this.invertedIndex=Object.create(null),this.fieldTermFrequencies={},this.fieldLengths={},this.tokenizer=R.tokenizer,this.pipeline=new R.Pipeline,this.searchPipeline=new R.Pipeline,this.documentCount=0,this._b=.75,this._k1=1.2,this.termIndex=0,this.metadataWhitelist=[]},R.Builder.prototype.ref=function(e){this._ref=e},R.Builder.prototype.field=function(e,t){if(/\//.test(e))throw new RangeError("Field '"+e+"' contains illegal character '/'");this._fields[e]=t||{}},R.Builder.prototype.b=function(e){this._b=e<0?0:e>1?1:e},R.Builder.prototype.k1=function(e){this._k1=e},R.Builder.prototype.add=function(e,t){var r=e[this._ref],n=Object.keys(this._fields);this._documents[r]=t||{},this.documentCount+=1;for(var i=0;i=this.length)return R.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},R.QueryLexer.prototype.width=function(){return this.pos-this.start},R.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},R.QueryLexer.prototype.backup=function(){this.pos-=1},R.QueryLexer.prototype.acceptDigitRun=function(){var e,t;do{t=(e=this.next()).charCodeAt(0)}while(t>47&&t<58);e!=R.QueryLexer.EOS&&this.backup()},R.QueryLexer.prototype.more=function(){return this.pos1&&(e.backup(),e.emit(R.QueryLexer.TERM)),e.ignore(),e.more())return R.QueryLexer.lexText},R.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(R.QueryLexer.EDIT_DISTANCE),R.QueryLexer.lexText},R.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(R.QueryLexer.BOOST),R.QueryLexer.lexText},R.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(R.QueryLexer.TERM)},R.QueryLexer.termSeparator=R.tokenizer.separator,R.QueryLexer.lexText=function(e){for(;;){var t=e.next();if(t==R.QueryLexer.EOS)return R.QueryLexer.lexEOS;if(92!=t.charCodeAt(0)){if(":"==t)return R.QueryLexer.lexField;if("~"==t)return e.backup(),e.width()>0&&e.emit(R.QueryLexer.TERM),R.QueryLexer.lexEditDistance;if("^"==t)return e.backup(),e.width()>0&&e.emit(R.QueryLexer.TERM),R.QueryLexer.lexBoost;if("+"==t&&1===e.width())return e.emit(R.QueryLexer.PRESENCE),R.QueryLexer.lexText;if("-"==t&&1===e.width())return e.emit(R.QueryLexer.PRESENCE),R.QueryLexer.lexText;if(t.match(R.QueryLexer.termSeparator))return R.QueryLexer.lexTerm}else e.escapeCharacter()}},R.QueryParser=function(e,t){this.lexer=new R.QueryLexer(e),this.query=t,this.currentClause={},this.lexemeIdx=0},R.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=R.QueryParser.parseClause;e;)e=e(this);return this.query},R.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},R.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},R.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},R.QueryParser.parseClause=function(e){var t=e.peekLexeme();if(null!=t)switch(t.type){case R.QueryLexer.PRESENCE:return R.QueryParser.parsePresence;case R.QueryLexer.FIELD:return R.QueryParser.parseField;case R.QueryLexer.TERM:return R.QueryParser.parseTerm;default:var r="expected either a field or a term, found "+t.type;throw t.str.length>=1&&(r+=" with value '"+t.str+"'"),new R.QueryParseError(r,t.start,t.end)}},R.QueryParser.parsePresence=function(e){var t=e.consumeLexeme();if(null!=t){switch(t.str){case"-":e.currentClause.presence=R.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=R.Query.presence.REQUIRED;break;default:var r="unrecognised presence operator'"+t.str+"'";throw new R.QueryParseError(r,t.start,t.end)}var n=e.peekLexeme();if(null==n){r="expecting term or field, found nothing";throw new R.QueryParseError(r,t.start,t.end)}switch(n.type){case R.QueryLexer.FIELD:return R.QueryParser.parseField;case R.QueryLexer.TERM:return R.QueryParser.parseTerm;default:r="expecting term or field, found '"+n.type+"'";throw new R.QueryParseError(r,n.start,n.end)}}},R.QueryParser.parseField=function(e){var t=e.consumeLexeme();if(null!=t){if(-1==e.query.allFields.indexOf(t.str)){var r=e.query.allFields.map((function(e){return"'"+e+"'"})).join(", "),n="unrecognised field '"+t.str+"', possible fields: "+r;throw new R.QueryParseError(n,t.start,t.end)}e.currentClause.fields=[t.str];var i=e.peekLexeme();if(null==i){n="expecting term, found nothing";throw new R.QueryParseError(n,t.start,t.end)}switch(i.type){case R.QueryLexer.TERM:return R.QueryParser.parseTerm;default:n="expecting term, found '"+i.type+"'";throw new R.QueryParseError(n,i.start,i.end)}}},R.QueryParser.parseTerm=function(e){var t=e.consumeLexeme();if(null!=t){e.currentClause.term=t.str.toLowerCase(),-1!=t.str.indexOf("*")&&(e.currentClause.usePipeline=!1);var r=e.peekLexeme();if(null!=r)switch(r.type){case R.QueryLexer.TERM:return e.nextClause(),R.QueryParser.parseTerm;case R.QueryLexer.FIELD:return e.nextClause(),R.QueryParser.parseField;case R.QueryLexer.EDIT_DISTANCE:return R.QueryParser.parseEditDistance;case R.QueryLexer.BOOST:return R.QueryParser.parseBoost;case R.QueryLexer.PRESENCE:return e.nextClause(),R.QueryParser.parsePresence;default:var n="Unexpected lexeme type '"+r.type+"'";throw new R.QueryParseError(n,r.start,r.end)}else e.nextClause()}},R.QueryParser.parseEditDistance=function(e){var t=e.consumeLexeme();if(null!=t){var r=parseInt(t.str,10);if(isNaN(r)){var n="edit distance must be numeric";throw new R.QueryParseError(n,t.start,t.end)}e.currentClause.editDistance=r;var i=e.peekLexeme();if(null!=i)switch(i.type){case R.QueryLexer.TERM:return e.nextClause(),R.QueryParser.parseTerm;case R.QueryLexer.FIELD:return e.nextClause(),R.QueryParser.parseField;case R.QueryLexer.EDIT_DISTANCE:return R.QueryParser.parseEditDistance;case R.QueryLexer.BOOST:return R.QueryParser.parseBoost;case R.QueryLexer.PRESENCE:return e.nextClause(),R.QueryParser.parsePresence;default:n="Unexpected lexeme type '"+i.type+"'";throw new R.QueryParseError(n,i.start,i.end)}else e.nextClause()}},R.QueryParser.parseBoost=function(e){var t=e.consumeLexeme();if(null!=t){var r=parseInt(t.str,10);if(isNaN(r)){var n="boost must be numeric";throw new R.QueryParseError(n,t.start,t.end)}e.currentClause.boost=r;var i=e.peekLexeme();if(null!=i)switch(i.type){case R.QueryLexer.TERM:return e.nextClause(),R.QueryParser.parseTerm;case R.QueryLexer.FIELD:return e.nextClause(),R.QueryParser.parseField;case R.QueryLexer.EDIT_DISTANCE:return R.QueryParser.parseEditDistance;case R.QueryLexer.BOOST:return R.QueryParser.parseBoost;case R.QueryLexer.PRESENCE:return e.nextClause(),R.QueryParser.parsePresence;default:n="Unexpected lexeme type '"+i.type+"'";throw new R.QueryParseError(n,i.start,i.end)}else e.nextClause()}},void 0===(i="function"==typeof(n=function(){return R})?n.call(t,r,t,e):n)||(e.exports=i)}()},function(e,t,r){"use strict";r.r(t);var n=function(){return(n=Object.assign||function(e){for(var t,r=1,n=arguments.length;r=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}}}function s(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,i,s=r.call(e),o=[];try{for(;(void 0===t||t-- >0)&&!(n=s.next()).done;)o.push(n.value)}catch(e){i={error:e}}finally{try{n&&!n.done&&(r=s.return)&&r.call(s)}finally{if(i)throw i.error}}return o}function o(){for(var e=[],t=0;t"+r+""};return function(i){i=i.replace(/[\s*+-:~^]+/g," ").trim();var s=new RegExp("(^|"+e.separator+")("+i.replace(/[|\\{}()[\]^$+*?.-]/g,"\\$&").replace(t,"|")+")","img");return function(e){return n(n({},e),{title:e.title.replace(s,r),text:e.text.replace(s,r)})}}}(t),this.index=void 0===l?lunr((function(){var e,n,s,a,l;u=u||["trimmer","stopWordFilter"],this.pipeline.reset();try{for(var c=i(u),h=c.next();!h.done;h=c.next()){var d=h.value;this.pipeline.add(lunr[d])}}catch(t){e={error:t}}finally{try{h&&!h.done&&(n=c.return)&&n.call(c)}finally{if(e)throw e.error}}1===t.lang.length&&"en"!==t.lang[0]?this.use(lunr[t.lang[0]]):t.lang.length>1&&this.use((s=lunr).multiLanguage.apply(s,o(t.lang))),this.field("title",{boost:10}),this.field("text"),this.ref("location");try{for(var f=i(r),p=f.next();!p.done;p=f.next()){var y=p.value;this.add(y)}}catch(e){a={error:e}}finally{try{p&&!p.done&&(l=f.return)&&l.call(f)}finally{if(a)throw a.error}}})):lunr.Index.load("string"==typeof l?JSON.parse(l):l)}return e.prototype.search=function(e){var t=this;if(e)try{var r=this.index.search(e).reduce((function(e,r){var n=t.documents.get(r.ref);if(void 0!==n)if("parent"in n){var i=n.parent.location;e.set(i,o(e.get(i)||[],[r]))}else{i=n.location;e.set(i,e.get(i)||[])}return e}),new Map),n=this.highlight(e);return o(r).map((function(e){var r=s(e,2),i=r[0],o=r[1];return{article:n(t.documents.get(i)),sections:o.map((function(e){return n(t.documents.get(e.ref))}))}}))}catch(t){console.warn("Invalid query: "+e+" – see https://bit.ly/2s3ChXG")}return[]},e.prototype.toString=function(){return JSON.stringify(this.index)},e}();function h(e){switch(e.type){case u.SETUP:return function(e){var t,r,n="../lunr",s=[];try{for(var a=i(e.lang),u=a.next();!u.done;u=a.next()){var l=u.value;"ja"===l&&s.push(n+"/tinyseg.min.js"),"en"!==l&&s.push(n+"/min/lunr."+l+".min.js")}}catch(e){t={error:e}}finally{try{u&&!u.done&&(r=a.return)&&r.call(a)}finally{if(t)throw t.error}}e.lang.length>1&&s.push(n+"/min/lunr.multi.min.js"),s.length&&self.importScripts.apply(self,o([n+"/min/lunr.stemmer.support.min.js"],s))}(e.data.config),l=new c(e.data),{type:u.DUMP,data:l.toString()};case u.QUERY:return{type:u.RESULT,data:l?l.search(e.data):[]};default:throw new TypeError("Invalid message type")}}!function(e){e[e.SETUP=0]="SETUP",e[e.DUMP=1]="DUMP",e[e.QUERY=2]="QUERY",e[e.RESULT=3]="RESULT"}(u||(u={})),r.d(t,"handler",(function(){return h})),self.addEventListener("message",(function(e){self.postMessage(h(e.data))}))}]); +//# sourceMappingURL=search.edc88caf.min.js.map \ No newline at end of file diff --git a/material/assets/javascripts/worker/search.edc88caf.min.js.map b/material/assets/javascripts/worker/search.edc88caf.min.js.map new file mode 100644 index 000000000..9c8fff302 --- /dev/null +++ b/material/assets/javascripts/worker/search.edc88caf.min.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/escape-html/index.js","webpack:///./node_modules/lunr/lunr.js-exposed","webpack:///(webpack)/buildin/global.js","webpack:///./node_modules/lunr/lunr.js","webpack:///./node_modules/tslib/tslib.es6.js","webpack:///./src/assets/javascripts/integrations/search/_/index.ts","webpack:///./src/assets/javascripts/workers/search/message/index.ts","webpack:///./src/assets/javascripts/workers/search/main/index.ts","webpack:///./src/assets/javascripts/integrations/search/document/index.ts","webpack:///./src/assets/javascripts/integrations/search/highlight/index.ts"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","matchHtmlRegExp","string","escape","str","match","exec","html","index","lastIndex","length","charCodeAt","substring","g","this","Function","e","window","global","step2list","step3list","v","C","re_mgr0","re_mgr1","re_meq1","re_s_v","re_1a","re2_1a","re_1b","re2_1b","re_1b_2","re2_1b_2","re3_1b_2","re4_1b_2","re_1c","re_2","re_3","re_4","re2_4","re_5","re_5_1","re3_5","porterStemmer","lunr","config","builder","Builder","pipeline","add","trimmer","stopWordFilter","stemmer","searchPipeline","build","version","utils","warn","message","console","asString","obj","toString","clone","keys","val","Array","isArray","slice","TypeError","FieldRef","docRef","fieldName","stringValue","_stringValue","joiner","fromString","indexOf","fieldRef","undefined","Set","elements","complete","intersect","other","union","contains","empty","a","b","intersection","element","push","concat","idf","posting","documentCount","documentsWithTerm","x","Math","log","abs","Token","metadata","update","fn","tokenizer","map","toLowerCase","len","tokens","sliceEnd","sliceStart","sliceLength","charAt","separator","tokenMetadata","Pipeline","_stack","registeredFunctions","registerFunction","label","warnIfFunctionNotRegistered","load","serialised","forEach","fnName","Error","fns","arguments","after","existingFn","newFn","pos","splice","before","remove","run","stackLength","memo","j","result","k","runString","token","reset","toJSON","Vector","_magnitude","positionForIndex","start","end","pivotPoint","floor","pivotIndex","insert","insertIdx","upsert","position","magnitude","sumOfSquares","elementsLength","sqrt","dot","otherVector","dotProduct","aLen","bLen","aVal","bVal","similarity","toArray","output","RegExp","w","stem","suffix","firstch","re","re2","re3","re4","substr","toUpperCase","test","replace","fp","generateStopWordFilter","stopWords","words","reduce","stopWord","TokenSet","final","edges","id","_nextId","fromArray","arr","finish","root","fromClause","clause","fromFuzzyString","term","editDistance","stack","node","editsRemaining","frame","pop","noEditNode","char","insertionNode","substitutionNode","transposeNode","charA","charB","next","prefix","edge","_str","labels","sort","qNode","qEdges","qLen","nEdges","nLen","q","qEdge","nEdge","previousWord","uncheckedNodes","minimizedNodes","word","commonPrefix","minimize","child","nextNode","parent","downTo","childKey","Index","attrs","invertedIndex","fieldVectors","tokenSet","fields","search","queryString","query","QueryParser","parse","Query","matchingFields","queryVectors","termFieldCache","requiredMatches","prohibitedMatches","clauses","terms","clauseMatches","usePipeline","termTokenSet","expandedTerms","presence","REQUIRED","field","expandedTerm","termIndex","_index","fieldPosting","matchingDocumentRefs","termField","matchingDocumentsSet","PROHIBITED","boost","fieldMatch","matchingDocumentRef","matchingFieldRef","MatchData","allRequiredMatches","allProhibitedMatches","matchingFieldRefs","results","matches","isNegated","docMatch","fieldVector","score","matchData","combine","ref","serializedIndex","serializedVectors","serializedInvertedIndex","tokenSetBuilder","tuple","_ref","_fields","_documents","fieldTermFrequencies","fieldLengths","_b","_k1","metadataWhitelist","attributes","RangeError","number","k1","doc","extractor","fieldTerms","metadataKey","calculateAverageFieldLengths","fieldRefs","numberOfFields","accumulator","documentsWithField","averageFieldLength","createFieldVectors","fieldRefsLength","termIdfCache","fieldLength","termFrequencies","termsLength","fieldBoost","docBoost","scoreWithPrecision","tf","round","createTokenSet","use","args","unshift","apply","clonedMetadata","metadataKeys","otherMatchData","allFields","wildcard","String","NONE","LEADING","TRAILING","OPTIONAL","options","QueryParseError","QueryLexer","lexemes","escapeCharPositions","state","lexText","sliceString","subSlices","join","emit","type","escapeCharacter","EOS","width","ignore","backup","acceptDigitRun","charCode","more","FIELD","TERM","EDIT_DISTANCE","BOOST","PRESENCE","lexField","lexer","lexTerm","lexEditDistance","lexBoost","lexEOS","termSeparator","currentClause","lexemeIdx","parseClause","peekLexeme","consumeLexeme","lexeme","nextClause","completedClause","parser","parsePresence","parseField","parseTerm","errorMessage","nextLexeme","possibleFields","f","parseEditDistance","parseBoost","parseInt","isNaN","__assign","assign","__values","iterator","done","__read","ar","error","__spread","SearchMessageType","docs","documents","Map","path","hash","location","title","text","linked","set","setupSearchDocumentMap","highlight","_","data","trim","document","setupSearchHighlighter","lang","multiLanguage","JSON","groups","sections","article","section","err","stringify","handler","SETUP","base","scripts","self","importScripts","setupLunrLanguages","DUMP","QUERY","RESULT","addEventListener","ev","postMessage"],"mappings":"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uBAAyB,SAAUC,GACtC,IAAIC,EAAQD,EAAUE,QAAO,SAAUnD,EAAMoD,GAE3C,OADApD,EAAKoD,GAAYA,EACVpD,IACN,IAEH,OAAO,SAAUK,GACf,GAAIA,GAAS6C,EAAM7C,EAAMlF,cAAgBkF,EAAMlF,WAAY,OAAOkF,IAiBtEpG,EAAKO,eAAiBP,EAAK+I,uBAAuB,CAChD,IACA,OACA,QACA,SACA,QACA,MACA,SACA,OACA,KACA,QACA,KACA,MACA,MACA,MACA,KACA,KACA,KACA,UACA,OACA,MACA,KACA,MACA,SACA,QACA,OACA,MACA,KACA,OACA,SACA,OACA,OACA,QACA,MACA,OACA,MACA,MACA,MACA,MACA,OACA,KACA,MACA,OACA,MACA,MACA,MACA,UACA,IACA,KACA,KACA,OACA,KACA,KACA,MACA,OACA,QACA,MACA,OACA,SACA,MACA,KACA,QACA,OACA,OACA,KACA,UACA,KACA,MACA,MACA,KACA,MACA,QACA,KACA,OACA,KACA,QACA,MACA,MACA,SACA,OACA,MACA,OACA,MACA,SACA,QACA,KACA,OACA,OACA,OACA,MACA,QACA,OACA,OACA,QACA,QACA,OACA,OACA,MACA,KACA,MACA,OACA,KACA,QACA,MACA,KACA,OACA,OACA,OACA,QACA,QACA,QACA,MACA,OACA,MACA,OACA,OACA,QACA,MACA,MACA,SAGF/I,EAAKyE,SAASG,iBAAiB5E,EAAKO,eAAgB;;;;IAqBpDP,EAAKM,QAAU,SAAU8F,GACvB,OAAOA,EAAMxC,QAAO,SAAUxG,GAC5B,OAAOA,EAAEyL,QAAQ,OAAQ,IAAIA,QAAQ,OAAQ,QAIjD7I,EAAKyE,SAASG,iBAAiB5E,EAAKM,QAAS;;;;IA2B7CN,EAAKoJ,SAAW,WACdlL,KAAKmL,OAAQ,EACbnL,KAAKoL,MAAQ,GACbpL,KAAKqL,GAAKvJ,EAAKoJ,SAASI,QACxBxJ,EAAKoJ,SAASI,SAAW,GAW3BxJ,EAAKoJ,SAASI,QAAU,EASxBxJ,EAAKoJ,SAASK,UAAY,SAAUC,GAGlC,IAFA,IAAIxJ,EAAU,IAAIF,EAAK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","file":"assets/javascripts/worker/search.edc88caf.min.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 4);\n","/*!\n * escape-html\n * Copyright(c) 2012-2013 TJ Holowaychuk\n * Copyright(c) 2015 Andreas Lubbe\n * Copyright(c) 2015 Tiancheng \"Timothy\" Gu\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module variables.\n * @private\n */\n\nvar matchHtmlRegExp = /[\"'&<>]/;\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = escapeHtml;\n\n/**\n * Escape special characters in the given string of html.\n *\n * @param {string} string The string to escape for inserting into HTML\n * @return {string}\n * @public\n */\n\nfunction escapeHtml(string) {\n var str = '' + string;\n var match = matchHtmlRegExp.exec(str);\n\n if (!match) {\n return str;\n }\n\n var escape;\n var html = '';\n var index = 0;\n var lastIndex = 0;\n\n for (index = match.index; index < str.length; index++) {\n switch (str.charCodeAt(index)) {\n case 34: // \"\n escape = '"';\n break;\n case 38: // &\n escape = '&';\n break;\n case 39: // '\n escape = ''';\n break;\n case 60: // <\n escape = '<';\n break;\n case 62: // >\n escape = '>';\n break;\n default:\n continue;\n }\n\n if (lastIndex !== index) {\n html += str.substring(lastIndex, index);\n }\n\n lastIndex = index + 1;\n html += escape;\n }\n\n return lastIndex !== index\n ? html + str.substring(lastIndex, index)\n : html;\n}\n","module.exports = global[\"lunr\"] = require(\"-!./lunr.js\");","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","/**\n * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 2.3.8\n * Copyright (C) 2019 Oliver Nightingale\n * @license MIT\n */\n\n;(function(){\n\n/**\n * A convenience function for configuring and constructing\n * a new lunr Index.\n *\n * A lunr.Builder instance is created and the pipeline setup\n * with a trimmer, stop word filter and stemmer.\n *\n * This builder object is yielded to the configuration function\n * that is passed as a parameter, allowing the list of fields\n * and other builder parameters to be customised.\n *\n * All documents _must_ be added within the passed config function.\n *\n * @example\n * var idx = lunr(function () {\n * this.field('title')\n * this.field('body')\n * this.ref('id')\n *\n * documents.forEach(function (doc) {\n * this.add(doc)\n * }, this)\n * })\n *\n * @see {@link lunr.Builder}\n * @see {@link lunr.Pipeline}\n * @see {@link lunr.trimmer}\n * @see {@link lunr.stopWordFilter}\n * @see {@link lunr.stemmer}\n * @namespace {function} lunr\n */\nvar lunr = function (config) {\n var builder = new lunr.Builder\n\n builder.pipeline.add(\n lunr.trimmer,\n lunr.stopWordFilter,\n lunr.stemmer\n )\n\n builder.searchPipeline.add(\n lunr.stemmer\n )\n\n config.call(builder, builder)\n return builder.build()\n}\n\nlunr.version = \"2.3.8\"\n/*!\n * lunr.utils\n * Copyright (C) 2019 Oliver Nightingale\n */\n\n/**\n * A namespace containing utils for the rest of the lunr library\n * @namespace lunr.utils\n */\nlunr.utils = {}\n\n/**\n * Print a warning message to the console.\n *\n * @param {String} message The message to be printed.\n * @memberOf lunr.utils\n * @function\n */\nlunr.utils.warn = (function (global) {\n /* eslint-disable no-console */\n return function (message) {\n if (global.console && console.warn) {\n console.warn(message)\n }\n }\n /* eslint-enable no-console */\n})(this)\n\n/**\n * Convert an object to a string.\n *\n * In the case of `null` and `undefined` the function returns\n * the empty string, in all other cases the result of calling\n * `toString` on the passed object is returned.\n *\n * @param {Any} obj The object to convert to a string.\n * @return {String} string representation of the passed object.\n * @memberOf lunr.utils\n */\nlunr.utils.asString = function (obj) {\n if (obj === void 0 || obj === null) {\n return \"\"\n } else {\n return obj.toString()\n }\n}\n\n/**\n * Clones an object.\n *\n * Will create a copy of an existing object such that any mutations\n * on the copy cannot affect the original.\n *\n * Only shallow objects are supported, passing a nested object to this\n * function will cause a TypeError.\n *\n * Objects with primitives, and arrays of primitives are supported.\n *\n * @param {Object} obj The object to clone.\n * @return {Object} a clone of the passed object.\n * @throws {TypeError} when a nested object is passed.\n * @memberOf Utils\n */\nlunr.utils.clone = function (obj) {\n if (obj === null || obj === undefined) {\n return obj\n }\n\n var clone = Object.create(null),\n keys = Object.keys(obj)\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i],\n val = obj[key]\n\n if (Array.isArray(val)) {\n clone[key] = val.slice()\n continue\n }\n\n if (typeof val === 'string' ||\n typeof val === 'number' ||\n typeof val === 'boolean') {\n clone[key] = val\n continue\n }\n\n throw new TypeError(\"clone is not deep and does not support nested objects\")\n }\n\n return clone\n}\nlunr.FieldRef = function (docRef, fieldName, stringValue) {\n this.docRef = docRef\n this.fieldName = fieldName\n this._stringValue = stringValue\n}\n\nlunr.FieldRef.joiner = \"/\"\n\nlunr.FieldRef.fromString = function (s) {\n var n = s.indexOf(lunr.FieldRef.joiner)\n\n if (n === -1) {\n throw \"malformed field ref string\"\n }\n\n var fieldRef = s.slice(0, n),\n docRef = s.slice(n + 1)\n\n return new lunr.FieldRef (docRef, fieldRef, s)\n}\n\nlunr.FieldRef.prototype.toString = function () {\n if (this._stringValue == undefined) {\n this._stringValue = this.fieldName + lunr.FieldRef.joiner + this.docRef\n }\n\n return this._stringValue\n}\n/*!\n * lunr.Set\n * Copyright (C) 2019 Oliver Nightingale\n */\n\n/**\n * A lunr set.\n *\n * @constructor\n */\nlunr.Set = function (elements) {\n this.elements = Object.create(null)\n\n if (elements) {\n this.length = elements.length\n\n for (var i = 0; i < this.length; i++) {\n this.elements[elements[i]] = true\n }\n } else {\n this.length = 0\n }\n}\n\n/**\n * A complete set that contains all elements.\n *\n * @static\n * @readonly\n * @type {lunr.Set}\n */\nlunr.Set.complete = {\n intersect: function (other) {\n return other\n },\n\n union: function (other) {\n return other\n },\n\n contains: function () {\n return true\n }\n}\n\n/**\n * An empty set that contains no elements.\n *\n * @static\n * @readonly\n * @type {lunr.Set}\n */\nlunr.Set.empty = {\n intersect: function () {\n return this\n },\n\n union: function (other) {\n return other\n },\n\n contains: function () {\n return false\n }\n}\n\n/**\n * Returns true if this set contains the specified object.\n *\n * @param {object} object - Object whose presence in this set is to be tested.\n * @returns {boolean} - True if this set contains the specified object.\n */\nlunr.Set.prototype.contains = function (object) {\n return !!this.elements[object]\n}\n\n/**\n * Returns a new set containing only the elements that are present in both\n * this set and the specified set.\n *\n * @param {lunr.Set} other - set to intersect with this set.\n * @returns {lunr.Set} a new set that is the intersection of this and the specified set.\n */\n\nlunr.Set.prototype.intersect = function (other) {\n var a, b, elements, intersection = []\n\n if (other === lunr.Set.complete) {\n return this\n }\n\n if (other === lunr.Set.empty) {\n return other\n }\n\n if (this.length < other.length) {\n a = this\n b = other\n } else {\n a = other\n b = this\n }\n\n elements = Object.keys(a.elements)\n\n for (var i = 0; i < elements.length; i++) {\n var element = elements[i]\n if (element in b.elements) {\n intersection.push(element)\n }\n }\n\n return new lunr.Set (intersection)\n}\n\n/**\n * Returns a new set combining the elements of this and the specified set.\n *\n * @param {lunr.Set} other - set to union with this set.\n * @return {lunr.Set} a new set that is the union of this and the specified set.\n */\n\nlunr.Set.prototype.union = function (other) {\n if (other === lunr.Set.complete) {\n return lunr.Set.complete\n }\n\n if (other === lunr.Set.empty) {\n return this\n }\n\n return new lunr.Set(Object.keys(this.elements).concat(Object.keys(other.elements)))\n}\n/**\n * A function to calculate the inverse document frequency for\n * a posting. This is shared between the builder and the index\n *\n * @private\n * @param {object} posting - The posting for a given term\n * @param {number} documentCount - The total number of documents.\n */\nlunr.idf = function (posting, documentCount) {\n var documentsWithTerm = 0\n\n for (var fieldName in posting) {\n if (fieldName == '_index') continue // Ignore the term index, its not a field\n documentsWithTerm += Object.keys(posting[fieldName]).length\n }\n\n var x = (documentCount - documentsWithTerm + 0.5) / (documentsWithTerm + 0.5)\n\n return Math.log(1 + Math.abs(x))\n}\n\n/**\n * A token wraps a string representation of a token\n * as it is passed through the text processing pipeline.\n *\n * @constructor\n * @param {string} [str=''] - The string token being wrapped.\n * @param {object} [metadata={}] - Metadata associated with this token.\n */\nlunr.Token = function (str, metadata) {\n this.str = str || \"\"\n this.metadata = metadata || {}\n}\n\n/**\n * Returns the token string that is being wrapped by this object.\n *\n * @returns {string}\n */\nlunr.Token.prototype.toString = function () {\n return this.str\n}\n\n/**\n * A token update function is used when updating or optionally\n * when cloning a token.\n *\n * @callback lunr.Token~updateFunction\n * @param {string} str - The string representation of the token.\n * @param {Object} metadata - All metadata associated with this token.\n */\n\n/**\n * Applies the given function to the wrapped string token.\n *\n * @example\n * token.update(function (str, metadata) {\n * return str.toUpperCase()\n * })\n *\n * @param {lunr.Token~updateFunction} fn - A function to apply to the token string.\n * @returns {lunr.Token}\n */\nlunr.Token.prototype.update = function (fn) {\n this.str = fn(this.str, this.metadata)\n return this\n}\n\n/**\n * Creates a clone of this token. Optionally a function can be\n * applied to the cloned token.\n *\n * @param {lunr.Token~updateFunction} [fn] - An optional function to apply to the cloned token.\n * @returns {lunr.Token}\n */\nlunr.Token.prototype.clone = function (fn) {\n fn = fn || function (s) { return s }\n return new lunr.Token (fn(this.str, this.metadata), this.metadata)\n}\n/*!\n * lunr.tokenizer\n * Copyright (C) 2019 Oliver Nightingale\n */\n\n/**\n * A function for splitting a string into tokens ready to be inserted into\n * the search index. Uses `lunr.tokenizer.separator` to split strings, change\n * the value of this property to change how strings are split into tokens.\n *\n * This tokenizer will convert its parameter to a string by calling `toString` and\n * then will split this string on the character in `lunr.tokenizer.separator`.\n * Arrays will have their elements converted to strings and wrapped in a lunr.Token.\n *\n * Optional metadata can be passed to the tokenizer, this metadata will be cloned and\n * added as metadata to every token that is created from the object to be tokenized.\n *\n * @static\n * @param {?(string|object|object[])} obj - The object to convert into tokens\n * @param {?object} metadata - Optional metadata to associate with every token\n * @returns {lunr.Token[]}\n * @see {@link lunr.Pipeline}\n */\nlunr.tokenizer = function (obj, metadata) {\n if (obj == null || obj == undefined) {\n return []\n }\n\n if (Array.isArray(obj)) {\n return obj.map(function (t) {\n return new lunr.Token(\n lunr.utils.asString(t).toLowerCase(),\n lunr.utils.clone(metadata)\n )\n })\n }\n\n var str = obj.toString().toLowerCase(),\n len = str.length,\n tokens = []\n\n for (var sliceEnd = 0, sliceStart = 0; sliceEnd <= len; sliceEnd++) {\n var char = str.charAt(sliceEnd),\n sliceLength = sliceEnd - sliceStart\n\n if ((char.match(lunr.tokenizer.separator) || sliceEnd == len)) {\n\n if (sliceLength > 0) {\n var tokenMetadata = lunr.utils.clone(metadata) || {}\n tokenMetadata[\"position\"] = [sliceStart, sliceLength]\n tokenMetadata[\"index\"] = tokens.length\n\n tokens.push(\n new lunr.Token (\n str.slice(sliceStart, sliceEnd),\n tokenMetadata\n )\n )\n }\n\n sliceStart = sliceEnd + 1\n }\n\n }\n\n return tokens\n}\n\n/**\n * The separator used to split a string into tokens. Override this property to change the behaviour of\n * `lunr.tokenizer` behaviour when tokenizing strings. By default this splits on whitespace and hyphens.\n *\n * @static\n * @see lunr.tokenizer\n */\nlunr.tokenizer.separator = /[\\s\\-]+/\n/*!\n * lunr.Pipeline\n * Copyright (C) 2019 Oliver Nightingale\n */\n\n/**\n * lunr.Pipelines maintain an ordered list of functions to be applied to all\n * tokens in documents entering the search index and queries being ran against\n * the index.\n *\n * An instance of lunr.Index created with the lunr shortcut will contain a\n * pipeline with a stop word filter and an English language stemmer. Extra\n * functions can be added before or after either of these functions or these\n * default functions can be removed.\n *\n * When run the pipeline will call each function in turn, passing a token, the\n * index of that token in the original list of all tokens and finally a list of\n * all the original tokens.\n *\n * The output of functions in the pipeline will be passed to the next function\n * in the pipeline. To exclude a token from entering the index the function\n * should return undefined, the rest of the pipeline will not be called with\n * this token.\n *\n * For serialisation of pipelines to work, all functions used in an instance of\n * a pipeline should be registered with lunr.Pipeline. Registered functions can\n * then be loaded. If trying to load a serialised pipeline that uses functions\n * that are not registered an error will be thrown.\n *\n * If not planning on serialising the pipeline then registering pipeline functions\n * is not necessary.\n *\n * @constructor\n */\nlunr.Pipeline = function () {\n this._stack = []\n}\n\nlunr.Pipeline.registeredFunctions = Object.create(null)\n\n/**\n * A pipeline function maps lunr.Token to lunr.Token. A lunr.Token contains the token\n * string as well as all known metadata. A pipeline function can mutate the token string\n * or mutate (or add) metadata for a given token.\n *\n * A pipeline function can indicate that the passed token should be discarded by returning\n * null, undefined or an empty string. This token will not be passed to any downstream pipeline\n * functions and will not be added to the index.\n *\n * Multiple tokens can be returned by returning an array of tokens. Each token will be passed\n * to any downstream pipeline functions and all will returned tokens will be added to the index.\n *\n * Any number of pipeline functions may be chained together using a lunr.Pipeline.\n *\n * @interface lunr.PipelineFunction\n * @param {lunr.Token} token - A token from the document being processed.\n * @param {number} i - The index of this token in the complete list of tokens for this document/field.\n * @param {lunr.Token[]} tokens - All tokens for this document/field.\n * @returns {(?lunr.Token|lunr.Token[])}\n */\n\n/**\n * Register a function with the pipeline.\n *\n * Functions that are used in the pipeline should be registered if the pipeline\n * needs to be serialised, or a serialised pipeline needs to be loaded.\n *\n * Registering a function does not add it to a pipeline, functions must still be\n * added to instances of the pipeline for them to be used when running a pipeline.\n *\n * @param {lunr.PipelineFunction} fn - The function to check for.\n * @param {String} label - The label to register this function with\n */\nlunr.Pipeline.registerFunction = function (fn, label) {\n if (label in this.registeredFunctions) {\n lunr.utils.warn('Overwriting existing registered function: ' + label)\n }\n\n fn.label = label\n lunr.Pipeline.registeredFunctions[fn.label] = fn\n}\n\n/**\n * Warns if the function is not registered as a Pipeline function.\n *\n * @param {lunr.PipelineFunction} fn - The function to check for.\n * @private\n */\nlunr.Pipeline.warnIfFunctionNotRegistered = function (fn) {\n var isRegistered = fn.label && (fn.label in this.registeredFunctions)\n\n if (!isRegistered) {\n lunr.utils.warn('Function is not registered with pipeline. This may cause problems when serialising the index.\\n', fn)\n }\n}\n\n/**\n * Loads a previously serialised pipeline.\n *\n * All functions to be loaded must already be registered with lunr.Pipeline.\n * If any function from the serialised data has not been registered then an\n * error will be thrown.\n *\n * @param {Object} serialised - The serialised pipeline to load.\n * @returns {lunr.Pipeline}\n */\nlunr.Pipeline.load = function (serialised) {\n var pipeline = new lunr.Pipeline\n\n serialised.forEach(function (fnName) {\n var fn = lunr.Pipeline.registeredFunctions[fnName]\n\n if (fn) {\n pipeline.add(fn)\n } else {\n throw new Error('Cannot load unregistered function: ' + fnName)\n }\n })\n\n return pipeline\n}\n\n/**\n * Adds new functions to the end of the pipeline.\n *\n * Logs a warning if the function has not been registered.\n *\n * @param {lunr.PipelineFunction[]} functions - Any number of functions to add to the pipeline.\n */\nlunr.Pipeline.prototype.add = function () {\n var fns = Array.prototype.slice.call(arguments)\n\n fns.forEach(function (fn) {\n lunr.Pipeline.warnIfFunctionNotRegistered(fn)\n this._stack.push(fn)\n }, this)\n}\n\n/**\n * Adds a single function after a function that already exists in the\n * pipeline.\n *\n * Logs a warning if the function has not been registered.\n *\n * @param {lunr.PipelineFunction} existingFn - A function that already exists in the pipeline.\n * @param {lunr.PipelineFunction} newFn - The new function to add to the pipeline.\n */\nlunr.Pipeline.prototype.after = function (existingFn, newFn) {\n lunr.Pipeline.warnIfFunctionNotRegistered(newFn)\n\n var pos = this._stack.indexOf(existingFn)\n if (pos == -1) {\n throw new Error('Cannot find existingFn')\n }\n\n pos = pos + 1\n this._stack.splice(pos, 0, newFn)\n}\n\n/**\n * Adds a single function before a function that already exists in the\n * pipeline.\n *\n * Logs a warning if the function has not been registered.\n *\n * @param {lunr.PipelineFunction} existingFn - A function that already exists in the pipeline.\n * @param {lunr.PipelineFunction} newFn - The new function to add to the pipeline.\n */\nlunr.Pipeline.prototype.before = function (existingFn, newFn) {\n lunr.Pipeline.warnIfFunctionNotRegistered(newFn)\n\n var pos = this._stack.indexOf(existingFn)\n if (pos == -1) {\n throw new Error('Cannot find existingFn')\n }\n\n this._stack.splice(pos, 0, newFn)\n}\n\n/**\n * Removes a function from the pipeline.\n *\n * @param {lunr.PipelineFunction} fn The function to remove from the pipeline.\n */\nlunr.Pipeline.prototype.remove = function (fn) {\n var pos = this._stack.indexOf(fn)\n if (pos == -1) {\n return\n }\n\n this._stack.splice(pos, 1)\n}\n\n/**\n * Runs the current list of functions that make up the pipeline against the\n * passed tokens.\n *\n * @param {Array} tokens The tokens to run through the pipeline.\n * @returns {Array}\n */\nlunr.Pipeline.prototype.run = function (tokens) {\n var stackLength = this._stack.length\n\n for (var i = 0; i < stackLength; i++) {\n var fn = this._stack[i]\n var memo = []\n\n for (var j = 0; j < tokens.length; j++) {\n var result = fn(tokens[j], j, tokens)\n\n if (result === null || result === void 0 || result === '') continue\n\n if (Array.isArray(result)) {\n for (var k = 0; k < result.length; k++) {\n memo.push(result[k])\n }\n } else {\n memo.push(result)\n }\n }\n\n tokens = memo\n }\n\n return tokens\n}\n\n/**\n * Convenience method for passing a string through a pipeline and getting\n * strings out. This method takes care of wrapping the passed string in a\n * token and mapping the resulting tokens back to strings.\n *\n * @param {string} str - The string to pass through the pipeline.\n * @param {?object} metadata - Optional metadata to associate with the token\n * passed to the pipeline.\n * @returns {string[]}\n */\nlunr.Pipeline.prototype.runString = function (str, metadata) {\n var token = new lunr.Token (str, metadata)\n\n return this.run([token]).map(function (t) {\n return t.toString()\n })\n}\n\n/**\n * Resets the pipeline by removing any existing processors.\n *\n */\nlunr.Pipeline.prototype.reset = function () {\n this._stack = []\n}\n\n/**\n * Returns a representation of the pipeline ready for serialisation.\n *\n * Logs a warning if the function has not been registered.\n *\n * @returns {Array}\n */\nlunr.Pipeline.prototype.toJSON = function () {\n return this._stack.map(function (fn) {\n lunr.Pipeline.warnIfFunctionNotRegistered(fn)\n\n return fn.label\n })\n}\n/*!\n * lunr.Vector\n * Copyright (C) 2019 Oliver Nightingale\n */\n\n/**\n * A vector is used to construct the vector space of documents and queries. These\n * vectors support operations to determine the similarity between two documents or\n * a document and a query.\n *\n * Normally no parameters are required for initializing a vector, but in the case of\n * loading a previously dumped vector the raw elements can be provided to the constructor.\n *\n * For performance reasons vectors are implemented with a flat array, where an elements\n * index is immediately followed by its value. E.g. [index, value, index, value]. This\n * allows the underlying array to be as sparse as possible and still offer decent\n * performance when being used for vector calculations.\n *\n * @constructor\n * @param {Number[]} [elements] - The flat list of element index and element value pairs.\n */\nlunr.Vector = function (elements) {\n this._magnitude = 0\n this.elements = elements || []\n}\n\n\n/**\n * Calculates the position within the vector to insert a given index.\n *\n * This is used internally by insert and upsert. If there are duplicate indexes then\n * the position is returned as if the value for that index were to be updated, but it\n * is the callers responsibility to check whether there is a duplicate at that index\n *\n * @param {Number} insertIdx - The index at which the element should be inserted.\n * @returns {Number}\n */\nlunr.Vector.prototype.positionForIndex = function (index) {\n // For an empty vector the tuple can be inserted at the beginning\n if (this.elements.length == 0) {\n return 0\n }\n\n var start = 0,\n end = this.elements.length / 2,\n sliceLength = end - start,\n pivotPoint = Math.floor(sliceLength / 2),\n pivotIndex = this.elements[pivotPoint * 2]\n\n while (sliceLength > 1) {\n if (pivotIndex < index) {\n start = pivotPoint\n }\n\n if (pivotIndex > index) {\n end = pivotPoint\n }\n\n if (pivotIndex == index) {\n break\n }\n\n sliceLength = end - start\n pivotPoint = start + Math.floor(sliceLength / 2)\n pivotIndex = this.elements[pivotPoint * 2]\n }\n\n if (pivotIndex == index) {\n return pivotPoint * 2\n }\n\n if (pivotIndex > index) {\n return pivotPoint * 2\n }\n\n if (pivotIndex < index) {\n return (pivotPoint + 1) * 2\n }\n}\n\n/**\n * Inserts an element at an index within the vector.\n *\n * Does not allow duplicates, will throw an error if there is already an entry\n * for this index.\n *\n * @param {Number} insertIdx - The index at which the element should be inserted.\n * @param {Number} val - The value to be inserted into the vector.\n */\nlunr.Vector.prototype.insert = function (insertIdx, val) {\n this.upsert(insertIdx, val, function () {\n throw \"duplicate index\"\n })\n}\n\n/**\n * Inserts or updates an existing index within the vector.\n *\n * @param {Number} insertIdx - The index at which the element should be inserted.\n * @param {Number} val - The value to be inserted into the vector.\n * @param {function} fn - A function that is called for updates, the existing value and the\n * requested value are passed as arguments\n */\nlunr.Vector.prototype.upsert = function (insertIdx, val, fn) {\n this._magnitude = 0\n var position = this.positionForIndex(insertIdx)\n\n if (this.elements[position] == insertIdx) {\n this.elements[position + 1] = fn(this.elements[position + 1], val)\n } else {\n this.elements.splice(position, 0, insertIdx, val)\n }\n}\n\n/**\n * Calculates the magnitude of this vector.\n *\n * @returns {Number}\n */\nlunr.Vector.prototype.magnitude = function () {\n if (this._magnitude) return this._magnitude\n\n var sumOfSquares = 0,\n elementsLength = this.elements.length\n\n for (var i = 1; i < elementsLength; i += 2) {\n var val = this.elements[i]\n sumOfSquares += val * val\n }\n\n return this._magnitude = Math.sqrt(sumOfSquares)\n}\n\n/**\n * Calculates the dot product of this vector and another vector.\n *\n * @param {lunr.Vector} otherVector - The vector to compute the dot product with.\n * @returns {Number}\n */\nlunr.Vector.prototype.dot = function (otherVector) {\n var dotProduct = 0,\n a = this.elements, b = otherVector.elements,\n aLen = a.length, bLen = b.length,\n aVal = 0, bVal = 0,\n i = 0, j = 0\n\n while (i < aLen && j < bLen) {\n aVal = a[i], bVal = b[j]\n if (aVal < bVal) {\n i += 2\n } else if (aVal > bVal) {\n j += 2\n } else if (aVal == bVal) {\n dotProduct += a[i + 1] * b[j + 1]\n i += 2\n j += 2\n }\n }\n\n return dotProduct\n}\n\n/**\n * Calculates the similarity between this vector and another vector.\n *\n * @param {lunr.Vector} otherVector - The other vector to calculate the\n * similarity with.\n * @returns {Number}\n */\nlunr.Vector.prototype.similarity = function (otherVector) {\n return this.dot(otherVector) / this.magnitude() || 0\n}\n\n/**\n * Converts the vector to an array of the elements within the vector.\n *\n * @returns {Number[]}\n */\nlunr.Vector.prototype.toArray = function () {\n var output = new Array (this.elements.length / 2)\n\n for (var i = 1, j = 0; i < this.elements.length; i += 2, j++) {\n output[j] = this.elements[i]\n }\n\n return output\n}\n\n/**\n * A JSON serializable representation of the vector.\n *\n * @returns {Number[]}\n */\nlunr.Vector.prototype.toJSON = function () {\n return this.elements\n}\n/* eslint-disable */\n/*!\n * lunr.stemmer\n * Copyright (C) 2019 Oliver Nightingale\n * Includes code from - http://tartarus.org/~martin/PorterStemmer/js.txt\n */\n\n/**\n * lunr.stemmer is an english language stemmer, this is a JavaScript\n * implementation of the PorterStemmer taken from http://tartarus.org/~martin\n *\n * @static\n * @implements {lunr.PipelineFunction}\n * @param {lunr.Token} token - The string to stem\n * @returns {lunr.Token}\n * @see {@link lunr.Pipeline}\n * @function\n */\nlunr.stemmer = (function(){\n var step2list = {\n \"ational\" : \"ate\",\n \"tional\" : \"tion\",\n \"enci\" : \"ence\",\n \"anci\" : \"ance\",\n \"izer\" : \"ize\",\n \"bli\" : \"ble\",\n \"alli\" : \"al\",\n \"entli\" : \"ent\",\n \"eli\" : \"e\",\n \"ousli\" : \"ous\",\n \"ization\" : \"ize\",\n \"ation\" : \"ate\",\n \"ator\" : \"ate\",\n \"alism\" : \"al\",\n \"iveness\" : \"ive\",\n \"fulness\" : \"ful\",\n \"ousness\" : \"ous\",\n \"aliti\" : \"al\",\n \"iviti\" : \"ive\",\n \"biliti\" : \"ble\",\n \"logi\" : \"log\"\n },\n\n step3list = {\n \"icate\" : \"ic\",\n \"ative\" : \"\",\n \"alize\" : \"al\",\n \"iciti\" : \"ic\",\n \"ical\" : \"ic\",\n \"ful\" : \"\",\n \"ness\" : \"\"\n },\n\n c = \"[^aeiou]\", // consonant\n v = \"[aeiouy]\", // vowel\n C = c + \"[^aeiouy]*\", // consonant sequence\n V = v + \"[aeiou]*\", // vowel sequence\n\n mgr0 = \"^(\" + C + \")?\" + V + C, // [C]VC... is m>0\n meq1 = \"^(\" + C + \")?\" + V + C + \"(\" + V + \")?$\", // [C]VC[V] is m=1\n mgr1 = \"^(\" + C + \")?\" + V + C + V + C, // [C]VCVC... is m>1\n s_v = \"^(\" + C + \")?\" + v; // vowel in stem\n\n var re_mgr0 = new RegExp(mgr0);\n var re_mgr1 = new RegExp(mgr1);\n var re_meq1 = new RegExp(meq1);\n var re_s_v = new RegExp(s_v);\n\n var re_1a = /^(.+?)(ss|i)es$/;\n var re2_1a = /^(.+?)([^s])s$/;\n var re_1b = /^(.+?)eed$/;\n var re2_1b = /^(.+?)(ed|ing)$/;\n var re_1b_2 = /.$/;\n var re2_1b_2 = /(at|bl|iz)$/;\n var re3_1b_2 = new RegExp(\"([^aeiouylsz])\\\\1$\");\n var re4_1b_2 = new RegExp(\"^\" + C + v + \"[^aeiouwxy]$\");\n\n var re_1c = /^(.+?[^aeiou])y$/;\n var re_2 = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/;\n\n var re_3 = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/;\n\n var re_4 = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/;\n var re2_4 = /^(.+?)(s|t)(ion)$/;\n\n var re_5 = /^(.+?)e$/;\n var re_5_1 = /ll$/;\n var re3_5 = new RegExp(\"^\" + C + v + \"[^aeiouwxy]$\");\n\n var porterStemmer = function porterStemmer(w) {\n var stem,\n suffix,\n firstch,\n re,\n re2,\n re3,\n re4;\n\n if (w.length < 3) { return w; }\n\n firstch = w.substr(0,1);\n if (firstch == \"y\") {\n w = firstch.toUpperCase() + w.substr(1);\n }\n\n // Step 1a\n re = re_1a\n re2 = re2_1a;\n\n if (re.test(w)) { w = w.replace(re,\"$1$2\"); }\n else if (re2.test(w)) { w = w.replace(re2,\"$1$2\"); }\n\n // Step 1b\n re = re_1b;\n re2 = re2_1b;\n if (re.test(w)) {\n var fp = re.exec(w);\n re = re_mgr0;\n if (re.test(fp[1])) {\n re = re_1b_2;\n w = w.replace(re,\"\");\n }\n } else if (re2.test(w)) {\n var fp = re2.exec(w);\n stem = fp[1];\n re2 = re_s_v;\n if (re2.test(stem)) {\n w = stem;\n re2 = re2_1b_2;\n re3 = re3_1b_2;\n re4 = re4_1b_2;\n if (re2.test(w)) { w = w + \"e\"; }\n else if (re3.test(w)) { re = re_1b_2; w = w.replace(re,\"\"); }\n else if (re4.test(w)) { w = w + \"e\"; }\n }\n }\n\n // Step 1c - replace suffix y or Y by i if preceded by a non-vowel which is not the first letter of the word (so cry -> cri, by -> by, say -> say)\n re = re_1c;\n if (re.test(w)) {\n var fp = re.exec(w);\n stem = fp[1];\n w = stem + \"i\";\n }\n\n // Step 2\n re = re_2;\n if (re.test(w)) {\n var fp = re.exec(w);\n stem = fp[1];\n suffix = fp[2];\n re = re_mgr0;\n if (re.test(stem)) {\n w = stem + step2list[suffix];\n }\n }\n\n // Step 3\n re = re_3;\n if (re.test(w)) {\n var fp = re.exec(w);\n stem = fp[1];\n suffix = fp[2];\n re = re_mgr0;\n if (re.test(stem)) {\n w = stem + step3list[suffix];\n }\n }\n\n // Step 4\n re = re_4;\n re2 = re2_4;\n if (re.test(w)) {\n var fp = re.exec(w);\n stem = fp[1];\n re = re_mgr1;\n if (re.test(stem)) {\n w = stem;\n }\n } else if (re2.test(w)) {\n var fp = re2.exec(w);\n stem = fp[1] + fp[2];\n re2 = re_mgr1;\n if (re2.test(stem)) {\n w = stem;\n }\n }\n\n // Step 5\n re = re_5;\n if (re.test(w)) {\n var fp = re.exec(w);\n stem = fp[1];\n re = re_mgr1;\n re2 = re_meq1;\n re3 = re3_5;\n if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) {\n w = stem;\n }\n }\n\n re = re_5_1;\n re2 = re_mgr1;\n if (re.test(w) && re2.test(w)) {\n re = re_1b_2;\n w = w.replace(re,\"\");\n }\n\n // and turn initial Y back to y\n\n if (firstch == \"y\") {\n w = firstch.toLowerCase() + w.substr(1);\n }\n\n return w;\n };\n\n return function (token) {\n return token.update(porterStemmer);\n }\n})();\n\nlunr.Pipeline.registerFunction(lunr.stemmer, 'stemmer')\n/*!\n * lunr.stopWordFilter\n * Copyright (C) 2019 Oliver Nightingale\n */\n\n/**\n * lunr.generateStopWordFilter builds a stopWordFilter function from the provided\n * list of stop words.\n *\n * The built in lunr.stopWordFilter is built using this generator and can be used\n * to generate custom stopWordFilters for applications or non English languages.\n *\n * @function\n * @param {Array} token The token to pass through the filter\n * @returns {lunr.PipelineFunction}\n * @see lunr.Pipeline\n * @see lunr.stopWordFilter\n */\nlunr.generateStopWordFilter = function (stopWords) {\n var words = stopWords.reduce(function (memo, stopWord) {\n memo[stopWord] = stopWord\n return memo\n }, {})\n\n return function (token) {\n if (token && words[token.toString()] !== token.toString()) return token\n }\n}\n\n/**\n * lunr.stopWordFilter is an English language stop word list filter, any words\n * contained in the list will not be passed through the filter.\n *\n * This is intended to be used in the Pipeline. If the token does not pass the\n * filter then undefined will be returned.\n *\n * @function\n * @implements {lunr.PipelineFunction}\n * @params {lunr.Token} token - A token to check for being a stop word.\n * @returns {lunr.Token}\n * @see {@link lunr.Pipeline}\n */\nlunr.stopWordFilter = lunr.generateStopWordFilter([\n 'a',\n 'able',\n 'about',\n 'across',\n 'after',\n 'all',\n 'almost',\n 'also',\n 'am',\n 'among',\n 'an',\n 'and',\n 'any',\n 'are',\n 'as',\n 'at',\n 'be',\n 'because',\n 'been',\n 'but',\n 'by',\n 'can',\n 'cannot',\n 'could',\n 'dear',\n 'did',\n 'do',\n 'does',\n 'either',\n 'else',\n 'ever',\n 'every',\n 'for',\n 'from',\n 'get',\n 'got',\n 'had',\n 'has',\n 'have',\n 'he',\n 'her',\n 'hers',\n 'him',\n 'his',\n 'how',\n 'however',\n 'i',\n 'if',\n 'in',\n 'into',\n 'is',\n 'it',\n 'its',\n 'just',\n 'least',\n 'let',\n 'like',\n 'likely',\n 'may',\n 'me',\n 'might',\n 'most',\n 'must',\n 'my',\n 'neither',\n 'no',\n 'nor',\n 'not',\n 'of',\n 'off',\n 'often',\n 'on',\n 'only',\n 'or',\n 'other',\n 'our',\n 'own',\n 'rather',\n 'said',\n 'say',\n 'says',\n 'she',\n 'should',\n 'since',\n 'so',\n 'some',\n 'than',\n 'that',\n 'the',\n 'their',\n 'them',\n 'then',\n 'there',\n 'these',\n 'they',\n 'this',\n 'tis',\n 'to',\n 'too',\n 'twas',\n 'us',\n 'wants',\n 'was',\n 'we',\n 'were',\n 'what',\n 'when',\n 'where',\n 'which',\n 'while',\n 'who',\n 'whom',\n 'why',\n 'will',\n 'with',\n 'would',\n 'yet',\n 'you',\n 'your'\n])\n\nlunr.Pipeline.registerFunction(lunr.stopWordFilter, 'stopWordFilter')\n/*!\n * lunr.trimmer\n * Copyright (C) 2019 Oliver Nightingale\n */\n\n/**\n * lunr.trimmer is a pipeline function for trimming non word\n * characters from the beginning and end of tokens before they\n * enter the index.\n *\n * This implementation may not work correctly for non latin\n * characters and should either be removed or adapted for use\n * with languages with non-latin characters.\n *\n * @static\n * @implements {lunr.PipelineFunction}\n * @param {lunr.Token} token The token to pass through the filter\n * @returns {lunr.Token}\n * @see lunr.Pipeline\n */\nlunr.trimmer = function (token) {\n return token.update(function (s) {\n return s.replace(/^\\W+/, '').replace(/\\W+$/, '')\n })\n}\n\nlunr.Pipeline.registerFunction(lunr.trimmer, 'trimmer')\n/*!\n * lunr.TokenSet\n * Copyright (C) 2019 Oliver Nightingale\n */\n\n/**\n * A token set is used to store the unique list of all tokens\n * within an index. Token sets are also used to represent an\n * incoming query to the index, this query token set and index\n * token set are then intersected to find which tokens to look\n * up in the inverted index.\n *\n * A token set can hold multiple tokens, as in the case of the\n * index token set, or it can hold a single token as in the\n * case of a simple query token set.\n *\n * Additionally token sets are used to perform wildcard matching.\n * Leading, contained and trailing wildcards are supported, and\n * from this edit distance matching can also be provided.\n *\n * Token sets are implemented as a minimal finite state automata,\n * where both common prefixes and suffixes are shared between tokens.\n * This helps to reduce the space used for storing the token set.\n *\n * @constructor\n */\nlunr.TokenSet = function () {\n this.final = false\n this.edges = {}\n this.id = lunr.TokenSet._nextId\n lunr.TokenSet._nextId += 1\n}\n\n/**\n * Keeps track of the next, auto increment, identifier to assign\n * to a new tokenSet.\n *\n * TokenSets require a unique identifier to be correctly minimised.\n *\n * @private\n */\nlunr.TokenSet._nextId = 1\n\n/**\n * Creates a TokenSet instance from the given sorted array of words.\n *\n * @param {String[]} arr - A sorted array of strings to create the set from.\n * @returns {lunr.TokenSet}\n * @throws Will throw an error if the input array is not sorted.\n */\nlunr.TokenSet.fromArray = function (arr) {\n var builder = new lunr.TokenSet.Builder\n\n for (var i = 0, len = arr.length; i < len; i++) {\n builder.insert(arr[i])\n }\n\n builder.finish()\n return builder.root\n}\n\n/**\n * Creates a token set from a query clause.\n *\n * @private\n * @param {Object} clause - A single clause from lunr.Query.\n * @param {string} clause.term - The query clause term.\n * @param {number} [clause.editDistance] - The optional edit distance for the term.\n * @returns {lunr.TokenSet}\n */\nlunr.TokenSet.fromClause = function (clause) {\n if ('editDistance' in clause) {\n return lunr.TokenSet.fromFuzzyString(clause.term, clause.editDistance)\n } else {\n return lunr.TokenSet.fromString(clause.term)\n }\n}\n\n/**\n * Creates a token set representing a single string with a specified\n * edit distance.\n *\n * Insertions, deletions, substitutions and transpositions are each\n * treated as an edit distance of 1.\n *\n * Increasing the allowed edit distance will have a dramatic impact\n * on the performance of both creating and intersecting these TokenSets.\n * It is advised to keep the edit distance less than 3.\n *\n * @param {string} str - The string to create the token set from.\n * @param {number} editDistance - The allowed edit distance to match.\n * @returns {lunr.Vector}\n */\nlunr.TokenSet.fromFuzzyString = function (str, editDistance) {\n var root = new lunr.TokenSet\n\n var stack = [{\n node: root,\n editsRemaining: editDistance,\n str: str\n }]\n\n while (stack.length) {\n var frame = stack.pop()\n\n // no edit\n if (frame.str.length > 0) {\n var char = frame.str.charAt(0),\n noEditNode\n\n if (char in frame.node.edges) {\n noEditNode = frame.node.edges[char]\n } else {\n noEditNode = new lunr.TokenSet\n frame.node.edges[char] = noEditNode\n }\n\n if (frame.str.length == 1) {\n noEditNode.final = true\n }\n\n stack.push({\n node: noEditNode,\n editsRemaining: frame.editsRemaining,\n str: frame.str.slice(1)\n })\n }\n\n if (frame.editsRemaining == 0) {\n continue\n }\n\n // insertion\n if (\"*\" in frame.node.edges) {\n var insertionNode = frame.node.edges[\"*\"]\n } else {\n var insertionNode = new lunr.TokenSet\n frame.node.edges[\"*\"] = insertionNode\n }\n\n if (frame.str.length == 0) {\n insertionNode.final = true\n }\n\n stack.push({\n node: insertionNode,\n editsRemaining: frame.editsRemaining - 1,\n str: frame.str\n })\n\n // deletion\n // can only do a deletion if we have enough edits remaining\n // and if there are characters left to delete in the string\n if (frame.str.length > 1) {\n stack.push({\n node: frame.node,\n editsRemaining: frame.editsRemaining - 1,\n str: frame.str.slice(1)\n })\n }\n\n // deletion\n // just removing the last character from the str\n if (frame.str.length == 1) {\n frame.node.final = true\n }\n\n // substitution\n // can only do a substitution if we have enough edits remaining\n // and if there are characters left to substitute\n if (frame.str.length >= 1) {\n if (\"*\" in frame.node.edges) {\n var substitutionNode = frame.node.edges[\"*\"]\n } else {\n var substitutionNode = new lunr.TokenSet\n frame.node.edges[\"*\"] = substitutionNode\n }\n\n if (frame.str.length == 1) {\n substitutionNode.final = true\n }\n\n stack.push({\n node: substitutionNode,\n editsRemaining: frame.editsRemaining - 1,\n str: frame.str.slice(1)\n })\n }\n\n // transposition\n // can only do a transposition if there are edits remaining\n // and there are enough characters to transpose\n if (frame.str.length > 1) {\n var charA = frame.str.charAt(0),\n charB = frame.str.charAt(1),\n transposeNode\n\n if (charB in frame.node.edges) {\n transposeNode = frame.node.edges[charB]\n } else {\n transposeNode = new lunr.TokenSet\n frame.node.edges[charB] = transposeNode\n }\n\n if (frame.str.length == 1) {\n transposeNode.final = true\n }\n\n stack.push({\n node: transposeNode,\n editsRemaining: frame.editsRemaining - 1,\n str: charA + frame.str.slice(2)\n })\n }\n }\n\n return root\n}\n\n/**\n * Creates a TokenSet from a string.\n *\n * The string may contain one or more wildcard characters (*)\n * that will allow wildcard matching when intersecting with\n * another TokenSet.\n *\n * @param {string} str - The string to create a TokenSet from.\n * @returns {lunr.TokenSet}\n */\nlunr.TokenSet.fromString = function (str) {\n var node = new lunr.TokenSet,\n root = node\n\n /*\n * Iterates through all characters within the passed string\n * appending a node for each character.\n *\n * When a wildcard character is found then a self\n * referencing edge is introduced to continually match\n * any number of any characters.\n */\n for (var i = 0, len = str.length; i < len; i++) {\n var char = str[i],\n final = (i == len - 1)\n\n if (char == \"*\") {\n node.edges[char] = node\n node.final = final\n\n } else {\n var next = new lunr.TokenSet\n next.final = final\n\n node.edges[char] = next\n node = next\n }\n }\n\n return root\n}\n\n/**\n * Converts this TokenSet into an array of strings\n * contained within the TokenSet.\n *\n * This is not intended to be used on a TokenSet that\n * contains wildcards, in these cases the results are\n * undefined and are likely to cause an infinite loop.\n *\n * @returns {string[]}\n */\nlunr.TokenSet.prototype.toArray = function () {\n var words = []\n\n var stack = [{\n prefix: \"\",\n node: this\n }]\n\n while (stack.length) {\n var frame = stack.pop(),\n edges = Object.keys(frame.node.edges),\n len = edges.length\n\n if (frame.node.final) {\n /* In Safari, at this point the prefix is sometimes corrupted, see:\n * https://github.com/olivernn/lunr.js/issues/279 Calling any\n * String.prototype method forces Safari to \"cast\" this string to what\n * it's supposed to be, fixing the bug. */\n frame.prefix.charAt(0)\n words.push(frame.prefix)\n }\n\n for (var i = 0; i < len; i++) {\n var edge = edges[i]\n\n stack.push({\n prefix: frame.prefix.concat(edge),\n node: frame.node.edges[edge]\n })\n }\n }\n\n return words\n}\n\n/**\n * Generates a string representation of a TokenSet.\n *\n * This is intended to allow TokenSets to be used as keys\n * in objects, largely to aid the construction and minimisation\n * of a TokenSet. As such it is not designed to be a human\n * friendly representation of the TokenSet.\n *\n * @returns {string}\n */\nlunr.TokenSet.prototype.toString = function () {\n // NOTE: Using Object.keys here as this.edges is very likely\n // to enter 'hash-mode' with many keys being added\n //\n // avoiding a for-in loop here as it leads to the function\n // being de-optimised (at least in V8). From some simple\n // benchmarks the performance is comparable, but allowing\n // V8 to optimize may mean easy performance wins in the future.\n\n if (this._str) {\n return this._str\n }\n\n var str = this.final ? '1' : '0',\n labels = Object.keys(this.edges).sort(),\n len = labels.length\n\n for (var i = 0; i < len; i++) {\n var label = labels[i],\n node = this.edges[label]\n\n str = str + label + node.id\n }\n\n return str\n}\n\n/**\n * Returns a new TokenSet that is the intersection of\n * this TokenSet and the passed TokenSet.\n *\n * This intersection will take into account any wildcards\n * contained within the TokenSet.\n *\n * @param {lunr.TokenSet} b - An other TokenSet to intersect with.\n * @returns {lunr.TokenSet}\n */\nlunr.TokenSet.prototype.intersect = function (b) {\n var output = new lunr.TokenSet,\n frame = undefined\n\n var stack = [{\n qNode: b,\n output: output,\n node: this\n }]\n\n while (stack.length) {\n frame = stack.pop()\n\n // NOTE: As with the #toString method, we are using\n // Object.keys and a for loop instead of a for-in loop\n // as both of these objects enter 'hash' mode, causing\n // the function to be de-optimised in V8\n var qEdges = Object.keys(frame.qNode.edges),\n qLen = qEdges.length,\n nEdges = Object.keys(frame.node.edges),\n nLen = nEdges.length\n\n for (var q = 0; q < qLen; q++) {\n var qEdge = qEdges[q]\n\n for (var n = 0; n < nLen; n++) {\n var nEdge = nEdges[n]\n\n if (nEdge == qEdge || qEdge == '*') {\n var node = frame.node.edges[nEdge],\n qNode = frame.qNode.edges[qEdge],\n final = node.final && qNode.final,\n next = undefined\n\n if (nEdge in frame.output.edges) {\n // an edge already exists for this character\n // no need to create a new node, just set the finality\n // bit unless this node is already final\n next = frame.output.edges[nEdge]\n next.final = next.final || final\n\n } else {\n // no edge exists yet, must create one\n // set the finality bit and insert it\n // into the output\n next = new lunr.TokenSet\n next.final = final\n frame.output.edges[nEdge] = next\n }\n\n stack.push({\n qNode: qNode,\n output: next,\n node: node\n })\n }\n }\n }\n }\n\n return output\n}\nlunr.TokenSet.Builder = function () {\n this.previousWord = \"\"\n this.root = new lunr.TokenSet\n this.uncheckedNodes = []\n this.minimizedNodes = {}\n}\n\nlunr.TokenSet.Builder.prototype.insert = function (word) {\n var node,\n commonPrefix = 0\n\n if (word < this.previousWord) {\n throw new Error (\"Out of order word insertion\")\n }\n\n for (var i = 0; i < word.length && i < this.previousWord.length; i++) {\n if (word[i] != this.previousWord[i]) break\n commonPrefix++\n }\n\n this.minimize(commonPrefix)\n\n if (this.uncheckedNodes.length == 0) {\n node = this.root\n } else {\n node = this.uncheckedNodes[this.uncheckedNodes.length - 1].child\n }\n\n for (var i = commonPrefix; i < word.length; i++) {\n var nextNode = new lunr.TokenSet,\n char = word[i]\n\n node.edges[char] = nextNode\n\n this.uncheckedNodes.push({\n parent: node,\n char: char,\n child: nextNode\n })\n\n node = nextNode\n }\n\n node.final = true\n this.previousWord = word\n}\n\nlunr.TokenSet.Builder.prototype.finish = function () {\n this.minimize(0)\n}\n\nlunr.TokenSet.Builder.prototype.minimize = function (downTo) {\n for (var i = this.uncheckedNodes.length - 1; i >= downTo; i--) {\n var node = this.uncheckedNodes[i],\n childKey = node.child.toString()\n\n if (childKey in this.minimizedNodes) {\n node.parent.edges[node.char] = this.minimizedNodes[childKey]\n } else {\n // Cache the key for this node since\n // we know it can't change anymore\n node.child._str = childKey\n\n this.minimizedNodes[childKey] = node.child\n }\n\n this.uncheckedNodes.pop()\n }\n}\n/*!\n * lunr.Index\n * Copyright (C) 2019 Oliver Nightingale\n */\n\n/**\n * An index contains the built index of all documents and provides a query interface\n * to the index.\n *\n * Usually instances of lunr.Index will not be created using this constructor, instead\n * lunr.Builder should be used to construct new indexes, or lunr.Index.load should be\n * used to load previously built and serialized indexes.\n *\n * @constructor\n * @param {Object} attrs - The attributes of the built search index.\n * @param {Object} attrs.invertedIndex - An index of term/field to document reference.\n * @param {Object} attrs.fieldVectors - Field vectors\n * @param {lunr.TokenSet} attrs.tokenSet - An set of all corpus tokens.\n * @param {string[]} attrs.fields - The names of indexed document fields.\n * @param {lunr.Pipeline} attrs.pipeline - The pipeline to use for search terms.\n */\nlunr.Index = function (attrs) {\n this.invertedIndex = attrs.invertedIndex\n this.fieldVectors = attrs.fieldVectors\n this.tokenSet = attrs.tokenSet\n this.fields = attrs.fields\n this.pipeline = attrs.pipeline\n}\n\n/**\n * A result contains details of a document matching a search query.\n * @typedef {Object} lunr.Index~Result\n * @property {string} ref - The reference of the document this result represents.\n * @property {number} score - A number between 0 and 1 representing how similar this document is to the query.\n * @property {lunr.MatchData} matchData - Contains metadata about this match including which term(s) caused the match.\n */\n\n/**\n * Although lunr provides the ability to create queries using lunr.Query, it also provides a simple\n * query language which itself is parsed into an instance of lunr.Query.\n *\n * For programmatically building queries it is advised to directly use lunr.Query, the query language\n * is best used for human entered text rather than program generated text.\n *\n * At its simplest queries can just be a single term, e.g. `hello`, multiple terms are also supported\n * and will be combined with OR, e.g `hello world` will match documents that contain either 'hello'\n * or 'world', though those that contain both will rank higher in the results.\n *\n * Wildcards can be included in terms to match one or more unspecified characters, these wildcards can\n * be inserted anywhere within the term, and more than one wildcard can exist in a single term. Adding\n * wildcards will increase the number of documents that will be found but can also have a negative\n * impact on query performance, especially with wildcards at the beginning of a term.\n *\n * Terms can be restricted to specific fields, e.g. `title:hello`, only documents with the term\n * hello in the title field will match this query. Using a field not present in the index will lead\n * to an error being thrown.\n *\n * Modifiers can also be added to terms, lunr supports edit distance and boost modifiers on terms. A term\n * boost will make documents matching that term score higher, e.g. `foo^5`. Edit distance is also supported\n * to provide fuzzy matching, e.g. 'hello~2' will match documents with hello with an edit distance of 2.\n * Avoid large values for edit distance to improve query performance.\n *\n * Each term also supports a presence modifier. By default a term's presence in document is optional, however\n * this can be changed to either required or prohibited. For a term's presence to be required in a document the\n * term should be prefixed with a '+', e.g. `+foo bar` is a search for documents that must contain 'foo' and\n * optionally contain 'bar'. Conversely a leading '-' sets the terms presence to prohibited, i.e. it must not\n * appear in a document, e.g. `-foo bar` is a search for documents that do not contain 'foo' but may contain 'bar'.\n *\n * To escape special characters the backslash character '\\' can be used, this allows searches to include\n * characters that would normally be considered modifiers, e.g. `foo\\~2` will search for a term \"foo~2\" instead\n * of attempting to apply a boost of 2 to the search term \"foo\".\n *\n * @typedef {string} lunr.Index~QueryString\n * @example Simple single term query\n * hello\n * @example Multiple term query\n * hello world\n * @example term scoped to a field\n * title:hello\n * @example term with a boost of 10\n * hello^10\n * @example term with an edit distance of 2\n * hello~2\n * @example terms with presence modifiers\n * -foo +bar baz\n */\n\n/**\n * Performs a search against the index using lunr query syntax.\n *\n * Results will be returned sorted by their score, the most relevant results\n * will be returned first. For details on how the score is calculated, please see\n * the {@link https://lunrjs.com/guides/searching.html#scoring|guide}.\n *\n * For more programmatic querying use lunr.Index#query.\n *\n * @param {lunr.Index~QueryString} queryString - A string containing a lunr query.\n * @throws {lunr.QueryParseError} If the passed query string cannot be parsed.\n * @returns {lunr.Index~Result[]}\n */\nlunr.Index.prototype.search = function (queryString) {\n return this.query(function (query) {\n var parser = new lunr.QueryParser(queryString, query)\n parser.parse()\n })\n}\n\n/**\n * A query builder callback provides a query object to be used to express\n * the query to perform on the index.\n *\n * @callback lunr.Index~queryBuilder\n * @param {lunr.Query} query - The query object to build up.\n * @this lunr.Query\n */\n\n/**\n * Performs a query against the index using the yielded lunr.Query object.\n *\n * If performing programmatic queries against the index, this method is preferred\n * over lunr.Index#search so as to avoid the additional query parsing overhead.\n *\n * A query object is yielded to the supplied function which should be used to\n * express the query to be run against the index.\n *\n * Note that although this function takes a callback parameter it is _not_ an\n * asynchronous operation, the callback is just yielded a query object to be\n * customized.\n *\n * @param {lunr.Index~queryBuilder} fn - A function that is used to build the query.\n * @returns {lunr.Index~Result[]}\n */\nlunr.Index.prototype.query = function (fn) {\n // for each query clause\n // * process terms\n // * expand terms from token set\n // * find matching documents and metadata\n // * get document vectors\n // * score documents\n\n var query = new lunr.Query(this.fields),\n matchingFields = Object.create(null),\n queryVectors = Object.create(null),\n termFieldCache = Object.create(null),\n requiredMatches = Object.create(null),\n prohibitedMatches = Object.create(null)\n\n /*\n * To support field level boosts a query vector is created per\n * field. An empty vector is eagerly created to support negated\n * queries.\n */\n for (var i = 0; i < this.fields.length; i++) {\n queryVectors[this.fields[i]] = new lunr.Vector\n }\n\n fn.call(query, query)\n\n for (var i = 0; i < query.clauses.length; i++) {\n /*\n * Unless the pipeline has been disabled for this term, which is\n * the case for terms with wildcards, we need to pass the clause\n * term through the search pipeline. A pipeline returns an array\n * of processed terms. Pipeline functions may expand the passed\n * term, which means we may end up performing multiple index lookups\n * for a single query term.\n */\n var clause = query.clauses[i],\n terms = null,\n clauseMatches = lunr.Set.complete\n\n if (clause.usePipeline) {\n terms = this.pipeline.runString(clause.term, {\n fields: clause.fields\n })\n } else {\n terms = [clause.term]\n }\n\n for (var m = 0; m < terms.length; m++) {\n var term = terms[m]\n\n /*\n * Each term returned from the pipeline needs to use the same query\n * clause object, e.g. the same boost and or edit distance. The\n * simplest way to do this is to re-use the clause object but mutate\n * its term property.\n */\n clause.term = term\n\n /*\n * From the term in the clause we create a token set which will then\n * be used to intersect the indexes token set to get a list of terms\n * to lookup in the inverted index\n */\n var termTokenSet = lunr.TokenSet.fromClause(clause),\n expandedTerms = this.tokenSet.intersect(termTokenSet).toArray()\n\n /*\n * If a term marked as required does not exist in the tokenSet it is\n * impossible for the search to return any matches. We set all the field\n * scoped required matches set to empty and stop examining any further\n * clauses.\n */\n if (expandedTerms.length === 0 && clause.presence === lunr.Query.presence.REQUIRED) {\n for (var k = 0; k < clause.fields.length; k++) {\n var field = clause.fields[k]\n requiredMatches[field] = lunr.Set.empty\n }\n\n break\n }\n\n for (var j = 0; j < expandedTerms.length; j++) {\n /*\n * For each term get the posting and termIndex, this is required for\n * building the query vector.\n */\n var expandedTerm = expandedTerms[j],\n posting = this.invertedIndex[expandedTerm],\n termIndex = posting._index\n\n for (var k = 0; k < clause.fields.length; k++) {\n /*\n * For each field that this query term is scoped by (by default\n * all fields are in scope) we need to get all the document refs\n * that have this term in that field.\n *\n * The posting is the entry in the invertedIndex for the matching\n * term from above.\n */\n var field = clause.fields[k],\n fieldPosting = posting[field],\n matchingDocumentRefs = Object.keys(fieldPosting),\n termField = expandedTerm + \"/\" + field,\n matchingDocumentsSet = new lunr.Set(matchingDocumentRefs)\n\n /*\n * if the presence of this term is required ensure that the matching\n * documents are added to the set of required matches for this clause.\n *\n */\n if (clause.presence == lunr.Query.presence.REQUIRED) {\n clauseMatches = clauseMatches.union(matchingDocumentsSet)\n\n if (requiredMatches[field] === undefined) {\n requiredMatches[field] = lunr.Set.complete\n }\n }\n\n /*\n * if the presence of this term is prohibited ensure that the matching\n * documents are added to the set of prohibited matches for this field,\n * creating that set if it does not yet exist.\n */\n if (clause.presence == lunr.Query.presence.PROHIBITED) {\n if (prohibitedMatches[field] === undefined) {\n prohibitedMatches[field] = lunr.Set.empty\n }\n\n prohibitedMatches[field] = prohibitedMatches[field].union(matchingDocumentsSet)\n\n /*\n * Prohibited matches should not be part of the query vector used for\n * similarity scoring and no metadata should be extracted so we continue\n * to the next field\n */\n continue\n }\n\n /*\n * The query field vector is populated using the termIndex found for\n * the term and a unit value with the appropriate boost applied.\n * Using upsert because there could already be an entry in the vector\n * for the term we are working with. In that case we just add the scores\n * together.\n */\n queryVectors[field].upsert(termIndex, clause.boost, function (a, b) { return a + b })\n\n /**\n * If we've already seen this term, field combo then we've already collected\n * the matching documents and metadata, no need to go through all that again\n */\n if (termFieldCache[termField]) {\n continue\n }\n\n for (var l = 0; l < matchingDocumentRefs.length; l++) {\n /*\n * All metadata for this term/field/document triple\n * are then extracted and collected into an instance\n * of lunr.MatchData ready to be returned in the query\n * results\n */\n var matchingDocumentRef = matchingDocumentRefs[l],\n matchingFieldRef = new lunr.FieldRef (matchingDocumentRef, field),\n metadata = fieldPosting[matchingDocumentRef],\n fieldMatch\n\n if ((fieldMatch = matchingFields[matchingFieldRef]) === undefined) {\n matchingFields[matchingFieldRef] = new lunr.MatchData (expandedTerm, field, metadata)\n } else {\n fieldMatch.add(expandedTerm, field, metadata)\n }\n\n }\n\n termFieldCache[termField] = true\n }\n }\n }\n\n /**\n * If the presence was required we need to update the requiredMatches field sets.\n * We do this after all fields for the term have collected their matches because\n * the clause terms presence is required in _any_ of the fields not _all_ of the\n * fields.\n */\n if (clause.presence === lunr.Query.presence.REQUIRED) {\n for (var k = 0; k < clause.fields.length; k++) {\n var field = clause.fields[k]\n requiredMatches[field] = requiredMatches[field].intersect(clauseMatches)\n }\n }\n }\n\n /**\n * Need to combine the field scoped required and prohibited\n * matching documents into a global set of required and prohibited\n * matches\n */\n var allRequiredMatches = lunr.Set.complete,\n allProhibitedMatches = lunr.Set.empty\n\n for (var i = 0; i < this.fields.length; i++) {\n var field = this.fields[i]\n\n if (requiredMatches[field]) {\n allRequiredMatches = allRequiredMatches.intersect(requiredMatches[field])\n }\n\n if (prohibitedMatches[field]) {\n allProhibitedMatches = allProhibitedMatches.union(prohibitedMatches[field])\n }\n }\n\n var matchingFieldRefs = Object.keys(matchingFields),\n results = [],\n matches = Object.create(null)\n\n /*\n * If the query is negated (contains only prohibited terms)\n * we need to get _all_ fieldRefs currently existing in the\n * index. This is only done when we know that the query is\n * entirely prohibited terms to avoid any cost of getting all\n * fieldRefs unnecessarily.\n *\n * Additionally, blank MatchData must be created to correctly\n * populate the results.\n */\n if (query.isNegated()) {\n matchingFieldRefs = Object.keys(this.fieldVectors)\n\n for (var i = 0; i < matchingFieldRefs.length; i++) {\n var matchingFieldRef = matchingFieldRefs[i]\n var fieldRef = lunr.FieldRef.fromString(matchingFieldRef)\n matchingFields[matchingFieldRef] = new lunr.MatchData\n }\n }\n\n for (var i = 0; i < matchingFieldRefs.length; i++) {\n /*\n * Currently we have document fields that match the query, but we\n * need to return documents. The matchData and scores are combined\n * from multiple fields belonging to the same document.\n *\n * Scores are calculated by field, using the query vectors created\n * above, and combined into a final document score using addition.\n */\n var fieldRef = lunr.FieldRef.fromString(matchingFieldRefs[i]),\n docRef = fieldRef.docRef\n\n if (!allRequiredMatches.contains(docRef)) {\n continue\n }\n\n if (allProhibitedMatches.contains(docRef)) {\n continue\n }\n\n var fieldVector = this.fieldVectors[fieldRef],\n score = queryVectors[fieldRef.fieldName].similarity(fieldVector),\n docMatch\n\n if ((docMatch = matches[docRef]) !== undefined) {\n docMatch.score += score\n docMatch.matchData.combine(matchingFields[fieldRef])\n } else {\n var match = {\n ref: docRef,\n score: score,\n matchData: matchingFields[fieldRef]\n }\n matches[docRef] = match\n results.push(match)\n }\n }\n\n /*\n * Sort the results objects by score, highest first.\n */\n return results.sort(function (a, b) {\n return b.score - a.score\n })\n}\n\n/**\n * Prepares the index for JSON serialization.\n *\n * The schema for this JSON blob will be described in a\n * separate JSON schema file.\n *\n * @returns {Object}\n */\nlunr.Index.prototype.toJSON = function () {\n var invertedIndex = Object.keys(this.invertedIndex)\n .sort()\n .map(function (term) {\n return [term, this.invertedIndex[term]]\n }, this)\n\n var fieldVectors = Object.keys(this.fieldVectors)\n .map(function (ref) {\n return [ref, this.fieldVectors[ref].toJSON()]\n }, this)\n\n return {\n version: lunr.version,\n fields: this.fields,\n fieldVectors: fieldVectors,\n invertedIndex: invertedIndex,\n pipeline: this.pipeline.toJSON()\n }\n}\n\n/**\n * Loads a previously serialized lunr.Index\n *\n * @param {Object} serializedIndex - A previously serialized lunr.Index\n * @returns {lunr.Index}\n */\nlunr.Index.load = function (serializedIndex) {\n var attrs = {},\n fieldVectors = {},\n serializedVectors = serializedIndex.fieldVectors,\n invertedIndex = Object.create(null),\n serializedInvertedIndex = serializedIndex.invertedIndex,\n tokenSetBuilder = new lunr.TokenSet.Builder,\n pipeline = lunr.Pipeline.load(serializedIndex.pipeline)\n\n if (serializedIndex.version != lunr.version) {\n lunr.utils.warn(\"Version mismatch when loading serialised index. Current version of lunr '\" + lunr.version + \"' does not match serialized index '\" + serializedIndex.version + \"'\")\n }\n\n for (var i = 0; i < serializedVectors.length; i++) {\n var tuple = serializedVectors[i],\n ref = tuple[0],\n elements = tuple[1]\n\n fieldVectors[ref] = new lunr.Vector(elements)\n }\n\n for (var i = 0; i < serializedInvertedIndex.length; i++) {\n var tuple = serializedInvertedIndex[i],\n term = tuple[0],\n posting = tuple[1]\n\n tokenSetBuilder.insert(term)\n invertedIndex[term] = posting\n }\n\n tokenSetBuilder.finish()\n\n attrs.fields = serializedIndex.fields\n\n attrs.fieldVectors = fieldVectors\n attrs.invertedIndex = invertedIndex\n attrs.tokenSet = tokenSetBuilder.root\n attrs.pipeline = pipeline\n\n return new lunr.Index(attrs)\n}\n/*!\n * lunr.Builder\n * Copyright (C) 2019 Oliver Nightingale\n */\n\n/**\n * lunr.Builder performs indexing on a set of documents and\n * returns instances of lunr.Index ready for querying.\n *\n * All configuration of the index is done via the builder, the\n * fields to index, the document reference, the text processing\n * pipeline and document scoring parameters are all set on the\n * builder before indexing.\n *\n * @constructor\n * @property {string} _ref - Internal reference to the document reference field.\n * @property {string[]} _fields - Internal reference to the document fields to index.\n * @property {object} invertedIndex - The inverted index maps terms to document fields.\n * @property {object} documentTermFrequencies - Keeps track of document term frequencies.\n * @property {object} documentLengths - Keeps track of the length of documents added to the index.\n * @property {lunr.tokenizer} tokenizer - Function for splitting strings into tokens for indexing.\n * @property {lunr.Pipeline} pipeline - The pipeline performs text processing on tokens before indexing.\n * @property {lunr.Pipeline} searchPipeline - A pipeline for processing search terms before querying the index.\n * @property {number} documentCount - Keeps track of the total number of documents indexed.\n * @property {number} _b - A parameter to control field length normalization, setting this to 0 disabled normalization, 1 fully normalizes field lengths, the default value is 0.75.\n * @property {number} _k1 - A parameter to control how quickly an increase in term frequency results in term frequency saturation, the default value is 1.2.\n * @property {number} termIndex - A counter incremented for each unique term, used to identify a terms position in the vector space.\n * @property {array} metadataWhitelist - A list of metadata keys that have been whitelisted for entry in the index.\n */\nlunr.Builder = function () {\n this._ref = \"id\"\n this._fields = Object.create(null)\n this._documents = Object.create(null)\n this.invertedIndex = Object.create(null)\n this.fieldTermFrequencies = {}\n this.fieldLengths = {}\n this.tokenizer = lunr.tokenizer\n this.pipeline = new lunr.Pipeline\n this.searchPipeline = new lunr.Pipeline\n this.documentCount = 0\n this._b = 0.75\n this._k1 = 1.2\n this.termIndex = 0\n this.metadataWhitelist = []\n}\n\n/**\n * Sets the document field used as the document reference. Every document must have this field.\n * The type of this field in the document should be a string, if it is not a string it will be\n * coerced into a string by calling toString.\n *\n * The default ref is 'id'.\n *\n * The ref should _not_ be changed during indexing, it should be set before any documents are\n * added to the index. Changing it during indexing can lead to inconsistent results.\n *\n * @param {string} ref - The name of the reference field in the document.\n */\nlunr.Builder.prototype.ref = function (ref) {\n this._ref = ref\n}\n\n/**\n * A function that is used to extract a field from a document.\n *\n * Lunr expects a field to be at the top level of a document, if however the field\n * is deeply nested within a document an extractor function can be used to extract\n * the right field for indexing.\n *\n * @callback fieldExtractor\n * @param {object} doc - The document being added to the index.\n * @returns {?(string|object|object[])} obj - The object that will be indexed for this field.\n * @example Extracting a nested field\n * function (doc) { return doc.nested.field }\n */\n\n/**\n * Adds a field to the list of document fields that will be indexed. Every document being\n * indexed should have this field. Null values for this field in indexed documents will\n * not cause errors but will limit the chance of that document being retrieved by searches.\n *\n * All fields should be added before adding documents to the index. Adding fields after\n * a document has been indexed will have no effect on already indexed documents.\n *\n * Fields can be boosted at build time. This allows terms within that field to have more\n * importance when ranking search results. Use a field boost to specify that matches within\n * one field are more important than other fields.\n *\n * @param {string} fieldName - The name of a field to index in all documents.\n * @param {object} attributes - Optional attributes associated with this field.\n * @param {number} [attributes.boost=1] - Boost applied to all terms within this field.\n * @param {fieldExtractor} [attributes.extractor] - Function to extract a field from a document.\n * @throws {RangeError} fieldName cannot contain unsupported characters '/'\n */\nlunr.Builder.prototype.field = function (fieldName, attributes) {\n if (/\\//.test(fieldName)) {\n throw new RangeError (\"Field '\" + fieldName + \"' contains illegal character '/'\")\n }\n\n this._fields[fieldName] = attributes || {}\n}\n\n/**\n * A parameter to tune the amount of field length normalisation that is applied when\n * calculating relevance scores. A value of 0 will completely disable any normalisation\n * and a value of 1 will fully normalise field lengths. The default is 0.75. Values of b\n * will be clamped to the range 0 - 1.\n *\n * @param {number} number - The value to set for this tuning parameter.\n */\nlunr.Builder.prototype.b = function (number) {\n if (number < 0) {\n this._b = 0\n } else if (number > 1) {\n this._b = 1\n } else {\n this._b = number\n }\n}\n\n/**\n * A parameter that controls the speed at which a rise in term frequency results in term\n * frequency saturation. The default value is 1.2. Setting this to a higher value will give\n * slower saturation levels, a lower value will result in quicker saturation.\n *\n * @param {number} number - The value to set for this tuning parameter.\n */\nlunr.Builder.prototype.k1 = function (number) {\n this._k1 = number\n}\n\n/**\n * Adds a document to the index.\n *\n * Before adding fields to the index the index should have been fully setup, with the document\n * ref and all fields to index already having been specified.\n *\n * The document must have a field name as specified by the ref (by default this is 'id') and\n * it should have all fields defined for indexing, though null or undefined values will not\n * cause errors.\n *\n * Entire documents can be boosted at build time. Applying a boost to a document indicates that\n * this document should rank higher in search results than other documents.\n *\n * @param {object} doc - The document to add to the index.\n * @param {object} attributes - Optional attributes associated with this document.\n * @param {number} [attributes.boost=1] - Boost applied to all terms within this document.\n */\nlunr.Builder.prototype.add = function (doc, attributes) {\n var docRef = doc[this._ref],\n fields = Object.keys(this._fields)\n\n this._documents[docRef] = attributes || {}\n this.documentCount += 1\n\n for (var i = 0; i < fields.length; i++) {\n var fieldName = fields[i],\n extractor = this._fields[fieldName].extractor,\n field = extractor ? extractor(doc) : doc[fieldName],\n tokens = this.tokenizer(field, {\n fields: [fieldName]\n }),\n terms = this.pipeline.run(tokens),\n fieldRef = new lunr.FieldRef (docRef, fieldName),\n fieldTerms = Object.create(null)\n\n this.fieldTermFrequencies[fieldRef] = fieldTerms\n this.fieldLengths[fieldRef] = 0\n\n // store the length of this field for this document\n this.fieldLengths[fieldRef] += terms.length\n\n // calculate term frequencies for this field\n for (var j = 0; j < terms.length; j++) {\n var term = terms[j]\n\n if (fieldTerms[term] == undefined) {\n fieldTerms[term] = 0\n }\n\n fieldTerms[term] += 1\n\n // add to inverted index\n // create an initial posting if one doesn't exist\n if (this.invertedIndex[term] == undefined) {\n var posting = Object.create(null)\n posting[\"_index\"] = this.termIndex\n this.termIndex += 1\n\n for (var k = 0; k < fields.length; k++) {\n posting[fields[k]] = Object.create(null)\n }\n\n this.invertedIndex[term] = posting\n }\n\n // add an entry for this term/fieldName/docRef to the invertedIndex\n if (this.invertedIndex[term][fieldName][docRef] == undefined) {\n this.invertedIndex[term][fieldName][docRef] = Object.create(null)\n }\n\n // store all whitelisted metadata about this token in the\n // inverted index\n for (var l = 0; l < this.metadataWhitelist.length; l++) {\n var metadataKey = this.metadataWhitelist[l],\n metadata = term.metadata[metadataKey]\n\n if (this.invertedIndex[term][fieldName][docRef][metadataKey] == undefined) {\n this.invertedIndex[term][fieldName][docRef][metadataKey] = []\n }\n\n this.invertedIndex[term][fieldName][docRef][metadataKey].push(metadata)\n }\n }\n\n }\n}\n\n/**\n * Calculates the average document length for this index\n *\n * @private\n */\nlunr.Builder.prototype.calculateAverageFieldLengths = function () {\n\n var fieldRefs = Object.keys(this.fieldLengths),\n numberOfFields = fieldRefs.length,\n accumulator = {},\n documentsWithField = {}\n\n for (var i = 0; i < numberOfFields; i++) {\n var fieldRef = lunr.FieldRef.fromString(fieldRefs[i]),\n field = fieldRef.fieldName\n\n documentsWithField[field] || (documentsWithField[field] = 0)\n documentsWithField[field] += 1\n\n accumulator[field] || (accumulator[field] = 0)\n accumulator[field] += this.fieldLengths[fieldRef]\n }\n\n var fields = Object.keys(this._fields)\n\n for (var i = 0; i < fields.length; i++) {\n var fieldName = fields[i]\n accumulator[fieldName] = accumulator[fieldName] / documentsWithField[fieldName]\n }\n\n this.averageFieldLength = accumulator\n}\n\n/**\n * Builds a vector space model of every document using lunr.Vector\n *\n * @private\n */\nlunr.Builder.prototype.createFieldVectors = function () {\n var fieldVectors = {},\n fieldRefs = Object.keys(this.fieldTermFrequencies),\n fieldRefsLength = fieldRefs.length,\n termIdfCache = Object.create(null)\n\n for (var i = 0; i < fieldRefsLength; i++) {\n var fieldRef = lunr.FieldRef.fromString(fieldRefs[i]),\n fieldName = fieldRef.fieldName,\n fieldLength = this.fieldLengths[fieldRef],\n fieldVector = new lunr.Vector,\n termFrequencies = this.fieldTermFrequencies[fieldRef],\n terms = Object.keys(termFrequencies),\n termsLength = terms.length\n\n\n var fieldBoost = this._fields[fieldName].boost || 1,\n docBoost = this._documents[fieldRef.docRef].boost || 1\n\n for (var j = 0; j < termsLength; j++) {\n var term = terms[j],\n tf = termFrequencies[term],\n termIndex = this.invertedIndex[term]._index,\n idf, score, scoreWithPrecision\n\n if (termIdfCache[term] === undefined) {\n idf = lunr.idf(this.invertedIndex[term], this.documentCount)\n termIdfCache[term] = idf\n } else {\n idf = termIdfCache[term]\n }\n\n score = idf * ((this._k1 + 1) * tf) / (this._k1 * (1 - this._b + this._b * (fieldLength / this.averageFieldLength[fieldName])) + tf)\n score *= fieldBoost\n score *= docBoost\n scoreWithPrecision = Math.round(score * 1000) / 1000\n // Converts 1.23456789 to 1.234.\n // Reducing the precision so that the vectors take up less\n // space when serialised. Doing it now so that they behave\n // the same before and after serialisation. Also, this is\n // the fastest approach to reducing a number's precision in\n // JavaScript.\n\n fieldVector.insert(termIndex, scoreWithPrecision)\n }\n\n fieldVectors[fieldRef] = fieldVector\n }\n\n this.fieldVectors = fieldVectors\n}\n\n/**\n * Creates a token set of all tokens in the index using lunr.TokenSet\n *\n * @private\n */\nlunr.Builder.prototype.createTokenSet = function () {\n this.tokenSet = lunr.TokenSet.fromArray(\n Object.keys(this.invertedIndex).sort()\n )\n}\n\n/**\n * Builds the index, creating an instance of lunr.Index.\n *\n * This completes the indexing process and should only be called\n * once all documents have been added to the index.\n *\n * @returns {lunr.Index}\n */\nlunr.Builder.prototype.build = function () {\n this.calculateAverageFieldLengths()\n this.createFieldVectors()\n this.createTokenSet()\n\n return new lunr.Index({\n invertedIndex: this.invertedIndex,\n fieldVectors: this.fieldVectors,\n tokenSet: this.tokenSet,\n fields: Object.keys(this._fields),\n pipeline: this.searchPipeline\n })\n}\n\n/**\n * Applies a plugin to the index builder.\n *\n * A plugin is a function that is called with the index builder as its context.\n * Plugins can be used to customise or extend the behaviour of the index\n * in some way. A plugin is just a function, that encapsulated the custom\n * behaviour that should be applied when building the index.\n *\n * The plugin function will be called with the index builder as its argument, additional\n * arguments can also be passed when calling use. The function will be called\n * with the index builder as its context.\n *\n * @param {Function} plugin The plugin to apply.\n */\nlunr.Builder.prototype.use = function (fn) {\n var args = Array.prototype.slice.call(arguments, 1)\n args.unshift(this)\n fn.apply(this, args)\n}\n/**\n * Contains and collects metadata about a matching document.\n * A single instance of lunr.MatchData is returned as part of every\n * lunr.Index~Result.\n *\n * @constructor\n * @param {string} term - The term this match data is associated with\n * @param {string} field - The field in which the term was found\n * @param {object} metadata - The metadata recorded about this term in this field\n * @property {object} metadata - A cloned collection of metadata associated with this document.\n * @see {@link lunr.Index~Result}\n */\nlunr.MatchData = function (term, field, metadata) {\n var clonedMetadata = Object.create(null),\n metadataKeys = Object.keys(metadata || {})\n\n // Cloning the metadata to prevent the original\n // being mutated during match data combination.\n // Metadata is kept in an array within the inverted\n // index so cloning the data can be done with\n // Array#slice\n for (var i = 0; i < metadataKeys.length; i++) {\n var key = metadataKeys[i]\n clonedMetadata[key] = metadata[key].slice()\n }\n\n this.metadata = Object.create(null)\n\n if (term !== undefined) {\n this.metadata[term] = Object.create(null)\n this.metadata[term][field] = clonedMetadata\n }\n}\n\n/**\n * An instance of lunr.MatchData will be created for every term that matches a\n * document. However only one instance is required in a lunr.Index~Result. This\n * method combines metadata from another instance of lunr.MatchData with this\n * objects metadata.\n *\n * @param {lunr.MatchData} otherMatchData - Another instance of match data to merge with this one.\n * @see {@link lunr.Index~Result}\n */\nlunr.MatchData.prototype.combine = function (otherMatchData) {\n var terms = Object.keys(otherMatchData.metadata)\n\n for (var i = 0; i < terms.length; i++) {\n var term = terms[i],\n fields = Object.keys(otherMatchData.metadata[term])\n\n if (this.metadata[term] == undefined) {\n this.metadata[term] = Object.create(null)\n }\n\n for (var j = 0; j < fields.length; j++) {\n var field = fields[j],\n keys = Object.keys(otherMatchData.metadata[term][field])\n\n if (this.metadata[term][field] == undefined) {\n this.metadata[term][field] = Object.create(null)\n }\n\n for (var k = 0; k < keys.length; k++) {\n var key = keys[k]\n\n if (this.metadata[term][field][key] == undefined) {\n this.metadata[term][field][key] = otherMatchData.metadata[term][field][key]\n } else {\n this.metadata[term][field][key] = this.metadata[term][field][key].concat(otherMatchData.metadata[term][field][key])\n }\n\n }\n }\n }\n}\n\n/**\n * Add metadata for a term/field pair to this instance of match data.\n *\n * @param {string} term - The term this match data is associated with\n * @param {string} field - The field in which the term was found\n * @param {object} metadata - The metadata recorded about this term in this field\n */\nlunr.MatchData.prototype.add = function (term, field, metadata) {\n if (!(term in this.metadata)) {\n this.metadata[term] = Object.create(null)\n this.metadata[term][field] = metadata\n return\n }\n\n if (!(field in this.metadata[term])) {\n this.metadata[term][field] = metadata\n return\n }\n\n var metadataKeys = Object.keys(metadata)\n\n for (var i = 0; i < metadataKeys.length; i++) {\n var key = metadataKeys[i]\n\n if (key in this.metadata[term][field]) {\n this.metadata[term][field][key] = this.metadata[term][field][key].concat(metadata[key])\n } else {\n this.metadata[term][field][key] = metadata[key]\n }\n }\n}\n/**\n * A lunr.Query provides a programmatic way of defining queries to be performed\n * against a {@link lunr.Index}.\n *\n * Prefer constructing a lunr.Query using the {@link lunr.Index#query} method\n * so the query object is pre-initialized with the right index fields.\n *\n * @constructor\n * @property {lunr.Query~Clause[]} clauses - An array of query clauses.\n * @property {string[]} allFields - An array of all available fields in a lunr.Index.\n */\nlunr.Query = function (allFields) {\n this.clauses = []\n this.allFields = allFields\n}\n\n/**\n * Constants for indicating what kind of automatic wildcard insertion will be used when constructing a query clause.\n *\n * This allows wildcards to be added to the beginning and end of a term without having to manually do any string\n * concatenation.\n *\n * The wildcard constants can be bitwise combined to select both leading and trailing wildcards.\n *\n * @constant\n * @default\n * @property {number} wildcard.NONE - The term will have no wildcards inserted, this is the default behaviour\n * @property {number} wildcard.LEADING - Prepend the term with a wildcard, unless a leading wildcard already exists\n * @property {number} wildcard.TRAILING - Append a wildcard to the term, unless a trailing wildcard already exists\n * @see lunr.Query~Clause\n * @see lunr.Query#clause\n * @see lunr.Query#term\n * @example query term with trailing wildcard\n * query.term('foo', { wildcard: lunr.Query.wildcard.TRAILING })\n * @example query term with leading and trailing wildcard\n * query.term('foo', {\n * wildcard: lunr.Query.wildcard.LEADING | lunr.Query.wildcard.TRAILING\n * })\n */\n\nlunr.Query.wildcard = new String (\"*\")\nlunr.Query.wildcard.NONE = 0\nlunr.Query.wildcard.LEADING = 1\nlunr.Query.wildcard.TRAILING = 2\n\n/**\n * Constants for indicating what kind of presence a term must have in matching documents.\n *\n * @constant\n * @enum {number}\n * @see lunr.Query~Clause\n * @see lunr.Query#clause\n * @see lunr.Query#term\n * @example query term with required presence\n * query.term('foo', { presence: lunr.Query.presence.REQUIRED })\n */\nlunr.Query.presence = {\n /**\n * Term's presence in a document is optional, this is the default value.\n */\n OPTIONAL: 1,\n\n /**\n * Term's presence in a document is required, documents that do not contain\n * this term will not be returned.\n */\n REQUIRED: 2,\n\n /**\n * Term's presence in a document is prohibited, documents that do contain\n * this term will not be returned.\n */\n PROHIBITED: 3\n}\n\n/**\n * A single clause in a {@link lunr.Query} contains a term and details on how to\n * match that term against a {@link lunr.Index}.\n *\n * @typedef {Object} lunr.Query~Clause\n * @property {string[]} fields - The fields in an index this clause should be matched against.\n * @property {number} [boost=1] - Any boost that should be applied when matching this clause.\n * @property {number} [editDistance] - Whether the term should have fuzzy matching applied, and how fuzzy the match should be.\n * @property {boolean} [usePipeline] - Whether the term should be passed through the search pipeline.\n * @property {number} [wildcard=lunr.Query.wildcard.NONE] - Whether the term should have wildcards appended or prepended.\n * @property {number} [presence=lunr.Query.presence.OPTIONAL] - The terms presence in any matching documents.\n */\n\n/**\n * Adds a {@link lunr.Query~Clause} to this query.\n *\n * Unless the clause contains the fields to be matched all fields will be matched. In addition\n * a default boost of 1 is applied to the clause.\n *\n * @param {lunr.Query~Clause} clause - The clause to add to this query.\n * @see lunr.Query~Clause\n * @returns {lunr.Query}\n */\nlunr.Query.prototype.clause = function (clause) {\n if (!('fields' in clause)) {\n clause.fields = this.allFields\n }\n\n if (!('boost' in clause)) {\n clause.boost = 1\n }\n\n if (!('usePipeline' in clause)) {\n clause.usePipeline = true\n }\n\n if (!('wildcard' in clause)) {\n clause.wildcard = lunr.Query.wildcard.NONE\n }\n\n if ((clause.wildcard & lunr.Query.wildcard.LEADING) && (clause.term.charAt(0) != lunr.Query.wildcard)) {\n clause.term = \"*\" + clause.term\n }\n\n if ((clause.wildcard & lunr.Query.wildcard.TRAILING) && (clause.term.slice(-1) != lunr.Query.wildcard)) {\n clause.term = \"\" + clause.term + \"*\"\n }\n\n if (!('presence' in clause)) {\n clause.presence = lunr.Query.presence.OPTIONAL\n }\n\n this.clauses.push(clause)\n\n return this\n}\n\n/**\n * A negated query is one in which every clause has a presence of\n * prohibited. These queries require some special processing to return\n * the expected results.\n *\n * @returns boolean\n */\nlunr.Query.prototype.isNegated = function () {\n for (var i = 0; i < this.clauses.length; i++) {\n if (this.clauses[i].presence != lunr.Query.presence.PROHIBITED) {\n return false\n }\n }\n\n return true\n}\n\n/**\n * Adds a term to the current query, under the covers this will create a {@link lunr.Query~Clause}\n * to the list of clauses that make up this query.\n *\n * The term is used as is, i.e. no tokenization will be performed by this method. Instead conversion\n * to a token or token-like string should be done before calling this method.\n *\n * The term will be converted to a string by calling `toString`. Multiple terms can be passed as an\n * array, each term in the array will share the same options.\n *\n * @param {object|object[]} term - The term(s) to add to the query.\n * @param {object} [options] - Any additional properties to add to the query clause.\n * @returns {lunr.Query}\n * @see lunr.Query#clause\n * @see lunr.Query~Clause\n * @example adding a single term to a query\n * query.term(\"foo\")\n * @example adding a single term to a query and specifying search fields, term boost and automatic trailing wildcard\n * query.term(\"foo\", {\n * fields: [\"title\"],\n * boost: 10,\n * wildcard: lunr.Query.wildcard.TRAILING\n * })\n * @example using lunr.tokenizer to convert a string to tokens before using them as terms\n * query.term(lunr.tokenizer(\"foo bar\"))\n */\nlunr.Query.prototype.term = function (term, options) {\n if (Array.isArray(term)) {\n term.forEach(function (t) { this.term(t, lunr.utils.clone(options)) }, this)\n return this\n }\n\n var clause = options || {}\n clause.term = term.toString()\n\n this.clause(clause)\n\n return this\n}\nlunr.QueryParseError = function (message, start, end) {\n this.name = \"QueryParseError\"\n this.message = message\n this.start = start\n this.end = end\n}\n\nlunr.QueryParseError.prototype = new Error\nlunr.QueryLexer = function (str) {\n this.lexemes = []\n this.str = str\n this.length = str.length\n this.pos = 0\n this.start = 0\n this.escapeCharPositions = []\n}\n\nlunr.QueryLexer.prototype.run = function () {\n var state = lunr.QueryLexer.lexText\n\n while (state) {\n state = state(this)\n }\n}\n\nlunr.QueryLexer.prototype.sliceString = function () {\n var subSlices = [],\n sliceStart = this.start,\n sliceEnd = this.pos\n\n for (var i = 0; i < this.escapeCharPositions.length; i++) {\n sliceEnd = this.escapeCharPositions[i]\n subSlices.push(this.str.slice(sliceStart, sliceEnd))\n sliceStart = sliceEnd + 1\n }\n\n subSlices.push(this.str.slice(sliceStart, this.pos))\n this.escapeCharPositions.length = 0\n\n return subSlices.join('')\n}\n\nlunr.QueryLexer.prototype.emit = function (type) {\n this.lexemes.push({\n type: type,\n str: this.sliceString(),\n start: this.start,\n end: this.pos\n })\n\n this.start = this.pos\n}\n\nlunr.QueryLexer.prototype.escapeCharacter = function () {\n this.escapeCharPositions.push(this.pos - 1)\n this.pos += 1\n}\n\nlunr.QueryLexer.prototype.next = function () {\n if (this.pos >= this.length) {\n return lunr.QueryLexer.EOS\n }\n\n var char = this.str.charAt(this.pos)\n this.pos += 1\n return char\n}\n\nlunr.QueryLexer.prototype.width = function () {\n return this.pos - this.start\n}\n\nlunr.QueryLexer.prototype.ignore = function () {\n if (this.start == this.pos) {\n this.pos += 1\n }\n\n this.start = this.pos\n}\n\nlunr.QueryLexer.prototype.backup = function () {\n this.pos -= 1\n}\n\nlunr.QueryLexer.prototype.acceptDigitRun = function () {\n var char, charCode\n\n do {\n char = this.next()\n charCode = char.charCodeAt(0)\n } while (charCode > 47 && charCode < 58)\n\n if (char != lunr.QueryLexer.EOS) {\n this.backup()\n }\n}\n\nlunr.QueryLexer.prototype.more = function () {\n return this.pos < this.length\n}\n\nlunr.QueryLexer.EOS = 'EOS'\nlunr.QueryLexer.FIELD = 'FIELD'\nlunr.QueryLexer.TERM = 'TERM'\nlunr.QueryLexer.EDIT_DISTANCE = 'EDIT_DISTANCE'\nlunr.QueryLexer.BOOST = 'BOOST'\nlunr.QueryLexer.PRESENCE = 'PRESENCE'\n\nlunr.QueryLexer.lexField = function (lexer) {\n lexer.backup()\n lexer.emit(lunr.QueryLexer.FIELD)\n lexer.ignore()\n return lunr.QueryLexer.lexText\n}\n\nlunr.QueryLexer.lexTerm = function (lexer) {\n if (lexer.width() > 1) {\n lexer.backup()\n lexer.emit(lunr.QueryLexer.TERM)\n }\n\n lexer.ignore()\n\n if (lexer.more()) {\n return lunr.QueryLexer.lexText\n }\n}\n\nlunr.QueryLexer.lexEditDistance = function (lexer) {\n lexer.ignore()\n lexer.acceptDigitRun()\n lexer.emit(lunr.QueryLexer.EDIT_DISTANCE)\n return lunr.QueryLexer.lexText\n}\n\nlunr.QueryLexer.lexBoost = function (lexer) {\n lexer.ignore()\n lexer.acceptDigitRun()\n lexer.emit(lunr.QueryLexer.BOOST)\n return lunr.QueryLexer.lexText\n}\n\nlunr.QueryLexer.lexEOS = function (lexer) {\n if (lexer.width() > 0) {\n lexer.emit(lunr.QueryLexer.TERM)\n }\n}\n\n// This matches the separator used when tokenising fields\n// within a document. These should match otherwise it is\n// not possible to search for some tokens within a document.\n//\n// It is possible for the user to change the separator on the\n// tokenizer so it _might_ clash with any other of the special\n// characters already used within the search string, e.g. :.\n//\n// This means that it is possible to change the separator in\n// such a way that makes some words unsearchable using a search\n// string.\nlunr.QueryLexer.termSeparator = lunr.tokenizer.separator\n\nlunr.QueryLexer.lexText = function (lexer) {\n while (true) {\n var char = lexer.next()\n\n if (char == lunr.QueryLexer.EOS) {\n return lunr.QueryLexer.lexEOS\n }\n\n // Escape character is '\\'\n if (char.charCodeAt(0) == 92) {\n lexer.escapeCharacter()\n continue\n }\n\n if (char == \":\") {\n return lunr.QueryLexer.lexField\n }\n\n if (char == \"~\") {\n lexer.backup()\n if (lexer.width() > 0) {\n lexer.emit(lunr.QueryLexer.TERM)\n }\n return lunr.QueryLexer.lexEditDistance\n }\n\n if (char == \"^\") {\n lexer.backup()\n if (lexer.width() > 0) {\n lexer.emit(lunr.QueryLexer.TERM)\n }\n return lunr.QueryLexer.lexBoost\n }\n\n // \"+\" indicates term presence is required\n // checking for length to ensure that only\n // leading \"+\" are considered\n if (char == \"+\" && lexer.width() === 1) {\n lexer.emit(lunr.QueryLexer.PRESENCE)\n return lunr.QueryLexer.lexText\n }\n\n // \"-\" indicates term presence is prohibited\n // checking for length to ensure that only\n // leading \"-\" are considered\n if (char == \"-\" && lexer.width() === 1) {\n lexer.emit(lunr.QueryLexer.PRESENCE)\n return lunr.QueryLexer.lexText\n }\n\n if (char.match(lunr.QueryLexer.termSeparator)) {\n return lunr.QueryLexer.lexTerm\n }\n }\n}\n\nlunr.QueryParser = function (str, query) {\n this.lexer = new lunr.QueryLexer (str)\n this.query = query\n this.currentClause = {}\n this.lexemeIdx = 0\n}\n\nlunr.QueryParser.prototype.parse = function () {\n this.lexer.run()\n this.lexemes = this.lexer.lexemes\n\n var state = lunr.QueryParser.parseClause\n\n while (state) {\n state = state(this)\n }\n\n return this.query\n}\n\nlunr.QueryParser.prototype.peekLexeme = function () {\n return this.lexemes[this.lexemeIdx]\n}\n\nlunr.QueryParser.prototype.consumeLexeme = function () {\n var lexeme = this.peekLexeme()\n this.lexemeIdx += 1\n return lexeme\n}\n\nlunr.QueryParser.prototype.nextClause = function () {\n var completedClause = this.currentClause\n this.query.clause(completedClause)\n this.currentClause = {}\n}\n\nlunr.QueryParser.parseClause = function (parser) {\n var lexeme = parser.peekLexeme()\n\n if (lexeme == undefined) {\n return\n }\n\n switch (lexeme.type) {\n case lunr.QueryLexer.PRESENCE:\n return lunr.QueryParser.parsePresence\n case lunr.QueryLexer.FIELD:\n return lunr.QueryParser.parseField\n case lunr.QueryLexer.TERM:\n return lunr.QueryParser.parseTerm\n default:\n var errorMessage = \"expected either a field or a term, found \" + lexeme.type\n\n if (lexeme.str.length >= 1) {\n errorMessage += \" with value '\" + lexeme.str + \"'\"\n }\n\n throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end)\n }\n}\n\nlunr.QueryParser.parsePresence = function (parser) {\n var lexeme = parser.consumeLexeme()\n\n if (lexeme == undefined) {\n return\n }\n\n switch (lexeme.str) {\n case \"-\":\n parser.currentClause.presence = lunr.Query.presence.PROHIBITED\n break\n case \"+\":\n parser.currentClause.presence = lunr.Query.presence.REQUIRED\n break\n default:\n var errorMessage = \"unrecognised presence operator'\" + lexeme.str + \"'\"\n throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end)\n }\n\n var nextLexeme = parser.peekLexeme()\n\n if (nextLexeme == undefined) {\n var errorMessage = \"expecting term or field, found nothing\"\n throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end)\n }\n\n switch (nextLexeme.type) {\n case lunr.QueryLexer.FIELD:\n return lunr.QueryParser.parseField\n case lunr.QueryLexer.TERM:\n return lunr.QueryParser.parseTerm\n default:\n var errorMessage = \"expecting term or field, found '\" + nextLexeme.type + \"'\"\n throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end)\n }\n}\n\nlunr.QueryParser.parseField = function (parser) {\n var lexeme = parser.consumeLexeme()\n\n if (lexeme == undefined) {\n return\n }\n\n if (parser.query.allFields.indexOf(lexeme.str) == -1) {\n var possibleFields = parser.query.allFields.map(function (f) { return \"'\" + f + \"'\" }).join(', '),\n errorMessage = \"unrecognised field '\" + lexeme.str + \"', possible fields: \" + possibleFields\n\n throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end)\n }\n\n parser.currentClause.fields = [lexeme.str]\n\n var nextLexeme = parser.peekLexeme()\n\n if (nextLexeme == undefined) {\n var errorMessage = \"expecting term, found nothing\"\n throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end)\n }\n\n switch (nextLexeme.type) {\n case lunr.QueryLexer.TERM:\n return lunr.QueryParser.parseTerm\n default:\n var errorMessage = \"expecting term, found '\" + nextLexeme.type + \"'\"\n throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end)\n }\n}\n\nlunr.QueryParser.parseTerm = function (parser) {\n var lexeme = parser.consumeLexeme()\n\n if (lexeme == undefined) {\n return\n }\n\n parser.currentClause.term = lexeme.str.toLowerCase()\n\n if (lexeme.str.indexOf(\"*\") != -1) {\n parser.currentClause.usePipeline = false\n }\n\n var nextLexeme = parser.peekLexeme()\n\n if (nextLexeme == undefined) {\n parser.nextClause()\n return\n }\n\n switch (nextLexeme.type) {\n case lunr.QueryLexer.TERM:\n parser.nextClause()\n return lunr.QueryParser.parseTerm\n case lunr.QueryLexer.FIELD:\n parser.nextClause()\n return lunr.QueryParser.parseField\n case lunr.QueryLexer.EDIT_DISTANCE:\n return lunr.QueryParser.parseEditDistance\n case lunr.QueryLexer.BOOST:\n return lunr.QueryParser.parseBoost\n case lunr.QueryLexer.PRESENCE:\n parser.nextClause()\n return lunr.QueryParser.parsePresence\n default:\n var errorMessage = \"Unexpected lexeme type '\" + nextLexeme.type + \"'\"\n throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end)\n }\n}\n\nlunr.QueryParser.parseEditDistance = function (parser) {\n var lexeme = parser.consumeLexeme()\n\n if (lexeme == undefined) {\n return\n }\n\n var editDistance = parseInt(lexeme.str, 10)\n\n if (isNaN(editDistance)) {\n var errorMessage = \"edit distance must be numeric\"\n throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end)\n }\n\n parser.currentClause.editDistance = editDistance\n\n var nextLexeme = parser.peekLexeme()\n\n if (nextLexeme == undefined) {\n parser.nextClause()\n return\n }\n\n switch (nextLexeme.type) {\n case lunr.QueryLexer.TERM:\n parser.nextClause()\n return lunr.QueryParser.parseTerm\n case lunr.QueryLexer.FIELD:\n parser.nextClause()\n return lunr.QueryParser.parseField\n case lunr.QueryLexer.EDIT_DISTANCE:\n return lunr.QueryParser.parseEditDistance\n case lunr.QueryLexer.BOOST:\n return lunr.QueryParser.parseBoost\n case lunr.QueryLexer.PRESENCE:\n parser.nextClause()\n return lunr.QueryParser.parsePresence\n default:\n var errorMessage = \"Unexpected lexeme type '\" + nextLexeme.type + \"'\"\n throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end)\n }\n}\n\nlunr.QueryParser.parseBoost = function (parser) {\n var lexeme = parser.consumeLexeme()\n\n if (lexeme == undefined) {\n return\n }\n\n var boost = parseInt(lexeme.str, 10)\n\n if (isNaN(boost)) {\n var errorMessage = \"boost must be numeric\"\n throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end)\n }\n\n parser.currentClause.boost = boost\n\n var nextLexeme = parser.peekLexeme()\n\n if (nextLexeme == undefined) {\n parser.nextClause()\n return\n }\n\n switch (nextLexeme.type) {\n case lunr.QueryLexer.TERM:\n parser.nextClause()\n return lunr.QueryParser.parseTerm\n case lunr.QueryLexer.FIELD:\n parser.nextClause()\n return lunr.QueryParser.parseField\n case lunr.QueryLexer.EDIT_DISTANCE:\n return lunr.QueryParser.parseEditDistance\n case lunr.QueryLexer.BOOST:\n return lunr.QueryParser.parseBoost\n case lunr.QueryLexer.PRESENCE:\n parser.nextClause()\n return lunr.QueryParser.parsePresence\n default:\n var errorMessage = \"Unexpected lexeme type '\" + nextLexeme.type + \"'\"\n throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end)\n }\n}\n\n /**\n * export the module via AMD, CommonJS or as a browser global\n * Export code from https://github.com/umdjs/umd/blob/master/returnExports.js\n */\n ;(function (root, factory) {\n if (typeof define === 'function' && define.amd) {\n // AMD. Register as an anonymous module.\n define(factory)\n } else if (typeof exports === 'object') {\n /**\n * Node. Does not work with strict CommonJS, but\n * only CommonJS-like enviroments that support module.exports,\n * like Node.\n */\n module.exports = factory()\n } else {\n // Browser globals (root is window)\n root.lunr = factory()\n }\n }(this, function () {\n /**\n * Just return a value to define the module export.\n * This example returns an object, but the module\n * can return a function as the exported value.\n */\n return lunr\n }))\n})();\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n ArticleDocument,\n SearchDocumentMap,\n SectionDocument,\n setupSearchDocumentMap\n} from \"../document\"\nimport {\n SearchHighlightFactoryFn,\n setupSearchHighlighter\n} from \"../highlight\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Search index configuration\n */\nexport interface SearchIndexConfig {\n lang: string[] /* Search languages */\n separator: string /* Search separator */\n}\n\n/**\n * Search index document\n */\nexport interface SearchIndexDocument {\n location: string /* Document location */\n title: string /* Document title */\n text: string /* Document text */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Search index pipeline function\n */\nexport type SearchIndexPipelineFn =\n | \"stemmer\" /* Stemmer */\n | \"stopWordFilter\" /* Stop word filter */\n | \"trimmer\" /* Trimmer */\n\n/**\n * Search index pipeline\n */\nexport type SearchIndexPipeline = SearchIndexPipelineFn[]\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Search index options\n *\n * This interfaces describes the format of the `search_index.json` file which\n * is automatically built by the MkDocs search plugin.\n */\nexport interface SearchIndexOptions {\n config: SearchIndexConfig /* Search index configuration */\n docs: SearchIndexDocument[] /* Search index documents */\n pipeline?: SearchIndexPipeline /* Search index pipeline */\n index?: object | string /* Prebuilt or serialized index */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Search result\n */\nexport interface SearchResult {\n article: ArticleDocument /* Article document */\n sections: SectionDocument[] /* Section documents */\n}\n\n/* ----------------------------------------------------------------------------\n * Class\n * ------------------------------------------------------------------------- */\n\n/**\n * Search index\n *\n * Note that `lunr` is injected via Webpack, as it will otherwise also be\n * bundled in the application bundle.\n */\nexport class SearchIndex {\n\n /**\n * Search document mapping\n *\n * A mapping of URLs (including hash fragments) to the actual articles and\n * sections of the documentation. The search document mapping must be created\n * regardless of whether the index was prebuilt or not, as `lunr` itself will\n * only store the actual index.\n */\n protected documents: SearchDocumentMap\n\n /**\n * Search highlight factory function\n */\n protected highlight: SearchHighlightFactoryFn\n\n /**\n * The `lunr` search index\n */\n protected index: lunr.Index\n\n /**\n * Create a search index\n *\n * @param options - Options\n */\n public constructor({ config, docs, pipeline, index }: SearchIndexOptions) {\n this.documents = setupSearchDocumentMap(docs)\n this.highlight = setupSearchHighlighter(config)\n\n /* If no index was given, create it */\n if (typeof index === \"undefined\") {\n this.index = lunr(function() {\n pipeline = pipeline || [\"trimmer\", \"stopWordFilter\"]\n\n /* Set up pipeline according to configuration */\n this.pipeline.reset()\n for (const fn of pipeline)\n this.pipeline.add(lunr[fn])\n\n /* Set up alternate search languages */\n if (config.lang.length === 1 && config.lang[0] !== \"en\") {\n this.use((lunr as any)[config.lang[0]])\n } else if (config.lang.length > 1) {\n this.use((lunr as any).multiLanguage(...config.lang))\n }\n\n /* Setup fields and reference */\n this.field(\"title\", { boost: 10 })\n this.field(\"text\")\n this.ref(\"location\")\n\n /* Index documents */\n for (const doc of docs)\n this.add(doc)\n })\n\n /* Prebuilt or serialized index */\n } else {\n this.index = lunr.Index.load(\n typeof index === \"string\"\n ? JSON.parse(index)\n : index\n )\n }\n }\n\n /**\n * Search for matching documents\n *\n * The search index which MkDocs provides is divided up into articles, which\n * contain the whole content of the individual pages, and sections, which only\n * contain the contents of the subsections obtained by breaking the individual\n * pages up at `h1` ... `h6`. As there may be many sections on different pages\n * with indentical titles (for example within this very project, e.g. \"Usage\"\n * or \"Installation\"), they need to be put into the context of the containing\n * page. For this reason, section results are grouped within their respective\n * articles which are the top-level results that are returned.\n *\n * @param query - Query string\n *\n * @return Search results\n */\n public search(query: string): SearchResult[] {\n if (query) {\n try {\n\n /* Group sections by containing article */\n const groups = this.index.search(query)\n .reduce((results, result) => {\n const document = this.documents.get(result.ref)\n if (typeof document !== \"undefined\") {\n if (\"parent\" in document) {\n const ref = document.parent.location\n results.set(ref, [...results.get(ref) || [], result])\n } else {\n const ref = document.location\n results.set(ref, results.get(ref) || [])\n }\n }\n return results\n }, new Map())\n\n /* Create highlighter for query */\n const fn = this.highlight(query)\n\n /* Map groups to search documents */\n return [...groups].map(([ref, sections]) => ({\n article: fn(this.documents.get(ref) as ArticleDocument),\n sections: sections.map(section => {\n return fn(this.documents.get(section.ref) as SectionDocument)\n })\n }))\n\n /* Log errors to console (for now) */\n } catch (err) {\n // tslint:disable-next-line no-console\n console.warn(`Invalid query: ${query} – see https://bit.ly/2s3ChXG`)\n }\n }\n\n /* Return nothing in case of error or empty query */\n return []\n }\n\n /**\n * Serialize search index\n *\n * @return String representation\n */\n public toString(): string {\n return JSON.stringify(this.index)\n }\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A RTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { SearchIndexOptions, SearchResult } from \"integrations/search\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Search message type\n */\nexport const enum SearchMessageType {\n SETUP, /* Search index setup */\n DUMP, /* Search index dump */\n QUERY, /* Search query */\n RESULT /* Search results */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * A message containing the data necessary to setup the search index\n */\nexport interface SearchSetupMessage {\n type: SearchMessageType.SETUP /* Message type */\n data: SearchIndexOptions /* Message data */\n}\n\n/**\n * A message containing the a dump of the search index\n */\nexport interface SearchDumpMessage {\n type: SearchMessageType.DUMP /* Message type */\n data: string /* Message data */\n}\n\n/**\n * A message containing a search query\n */\nexport interface SearchQueryMessage {\n type: SearchMessageType.QUERY /* Message type */\n data: string /* Message data */\n}\n\n/**\n * A message containing results for a search query\n */\nexport interface SearchResultMessage {\n type: SearchMessageType.RESULT /* Message type */\n data: SearchResult[] /* Message data */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * A message exchanged with the search worker\n */\nexport type SearchMessage =\n | SearchSetupMessage\n | SearchDumpMessage\n | SearchQueryMessage\n | SearchResultMessage\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Type guard for search setup messages\n *\n * @param message - Search worker message\n *\n * @return Test result\n */\nexport function isSearchSetupMessage(\n message: SearchMessage\n): message is SearchSetupMessage {\n return message.type === SearchMessageType.SETUP\n}\n\n/**\n * Type guard for search dump messages\n *\n * @param message - Search worker message\n *\n * @return Test result\n */\nexport function isSearchDumpMessage(\n message: SearchMessage\n): message is SearchDumpMessage {\n return message.type === SearchMessageType.DUMP\n}\n\n/**\n * Type guard for search query messages\n *\n * @param message - Search worker message\n *\n * @return Test result\n */\nexport function isSearchQueryMessage(\n message: SearchMessage\n): message is SearchQueryMessage {\n return message.type === SearchMessageType.QUERY\n}\n\n/**\n * Type guard for search result messages\n *\n * @param message - Search worker message\n *\n * @return Test result\n */\nexport function isSearchResultMessage(\n message: SearchMessage\n): message is SearchResultMessage {\n return message.type === SearchMessageType.RESULT\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A RTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport \"expose-loader?lunr!lunr\"\n\nimport { SearchIndex, SearchIndexConfig } from \"integrations/search\"\n\nimport { SearchMessage, SearchMessageType } from \"../message\"\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * Search index\n */\nlet index: SearchIndex\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup multi-language support through `lunr-languages`\n *\n * This function will automatically import the stemmers necessary to process\n * the languages which were given through the search index configuration.\n *\n * @param config - Search index configuration\n */\nfunction setupLunrLanguages(config: SearchIndexConfig): void {\n const base = \"../lunr\"\n\n /* Add scripts for languages */\n const scripts = []\n for (const lang of config.lang) {\n if (lang === \"ja\") scripts.push(`${base}/tinyseg.min.js`)\n if (lang !== \"en\") scripts.push(`${base}/min/lunr.${lang}.min.js`)\n }\n\n /* Add multi-language support */\n if (config.lang.length > 1)\n scripts.push(`${base}/min/lunr.multi.min.js`)\n\n /* Load scripts synchronously */\n if (scripts.length)\n self.importScripts(\n `${base}/min/lunr.stemmer.support.min.js`,\n ...scripts\n )\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Message handler\n *\n * @param message - Source message\n *\n * @return Target message\n */\nexport function handler(message: SearchMessage): SearchMessage {\n switch (message.type) {\n\n /* Setup search index */\n case SearchMessageType.SETUP:\n setupLunrLanguages(message.data.config)\n index = new SearchIndex(message.data)\n return {\n type: SearchMessageType.DUMP,\n data: index.toString()\n }\n\n /* Query search index */\n case SearchMessageType.QUERY:\n return {\n type: SearchMessageType.RESULT,\n data: index ? index.search(message.data) : []\n }\n\n /* All other messages */\n default:\n throw new TypeError(\"Invalid message type\")\n }\n}\n\n/* ----------------------------------------------------------------------------\n * Worker\n * ------------------------------------------------------------------------- */\n\nself.addEventListener(\"message\", ev => {\n self.postMessage(handler(ev.data))\n})\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport * as escapeHTML from \"escape-html\"\n\nimport { SearchIndexDocument } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * A top-level article\n */\nexport interface ArticleDocument extends SearchIndexDocument {\n linked: boolean /* Whether the section was linked */\n}\n\n/**\n * A section of an article\n */\nexport interface SectionDocument extends SearchIndexDocument {\n parent: ArticleDocument /* Parent article */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Search document\n */\nexport type SearchDocument =\n | ArticleDocument\n | SectionDocument\n\n/**\n * Search document mapping\n */\nexport type SearchDocumentMap = Map\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Create a search document mapping\n *\n * @param docs - Search index documents\n *\n * @return Search document map\n */\nexport function setupSearchDocumentMap(\n docs: SearchIndexDocument[]\n): SearchDocumentMap {\n const documents = new Map()\n for (const doc of docs) {\n const [path, hash] = doc.location.split(\"#\")\n\n /* Extract location and title */\n const location = doc.location\n const title = doc.title\n\n /* Escape and cleanup text */\n const text = escapeHTML(doc.text)\n .replace(/\\s+(?=[,.:;!?])/g, \"\")\n .replace(/\\s+/g, \" \")\n\n /* Handle section */\n if (hash) {\n const parent = documents.get(path) as ArticleDocument\n\n /* Ignore first section, override article */\n if (!parent.linked) {\n parent.title = doc.title\n parent.text = text\n parent.linked = true\n\n /* Add subsequent section */\n } else {\n documents.set(location, {\n location,\n title,\n text,\n parent\n })\n }\n\n /* Add article */\n } else {\n documents.set(location, {\n location,\n title,\n text,\n linked: false\n })\n }\n }\n return documents\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { SearchIndexConfig } from \"../_\"\nimport { SearchDocument } from \"../document\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Search highlight function\n *\n * @template T - Search document type\n *\n * @param document - Search document\n *\n * @return Highlighted document\n */\nexport type SearchHighlightFn =\n (document: Readonly) => T\n\n/**\n * Search highlight factory function\n *\n * @param query - Query string\n *\n * @return Search highlight function\n */\nexport type SearchHighlightFactoryFn =\n (query: string) => SearchHighlightFn\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Create a search highlighter\n *\n * @param config - Search index configuration\n *\n * @return Search highlight factory function\n */\nexport function setupSearchHighlighter(\n config: SearchIndexConfig\n): SearchHighlightFactoryFn {\n const separator = new RegExp(config.separator, \"img\")\n const highlight = (_: unknown, data: string, term: string) => {\n return `${data}${term}`\n }\n\n /* Return factory function */\n return (query: string) => {\n query = query\n .replace(/[\\s*+-:~^]+/g, \" \")\n .trim()\n\n /* Create search term match expression */\n const match = new RegExp(`(^|${config.separator})(${\n query\n .replace(/[|\\\\{}()[\\]^$+*?.-]/g, \"\\\\$&\") // TODO: taken from escape-string-regexp\n .replace(separator, \"|\")\n })`, \"img\")\n\n /* Highlight document */\n return document => ({\n ...document,\n title: document.title.replace(match, highlight),\n text: document.text.replace(match, highlight)\n })\n }\n}\n"],"sourceRoot":""} \ No newline at end of file diff --git a/material/assets/manifest.json b/material/assets/manifest.json index 0e311feb4..f63f3652c 100644 --- a/material/assets/manifest.json +++ b/material/assets/manifest.json @@ -1,10 +1,10 @@ { - "assets/javascripts/bundle.js": "assets/javascripts/bundle.8ceb0d66.min.js", - "assets/javascripts/bundle.js.map": "assets/javascripts/bundle.8ceb0d66.min.js.map", - "assets/javascripts/vendor.js": "assets/javascripts/vendor.000c9aa0.min.js", - "assets/javascripts/vendor.js.map": "assets/javascripts/vendor.000c9aa0.min.js.map", - "assets/javascripts/worker/search.js": "assets/javascripts/worker/search.926ffd9e.min.js", - "assets/javascripts/worker/search.js.map": "assets/javascripts/worker/search.926ffd9e.min.js.map", - "assets/stylesheets/main.css": "assets/stylesheets/main.c05f2dae.min.css", - "assets/stylesheets/palette.css": "assets/stylesheets/palette.f5f04e6f.min.css" + "assets/javascripts/bundle.js": "assets/javascripts/bundle.js", + "assets/javascripts/bundle.js.map": "assets/javascripts/bundle.js.map", + "assets/javascripts/vendor.js": "assets/javascripts/vendor.js", + "assets/javascripts/vendor.js.map": "assets/javascripts/vendor.js.map", + "assets/javascripts/worker/search.js": "assets/javascripts/worker/search.js", + "assets/javascripts/worker/search.js.map": "assets/javascripts/worker/search.js.map", + "assets/stylesheets/main.css": "assets/stylesheets/main.css", + "assets/stylesheets/palette.css": "assets/stylesheets/palette.css" } \ No newline at end of file diff --git a/material/assets/stylesheets/main.14bb5ffa.min.css b/material/assets/stylesheets/main.14bb5ffa.min.css new file mode 100644 index 000000000..33bc6527e --- /dev/null +++ b/material/assets/stylesheets/main.14bb5ffa.min.css @@ -0,0 +1 @@ +html{box-sizing:border-box}*,*::before,*::after{box-sizing:inherit}html{-webkit-text-size-adjust:none;-moz-text-size-adjust:none;-ms-text-size-adjust:none;text-size-adjust:none}body{margin:0}hr{overflow:visible;box-sizing:content-box}a{-webkit-text-decoration-skip:objects}a,button,label,input{-webkit-tap-highlight-color:transparent}a{color:inherit;text-decoration:none}small{font-size:80%}sub,sup{position:relative;font-size:80%;line-height:0;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}img{border-style:none}table{border-collapse:separate;border-spacing:0}td,th{font-weight:normal;vertical-align:top}button{margin:0;padding:0;border:0;background:transparent;font-size:inherit}input{border:0;outline:0}:root{--md-default-fg-color: hsla(0, 0%, 0%, 0.87);--md-default-fg-color--light: hsla(0, 0%, 0%, 0.54);--md-default-fg-color--lighter: hsla(0, 0%, 0%, 0.26);--md-default-fg-color--lightest: hsla(0, 0%, 0%, 0.07);--md-default-bg-color: hsla(0, 0%, 100%, 1);--md-default-bg-color--light: hsla(0, 0%, 100%, 0.7);--md-default-bg-color--lighter: hsla(0, 0%, 100%, 0.3);--md-default-bg-color--lightest: hsla(0, 0%, 100%, 0.12);--md-primary-fg-color: hsla(231deg, 48%, 48%, 1);--md-primary-fg-color--light: hsla(230deg, 44%, 64%, 1);--md-primary-fg-color--dark: hsla(232deg, 54%, 41%, 1);--md-primary-bg-color: var(--md-default-bg-color);--md-primary-bg-color--light: var(--md-default-bg-color--light);--md-accent-fg-color: hsla(231deg, 99%, 66%, 1);--md-accent-fg-color--transparent: hsla(231deg, 99%, 66%, 0.1);--md-accent-bg-color: var(--md-default-bg-color);--md-accent-bg-color--light: var(--md-default-bg-color--light);--md-code-bg-color: hsla(0, 0%, 92.5%, 0.5);--md-code-fg-color: hsla(200, 18%, 26%, 1)}.md-icon svg{display:block;width:1.2rem;height:1.2rem;margin:0 auto;fill:currentColor}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body,input{color:var(--md-default-fg-color);-webkit-font-feature-settings:"kern","liga";font-feature-settings:"kern","liga";font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}code,pre,kbd{color:var(--md-default-fg-color);-webkit-font-feature-settings:"kern";font-feature-settings:"kern";font-family:"Courier New",Courier,monospace}.md-typeset{font-size:.8rem;line-height:1.6;-webkit-print-color-adjust:exact}.md-typeset p,.md-typeset ul,.md-typeset ol,.md-typeset blockquote{margin:1em 0}.md-typeset h1{margin:0 0 2rem;color:var(--md-default-fg-color--light);font-size:1.5625rem;font-weight:300;letter-spacing:-0.01em;line-height:1.3}.md-typeset h2{margin:2rem 0 .8rem;font-size:1.25rem;font-weight:300;letter-spacing:-0.01em;line-height:1.4}.md-typeset h3{margin:1.6rem 0 .8rem;font-size:1rem;font-weight:400;letter-spacing:-0.01em;line-height:1.5}.md-typeset h2+h3{margin-top:.8rem}.md-typeset h4{margin:.8rem 0;font-size:.8rem;font-weight:700;letter-spacing:-0.01em}.md-typeset h5,.md-typeset h6{margin:.8rem 0;color:var(--md-default-fg-color--light);font-size:.64rem;font-weight:700;letter-spacing:-0.01em}.md-typeset h5{text-transform:uppercase}.md-typeset hr{margin:1.5em 0;border-bottom:.05rem dotted var(--md-default-fg-color--lighter)}.md-typeset a{color:var(--md-primary-fg-color);word-break:break-word}.md-typeset a,.md-typeset a::before{transition:color 125ms}.md-typeset a:focus,.md-typeset a:hover{color:var(--md-accent-fg-color)}.md-typeset code,.md-typeset pre,.md-typeset kbd{background-color:var(--md-code-bg-color);color:var(--md-code-fg-color);font-size:85%;direction:ltr}.md-typeset code{margin:0 .2941176471em;padding:.0735294118em 0;border-radius:.1rem;box-shadow:.2941176471em 0 0 var(--md-code-bg-color),-0.2941176471em 0 0 var(--md-code-bg-color);word-break:break-word;-webkit-box-decoration-break:clone;box-decoration-break:clone}.md-typeset h1 code,.md-typeset h2 code,.md-typeset h3 code,.md-typeset h4 code,.md-typeset h5 code,.md-typeset h6 code{margin:0;background-color:transparent;box-shadow:none}.md-typeset a>code{margin:inherit;padding:inherit;border-radius:initial;background-color:inherit;color:inherit;box-shadow:none}.md-typeset pre{position:relative;margin:1em 0;border-radius:.1rem;line-height:1.4;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-overflow-scrolling:touch}.md-typeset pre>code{display:block;margin:0;padding:.525rem .6rem;background-color:transparent;font-size:inherit;box-shadow:none;-webkit-box-decoration-break:slice;box-decoration-break:slice;overflow:auto;word-break:normal}.md-typeset pre>code::-webkit-scrollbar{width:.2rem;height:.2rem}.md-typeset pre>code::-webkit-scrollbar-thumb{background-color:var(--md-default-fg-color--lighter)}.md-typeset pre>code::-webkit-scrollbar-thumb:hover{background-color:var(--md-accent-fg-color)}.md-typeset kbd{display:inline-block;padding:0 .5882352941em;border-radius:.1rem;font-size:.75em;line-height:1.5;box-shadow:0 .1rem 0 .05rem var(--md-default-fg-color--lighter),0 .1rem 0 var(--md-default-fg-color--lighter),inset 0 -0.1rem .2rem var(--md-default-bg-color);word-break:break-word;vertical-align:text-top}.md-typeset mark{margin:0 .25em;padding:.0625em 0;border-radius:.1rem;background-color:rgba(255,235,59,.5);box-shadow:.25em 0 0 rgba(255,235,59,.5),-0.25em 0 0 rgba(255,235,59,.5);word-break:break-word;-webkit-box-decoration-break:clone;box-decoration-break:clone}.md-typeset abbr{border-bottom:.05rem dotted var(--md-default-fg-color--light);text-decoration:none;cursor:help}.md-typeset small{opacity:.75}.md-typeset sup,.md-typeset sub{margin-left:.078125em}[dir=rtl] .md-typeset sup,[dir=rtl] .md-typeset sub{margin-right:.078125em;margin-left:initial}.md-typeset blockquote{padding-left:.6rem;border-left:.2rem solid var(--md-default-fg-color--lighter);color:var(--md-default-fg-color--light)}[dir=rtl] .md-typeset blockquote{padding-right:.6rem;padding-left:initial;border-right:.2rem solid var(--md-default-fg-color--lighter);border-left:initial}.md-typeset ul{list-style-type:disc}.md-typeset ul,.md-typeset ol{margin-left:.625em;padding:0}[dir=rtl] .md-typeset ul,[dir=rtl] .md-typeset ol{margin-right:.625em;margin-left:initial}.md-typeset ul ol,.md-typeset ol ol{list-style-type:lower-alpha}.md-typeset ul ol ol,.md-typeset ol ol ol{list-style-type:lower-roman}.md-typeset ul li,.md-typeset ol li{margin-bottom:.5em;margin-left:1.25em}[dir=rtl] .md-typeset ul li,[dir=rtl] .md-typeset ol li{margin-right:1.25em;margin-left:initial}.md-typeset ul li p,.md-typeset ul li blockquote,.md-typeset ol li p,.md-typeset ol li blockquote{margin:.5em 0}.md-typeset ul li:last-child,.md-typeset ol li:last-child{margin-bottom:0}.md-typeset ul li ul,.md-typeset ul li ol,.md-typeset ol li ul,.md-typeset ol li ol{margin:.5em 0 .5em .625em}[dir=rtl] .md-typeset ul li ul,[dir=rtl] .md-typeset ul li ol,[dir=rtl] .md-typeset ol li ul,[dir=rtl] .md-typeset ol li ol{margin-right:.625em;margin-left:initial}.md-typeset dd{margin:1em 0 1em 1.875em}[dir=rtl] .md-typeset dd{margin-right:1.875em;margin-left:initial}.md-typeset iframe,.md-typeset img,.md-typeset svg{max-width:100%}.md-typeset table:not([class]){display:inline-block;max-width:100%;border-radius:.1rem;background:var(--md-default-bg-color);font-size:.64rem;box-shadow:0 .2rem .5rem rgba(0,0,0,.05),0 0 .05rem rgba(0,0,0,.1);overflow:auto;-webkit-overflow-scrolling:touch}.md-typeset table:not([class])+*{margin-top:1.5em}.md-typeset table:not([class]) th:not([align]),.md-typeset table:not([class]) td:not([align]){text-align:left}[dir=rtl] .md-typeset table:not([class]) th:not([align]),[dir=rtl] .md-typeset table:not([class]) td:not([align]){text-align:right}.md-typeset table:not([class]) th{min-width:5rem;padding:.6rem .8rem;background-color:var(--md-default-fg-color--light);color:var(--md-default-bg-color);vertical-align:top}.md-typeset table:not([class]) td{padding:.6rem .8rem;border-top:.05rem solid var(--md-default-fg-color--lightest);vertical-align:top}.md-typeset table:not([class]) tr{transition:background-color 125ms}.md-typeset table:not([class]) tr:hover{background-color:rgba(0,0,0,.035);box-shadow:0 .05rem 0 var(--md-default-bg-color) inset}.md-typeset table:not([class]) tr:first-child td{border-top:0}.md-typeset table:not([class]) a{word-break:normal}.md-typeset__scrollwrap{margin:1em -0.8rem;overflow-x:auto;-webkit-overflow-scrolling:touch}.md-typeset .md-typeset__table{display:inline-block;margin-bottom:.5em;padding:0 .8rem}.md-typeset .md-typeset__table table{display:table;width:100%;margin:0;overflow:hidden}html{height:100%;background-color:var(--md-default-bg-color);font-size:125%;overflow-x:hidden}body{display:flex;position:relative;flex-direction:column;width:100%;min-height:100%;font-size:.5rem}hr{display:block;height:.05rem;padding:0;border:0}.md-grid{max-width:61rem;margin-right:auto;margin-left:auto}.md-container{display:flex;flex-direction:column;flex-grow:1}.md-main{flex-grow:1}.md-main__inner{height:100%;padding-top:1.5rem;padding-bottom:.05rem}.md-ellipsis{display:block;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.md-toggle{display:none}.md-overlay{position:fixed;top:0;width:0;height:0;transition:width 0ms 250ms,height 0ms 250ms,opacity 250ms;background-color:var(--md-default-fg-color--light);opacity:0;z-index:3}.md-skip{position:fixed;margin:.5rem;padding:.3rem .5rem;transform:translateY(0.4rem);border-radius:.1rem;background-color:var(--md-default-fg-color);color:var(--md-default-bg-color);font-size:.64rem;opacity:0}.md-skip:focus{transform:translateY(0);transition:transform 250ms cubic-bezier(0.4, 0, 0.2, 1),opacity 175ms 75ms;opacity:1;z-index:10}@page{margin:25mm}.md-announce{background-color:var(--md-default-fg-color)}.md-announce__inner{min-height:2.4rem;padding:0 .8rem;color:var(--md-default-bg-color);font-size:.7rem;line-height:2.4rem}.md-clipboard{position:absolute;top:.4rem;right:.4rem;width:1.2rem;height:1.2rem;transition:color 250ms;border-radius:.1rem;color:var(--md-default-fg-color--lightest);cursor:pointer;z-index:1;-webkit-backface-visibility:hidden;backface-visibility:hidden}.md-clipboard svg{width:.9rem;height:.9rem}pre:hover .md-clipboard{color:var(--md-default-fg-color--light)}pre .md-clipboard:focus,pre .md-clipboard:hover{color:var(--md-accent-fg-color)}.md-content__inner{margin:0 .8rem 1.2rem;padding-top:.6rem}.md-content__inner::before{display:block;height:.4rem;content:""}.md-content__inner>:last-child{margin-bottom:0}.md-content__button{margin:.4rem 0;margin-left:.4rem;padding:0;float:right}[dir=rtl] .md-content__button{margin-right:.4rem;margin-left:initial;float:left}[dir=rtl] .md-content__button svg{transform:scaleX(-1)}.md-typeset .md-content__button{color:var(--md-default-fg-color--lighter)}.md-content__button svg{display:inline;vertical-align:top}.md-dialog{box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12),0 3px 1px -2px rgba(0,0,0,.2);display:block;position:fixed;right:.8rem;bottom:.8rem;left:initial;min-width:11.1rem;padding:.4rem .6rem;transform:translateY(100%);transition:transform 0ms 400ms,opacity 400ms;border:none;border-radius:.1rem;background:var(--md-default-fg-color);color:var(--md-default-bg-color);font-size:.7rem;opacity:0;z-index:2}[dir=rtl] .md-dialog{right:initial;left:.8rem}.md-dialog[data-md-state=open]{transform:translateY(0);transition:transform 400ms cubic-bezier(0.075, 0.85, 0.175, 1),opacity 400ms;opacity:1}.md-header{position:-webkit-sticky;position:sticky;top:0;right:0;left:0;height:2.4rem;transition:background-color 250ms,color 250ms;background-color:var(--md-primary-fg-color);color:var(--md-primary-bg-color);box-shadow:0 0 .2rem rgba(0,0,0,0),0 .2rem .4rem rgba(0,0,0,0);z-index:2}.no-js .md-header{transition:none;box-shadow:none}.md-header[data-md-state=shadow]{transition:background-color 250ms,color 250ms,box-shadow 250ms;box-shadow:0 0 .2rem rgba(0,0,0,.1),0 .2rem .4rem rgba(0,0,0,.2)}.md-header-nav{display:flex;padding:0 .2rem}.md-header-nav__button{position:relative;margin:.2rem;padding:.4rem;transition:opacity 250ms;cursor:pointer;z-index:1}[dir=rtl] .md-header-nav__button svg{transform:scaleX(-1)}.md-header-nav__button:focus,.md-header-nav__button:hover{opacity:.7}.md-header-nav__button.md-logo{margin:.2rem;padding:.4rem}.md-header-nav__button.md-logo img,.md-header-nav__button.md-logo svg{display:block;width:1.2rem;height:1.2rem;fill:currentColor}.no-js .md-header-nav__button[for=__search]{display:none}.md-header-nav__topic{display:block;position:absolute;width:100%;padding:0 1rem;transition:transform 400ms cubic-bezier(0.1, 0.7, 0.1, 1),opacity 150ms;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;-webkit-backface-visibility:hidden;backface-visibility:hidden}.md-header-nav__topic+.md-header-nav__topic{transform:translateX(1.25rem);transition:transform 400ms cubic-bezier(1, 0.7, 0.1, 0.1),opacity 150ms;opacity:0;z-index:-1;pointer-events:none}[dir=rtl] .md-header-nav__topic+.md-header-nav__topic{transform:translateX(-1.25rem)}.no-js .md-header-nav__topic{position:initial}.no-js .md-header-nav__topic+.md-header-nav__topic{display:none}.md-header-nav__title{flex-grow:1;font-size:.9rem;line-height:2.4rem}.md-header-nav__title[data-md-state=active] .md-header-nav__topic{transform:translateX(-1.25rem);transition:transform 400ms cubic-bezier(1, 0.7, 0.1, 0.1),opacity 150ms;opacity:0;z-index:-1;pointer-events:none}[dir=rtl] .md-header-nav__title[data-md-state=active] .md-header-nav__topic{transform:translateX(1.25rem)}.md-header-nav__title[data-md-state=active] .md-header-nav__topic+.md-header-nav__topic{transform:translateX(0);transition:transform 400ms cubic-bezier(0.1, 0.7, 0.1, 1),opacity 150ms;opacity:1;z-index:0;pointer-events:initial}.md-header-nav__title>.md-header-nav__ellipsis{position:relative;width:100%;height:100%}.md-header-nav__source{display:none}.md-hero{transition:background 250ms;background-color:var(--md-primary-fg-color);color:var(--md-primary-bg-color);font-size:1rem;overflow:hidden}.md-hero__inner{margin-top:1rem;padding:.8rem .8rem .4rem;transition:transform 400ms cubic-bezier(0.1, 0.7, 0.1, 1),opacity 250ms;transition-delay:100ms}[data-md-state=hidden] .md-hero__inner{pointer-events:none;transform:translateY(0.625rem);transition:transform 0ms 400ms,opacity 100ms 0ms;opacity:0}.md-hero--expand .md-hero__inner{margin-bottom:1.2rem}.md-footer{background-color:var(--md-default-fg-color);color:var(--md-default-bg-color)}.md-footer-nav__inner{padding:.2rem;overflow:auto}.md-footer-nav__link{display:flex;padding-top:1.4rem;padding-bottom:.4rem;transition:opacity 250ms}.md-footer-nav__link:focus,.md-footer-nav__link:hover{opacity:.7}.md-footer-nav__link--prev{width:25%;float:left}[dir=rtl] .md-footer-nav__link--prev{float:right}[dir=rtl] .md-footer-nav__link--prev svg{transform:scaleX(-1)}.md-footer-nav__link--next{width:75%;float:right;text-align:right}[dir=rtl] .md-footer-nav__link--next{float:left;text-align:left}[dir=rtl] .md-footer-nav__link--next svg{transform:scaleX(-1)}.md-footer-nav__title{position:relative;flex-grow:1;max-width:calc(100% - 2.4rem);padding:0 1rem;font-size:.9rem;line-height:2.4rem}.md-footer-nav__button{margin:.2rem;padding:.4rem}.md-footer-nav__direction{position:absolute;right:0;left:0;margin-top:-1rem;padding:0 1rem;color:var(--md-default-bg-color--light);font-size:.64rem}.md-footer-meta{background-color:var(--md-default-fg-color--lighter)}.md-footer-meta__inner{padding:.2rem;overflow:auto}html .md-footer-meta.md-typeset a{color:var(--md-default-bg-color--light)}html .md-footer-meta.md-typeset a:focus,html .md-footer-meta.md-typeset a:hover{color:var(--md-default-bg-color)}.md-footer-copyright{margin:0 .6rem;padding:.4rem 0;color:var(--md-default-bg-color--lighter);font-size:.64rem}.md-footer-copyright__highlight{color:var(--md-default-bg-color--light)}.md-footer-social{margin:0 .4rem;padding:.2rem 0 .6rem}.md-footer-social__link{display:inline-block;width:1.6rem;height:1.6rem;transition:color 250ms;text-align:center}.md-footer-social__link::before{line-height:1.9}.md-footer-social__link svg{width:.8rem;vertical-align:-25%;fill:currentColor}.md-nav{font-size:.7rem;line-height:1.3}.md-nav__title{display:block;padding:0 .6rem;font-weight:700;text-overflow:ellipsis;overflow:hidden}.md-nav__title .md-nav__button{display:none}.md-nav__title .md-nav__button img{width:100%;height:auto}.md-nav__title .md-nav__button.md-logo img,.md-nav__title .md-nav__button.md-logo svg{display:block;width:2.4rem;height:2.4rem}.md-nav__title .md-nav__button.md-logo svg{fill:currentColor}.md-nav__list{margin:0;padding:0;list-style:none}.md-nav__item{padding:0 .6rem}.md-nav__item:last-child{padding-bottom:.6rem}.md-nav__item .md-nav__item{padding-right:0}[dir=rtl] .md-nav__item .md-nav__item{padding-right:.6rem;padding-left:0}.md-nav__item .md-nav__item:last-child{padding-bottom:0}.md-nav__link{display:block;margin-top:.625em;transition:color 125ms;text-overflow:ellipsis;cursor:pointer;overflow:hidden;scroll-snap-align:start}html .md-nav__link[for=__toc]{display:none}html .md-nav__link[for=__toc]~.md-nav{display:none}.md-nav__link[data-md-state=blur]{color:var(--md-default-fg-color--light)}.md-nav__item .md-nav__link--active{color:var(--md-primary-fg-color)}.md-nav__item--nested>.md-nav__link{color:inherit}.md-nav__link:focus,.md-nav__link:hover{color:var(--md-accent-fg-color)}.md-nav__source{display:none}.md-search{position:relative}.no-js .md-search{display:none}.md-search__overlay{opacity:0;z-index:1}.md-search__inner{-webkit-backface-visibility:hidden;backface-visibility:hidden}.md-search__form{position:relative}.md-search__input{position:relative;padding:0 2.2rem 0 3.6rem;text-overflow:ellipsis;z-index:2}[dir=rtl] .md-search__input{padding:0 3.6rem 0 2.2rem}.md-search__input::-webkit-input-placeholder{-webkit-transition:color 250ms;transition:color 250ms}.md-search__input::-moz-placeholder{-moz-transition:color 250ms;transition:color 250ms}.md-search__input::-ms-input-placeholder{-ms-transition:color 250ms;transition:color 250ms}.md-search__input::placeholder{transition:color 250ms}.md-search__input::-webkit-input-placeholder{color:var(--md-default-fg-color--light)}.md-search__input::-moz-placeholder{color:var(--md-default-fg-color--light)}.md-search__input::-ms-input-placeholder{color:var(--md-default-fg-color--light)}.md-search__input~.md-search__icon,.md-search__input::placeholder{color:var(--md-default-fg-color--light)}.md-search__input::-ms-clear{display:none}.md-search__icon{position:absolute;width:1.2rem;height:1.2rem;transition:color 250ms,opacity 250ms;cursor:pointer;z-index:2}.md-search__icon:hover{opacity:.7}.md-search__icon[for=__search]{top:.3rem;left:.5rem}[dir=rtl] .md-search__icon[for=__search]{right:.5rem;left:initial}[dir=rtl] .md-search__icon[for=__search] svg{transform:scaleX(-1)}.md-search__icon[type=reset]{top:.3rem;right:.5rem;transform:scale(0.75);transition:transform 150ms cubic-bezier(0.1, 0.7, 0.1, 1),opacity 150ms;opacity:0;pointer-events:none}[dir=rtl] .md-search__icon[type=reset]{right:initial;left:.5rem}[data-md-toggle=search]:checked~.md-header .md-search__input:valid~.md-search__icon[type=reset]{transform:scale(1);opacity:1;pointer-events:initial}[data-md-toggle=search]:checked~.md-header .md-search__input:valid~.md-search__icon[type=reset]:hover{opacity:.7}.md-search__output{position:absolute;width:100%;border-radius:0 0 .1rem .1rem;overflow:hidden;z-index:1}.md-search__scrollwrap{height:100%;background-color:var(--md-default-bg-color);box-shadow:inset 0 .05rem 0 var(--md-default-fg-color--lightest);overflow-y:auto;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-scroll-snap-type:y mandatory;-ms-scroll-snap-type:y mandatory;scroll-snap-type:y mandatory;-webkit-overflow-scrolling:touch}.md-search-result{color:var(--md-default-fg-color);word-break:break-word}.md-search-result__meta{padding:0 .8rem;background-color:var(--md-default-fg-color--lightest);color:var(--md-default-fg-color--light);font-size:.64rem;line-height:1.8rem;scroll-snap-align:start}.md-search-result__list{margin:0;padding:0;border-top:.05rem solid var(--md-default-fg-color--lightest);list-style:none}.md-search-result__item{box-shadow:0 -0.05rem 0 var(--md-default-fg-color--lightest)}.md-search-result__link{display:block;transition:background 250ms;outline:0;overflow:hidden;scroll-snap-align:start}.md-search-result__link:focus,.md-search-result__link:hover{background-color:var(--md-accent-fg-color--transparent)}.md-search-result__link:focus .md-search-result__article::before,.md-search-result__link:hover .md-search-result__article::before{opacity:.7}.md-search-result__link:last-child .md-search-result__teaser{margin-bottom:.6rem}.md-search-result__article{position:relative;padding:0 .8rem;overflow:auto}.md-search-result__article--document .md-search-result__title{margin:.55rem 0;font-size:.8rem;font-weight:400;line-height:1.4}.md-search-result__icon{position:absolute;left:0;margin:.1rem;padding:.4rem;color:var(--md-default-fg-color--light)}[dir=rtl] .md-search-result__icon{right:0;left:initial}[dir=rtl] .md-search-result__icon svg{transform:scaleX(-1)}.md-search-result__title{margin:.5em 0;font-size:.64rem;font-weight:700;line-height:1.4}.md-search-result__teaser{display:-webkit-box;max-height:1.65rem;margin:.5em 0;color:var(--md-default-fg-color--light);font-size:.64rem;line-height:1.4;text-overflow:ellipsis;overflow:hidden;-webkit-box-orient:vertical;-webkit-line-clamp:2}.md-search-result em{font-style:normal;font-weight:700;text-decoration:underline}.md-sidebar{position:absolute;width:12.1rem;padding:1.2rem 0;overflow:hidden}.md-sidebar[data-md-state=lock]{position:fixed;top:2.4rem}.md-sidebar--secondary{display:none}.md-sidebar__scrollwrap{max-height:100%;margin:0 .2rem;overflow-y:auto;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-scroll-snap-type:y mandatory;-ms-scroll-snap-type:y mandatory;scroll-snap-type:y mandatory}.md-sidebar__scrollwrap::-webkit-scrollbar{width:.2rem;height:.2rem}.md-sidebar__scrollwrap::-webkit-scrollbar-thumb{background-color:var(--md-default-fg-color--lighter)}.md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:var(--md-accent-fg-color)}@-webkit-keyframes md-source__facts--done{0%{height:0}100%{height:.65rem}}@keyframes md-source__facts--done{0%{height:0}100%{height:.65rem}}@-webkit-keyframes md-source__fact--done{0%{transform:translateY(100%);opacity:0}50%{opacity:0}100%{transform:translateY(0%);opacity:1}}@keyframes md-source__fact--done{0%{transform:translateY(100%);opacity:0}50%{opacity:0}100%{transform:translateY(0%);opacity:1}}.md-source{display:block;transition:opacity 250ms;font-size:.65rem;line-height:1.25;white-space:nowrap;-webkit-backface-visibility:hidden;backface-visibility:hidden}[dir=rtl] .md-source{padding-right:initial;padding-left:.6rem}.md-source:hover{opacity:.7}.md-source__icon{display:inline-block;width:2.4rem;height:2.4rem;vertical-align:middle}.md-source__icon svg{margin-top:.6rem;margin-left:.6rem}[dir=rtl] .md-source__icon svg{margin-right:.6rem;margin-left:initial}.md-source__icon+.md-source__repository{margin-left:-2rem;padding-left:2rem}[dir=rtl] .md-source__icon+.md-source__repository{margin-right:-2rem;margin-left:initial;padding-right:2rem;padding-left:initial}.md-source__repository{display:inline-block;max-width:calc(100% - 1.2rem);margin-left:.6rem;font-weight:700;text-overflow:ellipsis;overflow:hidden;vertical-align:middle}.md-source__facts{margin:0;padding:0;font-size:.55rem;font-weight:700;list-style-type:none;opacity:.75;overflow:hidden}[data-md-state=done] .md-source__facts{-webkit-animation:md-source__facts--done 250ms ease-in;animation:md-source__facts--done 250ms ease-in}.md-source__fact{float:left}[dir=rtl] .md-source__fact{float:right}[data-md-state=done] .md-source__fact{-webkit-animation:md-source__fact--done 400ms ease-out;animation:md-source__fact--done 400ms ease-out}.md-source__fact::before{margin:0 .1rem;content:"·"}.md-source__fact:first-child::before{display:none}.md-tabs{width:100%;transition:background 250ms;background-color:var(--md-primary-fg-color);color:var(--md-primary-bg-color);overflow:auto}.no-js .md-tabs{transition:none}.md-tabs__list{margin:0;margin-left:.2rem;padding:0;list-style:none;white-space:nowrap}[dir=rtl] .md-tabs__list{margin-right:.2rem;margin-left:initial}.md-tabs__item{display:inline-block;height:2.4rem;padding-right:.6rem;padding-left:.6rem}.md-tabs__link{display:block;margin-top:.8rem;transition:transform 400ms cubic-bezier(0.1, 0.7, 0.1, 1),opacity 250ms;font-size:.7rem;opacity:.7}.no-js .md-tabs__link{transition:none}.md-tabs__link--active,.md-tabs__link:hover{color:inherit;opacity:1}.md-tabs__item:nth-child(2) .md-tabs__link{transition-delay:20ms}.md-tabs__item:nth-child(3) .md-tabs__link{transition-delay:40ms}.md-tabs__item:nth-child(4) .md-tabs__link{transition-delay:60ms}.md-tabs__item:nth-child(5) .md-tabs__link{transition-delay:80ms}.md-tabs__item:nth-child(6) .md-tabs__link{transition-delay:100ms}.md-tabs__item:nth-child(7) .md-tabs__link{transition-delay:120ms}.md-tabs__item:nth-child(8) .md-tabs__link{transition-delay:140ms}.md-tabs__item:nth-child(9) .md-tabs__link{transition-delay:160ms}.md-tabs__item:nth-child(10) .md-tabs__link{transition-delay:180ms}.md-tabs__item:nth-child(11) .md-tabs__link{transition-delay:200ms}.md-tabs__item:nth-child(12) .md-tabs__link{transition-delay:220ms}.md-tabs__item:nth-child(13) .md-tabs__link{transition-delay:240ms}.md-tabs__item:nth-child(14) .md-tabs__link{transition-delay:260ms}.md-tabs__item:nth-child(15) .md-tabs__link{transition-delay:280ms}.md-tabs__item:nth-child(16) .md-tabs__link{transition-delay:300ms}.md-tabs[data-md-state=hidden]{pointer-events:none}.md-tabs[data-md-state=hidden] .md-tabs__link{transform:translateY(50%);transition:color 250ms,transform 0ms 400ms,opacity 100ms;opacity:0}.md-typeset .admonition,.md-typeset details{margin:1.5625em 0;padding:0 .6rem;border-left:.2rem solid #448aff;border-radius:.1rem;font-size:.64rem;box-shadow:0 .2rem .5rem rgba(0,0,0,.05),0 0 .05rem rgba(0,0,0,.1);overflow:auto}[dir=rtl] .md-typeset .admonition,[dir=rtl] .md-typeset details{border-right:.2rem solid #448aff;border-left:none}html .md-typeset .admonition>:last-child,html .md-typeset details>:last-child{margin-bottom:.6rem}.md-typeset .admonition .admonition,.md-typeset details .admonition,.md-typeset .admonition details,.md-typeset details details{margin:1em 0}.md-typeset .admonition.tldr,.md-typeset details.tldr,.md-typeset .admonition.summary,.md-typeset details.summary,.md-typeset .admonition.abstract,.md-typeset details.abstract{border-left-color:#00b0ff}.md-typeset .admonition.tldr>:first-child,.md-typeset details.tldr>:first-child,.md-typeset .admonition.summary>:first-child,.md-typeset details.summary>:first-child,.md-typeset .admonition.abstract>:first-child,.md-typeset details.abstract>:first-child{background-color:rgba(0,176,255,.1)}.md-typeset .admonition.tldr>:first-child::before,.md-typeset details.tldr>:first-child::before,.md-typeset .admonition.summary>:first-child::before,.md-typeset details.summary>:first-child::before,.md-typeset .admonition.abstract>:first-child::before,.md-typeset details.abstract>:first-child::before{background-color:#00b0ff;-webkit-mask-image:url("data:image/svg+xml;utf8,");mask-image:url("data:image/svg+xml;utf8,")}.md-typeset .admonition.todo,.md-typeset details.todo,.md-typeset .admonition.info,.md-typeset details.info{border-left-color:#00b8d4}.md-typeset .admonition.todo>:first-child,.md-typeset details.todo>:first-child,.md-typeset .admonition.info>:first-child,.md-typeset details.info>:first-child{background-color:rgba(0,184,212,.1)}.md-typeset .admonition.todo>:first-child::before,.md-typeset details.todo>:first-child::before,.md-typeset .admonition.info>:first-child::before,.md-typeset details.info>:first-child::before{background-color:#00b8d4;-webkit-mask-image:url("data:image/svg+xml;utf8,");mask-image:url("data:image/svg+xml;utf8,")}.md-typeset .admonition.important,.md-typeset details.important,.md-typeset .admonition.hint,.md-typeset details.hint,.md-typeset .admonition.tip,.md-typeset details.tip{border-left-color:#00bfa5}.md-typeset .admonition.important>:first-child,.md-typeset details.important>:first-child,.md-typeset .admonition.hint>:first-child,.md-typeset details.hint>:first-child,.md-typeset .admonition.tip>:first-child,.md-typeset details.tip>:first-child{background-color:rgba(0,191,165,.1)}.md-typeset .admonition.important>:first-child::before,.md-typeset details.important>:first-child::before,.md-typeset .admonition.hint>:first-child::before,.md-typeset details.hint>:first-child::before,.md-typeset .admonition.tip>:first-child::before,.md-typeset details.tip>:first-child::before{background-color:#00bfa5;-webkit-mask-image:url("data:image/svg+xml;utf8,");mask-image:url("data:image/svg+xml;utf8,")}.md-typeset .admonition.done,.md-typeset details.done,.md-typeset .admonition.check,.md-typeset details.check,.md-typeset .admonition.success,.md-typeset details.success{border-left-color:#00c853}.md-typeset .admonition.done>:first-child,.md-typeset details.done>:first-child,.md-typeset .admonition.check>:first-child,.md-typeset details.check>:first-child,.md-typeset .admonition.success>:first-child,.md-typeset details.success>:first-child{background-color:rgba(0,200,83,.1)}.md-typeset .admonition.done>:first-child::before,.md-typeset details.done>:first-child::before,.md-typeset .admonition.check>:first-child::before,.md-typeset details.check>:first-child::before,.md-typeset .admonition.success>:first-child::before,.md-typeset details.success>:first-child::before{background-color:#00c853;-webkit-mask-image:url("data:image/svg+xml;utf8,");mask-image:url("data:image/svg+xml;utf8,")}.md-typeset .admonition.faq,.md-typeset details.faq,.md-typeset .admonition.help,.md-typeset details.help,.md-typeset .admonition.question,.md-typeset details.question{border-left-color:#64dd17}.md-typeset .admonition.faq>:first-child,.md-typeset details.faq>:first-child,.md-typeset .admonition.help>:first-child,.md-typeset details.help>:first-child,.md-typeset .admonition.question>:first-child,.md-typeset details.question>:first-child{background-color:rgba(100,221,23,.1)}.md-typeset .admonition.faq>:first-child::before,.md-typeset details.faq>:first-child::before,.md-typeset .admonition.help>:first-child::before,.md-typeset details.help>:first-child::before,.md-typeset .admonition.question>:first-child::before,.md-typeset details.question>:first-child::before{background-color:#64dd17;-webkit-mask-image:url("data:image/svg+xml;utf8,");mask-image:url("data:image/svg+xml;utf8,")}.md-typeset .admonition.attention,.md-typeset details.attention,.md-typeset .admonition.caution,.md-typeset details.caution,.md-typeset .admonition.warning,.md-typeset details.warning{border-left-color:#ff9100}.md-typeset .admonition.attention>:first-child,.md-typeset details.attention>:first-child,.md-typeset .admonition.caution>:first-child,.md-typeset details.caution>:first-child,.md-typeset .admonition.warning>:first-child,.md-typeset details.warning>:first-child{background-color:rgba(255,145,0,.1)}.md-typeset .admonition.attention>:first-child::before,.md-typeset details.attention>:first-child::before,.md-typeset .admonition.caution>:first-child::before,.md-typeset details.caution>:first-child::before,.md-typeset .admonition.warning>:first-child::before,.md-typeset details.warning>:first-child::before{background-color:#ff9100;-webkit-mask-image:url("data:image/svg+xml;utf8,");mask-image:url("data:image/svg+xml;utf8,")}.md-typeset .admonition.missing,.md-typeset details.missing,.md-typeset .admonition.fail,.md-typeset details.fail,.md-typeset .admonition.failure,.md-typeset details.failure{border-left-color:#ff5252}.md-typeset .admonition.missing>:first-child,.md-typeset details.missing>:first-child,.md-typeset .admonition.fail>:first-child,.md-typeset details.fail>:first-child,.md-typeset .admonition.failure>:first-child,.md-typeset details.failure>:first-child{background-color:rgba(255,82,82,.1)}.md-typeset .admonition.missing>:first-child::before,.md-typeset details.missing>:first-child::before,.md-typeset .admonition.fail>:first-child::before,.md-typeset details.fail>:first-child::before,.md-typeset .admonition.failure>:first-child::before,.md-typeset details.failure>:first-child::before{background-color:#ff5252;-webkit-mask-image:url("data:image/svg+xml;utf8,");mask-image:url("data:image/svg+xml;utf8,")}.md-typeset .admonition.error,.md-typeset details.error,.md-typeset .admonition.danger,.md-typeset details.danger{border-left-color:#ff1744}.md-typeset .admonition.error>:first-child,.md-typeset details.error>:first-child,.md-typeset .admonition.danger>:first-child,.md-typeset details.danger>:first-child{background-color:rgba(255,23,68,.1)}.md-typeset .admonition.error>:first-child::before,.md-typeset details.error>:first-child::before,.md-typeset .admonition.danger>:first-child::before,.md-typeset details.danger>:first-child::before{background-color:#ff1744;-webkit-mask-image:url("data:image/svg+xml;utf8,");mask-image:url("data:image/svg+xml;utf8,")}.md-typeset .admonition.bug,.md-typeset details.bug{border-left-color:#f50057}.md-typeset .admonition.bug>:first-child,.md-typeset details.bug>:first-child{background-color:rgba(245,0,87,.1)}.md-typeset .admonition.bug>:first-child::before,.md-typeset details.bug>:first-child::before{background-color:#f50057;-webkit-mask-image:url("data:image/svg+xml;utf8,");mask-image:url("data:image/svg+xml;utf8,")}.md-typeset .admonition.example,.md-typeset details.example{border-left-color:#651fff}.md-typeset .admonition.example>:first-child,.md-typeset details.example>:first-child{background-color:rgba(101,31,255,.1)}.md-typeset .admonition.example>:first-child::before,.md-typeset details.example>:first-child::before{background-color:#651fff;-webkit-mask-image:url("data:image/svg+xml;utf8,");mask-image:url("data:image/svg+xml;utf8,")}.md-typeset .admonition.cite,.md-typeset details.cite,.md-typeset .admonition.quote,.md-typeset details.quote{border-left-color:#9e9e9e}.md-typeset .admonition.cite>:first-child,.md-typeset details.cite>:first-child,.md-typeset .admonition.quote>:first-child,.md-typeset details.quote>:first-child{background-color:rgba(158,158,158,.1)}.md-typeset .admonition.cite>:first-child::before,.md-typeset details.cite>:first-child::before,.md-typeset .admonition.quote>:first-child::before,.md-typeset details.quote>:first-child::before{background-color:#9e9e9e;-webkit-mask-image:url("data:image/svg+xml;utf8,");mask-image:url("data:image/svg+xml;utf8,")}.md-typeset .admonition-title,.md-typeset summary{margin:0 -0.6rem;padding:.4rem .6rem .4rem 2rem;background-color:rgba(68,138,255,.1);font-weight:700}[dir=rtl] .md-typeset .admonition-title,[dir=rtl] .md-typeset summary{padding:.4rem 2rem .4rem .6rem}.md-typeset .admonition-title:last-child,.md-typeset summary:last-child{margin-bottom:0}.md-typeset .admonition-title::before,.md-typeset summary::before{position:absolute;width:1rem;height:1rem;margin-left:-1.4rem;background-color:#448aff;-webkit-mask-image:url("data:image/svg+xml;utf8,");mask-image:url("data:image/svg+xml;utf8,");content:""}[dir=rtl] .md-typeset .admonition-title::before,[dir=rtl] .md-typeset summary::before{margin-right:-1.4rem;margin-left:initial}.codehilite .o,.highlight .o{color:inherit}.codehilite .ow,.highlight .ow{color:inherit}.codehilite .ge,.highlight .ge{color:#000}.codehilite .gr,.highlight .gr{color:#a00}.codehilite .gh,.highlight .gh{color:#999}.codehilite .go,.highlight .go{color:#888}.codehilite .gp,.highlight .gp{color:#555}.codehilite .gs,.highlight .gs{color:inherit}.codehilite .gu,.highlight .gu{color:#aaa}.codehilite .gt,.highlight .gt{color:#a00}.codehilite .gd,.highlight .gd{background-color:#fdd}.codehilite .gi,.highlight .gi{background-color:#dfd}.codehilite .k,.highlight .k{color:#3b78e7}.codehilite .kc,.highlight .kc{color:#a71d5d}.codehilite .kd,.highlight .kd{color:#3b78e7}.codehilite .kn,.highlight .kn{color:#3b78e7}.codehilite .kp,.highlight .kp{color:#a71d5d}.codehilite .kr,.highlight .kr{color:#3e61a2}.codehilite .kt,.highlight .kt{color:#3e61a2}.codehilite .c,.highlight .c{color:#999}.codehilite .cm,.highlight .cm{color:#999}.codehilite .cp,.highlight .cp{color:#666}.codehilite .c1,.highlight .c1{color:#999}.codehilite .ch,.highlight .ch{color:#999}.codehilite .cs,.highlight .cs{color:#999}.codehilite .na,.highlight .na{color:#c2185b}.codehilite .nb,.highlight .nb{color:#c2185b}.codehilite .bp,.highlight .bp{color:#3e61a2}.codehilite .nc,.highlight .nc{color:#c2185b}.codehilite .no,.highlight .no{color:#3e61a2}.codehilite .nd,.highlight .nd{color:#666}.codehilite .ni,.highlight .ni{color:#666}.codehilite .ne,.highlight .ne{color:#c2185b}.codehilite .nf,.highlight .nf{color:#c2185b}.codehilite .nl,.highlight .nl{color:#3b5179}.codehilite .nn,.highlight .nn{color:#ec407a}.codehilite .nt,.highlight .nt{color:#3b78e7}.codehilite .nv,.highlight .nv{color:#3e61a2}.codehilite .vc,.highlight .vc{color:#3e61a2}.codehilite .vg,.highlight .vg{color:#3e61a2}.codehilite .vi,.highlight .vi{color:#3e61a2}.codehilite .nx,.highlight .nx{color:#ec407a}.codehilite .m,.highlight .m{color:#e74c3c}.codehilite .mf,.highlight .mf{color:#e74c3c}.codehilite .mh,.highlight .mh{color:#e74c3c}.codehilite .mi,.highlight .mi{color:#e74c3c}.codehilite .il,.highlight .il{color:#e74c3c}.codehilite .mo,.highlight .mo{color:#e74c3c}.codehilite .s,.highlight .s{color:#0d904f}.codehilite .sb,.highlight .sb{color:#0d904f}.codehilite .sc,.highlight .sc{color:#0d904f}.codehilite .sd,.highlight .sd{color:#999}.codehilite .s2,.highlight .s2{color:#0d904f}.codehilite .se,.highlight .se{color:#183691}.codehilite .sh,.highlight .sh{color:#183691}.codehilite .si,.highlight .si{color:#183691}.codehilite .sx,.highlight .sx{color:#183691}.codehilite .sr,.highlight .sr{color:#009926}.codehilite .s1,.highlight .s1{color:#0d904f}.codehilite .ss,.highlight .ss{color:#0d904f}.codehilite .err,.highlight .err{color:#a61717}.codehilite .w,.highlight .w{color:transparent}.codehilite .hll,.highlight .hll{display:block;margin:0 -0.6rem;padding:0 .6rem;background-color:rgba(255,235,59,.5)}.codehilitetable,.highlighttable{display:block;overflow:hidden}.codehilitetable tbody,.highlighttable tbody,.codehilitetable td,.highlighttable td{display:block;padding:0}.codehilitetable tr,.highlighttable tr{display:flex}.codehilitetable pre,.highlighttable pre,.codehilitetable .linenodiv,.highlighttable .linenodiv{margin:0;border-radius:0}.codehilitetable .linenodiv,.highlighttable .linenodiv{padding:.525rem .6rem}.codehilitetable .linenos,.highlighttable .linenos{color:var(--md-default-fg-color--lighter);box-shadow:inset 0 0 0 .05rem var(--md-code-bg-color);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.codehilitetable .linenos pre,.highlighttable .linenos pre{background-color:transparent;color:inherit;text-align:right}.codehilitetable .code,.highlighttable .code{flex:1;overflow:hidden}.md-typeset>.codehilitetable,.md-typeset>.highlighttable{margin:1em 0;border-radius:.2em}.md-typeset [id^="fnref:"]{display:inline-block}.md-typeset [id^="fnref:"]:target{margin-top:-3.8rem;padding-top:3.8rem;pointer-events:none}.md-typeset [id^="fn:"]::before{display:none;height:0;content:""}.md-typeset [id^="fn:"]:target::before{display:block;margin-top:-3.5rem;padding-top:3.5rem;pointer-events:none}.md-typeset .footnote{color:var(--md-default-fg-color--light);font-size:.64rem}.md-typeset .footnote ol{margin-left:0}.md-typeset .footnote li{transition:color 250ms}.md-typeset .footnote li:target{color:var(--md-default-fg-color)}.md-typeset .footnote li :first-child{margin-top:0}.md-typeset .footnote li:hover .footnote-backref,.md-typeset .footnote li:target .footnote-backref{transform:translateX(0);opacity:1}.md-typeset .footnote li:hover .footnote-backref:hover,.md-typeset .footnote li:target .footnote-backref{color:var(--md-accent-fg-color)}.md-typeset .footnote-ref{display:inline-block;pointer-events:initial}.md-typeset .footnote-ref::before{display:inline;margin:0 .2em;border-left:.05rem solid var(--md-default-fg-color--lighter);font-size:1.25em;content:"";vertical-align:-0.25rem}.md-typeset .footnote-backref{display:inline-block;transform:translateX(0.25rem);transition:transform 250ms 250ms,color 250ms,opacity 125ms 250ms;color:var(--md-default-fg-color--lighter);font-size:0;opacity:0;vertical-align:text-bottom}[dir=rtl] .md-typeset .footnote-backref{transform:translateX(-0.25rem)}.md-typeset .footnote-backref::before{display:inline-block;width:.8rem;height:.8rem;background-color:currentColor;-webkit-mask-image:url("data:image/svg+xml;utf8,");mask-image:url("data:image/svg+xml;utf8,");content:""}[dir=rtl] .md-typeset .footnote-backref::before svg{transform:scaleX(-1)}.md-typeset .headerlink{display:inline-block;margin-left:.5rem;transform:translate(0, 0.25rem);transition:transform 250ms 250ms,color 250ms,opacity 125ms 250ms,visibility 0ms 500ms;opacity:0;visibility:hidden}[dir=rtl] .md-typeset .headerlink{margin-right:.5rem;margin-left:initial}html body .md-typeset .headerlink{color:var(--md-default-fg-color--lighter)}.md-typeset :hover .headerlink,.md-typeset :target .headerlink,.md-typeset .headerlink:focus{transform:translate(0, 0);transition:transform 250ms 250ms,color 250ms,opacity 125ms 250ms,visibility 0ms;opacity:1;visibility:visible}.md-typeset .headerlink:focus,.md-typeset .headerlink:hover,.md-typeset :target .headerlink{color:var(--md-accent-fg-color)}.md-typeset h3[id]::before,.md-typeset h2[id]::before,.md-typeset h1[id]::before{display:block;margin-top:-0.4rem;padding-top:.4rem;content:""}.md-typeset h3[id]:target::before,.md-typeset h2[id]:target::before,.md-typeset h1[id]:target::before{margin-top:-3.4rem;padding-top:3.4rem}.md-typeset h4[id]::before{display:block;margin-top:-0.45rem;padding-top:.45rem;content:""}.md-typeset h4[id]:target::before{margin-top:-3.45rem;padding-top:3.45rem}.md-typeset h6[id]::before,.md-typeset h5[id]::before{display:block;margin-top:-0.6rem;padding-top:.6rem;content:""}.md-typeset h6[id]:target::before,.md-typeset h5[id]:target::before{margin-top:-3.6rem;padding-top:3.6rem}.md-typeset .MJXc-display{margin:.75em 0;padding:.75em 0;overflow:auto;-webkit-overflow-scrolling:touch}.md-typeset .MathJax_CHTML{outline:0}.md-typeset del.critic,.md-typeset ins.critic,.md-typeset .critic.comment{margin:0 .25em;padding:.0625em 0;border-radius:.1rem;-webkit-box-decoration-break:clone;box-decoration-break:clone}.md-typeset del.critic{background-color:#fdd;box-shadow:.25em 0 0 #fdd,-0.25em 0 0 #fdd}.md-typeset ins.critic{background-color:#dfd;box-shadow:.25em 0 0 #dfd,-0.25em 0 0 #dfd}.md-typeset .critic.comment{color:#999}.md-typeset .critic.comment::before{content:"/* "}.md-typeset .critic.comment::after{content:" */"}.md-typeset .critic.block{display:block;margin:1em 0;padding-right:.8rem;padding-left:.8rem;box-shadow:none}.md-typeset .critic.block :first-child{margin-top:.5em}.md-typeset .critic.block :last-child{margin-bottom:.5em}.md-typeset details{display:block;padding-top:0}.md-typeset details[open]>summary::after{transform:rotate(180deg)}.md-typeset details:not([open]){padding-bottom:0}.md-typeset details:not([open])>summary{border-bottom:none}.md-typeset details summary{position:relative;padding-right:2rem}[dir=rtl] .md-typeset details summary{padding-left:2rem}.md-typeset summary{display:block;outline:none;cursor:pointer}.md-typeset summary::-webkit-details-marker{display:none}.md-typeset summary::after{position:absolute;right:.6rem;width:1rem;height:1rem;background-color:var(--md-default-fg-color--lighter);-webkit-mask-image:url("data:image/svg+xml;utf8,");mask-image:url("data:image/svg+xml;utf8,");content:""}[dir=rtl] .md-typeset summary::after{right:initial;left:.6rem}.md-typeset .emojione,.md-typeset .twemoji,.md-typeset .gemoji{width:1rem;vertical-align:text-top}.highlight [data-linenos]::before{display:inline-block;position:-webkit-sticky;position:sticky;left:-0.6rem;margin-right:.6rem;margin-left:-0.6rem;padding-left:.6rem;border-right:.05rem solid var(--md-default-fg-color--lightest);color:var(--md-default-fg-color--lighter);content:attr(data-linenos);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.md-typeset code.codehilite,.md-typeset code.highlight{margin:0 .2941176471em;padding:.0735294118em 0}.md-typeset .tabbed-content{display:none;order:99;width:100%;background-color:var(--md-code-bg-color)}.md-typeset .tabbed-content pre{margin:0;border-radius:0}.md-typeset .tabbed-set{display:flex;position:relative;flex-wrap:wrap;margin:1em 0;border:.05rem solid var(--md-default-fg-color--lightest);border-radius:.1rem}.md-typeset .tabbed-set>input{display:none}.md-typeset .tabbed-set>input:checked+label{border-color:var(--md-accent-fg-color);color:var(--md-accent-fg-color)}.md-typeset .tabbed-set>input:checked+label+.tabbed-content{display:block;padding:0 .6rem}.md-typeset .tabbed-set>input:checked+label+.tabbed-content>:last-child{margin-bottom:.6rem}.md-typeset .tabbed-set>input:checked+label+.tabbed-content>pre:only-child,.md-typeset .tabbed-set>input:checked+label+.tabbed-content>.highlight:only-child,.md-typeset .tabbed-set>input:checked+label+.tabbed-content>.highlighttable:only-child,.md-typeset .tabbed-set>input:checked+label+.tabbed-content>.codehilite:only-child,.md-typeset .tabbed-set>input:checked+label+.tabbed-content>.codehilitetable:only-child{margin:0 -0.6rem}.md-typeset .tabbed-set>input:checked+label+.tabbed-content>pre:only-child pre,.md-typeset .tabbed-set>input:checked+label+.tabbed-content>.highlight:only-child pre,.md-typeset .tabbed-set>input:checked+label+.tabbed-content>.highlighttable:only-child pre,.md-typeset .tabbed-set>input:checked+label+.tabbed-content>.codehilite:only-child pre,.md-typeset .tabbed-set>input:checked+label+.tabbed-content>.codehilitetable:only-child pre{background:transparent}.md-typeset .tabbed-set>label{width:auto;padding:.6rem;padding-bottom:.5rem;transition:color 125ms,border 250ms;border-bottom:.1rem solid transparent;color:var(--md-default-fg-color--light);font-size:.64rem;font-weight:700;cursor:pointer}html .md-typeset .tabbed-set>label:hover{color:var(--md-accent-fg-color)}.md-typeset .task-list-item{position:relative;list-style-type:none}.md-typeset .task-list-item [type=checkbox]{position:absolute;top:.45em;left:-2em}[dir=rtl] .md-typeset .task-list-item [type=checkbox]{right:-2em;left:initial}.md-typeset .task-list-control .task-list-indicator::before{position:absolute;top:.15em;left:-1.5em;width:1.25em;height:1.25em;background-color:var(--md-default-fg-color--lightest);-webkit-mask-image:url("data:image/svg+xml;utf8,");mask-image:url("data:image/svg+xml;utf8,");content:""}[dir=rtl] .md-typeset .task-list-control .task-list-indicator::before{right:-1.5em;left:initial}.md-typeset .task-list-control [type=checkbox]:checked+.task-list-indicator::before{background-color:#00e676;-webkit-mask-image:url("data:image/svg+xml;utf8,");mask-image:url("data:image/svg+xml;utf8,")}.md-typeset .task-list-control [type=checkbox]{opacity:0;z-index:-1}@media print{.md-typeset a::after{color:var(--md-default-fg-color--light);content:" [" attr(href) "]"}.md-typeset code,.md-typeset pre,.md-typeset kbd{white-space:pre-wrap}.md-clipboard{display:none}.md-content__button{display:none}.md-dialog{display:none}.md-header{display:none}.md-footer{display:none}.md-sidebar{display:none}.md-tabs{display:none}.md-typeset .headerlink{display:none}}@media screen and (max-width: 44.9375em){.md-typeset>pre{margin:1em -0.8rem;border-radius:0}.md-typeset>pre>code{padding:.525rem .8rem}.md-footer-nav__link--prev .md-footer-nav__title{display:none}.md-search-result__teaser{max-height:2.5rem;-webkit-line-clamp:3}.codehilite .hll,.highlight .hll{margin:0 -0.8rem;padding:0 .8rem}.md-typeset>.codehilite,.md-typeset>.highlight{margin:1em -0.8rem}.md-typeset>.codehilite code,.md-typeset>.highlight code{padding:.525rem .8rem}.md-typeset>.codehilitetable,.md-typeset>.highlighttable{margin:1em -0.8rem;border-radius:0}.md-typeset>.codehilitetable .linenodiv,.md-typeset>.highlighttable .linenodiv{padding:.5rem .8rem}.md-typeset>p>.MJXc-display{margin:.75em -0.8rem;padding:.25em .8rem}.highlight [data-linenos]::before{left:-1.6rem;margin-left:-1.6rem;padding-left:1.6rem}.md-typeset>.tabbed-set{margin:1em -0.8rem;border:0;border-top:.05rem solid var(--md-default-fg-color--lightest);border-radius:0}.md-typeset>.tabbed-set code{padding:.525rem .8rem}.md-typeset>.tabbed-set input:first-child+label{margin-left:.2rem}}@media screen and (min-width: 100em){html{font-size:137.5%}}@media screen and (min-width: 125em){html{font-size:150%}}@media screen and (max-width: 59.9375em){body[data-md-state=lock]{position:fixed}html .md-nav__link[for=__toc]{display:block;padding-right:2.4rem}html .md-nav__link[for=__toc]+.md-nav__link{display:none}html .md-nav__link[for=__toc]~.md-nav{display:flex}html [dir=rtl] .md-nav__link{padding-right:.8rem;padding-left:2.4rem}.md-nav__source{display:block;padding:0 .2rem;background-color:var(--md-primary-fg-color--dark);color:var(--md-primary-bg-color)}.md-search__overlay{position:absolute;top:.2rem;left:-2.2rem;width:2rem;height:2rem;transform-origin:center;transition:transform 300ms 100ms,opacity 200ms 200ms;border-radius:1rem;background-color:var(--md-default-bg-color);overflow:hidden;pointer-events:none}[dir=rtl] .md-search__overlay{right:-2.2rem;left:initial}[data-md-toggle=search]:checked~.md-header .md-search__overlay{transition:transform 400ms,opacity 100ms;opacity:1}.md-search__inner{position:fixed;top:0;left:100%;width:100%;height:100%;transform:translateX(5%);transition:right 0ms 300ms,left 0ms 300ms,transform 150ms 150ms cubic-bezier(0.4, 0, 0.2, 1),opacity 150ms 150ms;opacity:0;z-index:2}[data-md-toggle=search]:checked~.md-header .md-search__inner{left:0;transform:translateX(0);transition:right 0ms 0ms,left 0ms 0ms,transform 150ms 150ms cubic-bezier(0.1, 0.7, 0.1, 1),opacity 150ms 150ms;opacity:1}[dir=rtl] [data-md-toggle=search]:checked~.md-header .md-search__inner{right:0;left:initial}html [dir=rtl] .md-search__inner{right:100%;left:initial;transform:translateX(-5%)}.md-search__input{width:100%;height:2.4rem;font-size:.9rem}.md-search__icon[for=__search]{top:.6rem;left:.8rem}[dir=rtl] .md-search__icon[for=__search]{right:.8rem;left:initial}.md-search__icon[for=__search] svg:first-child{display:none}.md-search__icon[type=reset]{top:.6rem;right:.8rem}[dir=rtl] .md-search__icon[type=reset]{right:initial;left:.8rem}.md-search__output{top:2.4rem;bottom:0}.md-search-result__icon{display:none}}@media screen and (max-width: 76.1875em){[data-md-toggle=drawer]:checked~.md-overlay{width:100%;height:100%;transition:width 0ms,height 0ms,opacity 250ms;opacity:1}.md-header-nav__button.md-logo{display:none}.md-hero__inner{margin-top:2.4rem;margin-bottom:1.2rem}.md-nav{background-color:var(--md-default-bg-color)}.md-nav--primary,.md-nav--primary .md-nav{display:flex;position:absolute;top:0;right:0;left:0;flex-direction:column;height:100%;z-index:1}.md-nav--primary .md-nav__title,.md-nav--primary .md-nav__item{font-size:.8rem;line-height:1.5}.md-nav--primary .md-nav__title{position:relative;height:5.6rem;padding:3rem .8rem .2rem;background-color:var(--md-default-fg-color--lightest);color:var(--md-default-fg-color--light);font-weight:400;line-height:2.4rem;white-space:nowrap;cursor:pointer}.md-nav--primary .md-nav__title .md-nav__icon{display:block;position:absolute;top:.4rem;left:.4rem;width:1.2rem;height:1.2rem;margin:.2rem}[dir=rtl] .md-nav--primary .md-nav__title .md-nav__icon{right:.4rem;left:initial}.md-nav--primary .md-nav__title~.md-nav__list{background-color:var(--md-default-bg-color);box-shadow:inset 0 .05rem 0 var(--md-default-fg-color--lightest);overflow-y:auto;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-scroll-snap-type:y mandatory;-ms-scroll-snap-type:y mandatory;scroll-snap-type:y mandatory}.md-nav--primary .md-nav__title~.md-nav__list>.md-nav__item:first-child{border-top:0}.md-nav--primary .md-nav__title[for=__drawer]{position:relative;background-color:var(--md-primary-fg-color);color:var(--md-primary-bg-color)}.md-nav--primary .md-nav__title[for=__drawer] .md-nav__button{display:block;position:absolute;top:.2rem;left:.2rem;margin:.2rem;padding:.4rem;font-size:2.4rem}html [dir=rtl] .md-nav--primary .md-nav__title[for=__drawer] .md-nav__button{right:.2rem;left:initial}.md-nav--primary .md-nav__list{flex:1}.md-nav--primary .md-nav__item{padding:0;border-top:.05rem solid var(--md-default-fg-color--lightest)}[dir=rtl] .md-nav--primary .md-nav__item{padding:0}.md-nav--primary .md-nav__item--nested>.md-nav__link{padding-right:2.4rem}[dir=rtl] .md-nav--primary .md-nav__item--nested>.md-nav__link{padding-right:.8rem;padding-left:2.4rem}.md-nav--primary .md-nav__item--active>.md-nav__link{color:var(--md-primary-fg-color)}.md-nav--primary .md-nav__link{position:relative;margin-top:0;padding:.6rem .8rem}.md-nav--primary .md-nav__link .md-nav__icon{position:absolute;top:50%;right:.6rem;margin-top:-0.6rem;color:inherit;font-size:1.2rem}[dir=rtl] .md-nav--primary .md-nav__link .md-nav__icon{right:initial;left:.6rem}[dir=rtl] .md-nav--primary .md-nav__icon svg{transform:scale(-1)}.md-nav--primary .md-nav--secondary .md-nav__link{position:static}.md-nav--primary .md-nav--secondary .md-nav{position:static;background-color:transparent}.md-nav--primary .md-nav--secondary .md-nav .md-nav__link{padding-left:1.4rem}[dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav__link{padding-right:1.4rem;padding-left:initial}.md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav__link{padding-left:2rem}[dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav__link{padding-right:2rem;padding-left:initial}.md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav__link{padding-left:2.6rem}[dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav__link{padding-right:2.6rem;padding-left:initial}.md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav .md-nav__link{padding-left:3.2rem}[dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav .md-nav__link{padding-right:3.2rem;padding-left:initial}.md-nav__toggle~.md-nav{display:flex;transform:translateX(100%);transition:transform 250ms cubic-bezier(0.8, 0, 0.6, 1),opacity 125ms 50ms;opacity:0}[dir=rtl] .md-nav__toggle~.md-nav{transform:translateX(-100%)}.md-nav__toggle:checked~.md-nav{transform:translateX(0);transition:transform 250ms cubic-bezier(0.4, 0, 0.2, 1),opacity 125ms 125ms;opacity:1}.md-sidebar--primary{position:fixed;top:0;left:-12.1rem;width:12.1rem;height:100%;transform:translateX(0);transition:transform 250ms cubic-bezier(0.4, 0, 0.2, 1),box-shadow 250ms;background-color:var(--md-default-bg-color);z-index:3}[dir=rtl] .md-sidebar--primary{right:-12.1rem;left:initial}[data-md-toggle=drawer]:checked~.md-container .md-sidebar--primary{box-shadow:0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12),0 5px 5px -3px rgba(0,0,0,.4);transform:translateX(12.1rem)}[dir=rtl] [data-md-toggle=drawer]:checked~.md-container .md-sidebar--primary{transform:translateX(-12.1rem)}.md-sidebar--primary .md-sidebar__scrollwrap{overflow:hidden}.md-sidebar--primary .md-sidebar__scrollwrap{position:absolute;top:0;right:0;bottom:0;left:0;margin:0;-webkit-scroll-snap-type:none;-ms-scroll-snap-type:none;scroll-snap-type:none}.md-tabs{display:none}}@media screen and (min-width: 60em){.md-content{margin-right:12.1rem}[dir=rtl] .md-content{margin-right:initial;margin-left:12.1rem}.md-header-nav__button[for=__search]{display:none}.md-header-nav__source{display:block;width:11.7rem;max-width:11.7rem;margin-left:1rem}[dir=rtl] .md-header-nav__source{margin-right:1rem;margin-left:initial}.md-nav--secondary .md-nav__title[for=__toc]{scroll-snap-align:start}.md-nav--secondary .md-nav__title .md-nav__icon{display:none}.md-search{padding:.2rem 0}.md-search__overlay{position:fixed;top:0;left:0;width:0;height:0;transition:width 0ms 250ms,height 0ms 250ms,opacity 250ms;background-color:var(--md-default-fg-color--light);cursor:pointer}[dir=rtl] .md-search__overlay{right:0;left:initial}[data-md-toggle=search]:checked~.md-header .md-search__overlay{width:100%;height:100%;transition:width 0ms,height 0ms,opacity 250ms;opacity:1}.md-search__inner{position:relative;width:11.7rem;padding:.1rem 0;float:right;transition:width 250ms cubic-bezier(0.1, 0.7, 0.1, 1)}[dir=rtl] .md-search__inner{float:left}.md-search__form{border-radius:.1rem}.md-search__input{width:100%;height:1.8rem;padding-left:2.2rem;transition:background-color 250ms,color 250ms;border-radius:.1rem;background-color:var(--md-default-fg-color--lighter);color:inherit;font-size:.8rem}[dir=rtl] .md-search__input{padding-right:2.2rem}.md-search__input+.md-search__icon{color:var(--md-primary-bg-color)}.md-search__input::-webkit-input-placeholder{color:var(--md-primary-bg-color--light)}.md-search__input::-moz-placeholder{color:var(--md-primary-bg-color--light)}.md-search__input::-ms-input-placeholder{color:var(--md-primary-bg-color--light)}.md-search__input::placeholder{color:var(--md-primary-bg-color--light)}.md-search__input:hover{background-color:var(--md-default-bg-color--lightest)}[data-md-toggle=search]:checked~.md-header .md-search__input{border-radius:.1rem .1rem 0 0;background-color:var(--md-default-bg-color);color:var(--md-default-fg-color);text-overflow:clip}[data-md-toggle=search]:checked~.md-header .md-search__input::-webkit-input-placeholder{color:var(--md-default-fg-color--light)}[data-md-toggle=search]:checked~.md-header .md-search__input::-moz-placeholder{color:var(--md-default-fg-color--light)}[data-md-toggle=search]:checked~.md-header .md-search__input::-ms-input-placeholder{color:var(--md-default-fg-color--light)}[data-md-toggle=search]:checked~.md-header .md-search__input+.md-search__icon,[data-md-toggle=search]:checked~.md-header .md-search__input::placeholder{color:var(--md-default-fg-color--light)}.md-search__icon[for=__search] svg:last-child{display:none}.md-search__output{top:1.9rem;transition:opacity 400ms;opacity:0}[data-md-toggle=search]:checked~.md-header .md-search__output{box-shadow:0 6px 10px 0 rgba(0,0,0,.14),0 1px 18px 0 rgba(0,0,0,.12),0 3px 5px -1px rgba(0,0,0,.4);opacity:1}.md-search__scrollwrap{max-height:0}[data-md-toggle=search]:checked~.md-header .md-search__scrollwrap{max-height:75vh}.md-search__scrollwrap::-webkit-scrollbar{width:.2rem;height:.2rem}.md-search__scrollwrap::-webkit-scrollbar-thumb{background-color:var(--md-default-fg-color--lighter)}.md-search__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:var(--md-accent-fg-color)}.md-search-result__meta{padding-left:2.2rem}[dir=rtl] .md-search-result__meta{padding-right:2.2rem;padding-left:initial}.md-search-result__article{padding-left:2.2rem}[dir=rtl] .md-search-result__article{padding-right:2.2rem;padding-left:.8rem}.md-sidebar--secondary{display:block;margin-left:calc(100% - 12.1rem)}[dir=rtl] .md-sidebar--secondary{margin-right:calc(100% - 12.1rem);margin-left:initial}.md-sidebar--secondary .md-sidebar__scrollwrap{-webkit-overflow-scrolling:touch}}@media screen and (min-width: 76.25em){.md-content{margin-left:12.1rem}[dir=rtl] .md-content{margin-right:12.1rem}.md-content__inner{margin-right:1.2rem;margin-left:1.2rem}.md-header-nav__button[for=__drawer]{display:none}.md-header-nav__source{margin-left:1.4rem}[dir=rtl] .md-header-nav__source{margin-right:1.4rem}.md-nav{transition:max-height 250ms cubic-bezier(0.86, 0, 0.07, 1)}.md-nav--primary .md-nav__title[for=__drawer]{scroll-snap-align:start}.md-nav--primary .md-nav__title .md-nav__icon{display:none}.md-nav__toggle~.md-nav{display:none}.md-nav__toggle:checked~.md-nav{display:block}.md-nav__item--nested>.md-nav>.md-nav__title{display:none}.md-nav__icon{height:.9rem;float:right;transition:transform 250ms}.md-nav__icon svg{display:inline-block;width:.9rem;height:.9rem;vertical-align:-0.1rem}.md-nav__item--nested .md-nav__toggle:checked~.md-nav__link .md-nav__icon{transform:rotateZ(90deg)}[data-md-toggle=search]:checked~.md-header .md-search__inner{width:34.4rem}.md-search__scrollwrap{width:34.4rem}.md-sidebar--secondary{margin-left:48.9rem}[dir=rtl] .md-sidebar--secondary{margin-right:48.9rem;margin-left:initial}.md-tabs~.md-main .md-nav--primary>.md-nav__list>.md-nav__item--nested{display:none}.md-tabs--active~.md-main .md-nav--primary .md-nav__title{display:block;padding:0 .6rem;pointer-events:none;scroll-snap-align:start}.md-tabs--active~.md-main .md-nav--primary .md-nav__title[for=__drawer]{display:none}.md-tabs--active~.md-main .md-nav--primary>.md-nav__list>.md-nav__item{display:none}.md-tabs--active~.md-main .md-nav--primary>.md-nav__list>.md-nav__item--active{display:block;padding:0}.md-tabs--active~.md-main .md-nav--primary>.md-nav__list>.md-nav__item--active>.md-nav__link{display:none}.md-tabs--active~.md-main .md-nav[data-md-level="1"]>.md-nav__list>.md-nav__item{padding:0 .6rem}.md-tabs--active~.md-main .md-nav[data-md-level="1"] .md-nav .md-nav__title{display:none}}@media screen and (min-width: 45em){.md-footer-nav__link{width:50%}.md-footer-copyright{max-width:75%;float:left}[dir=rtl] .md-footer-copyright{float:right}.md-footer-social{padding:.6rem 0;float:right}[dir=rtl] .md-footer-social{float:left}}@media screen and (max-width: 29.9375em){[data-md-toggle=search]:checked~.md-header .md-search__overlay{transform:scale(45)}}@media screen and (min-width: 30em)and (max-width: 44.9375em){[data-md-toggle=search]:checked~.md-header .md-search__overlay{transform:scale(60)}}@media screen and (min-width: 45em)and (max-width: 59.9375em){[data-md-toggle=search]:checked~.md-header .md-search__overlay{transform:scale(75)}}@media screen and (min-width: 60em)and (max-width: 76.1875em){[data-md-toggle=search]:checked~.md-header .md-search__inner{width:23.4rem}.md-search__scrollwrap{width:23.4rem}.md-search-result__teaser{max-height:2.5rem;-webkit-line-clamp:3}}@media(-webkit-max-device-pixel-ratio: 1), (max-resolution: 1dppx){.md-search__scrollwrap{transform:translateZ(0)}} \ No newline at end of file diff --git a/material/assets/stylesheets/main.c05f2dae.min.css b/material/assets/stylesheets/main.c05f2dae.min.css deleted file mode 100644 index 79c14ee2f..000000000 --- a/material/assets/stylesheets/main.c05f2dae.min.css +++ /dev/null @@ -1 +0,0 @@ -html{box-sizing:border-box}*,*::before,*::after{box-sizing:inherit}html{-webkit-text-size-adjust:none;-moz-text-size-adjust:none;-ms-text-size-adjust:none;text-size-adjust:none}body{margin:0}hr{overflow:visible;box-sizing:content-box}a{-webkit-text-decoration-skip:objects}a,button,label,input{-webkit-tap-highlight-color:transparent}a{color:inherit;text-decoration:none}small{font-size:80%}sub,sup{position:relative;font-size:80%;line-height:0;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}img{border-style:none}table{border-collapse:separate;border-spacing:0}td,th{font-weight:normal;vertical-align:top}button{margin:0;padding:0;border:0;background:transparent;font-size:inherit}input{border:0;outline:0}:root{--md-default-fg-color: hsla(0, 0%, 0%, 0.87);--md-default-fg-color--light: hsla(0, 0%, 0%, 0.54);--md-default-fg-color--lighter: hsla(0, 0%, 0%, 0.26);--md-default-fg-color--lightest: hsla(0, 0%, 0%, 0.07);--md-default-bg-color: hsla(0, 0%, 100%, 1);--md-default-bg-color--light: hsla(0, 0%, 100%, 0.7);--md-default-bg-color--lighter: hsla(0, 0%, 100%, 0.3);--md-default-bg-color--lightest: hsla(0, 0%, 100%, 0.12);--md-primary-fg-color: hsla(231deg, 48%, 48%, 1);--md-primary-fg-color--light: hsla(230deg, 44%, 64%, 1);--md-primary-fg-color--dark: hsla(232deg, 54%, 41%, 1);--md-primary-bg-color: var(--md-default-bg-color);--md-primary-bg-color--light: var(--md-default-bg-color--light);--md-accent-fg-color: hsla(231deg, 99%, 66%, 1);--md-accent-fg-color--transparent: hsla(231deg, 99%, 66%, 0.1);--md-accent-bg-color: var(--md-default-bg-color);--md-accent-bg-color--light: var(--md-default-bg-color--light);--md-code-bg-color: hsla(0, 0%, 92.5%, 0.5);--md-code-fg-color: hsla(200, 18%, 26%, 1)}.md-icon svg{display:block;width:1.2rem;height:1.2rem;margin:0 auto;fill:currentColor}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body,input{color:var(--md-default-fg-color);-webkit-font-feature-settings:"kern","liga";font-feature-settings:"kern","liga";font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}code,pre,kbd{color:var(--md-default-fg-color);-webkit-font-feature-settings:"kern";font-feature-settings:"kern";font-family:"Courier New",Courier,monospace}.md-typeset{font-size:.8rem;line-height:1.6;-webkit-print-color-adjust:exact}.md-typeset p,.md-typeset ul,.md-typeset ol,.md-typeset blockquote{margin:1em 0}.md-typeset h1{margin:0 0 2rem;color:var(--md-default-fg-color--light);font-size:1.5625rem;font-weight:300;letter-spacing:-0.01em;line-height:1.3}.md-typeset h2{margin:2rem 0 .8rem;font-size:1.25rem;font-weight:300;letter-spacing:-0.01em;line-height:1.4}.md-typeset h3{margin:1.6rem 0 .8rem;font-size:1rem;font-weight:400;letter-spacing:-0.01em;line-height:1.5}.md-typeset h2+h3{margin-top:.8rem}.md-typeset h4{margin:.8rem 0;font-size:.8rem;font-weight:700;letter-spacing:-0.01em}.md-typeset h5,.md-typeset h6{margin:.8rem 0;color:var(--md-default-fg-color--light);font-size:.64rem;font-weight:700;letter-spacing:-0.01em}.md-typeset h5{text-transform:uppercase}.md-typeset hr{margin:1.5em 0;border-bottom:.05rem dotted var(--md-default-fg-color--lighter)}.md-typeset a{color:var(--md-primary-fg-color);word-break:break-word}.md-typeset a,.md-typeset a::before{transition:color 125ms}.md-typeset a:focus,.md-typeset a:hover{color:var(--md-accent-fg-color)}.md-typeset code,.md-typeset pre,.md-typeset kbd{background-color:var(--md-code-bg-color);color:var(--md-code-fg-color);font-size:85%;direction:ltr}.md-typeset code{margin:0 .2941176471em;padding:.0735294118em 0;border-radius:.1rem;box-shadow:.2941176471em 0 0 var(--md-code-bg-color),-0.2941176471em 0 0 var(--md-code-bg-color);word-break:break-word;-webkit-box-decoration-break:clone;box-decoration-break:clone}.md-typeset h1 code,.md-typeset h2 code,.md-typeset h3 code,.md-typeset h4 code,.md-typeset h5 code,.md-typeset h6 code{margin:0;background-color:transparent;box-shadow:none}.md-typeset a>code{margin:inherit;padding:inherit;border-radius:initial;background-color:inherit;color:inherit;box-shadow:none}.md-typeset pre{position:relative;margin:1em 0;border-radius:.1rem;line-height:1.4;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-overflow-scrolling:touch}.md-typeset pre>code{display:block;margin:0;padding:.525rem .6rem;background-color:transparent;font-size:inherit;box-shadow:none;-webkit-box-decoration-break:slice;box-decoration-break:slice;overflow:auto;word-break:normal}.md-typeset pre>code::-webkit-scrollbar{width:.2rem;height:.2rem}.md-typeset pre>code::-webkit-scrollbar-thumb{background-color:var(--md-default-fg-color--lighter)}.md-typeset pre>code::-webkit-scrollbar-thumb:hover{background-color:var(--md-accent-fg-color)}.md-typeset kbd{display:inline-block;padding:0 .5882352941em;border-radius:.1rem;font-size:.75em;line-height:1.5;box-shadow:0 .1rem 0 .05rem var(--md-default-fg-color--lighter),0 .1rem 0 var(--md-default-fg-color--lighter),inset 0 -0.1rem .2rem var(--md-default-bg-color);word-break:break-word;vertical-align:text-top}.md-typeset mark{margin:0 .25em;padding:.0625em 0;border-radius:.1rem;background-color:rgba(255,235,59,.5);box-shadow:.25em 0 0 rgba(255,235,59,.5),-0.25em 0 0 rgba(255,235,59,.5);word-break:break-word;-webkit-box-decoration-break:clone;box-decoration-break:clone}.md-typeset abbr{border-bottom:.05rem dotted var(--md-default-fg-color--light);text-decoration:none;cursor:help}.md-typeset small{opacity:.75}.md-typeset sup,.md-typeset sub{margin-left:.078125em}[dir=rtl] .md-typeset sup,[dir=rtl] .md-typeset sub{margin-right:.078125em;margin-left:initial}.md-typeset blockquote{padding-left:.6rem;border-left:.2rem solid var(--md-default-fg-color--lighter);color:var(--md-default-fg-color--light)}[dir=rtl] .md-typeset blockquote{padding-right:.6rem;padding-left:initial;border-right:.2rem solid var(--md-default-fg-color--lighter);border-left:initial}.md-typeset ul{list-style-type:disc}.md-typeset ul,.md-typeset ol{margin-left:.625em;padding:0}[dir=rtl] .md-typeset ul,[dir=rtl] .md-typeset ol{margin-right:.625em;margin-left:initial}.md-typeset ul ol,.md-typeset ol ol{list-style-type:lower-alpha}.md-typeset ul ol ol,.md-typeset ol ol ol{list-style-type:lower-roman}.md-typeset ul li,.md-typeset ol li{margin-bottom:.5em;margin-left:1.25em}[dir=rtl] .md-typeset ul li,[dir=rtl] .md-typeset ol li{margin-right:1.25em;margin-left:initial}.md-typeset ul li p,.md-typeset ul li blockquote,.md-typeset ol li p,.md-typeset ol li blockquote{margin:.5em 0}.md-typeset ul li:last-child,.md-typeset ol li:last-child{margin-bottom:0}.md-typeset ul li ul,.md-typeset ul li ol,.md-typeset ol li ul,.md-typeset ol li ol{margin:.5em 0 .5em .625em}[dir=rtl] .md-typeset ul li ul,[dir=rtl] .md-typeset ul li ol,[dir=rtl] .md-typeset ol li ul,[dir=rtl] .md-typeset ol li ol{margin-right:.625em;margin-left:initial}.md-typeset dd{margin:1em 0 1em 1.875em}[dir=rtl] .md-typeset dd{margin-right:1.875em;margin-left:initial}.md-typeset iframe,.md-typeset img,.md-typeset svg{max-width:100%}.md-typeset table:not([class]){display:inline-block;max-width:100%;border-radius:.1rem;background:var(--md-default-bg-color);font-size:.64rem;box-shadow:0 .2rem .5rem rgba(0,0,0,.05),0 0 .05rem rgba(0,0,0,.1);overflow:auto;-webkit-overflow-scrolling:touch}.md-typeset table:not([class])+*{margin-top:1.5em}.md-typeset table:not([class]) th:not([align]),.md-typeset table:not([class]) td:not([align]){text-align:left}[dir=rtl] .md-typeset table:not([class]) th:not([align]),[dir=rtl] .md-typeset table:not([class]) td:not([align]){text-align:right}.md-typeset table:not([class]) th{min-width:5rem;padding:.6rem .8rem;background-color:var(--md-default-fg-color--light);color:var(--md-default-bg-color);vertical-align:top}.md-typeset table:not([class]) td{padding:.6rem .8rem;border-top:.05rem solid var(--md-default-fg-color--lightest);vertical-align:top}.md-typeset table:not([class]) tr{transition:background-color 125ms}.md-typeset table:not([class]) tr:hover{background-color:rgba(0,0,0,.035);box-shadow:0 .05rem 0 var(--md-default-bg-color) inset}.md-typeset table:not([class]) tr:first-child td{border-top:0}.md-typeset table:not([class]) a{word-break:normal}.md-typeset__scrollwrap{margin:1em -0.8rem;overflow-x:auto;-webkit-overflow-scrolling:touch}.md-typeset .md-typeset__table{display:inline-block;margin-bottom:.5em;padding:0 .8rem}.md-typeset .md-typeset__table table{display:table;width:100%;margin:0;overflow:hidden}html{height:100%;background-color:var(--md-default-bg-color);font-size:125%;overflow-x:hidden}body{display:flex;position:relative;flex-direction:column;width:100%;min-height:100%;font-size:.5rem}hr{display:block;height:.05rem;padding:0;border:0}.md-grid{max-width:61rem;margin-right:auto;margin-left:auto}.md-container{display:flex;flex-direction:column;flex-grow:1}.md-main{flex-grow:1}.md-main__inner{height:100%;padding-top:1.5rem;padding-bottom:.05rem}.md-ellipsis{display:block;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.md-toggle{display:none}.md-overlay{position:fixed;top:0;width:0;height:0;transition:width 0ms 250ms,height 0ms 250ms,opacity 250ms;background-color:var(--md-default-fg-color--light);opacity:0;z-index:3}.md-skip{position:fixed;margin:.5rem;padding:.3rem .5rem;transform:translateY(0.4rem);border-radius:.1rem;background-color:var(--md-default-fg-color);color:var(--md-default-bg-color);font-size:.64rem;opacity:0}.md-skip:focus{transform:translateY(0);transition:transform 250ms cubic-bezier(0.4, 0, 0.2, 1),opacity 175ms 75ms;opacity:1;z-index:10}@page{margin:25mm}.md-announce{background-color:var(--md-default-fg-color)}.md-announce__inner{min-height:2.4rem;padding:0 .8rem;color:var(--md-default-bg-color);font-size:.7rem;line-height:2.4rem}.md-clipboard{position:absolute;top:.4rem;right:.4rem;width:1.2rem;height:1.2rem;transition:color 250ms;border-radius:.1rem;color:var(--md-default-fg-color--lightest);cursor:pointer;z-index:1;-webkit-backface-visibility:hidden;backface-visibility:hidden}.md-clipboard svg{width:.9rem;height:.9rem}pre:hover .md-clipboard{color:var(--md-default-fg-color--light)}pre .md-clipboard:focus,pre .md-clipboard:hover{color:var(--md-accent-fg-color)}.md-content__inner{margin:0 .8rem 1.2rem;padding-top:.6rem}.md-content__inner::before{display:block;height:.4rem;content:""}.md-content__inner>:last-child{margin-bottom:0}.md-content__button{margin:.4rem 0;margin-left:.4rem;padding:0;float:right}[dir=rtl] .md-content__button{margin-right:.4rem;margin-left:initial;float:left}[dir=rtl] .md-content__button svg{transform:scaleX(-1)}.md-typeset .md-content__button{color:var(--md-default-fg-color--lighter)}.md-content__button svg{display:inline;vertical-align:top}.md-dialog{box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12),0 3px 1px -2px rgba(0,0,0,.2);display:block;position:fixed;right:.8rem;bottom:.8rem;left:initial;min-width:11.1rem;padding:.4rem .6rem;transform:translateY(100%);transition:transform 0ms 400ms,opacity 400ms;border:none;border-radius:.1rem;background:var(--md-default-fg-color);color:var(--md-default-bg-color);font-size:.7rem;opacity:0;z-index:2}[dir=rtl] .md-dialog{right:initial;left:.8rem}.md-dialog[data-md-state=open]{transform:translateY(0);transition:transform 400ms cubic-bezier(0.075, 0.85, 0.175, 1),opacity 400ms;opacity:1}.md-header{position:-webkit-sticky;position:sticky;top:0;right:0;left:0;height:2.4rem;transition:background-color 250ms,color 250ms;background-color:var(--md-primary-fg-color);color:var(--md-primary-bg-color);box-shadow:0 0 .2rem rgba(0,0,0,0),0 .2rem .4rem rgba(0,0,0,0);-webkit-backface-visibility:hidden;backface-visibility:hidden;z-index:2}.no-js .md-header{transition:none;box-shadow:none}.md-header[data-md-state=shadow]{transition:background-color 250ms,color 250ms,box-shadow 250ms;box-shadow:0 0 .2rem rgba(0,0,0,.1),0 .2rem .4rem rgba(0,0,0,.2)}.md-header-nav{display:flex;padding:0 .2rem}.md-header-nav__button{position:relative;margin:.2rem;padding:.4rem;transition:opacity 250ms;cursor:pointer;z-index:1}[dir=rtl] .md-header-nav__button svg{transform:scaleX(-1)}.md-header-nav__button:focus,.md-header-nav__button:hover{opacity:.7}.md-header-nav__button.md-logo{margin:.2rem;padding:.4rem}.md-header-nav__button.md-logo img,.md-header-nav__button.md-logo svg{display:block;width:1.2rem;height:1.2rem;fill:currentColor}.no-js .md-header-nav__button[for=__search]{display:none}.md-header-nav__topic{display:block;position:absolute;width:100%;padding:0 1rem;transition:transform 400ms cubic-bezier(0.1, 0.7, 0.1, 1),opacity 150ms;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.md-header-nav__topic+.md-header-nav__topic{transform:translateX(1.25rem);transition:transform 400ms cubic-bezier(1, 0.7, 0.1, 0.1),opacity 150ms;opacity:0;z-index:-1;pointer-events:none}[dir=rtl] .md-header-nav__topic+.md-header-nav__topic{transform:translateX(-1.25rem)}.no-js .md-header-nav__topic{position:initial}.no-js .md-header-nav__topic+.md-header-nav__topic{display:none}.md-header-nav__title{flex-grow:1;font-size:.9rem;line-height:2.4rem}.md-header-nav__title[data-md-state=active] .md-header-nav__topic{transform:translateX(-1.25rem);transition:transform 400ms cubic-bezier(1, 0.7, 0.1, 0.1),opacity 150ms;opacity:0;z-index:-1;pointer-events:none}[dir=rtl] .md-header-nav__title[data-md-state=active] .md-header-nav__topic{transform:translateX(1.25rem)}.md-header-nav__title[data-md-state=active] .md-header-nav__topic+.md-header-nav__topic{transform:translateX(0);transition:transform 400ms cubic-bezier(0.1, 0.7, 0.1, 1),opacity 150ms;opacity:1;z-index:0;pointer-events:initial}.md-header-nav__title>.md-header-nav__ellipsis{position:relative;width:100%;height:100%}.md-header-nav__source{display:none}.md-hero{transition:background 250ms;background-color:var(--md-primary-fg-color);color:var(--md-primary-bg-color);font-size:1rem;overflow:hidden}.md-hero__inner{margin-top:1rem;padding:.8rem .8rem .4rem;transition:transform 400ms cubic-bezier(0.1, 0.7, 0.1, 1),opacity 250ms;transition-delay:100ms}[data-md-state=hidden] .md-hero__inner{pointer-events:none;transform:translateY(0.625rem);transition:transform 0ms 400ms,opacity 100ms 0ms;opacity:0}.md-hero--expand .md-hero__inner{margin-bottom:1.2rem}.md-footer{background-color:var(--md-default-fg-color);color:var(--md-default-bg-color)}.md-footer-nav__inner{padding:.2rem;overflow:auto}.md-footer-nav__link{display:flex;padding-top:1.4rem;padding-bottom:.4rem;transition:opacity 250ms}.md-footer-nav__link:focus,.md-footer-nav__link:hover{opacity:.7}.md-footer-nav__link--prev{width:25%;float:left}[dir=rtl] .md-footer-nav__link--prev{float:right}[dir=rtl] .md-footer-nav__link--prev svg{transform:scaleX(-1)}.md-footer-nav__link--next{width:75%;float:right;text-align:right}[dir=rtl] .md-footer-nav__link--next{float:left;text-align:left}[dir=rtl] .md-footer-nav__link--next svg{transform:scaleX(-1)}.md-footer-nav__title{position:relative;flex-grow:1;max-width:calc(100% - 2.4rem);padding:0 1rem;font-size:.9rem;line-height:2.4rem}.md-footer-nav__button{margin:.2rem;padding:.4rem}.md-footer-nav__direction{position:absolute;right:0;left:0;margin-top:-1rem;padding:0 1rem;color:var(--md-default-bg-color--light);font-size:.75rem}.md-footer-meta{background-color:var(--md-default-fg-color--lighter)}.md-footer-meta__inner{padding:.2rem;overflow:auto}html .md-footer-meta.md-typeset a{color:var(--md-default-bg-color--light)}html .md-footer-meta.md-typeset a:focus,html .md-footer-meta.md-typeset a:hover{color:var(--md-default-bg-color)}.md-footer-copyright{margin:0 .6rem;padding:.4rem 0;color:var(--md-default-bg-color--lighter);font-size:.64rem}.md-footer-copyright__highlight{color:var(--md-default-bg-color--light)}.md-footer-social{margin:0 .4rem;padding:.2rem 0 .6rem}.md-footer-social__link{display:inline-block;width:1.6rem;height:1.6rem;transition:color 250ms;text-align:center}.md-footer-social__link::before{line-height:1.9}.md-footer-social__link svg{width:.8rem;vertical-align:-25%;fill:currentColor}.md-nav{font-size:.7rem;line-height:1.3}.md-nav__title{display:block;padding:0 .6rem;font-weight:700;text-overflow:ellipsis;overflow:hidden}.md-nav__title .md-nav__button{display:none}.md-nav__title .md-nav__button img{width:100%;height:auto}.md-nav__title .md-nav__button.md-logo svg img,.md-nav__title .md-nav__button.md-logo svg svg{display:block;width:1.2rem;height:1.2rem;fill:currentColor}.md-nav__list{margin:0;padding:0;list-style:none}.md-nav__item{padding:0 .6rem}.md-nav__item:last-child{padding-bottom:.6rem}.md-nav__item .md-nav__item{padding-right:0}[dir=rtl] .md-nav__item .md-nav__item{padding-right:.6rem;padding-left:0}.md-nav__item .md-nav__item:last-child{padding-bottom:0}.md-nav__link{display:block;margin-top:.625em;transition:color 125ms;text-overflow:ellipsis;cursor:pointer;overflow:hidden;scroll-snap-align:start}html .md-nav__link[for=__toc]{display:none}html .md-nav__link[for=__toc]~.md-nav{display:none}.md-nav__link[data-md-state=blur]{color:var(--md-default-fg-color--light)}.md-nav__item .md-nav__link--active{color:var(--md-primary-fg-color)}.md-nav__item--nested>.md-nav__link{color:inherit}.md-nav__link:focus,.md-nav__link:hover{color:var(--md-accent-fg-color)}.md-nav__source{display:none}.md-search{position:relative}.no-js .md-search{display:none}.md-search__overlay{opacity:0;z-index:1}.md-search__inner{-webkit-backface-visibility:hidden;backface-visibility:hidden}.md-search__form{position:relative}.md-search__input{position:relative;padding:0 2.2rem 0 3.6rem;text-overflow:ellipsis;z-index:2}[dir=rtl] .md-search__input{padding:0 3.6rem 0 2.2rem}.md-search__input::-webkit-input-placeholder{-webkit-transition:color 250ms cubic-bezier(0.1, 0.7, 0.1, 1);transition:color 250ms cubic-bezier(0.1, 0.7, 0.1, 1)}.md-search__input::-moz-placeholder{-moz-transition:color 250ms cubic-bezier(0.1, 0.7, 0.1, 1);transition:color 250ms cubic-bezier(0.1, 0.7, 0.1, 1)}.md-search__input::-ms-input-placeholder{-ms-transition:color 250ms cubic-bezier(0.1, 0.7, 0.1, 1);transition:color 250ms cubic-bezier(0.1, 0.7, 0.1, 1)}.md-search__input::placeholder{transition:color 250ms cubic-bezier(0.1, 0.7, 0.1, 1)}.md-search__input::-webkit-input-placeholder{color:var(--md-default-fg-color--light)}.md-search__input::-moz-placeholder{color:var(--md-default-fg-color--light)}.md-search__input::-ms-input-placeholder{color:var(--md-default-fg-color--light)}.md-search__input~.md-search__icon,.md-search__input::placeholder{color:var(--md-default-fg-color--light)}.md-search__input::-ms-clear{display:none}.md-search__icon{position:absolute;width:1.2rem;height:1.2rem;transition:color 250ms cubic-bezier(0.1, 0.7, 0.1, 1),opacity 250ms;cursor:pointer;z-index:2}.md-search__icon:hover{opacity:.7}.md-search__icon[for=__search]{top:.3rem;left:.5rem}[dir=rtl] .md-search__icon[for=__search]{right:.5rem;left:initial}[dir=rtl] .md-search__icon[for=__search] svg{transform:scaleX(-1)}.md-search__icon[type=reset]{top:.3rem;right:.5rem;transform:scale(0.75);transition:transform 150ms cubic-bezier(0.1, 0.7, 0.1, 1),opacity 150ms;opacity:0;pointer-events:none}[dir=rtl] .md-search__icon[type=reset]{right:initial;left:.5rem}[data-md-toggle=search]:checked~.md-header .md-search__input:valid~.md-search__icon[type=reset]{transform:scale(1);opacity:1;pointer-events:initial}[data-md-toggle=search]:checked~.md-header .md-search__input:valid~.md-search__icon[type=reset]:hover{opacity:.7}.md-search__output{position:absolute;width:100%;border-radius:0 0 .1rem .1rem;overflow:hidden;z-index:1}.md-search__scrollwrap{height:100%;background-color:var(--md-default-bg-color);box-shadow:inset 0 .05rem 0 var(--md-default-fg-color--lightest);overflow-y:auto;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-scroll-snap-type:y mandatory;-ms-scroll-snap-type:y mandatory;scroll-snap-type:y mandatory;-webkit-overflow-scrolling:touch}.md-search-result{color:var(--md-default-fg-color);word-break:break-word}.md-search-result__meta{padding:0 .8rem;background-color:var(--md-default-fg-color--lightest);color:var(--md-default-fg-color--light);font-size:.64rem;line-height:1.8rem;scroll-snap-align:start}.md-search-result__list{margin:0;padding:0;border-top:.05rem solid var(--md-default-fg-color--lightest);list-style:none}.md-search-result__item{box-shadow:0 -0.05rem 0 var(--md-default-fg-color--lightest)}.md-search-result__link{display:block;transition:background 250ms;outline:0;overflow:hidden;scroll-snap-align:start}.md-search-result__link:focus,.md-search-result__link:hover{background-color:var(--md-accent-fg-color--transparent)}.md-search-result__link:focus .md-search-result__article::before,.md-search-result__link:hover .md-search-result__article::before{opacity:.7}.md-search-result__link:last-child .md-search-result__teaser{margin-bottom:.6rem}.md-search-result__article{position:relative;padding:0 .8rem;overflow:auto}.md-search-result__article--document .md-search-result__title{margin:.55rem 0;font-size:.8rem;font-weight:400;line-height:1.4}.md-search-result__icon{position:absolute;left:0;margin:.1rem;padding:.4rem;color:var(--md-default-fg-color--light)}[dir=rtl] .md-search-result__icon{right:0;left:initial}[dir=rtl] .md-search-result__icon svg{transform:scaleX(-1)}.md-search-result__title{margin:.5em 0;font-size:.64rem;font-weight:700;line-height:1.4}.md-search-result__teaser{display:-webkit-box;max-height:1.65rem;margin:.5em 0;color:var(--md-default-fg-color--light);font-size:.64rem;line-height:1.4;text-overflow:ellipsis;overflow:hidden;-webkit-box-orient:vertical;-webkit-line-clamp:2}.md-search-result em{font-style:normal;font-weight:700;text-decoration:underline}.md-sidebar{position:absolute;width:12.1rem;padding:1.2rem 0;overflow:hidden}.md-sidebar[data-md-state=lock]{position:fixed;top:2.4rem}.md-sidebar--secondary{display:none}.md-sidebar__scrollwrap{max-height:100%;margin:0 .2rem;overflow-y:auto;-webkit-scroll-snap-type:y mandatory;-ms-scroll-snap-type:y mandatory;scroll-snap-type:y mandatory;-webkit-backface-visibility:hidden;backface-visibility:hidden}.md-sidebar__scrollwrap::-webkit-scrollbar{width:.2rem;height:.2rem}.md-sidebar__scrollwrap::-webkit-scrollbar-thumb{background-color:var(--md-default-fg-color--lighter)}.md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:var(--md-accent-fg-color)}@-webkit-keyframes md-source__facts--done{0%{height:0}100%{height:.65rem}}@keyframes md-source__facts--done{0%{height:0}100%{height:.65rem}}@-webkit-keyframes md-source__fact--done{0%{transform:translateY(100%);opacity:0}50%{opacity:0}100%{transform:translateY(0%);opacity:1}}@keyframes md-source__fact--done{0%{transform:translateY(100%);opacity:0}50%{opacity:0}100%{transform:translateY(0%);opacity:1}}.md-source{display:block;padding-right:.6rem;transition:opacity 250ms;font-size:.65rem;line-height:1.2;white-space:nowrap;-webkit-backface-visibility:hidden;backface-visibility:hidden}[dir=rtl] .md-source{padding-right:initial;padding-left:.6rem}.md-source:hover{opacity:.7}.md-source__icon{display:inline-block;width:2.4rem;height:2.4rem;vertical-align:middle}.md-source__icon svg{margin-top:.6rem;margin-left:.6rem}[dir=rtl] .md-source__icon svg{margin-right:.6rem;margin-left:initial}.md-source__icon+.md-source__repository{margin-left:-2rem;padding-left:2rem}[dir=rtl] .md-source__icon+.md-source__repository{margin-right:-2rem;margin-left:initial;padding-right:2rem;padding-left:initial}.md-source__repository{display:inline-block;max-width:100%;margin-left:.6rem;font-weight:700;text-overflow:ellipsis;overflow:hidden;vertical-align:middle}.md-source__facts{margin:0;padding:0;font-size:.55rem;font-weight:700;list-style-type:none;opacity:.75;overflow:hidden}[data-md-state=done] .md-source__facts{-webkit-animation:md-source__facts--done 250ms ease-in;animation:md-source__facts--done 250ms ease-in}.md-source__fact{float:left}[dir=rtl] .md-source__fact{float:right}[data-md-state=done] .md-source__fact{-webkit-animation:md-source__fact--done 400ms ease-out;animation:md-source__fact--done 400ms ease-out}.md-source__fact::before{margin:0 .1rem;content:"·"}.md-source__fact:first-child::before{display:none}.md-tabs{width:100%;transition:background 250ms;background-color:var(--md-primary-fg-color);color:var(--md-primary-bg-color);overflow:auto}.no-js .md-tabs{transition:none}.md-tabs__list{margin:0;margin-left:.2rem;padding:0;list-style:none;white-space:nowrap}[dir=rtl] .md-tabs__list{margin-right:.2rem;margin-left:initial}.md-tabs__item{display:inline-block;height:2.4rem;padding-right:.6rem;padding-left:.6rem}.md-tabs__link{display:block;margin-top:.8rem;transition:transform 400ms cubic-bezier(0.1, 0.7, 0.1, 1),opacity 250ms;font-size:.7rem;opacity:.7}.no-js .md-tabs__link{transition:none}.md-tabs__link--active,.md-tabs__link:hover{color:inherit;opacity:1}.md-tabs__item:nth-child(2) .md-tabs__link{transition-delay:20ms}.md-tabs__item:nth-child(3) .md-tabs__link{transition-delay:40ms}.md-tabs__item:nth-child(4) .md-tabs__link{transition-delay:60ms}.md-tabs__item:nth-child(5) .md-tabs__link{transition-delay:80ms}.md-tabs__item:nth-child(6) .md-tabs__link{transition-delay:100ms}.md-tabs__item:nth-child(7) .md-tabs__link{transition-delay:120ms}.md-tabs__item:nth-child(8) .md-tabs__link{transition-delay:140ms}.md-tabs__item:nth-child(9) .md-tabs__link{transition-delay:160ms}.md-tabs__item:nth-child(10) .md-tabs__link{transition-delay:180ms}.md-tabs__item:nth-child(11) .md-tabs__link{transition-delay:200ms}.md-tabs__item:nth-child(12) .md-tabs__link{transition-delay:220ms}.md-tabs__item:nth-child(13) .md-tabs__link{transition-delay:240ms}.md-tabs__item:nth-child(14) .md-tabs__link{transition-delay:260ms}.md-tabs__item:nth-child(15) .md-tabs__link{transition-delay:280ms}.md-tabs__item:nth-child(16) .md-tabs__link{transition-delay:300ms}.md-tabs[data-md-state=hidden]{pointer-events:none}.md-tabs[data-md-state=hidden] .md-tabs__link{transform:translateY(50%);transition:color 250ms,transform 0ms 400ms,opacity 100ms;opacity:0}.md-typeset .admonition,.md-typeset details{margin:1.5625em 0;padding:0 .6rem;border-left:.2rem solid #448aff;border-radius:.1rem;font-size:.64rem;box-shadow:0 .2rem .5rem rgba(0,0,0,.05),0 0 .05rem rgba(0,0,0,.1);overflow:auto}[dir=rtl] .md-typeset .admonition,[dir=rtl] .md-typeset details{border-right:.2rem solid #448aff;border-left:none}html .md-typeset .admonition>:last-child,html .md-typeset details>:last-child{margin-bottom:.6rem}.md-typeset .admonition .admonition,.md-typeset details .admonition,.md-typeset .admonition details,.md-typeset details details{margin:1em 0}.md-typeset .admonition.tldr,.md-typeset details.tldr,.md-typeset .admonition.summary,.md-typeset details.summary,.md-typeset .admonition.abstract,.md-typeset details.abstract{border-left-color:#00b0ff}.md-typeset .admonition.tldr>:first-child,.md-typeset details.tldr>:first-child,.md-typeset .admonition.summary>:first-child,.md-typeset details.summary>:first-child,.md-typeset .admonition.abstract>:first-child,.md-typeset details.abstract>:first-child{background-color:rgba(0,176,255,.1)}.md-typeset .admonition.tldr>:first-child::before,.md-typeset details.tldr>:first-child::before,.md-typeset .admonition.summary>:first-child::before,.md-typeset details.summary>:first-child::before,.md-typeset .admonition.abstract>:first-child::before,.md-typeset details.abstract>:first-child::before{background-color:#00b0ff;-webkit-mask-image:url("data:image/svg+xml;utf8,");mask-image:url("data:image/svg+xml;utf8,")}.md-typeset .admonition.todo,.md-typeset details.todo,.md-typeset .admonition.info,.md-typeset details.info{border-left-color:#00b8d4}.md-typeset .admonition.todo>:first-child,.md-typeset details.todo>:first-child,.md-typeset .admonition.info>:first-child,.md-typeset details.info>:first-child{background-color:rgba(0,184,212,.1)}.md-typeset .admonition.todo>:first-child::before,.md-typeset details.todo>:first-child::before,.md-typeset .admonition.info>:first-child::before,.md-typeset details.info>:first-child::before{background-color:#00b8d4;-webkit-mask-image:url("data:image/svg+xml;utf8,");mask-image:url("data:image/svg+xml;utf8,")}.md-typeset .admonition.important,.md-typeset details.important,.md-typeset .admonition.hint,.md-typeset details.hint,.md-typeset .admonition.tip,.md-typeset details.tip{border-left-color:#00bfa5}.md-typeset .admonition.important>:first-child,.md-typeset details.important>:first-child,.md-typeset .admonition.hint>:first-child,.md-typeset details.hint>:first-child,.md-typeset .admonition.tip>:first-child,.md-typeset details.tip>:first-child{background-color:rgba(0,191,165,.1)}.md-typeset .admonition.important>:first-child::before,.md-typeset details.important>:first-child::before,.md-typeset .admonition.hint>:first-child::before,.md-typeset details.hint>:first-child::before,.md-typeset .admonition.tip>:first-child::before,.md-typeset details.tip>:first-child::before{background-color:#00bfa5;-webkit-mask-image:url("data:image/svg+xml;utf8,");mask-image:url("data:image/svg+xml;utf8,")}.md-typeset .admonition.done,.md-typeset details.done,.md-typeset .admonition.check,.md-typeset details.check,.md-typeset .admonition.success,.md-typeset details.success{border-left-color:#00c853}.md-typeset .admonition.done>:first-child,.md-typeset details.done>:first-child,.md-typeset .admonition.check>:first-child,.md-typeset details.check>:first-child,.md-typeset .admonition.success>:first-child,.md-typeset details.success>:first-child{background-color:rgba(0,200,83,.1)}.md-typeset .admonition.done>:first-child::before,.md-typeset details.done>:first-child::before,.md-typeset .admonition.check>:first-child::before,.md-typeset details.check>:first-child::before,.md-typeset .admonition.success>:first-child::before,.md-typeset details.success>:first-child::before{background-color:#00c853;-webkit-mask-image:url("data:image/svg+xml;utf8,");mask-image:url("data:image/svg+xml;utf8,")}.md-typeset .admonition.faq,.md-typeset details.faq,.md-typeset .admonition.help,.md-typeset details.help,.md-typeset .admonition.question,.md-typeset details.question{border-left-color:#64dd17}.md-typeset .admonition.faq>:first-child,.md-typeset details.faq>:first-child,.md-typeset .admonition.help>:first-child,.md-typeset details.help>:first-child,.md-typeset .admonition.question>:first-child,.md-typeset details.question>:first-child{background-color:rgba(100,221,23,.1)}.md-typeset .admonition.faq>:first-child::before,.md-typeset details.faq>:first-child::before,.md-typeset .admonition.help>:first-child::before,.md-typeset details.help>:first-child::before,.md-typeset .admonition.question>:first-child::before,.md-typeset details.question>:first-child::before{background-color:#64dd17;-webkit-mask-image:url("data:image/svg+xml;utf8,");mask-image:url("data:image/svg+xml;utf8,")}.md-typeset .admonition.attention,.md-typeset details.attention,.md-typeset .admonition.caution,.md-typeset details.caution,.md-typeset .admonition.warning,.md-typeset details.warning{border-left-color:#ff9100}.md-typeset .admonition.attention>:first-child,.md-typeset details.attention>:first-child,.md-typeset .admonition.caution>:first-child,.md-typeset details.caution>:first-child,.md-typeset .admonition.warning>:first-child,.md-typeset details.warning>:first-child{background-color:rgba(255,145,0,.1)}.md-typeset .admonition.attention>:first-child::before,.md-typeset details.attention>:first-child::before,.md-typeset .admonition.caution>:first-child::before,.md-typeset details.caution>:first-child::before,.md-typeset .admonition.warning>:first-child::before,.md-typeset details.warning>:first-child::before{background-color:#ff9100;-webkit-mask-image:url("data:image/svg+xml;utf8,");mask-image:url("data:image/svg+xml;utf8,")}.md-typeset .admonition.missing,.md-typeset details.missing,.md-typeset .admonition.fail,.md-typeset details.fail,.md-typeset .admonition.failure,.md-typeset details.failure{border-left-color:#ff5252}.md-typeset .admonition.missing>:first-child,.md-typeset details.missing>:first-child,.md-typeset .admonition.fail>:first-child,.md-typeset details.fail>:first-child,.md-typeset .admonition.failure>:first-child,.md-typeset details.failure>:first-child{background-color:rgba(255,82,82,.1)}.md-typeset .admonition.missing>:first-child::before,.md-typeset details.missing>:first-child::before,.md-typeset .admonition.fail>:first-child::before,.md-typeset details.fail>:first-child::before,.md-typeset .admonition.failure>:first-child::before,.md-typeset details.failure>:first-child::before{background-color:#ff5252;-webkit-mask-image:url("data:image/svg+xml;utf8,");mask-image:url("data:image/svg+xml;utf8,")}.md-typeset .admonition.error,.md-typeset details.error,.md-typeset .admonition.danger,.md-typeset details.danger{border-left-color:#ff1744}.md-typeset .admonition.error>:first-child,.md-typeset details.error>:first-child,.md-typeset .admonition.danger>:first-child,.md-typeset details.danger>:first-child{background-color:rgba(255,23,68,.1)}.md-typeset .admonition.error>:first-child::before,.md-typeset details.error>:first-child::before,.md-typeset .admonition.danger>:first-child::before,.md-typeset details.danger>:first-child::before{background-color:#ff1744;-webkit-mask-image:url("data:image/svg+xml;utf8,");mask-image:url("data:image/svg+xml;utf8,")}.md-typeset .admonition.bug,.md-typeset details.bug{border-left-color:#f50057}.md-typeset .admonition.bug>:first-child,.md-typeset details.bug>:first-child{background-color:rgba(245,0,87,.1)}.md-typeset .admonition.bug>:first-child::before,.md-typeset details.bug>:first-child::before{background-color:#f50057;-webkit-mask-image:url("data:image/svg+xml;utf8,");mask-image:url("data:image/svg+xml;utf8,")}.md-typeset .admonition.example,.md-typeset details.example{border-left-color:#651fff}.md-typeset .admonition.example>:first-child,.md-typeset details.example>:first-child{background-color:rgba(101,31,255,.1)}.md-typeset .admonition.example>:first-child::before,.md-typeset details.example>:first-child::before{background-color:#651fff;-webkit-mask-image:url("data:image/svg+xml;utf8,");mask-image:url("data:image/svg+xml;utf8,")}.md-typeset .admonition.cite,.md-typeset details.cite,.md-typeset .admonition.quote,.md-typeset details.quote{border-left-color:#9e9e9e}.md-typeset .admonition.cite>:first-child,.md-typeset details.cite>:first-child,.md-typeset .admonition.quote>:first-child,.md-typeset details.quote>:first-child{background-color:rgba(158,158,158,.1)}.md-typeset .admonition.cite>:first-child::before,.md-typeset details.cite>:first-child::before,.md-typeset .admonition.quote>:first-child::before,.md-typeset details.quote>:first-child::before{background-color:#9e9e9e;-webkit-mask-image:url("data:image/svg+xml;utf8,");mask-image:url("data:image/svg+xml;utf8,")}.md-typeset .admonition-title,.md-typeset summary{margin:0 -0.6rem;padding:.4rem .6rem .4rem 2rem;background-color:rgba(68,138,255,.1);font-weight:700}[dir=rtl] .md-typeset .admonition-title,[dir=rtl] .md-typeset summary{padding:.4rem 2rem .4rem .6rem}.md-typeset .admonition-title:last-child,.md-typeset summary:last-child{margin-bottom:0}.md-typeset .admonition-title::before,.md-typeset summary::before{position:absolute;width:1rem;height:1rem;margin-left:-1.4rem;background-color:#448aff;-webkit-mask-image:url("data:image/svg+xml;utf8,");mask-image:url("data:image/svg+xml;utf8,");content:""}[dir=rtl] .md-typeset .admonition-title::before,[dir=rtl] .md-typeset summary::before{margin-right:-1.4rem;margin-left:initial}.codehilite .o,.highlight .o{color:inherit}.codehilite .ow,.highlight .ow{color:inherit}.codehilite .ge,.highlight .ge{color:#000}.codehilite .gr,.highlight .gr{color:#a00}.codehilite .gh,.highlight .gh{color:#999}.codehilite .go,.highlight .go{color:#888}.codehilite .gp,.highlight .gp{color:#555}.codehilite .gs,.highlight .gs{color:inherit}.codehilite .gu,.highlight .gu{color:#aaa}.codehilite .gt,.highlight .gt{color:#a00}.codehilite .gd,.highlight .gd{background-color:#fdd}.codehilite .gi,.highlight .gi{background-color:#dfd}.codehilite .k,.highlight .k{color:#3b78e7}.codehilite .kc,.highlight .kc{color:#a71d5d}.codehilite .kd,.highlight .kd{color:#3b78e7}.codehilite .kn,.highlight .kn{color:#3b78e7}.codehilite .kp,.highlight .kp{color:#a71d5d}.codehilite .kr,.highlight .kr{color:#3e61a2}.codehilite .kt,.highlight .kt{color:#3e61a2}.codehilite .c,.highlight .c{color:#999}.codehilite .cm,.highlight .cm{color:#999}.codehilite .cp,.highlight .cp{color:#666}.codehilite .c1,.highlight .c1{color:#999}.codehilite .ch,.highlight .ch{color:#999}.codehilite .cs,.highlight .cs{color:#999}.codehilite .na,.highlight .na{color:#c2185b}.codehilite .nb,.highlight .nb{color:#c2185b}.codehilite .bp,.highlight .bp{color:#3e61a2}.codehilite .nc,.highlight .nc{color:#c2185b}.codehilite .no,.highlight .no{color:#3e61a2}.codehilite .nd,.highlight .nd{color:#666}.codehilite .ni,.highlight .ni{color:#666}.codehilite .ne,.highlight .ne{color:#c2185b}.codehilite .nf,.highlight .nf{color:#c2185b}.codehilite .nl,.highlight .nl{color:#3b5179}.codehilite .nn,.highlight .nn{color:#ec407a}.codehilite .nt,.highlight .nt{color:#3b78e7}.codehilite .nv,.highlight .nv{color:#3e61a2}.codehilite .vc,.highlight .vc{color:#3e61a2}.codehilite .vg,.highlight .vg{color:#3e61a2}.codehilite .vi,.highlight .vi{color:#3e61a2}.codehilite .nx,.highlight .nx{color:#ec407a}.codehilite .m,.highlight .m{color:#e74c3c}.codehilite .mf,.highlight .mf{color:#e74c3c}.codehilite .mh,.highlight .mh{color:#e74c3c}.codehilite .mi,.highlight .mi{color:#e74c3c}.codehilite .il,.highlight .il{color:#e74c3c}.codehilite .mo,.highlight .mo{color:#e74c3c}.codehilite .s,.highlight .s{color:#0d904f}.codehilite .sb,.highlight .sb{color:#0d904f}.codehilite .sc,.highlight .sc{color:#0d904f}.codehilite .sd,.highlight .sd{color:#999}.codehilite .s2,.highlight .s2{color:#0d904f}.codehilite .se,.highlight .se{color:#183691}.codehilite .sh,.highlight .sh{color:#183691}.codehilite .si,.highlight .si{color:#183691}.codehilite .sx,.highlight .sx{color:#183691}.codehilite .sr,.highlight .sr{color:#009926}.codehilite .s1,.highlight .s1{color:#0d904f}.codehilite .ss,.highlight .ss{color:#0d904f}.codehilite .err,.highlight .err{color:#a61717}.codehilite .w,.highlight .w{color:transparent}.codehilite .hll,.highlight .hll{display:block;margin:0 -0.6rem;padding:0 .6rem;background-color:rgba(255,235,59,.5)}.codehilitetable,.highlighttable{display:block;overflow:hidden}.codehilitetable tbody,.highlighttable tbody,.codehilitetable td,.highlighttable td{display:block;padding:0}.codehilitetable tr,.highlighttable tr{display:flex}.codehilitetable pre,.highlighttable pre,.codehilitetable .linenodiv,.highlighttable .linenodiv{margin:0;border-radius:0}.codehilitetable .linenodiv,.highlighttable .linenodiv{padding:.525rem .6rem}.codehilitetable .linenos,.highlighttable .linenos{color:var(--md-default-fg-color--lighter);box-shadow:inset 0 0 0 .05rem var(--md-code-bg-color);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.codehilitetable .linenos pre,.highlighttable .linenos pre{background-color:transparent;color:inherit;text-align:right}.codehilitetable .code,.highlighttable .code{flex:1;overflow:hidden}.md-typeset>.codehilitetable,.md-typeset>.highlighttable{margin:1em 0;border-radius:.2em}.md-typeset [id^="fnref:"]{display:inline-block}.md-typeset [id^="fnref:"]:target{margin-top:-3.8rem;padding-top:3.8rem;pointer-events:none}.md-typeset [id^="fn:"]::before{display:none;height:0;content:""}.md-typeset [id^="fn:"]:target::before{display:block;margin-top:-3.5rem;padding-top:3.5rem;pointer-events:none}.md-typeset .footnote{color:var(--md-default-fg-color--light);font-size:.64rem}.md-typeset .footnote ol{margin-left:0}.md-typeset .footnote li{transition:color 250ms}.md-typeset .footnote li:target{color:var(--md-default-fg-color)}.md-typeset .footnote li :first-child{margin-top:0}.md-typeset .footnote li:hover .footnote-backref,.md-typeset .footnote li:target .footnote-backref{transform:translateX(0);opacity:1}.md-typeset .footnote li:hover .footnote-backref:hover,.md-typeset .footnote li:target .footnote-backref{color:var(--md-accent-fg-color)}.md-typeset .footnote-ref{display:inline-block;pointer-events:initial}.md-typeset .footnote-ref::before{display:inline;margin:0 .2em;border-left:.05rem solid var(--md-default-fg-color--lighter);font-size:1.25em;content:"";vertical-align:-0.25rem}.md-typeset .footnote-backref{display:inline-block;transform:translateX(0.25rem);transition:transform 250ms 250ms,color 250ms,opacity 125ms 250ms;color:var(--md-default-fg-color--lighter);font-size:0;opacity:0;vertical-align:text-bottom}[dir=rtl] .md-typeset .footnote-backref{transform:translateX(-0.25rem)}.md-typeset .footnote-backref::before{display:inline-block;width:.8rem;height:.8rem;background-color:currentColor;-webkit-mask-image:url("data:image/svg+xml;utf8,");mask-image:url("data:image/svg+xml;utf8,");content:""}[dir=rtl] .md-typeset .footnote-backref::before svg{transform:scaleX(-1)}.md-typeset .headerlink{display:inline-block;margin-left:.5rem;transform:translate(0, 0.25rem);transition:transform 250ms 250ms,color 250ms,opacity 125ms 250ms,visibility 0ms 500ms;opacity:0;visibility:hidden}[dir=rtl] .md-typeset .headerlink{margin-right:.5rem;margin-left:initial}html body .md-typeset .headerlink{color:var(--md-default-fg-color--lighter)}.md-typeset :hover .headerlink,.md-typeset :target .headerlink,.md-typeset .headerlink:focus{transform:translate(0, 0);transition:transform 250ms 250ms,color 250ms,opacity 125ms 250ms,visibility 0ms;opacity:1;visibility:visible}.md-typeset .headerlink:focus,.md-typeset .headerlink:hover,.md-typeset :target .headerlink{color:var(--md-accent-fg-color)}.md-typeset h3[id]::before,.md-typeset h2[id]::before,.md-typeset h1[id]::before{display:block;margin-top:-0.4rem;padding-top:.4rem;content:""}.md-typeset h3[id]:target::before,.md-typeset h2[id]:target::before,.md-typeset h1[id]:target::before{margin-top:-3.4rem;padding-top:3.4rem}.md-typeset h4[id]::before{display:block;margin-top:-0.45rem;padding-top:.45rem;content:""}.md-typeset h4[id]:target::before{margin-top:-3.45rem;padding-top:3.45rem}.md-typeset h6[id]::before,.md-typeset h5[id]::before{display:block;margin-top:-0.6rem;padding-top:.6rem;content:""}.md-typeset h6[id]:target::before,.md-typeset h5[id]:target::before{margin-top:-3.6rem;padding-top:3.6rem}.md-typeset .MJXc-display{margin:.75em 0;padding:.75em 0;overflow:auto;-webkit-overflow-scrolling:touch}.md-typeset .MathJax_CHTML{outline:0}.md-typeset del.critic,.md-typeset ins.critic,.md-typeset .critic.comment{margin:0 .25em;padding:.0625em 0;border-radius:.1rem;-webkit-box-decoration-break:clone;box-decoration-break:clone}.md-typeset del.critic{background-color:#fdd;box-shadow:.25em 0 0 #fdd,-0.25em 0 0 #fdd}.md-typeset ins.critic{background-color:#dfd;box-shadow:.25em 0 0 #dfd,-0.25em 0 0 #dfd}.md-typeset .critic.comment{color:#999}.md-typeset .critic.comment::before{content:"/* "}.md-typeset .critic.comment::after{content:" */"}.md-typeset .critic.block{display:block;margin:1em 0;padding-right:.8rem;padding-left:.8rem;box-shadow:none}.md-typeset .critic.block :first-child{margin-top:.5em}.md-typeset .critic.block :last-child{margin-bottom:.5em}.md-typeset details{display:block;padding-top:0}.md-typeset details[open]>summary::after{transform:rotate(180deg)}.md-typeset details:not([open]){padding-bottom:0}.md-typeset details:not([open])>summary{border-bottom:none}.md-typeset details summary{position:relative;padding-right:2rem}[dir=rtl] .md-typeset details summary{padding-left:2rem}.md-typeset summary{display:block;outline:none;cursor:pointer}.md-typeset summary::-webkit-details-marker{display:none}.md-typeset summary::after{position:absolute;right:.6rem;width:1rem;height:1rem;background-color:var(--md-default-fg-color--lighter);-webkit-mask-image:url("data:image/svg+xml;utf8,");mask-image:url("data:image/svg+xml;utf8,");content:""}[dir=rtl] .md-typeset summary::after{right:initial;left:.6rem}.md-typeset .emojione,.md-typeset .twemoji,.md-typeset .gemoji{width:1rem;vertical-align:text-top}.highlight [data-linenos]::before{display:inline-block;position:-webkit-sticky;position:sticky;left:-0.6rem;margin-right:.6rem;margin-left:-0.6rem;padding-left:.6rem;border-right:.05rem solid var(--md-default-fg-color--lightest);color:var(--md-default-fg-color--lighter);content:attr(data-linenos);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.md-typeset code.codehilite,.md-typeset code.highlight{margin:0 .2941176471em;padding:.0735294118em 0}.md-typeset .tabbed-content{display:none;order:99;width:100%;background-color:var(--md-code-bg-color)}.md-typeset .tabbed-content pre{margin:0;border-radius:0}.md-typeset .tabbed-set{display:flex;position:relative;flex-wrap:wrap;margin:1em 0;border:.05rem solid var(--md-default-fg-color--lightest);border-radius:.1rem}.md-typeset .tabbed-set>input{display:none}.md-typeset .tabbed-set>input:checked+label{border-color:var(--md-accent-fg-color);color:var(--md-accent-fg-color)}.md-typeset .tabbed-set>input:checked+label+.tabbed-content{display:block;padding:0 .6rem}.md-typeset .tabbed-set>input:checked+label+.tabbed-content>:last-child{margin-bottom:.6rem}.md-typeset .tabbed-set>input:checked+label+.tabbed-content>pre:only-child,.md-typeset .tabbed-set>input:checked+label+.tabbed-content>.highlight:only-child,.md-typeset .tabbed-set>input:checked+label+.tabbed-content>.highlighttable:only-child,.md-typeset .tabbed-set>input:checked+label+.tabbed-content>.codehilite:only-child,.md-typeset .tabbed-set>input:checked+label+.tabbed-content>.codehilitetable:only-child{margin:0 -0.6rem}.md-typeset .tabbed-set>input:checked+label+.tabbed-content>pre:only-child pre,.md-typeset .tabbed-set>input:checked+label+.tabbed-content>.highlight:only-child pre,.md-typeset .tabbed-set>input:checked+label+.tabbed-content>.highlighttable:only-child pre,.md-typeset .tabbed-set>input:checked+label+.tabbed-content>.codehilite:only-child pre,.md-typeset .tabbed-set>input:checked+label+.tabbed-content>.codehilitetable:only-child pre{background:transparent}.md-typeset .tabbed-set>label{width:auto;padding:.6rem;padding-bottom:.5rem;transition:color 125ms,border 250ms;border-bottom:.1rem solid transparent;color:var(--md-default-fg-color--light);font-size:.64rem;font-weight:700;cursor:pointer}html .md-typeset .tabbed-set>label:hover{color:var(--md-accent-fg-color)}.md-typeset .task-list-item{position:relative;list-style-type:none}.md-typeset .task-list-item [type=checkbox]{position:absolute;top:.45em;left:-2em}[dir=rtl] .md-typeset .task-list-item [type=checkbox]{right:-2em;left:initial}.md-typeset .task-list-control .task-list-indicator::before{position:absolute;top:.15em;left:-1.5em;width:1.25em;height:1.25em;background-color:var(--md-default-fg-color--lightest);-webkit-mask-image:url("data:image/svg+xml;utf8,");mask-image:url("data:image/svg+xml;utf8,");content:""}[dir=rtl] .md-typeset .task-list-control .task-list-indicator::before{right:-1.5em;left:initial}.md-typeset .task-list-control [type=checkbox]:checked+.task-list-indicator::before{background-color:#00e676;-webkit-mask-image:url("data:image/svg+xml;utf8,");mask-image:url("data:image/svg+xml;utf8,")}.md-typeset .task-list-control [type=checkbox]{opacity:0;z-index:-1}@media print{.md-typeset a::after{color:var(--md-default-fg-color--light);content:" [" attr(href) "]"}.md-typeset code,.md-typeset pre,.md-typeset kbd{white-space:pre-wrap}.md-clipboard{display:none}.md-content__button{display:none}.md-dialog{display:none}.md-header{display:none}.md-footer{display:none}.md-sidebar{display:none}.md-tabs{display:none}.md-typeset .headerlink{display:none}}@media screen and (max-width: 44.9375em){.md-typeset>pre{margin:1em -0.8rem;border-radius:0}.md-typeset>pre>code{padding:.525rem .8rem}.md-footer-nav__link--prev .md-footer-nav__title{display:none}.md-search-result__teaser{max-height:2.5rem;-webkit-line-clamp:3}.codehilite .hll,.highlight .hll{margin:0 -0.8rem;padding:0 .8rem}.md-typeset>.codehilite,.md-typeset>.highlight{margin:1em -0.8rem}.md-typeset>.codehilite code,.md-typeset>.highlight code{padding:.525rem .8rem}.md-typeset>.codehilitetable,.md-typeset>.highlighttable{margin:1em -0.8rem;border-radius:0}.md-typeset>.codehilitetable .linenodiv,.md-typeset>.highlighttable .linenodiv{padding:.5rem .8rem}.md-typeset>p>.MJXc-display{margin:.75em -0.8rem;padding:.25em .8rem}.highlight [data-linenos]::before{left:-1.6rem;margin-left:-1.6rem;padding-left:1.6rem}.md-typeset>.tabbed-set{margin:1em -0.8rem;border:0;border-top:.05rem solid var(--md-default-fg-color--lightest);border-radius:0}.md-typeset>.tabbed-set code{padding:.525rem .8rem}.md-typeset>.tabbed-set input:first-child+label{margin-left:.2rem}}@media screen and (min-width: 100em){html{font-size:137.5%}}@media screen and (min-width: 125em){html{font-size:150%}}@media screen and (max-width: 59.9375em){body[data-md-state=lock]{position:fixed}html .md-nav__link[for=__toc]{display:block;padding-right:2.4rem}html .md-nav__link[for=__toc]+.md-nav__link{display:none}html .md-nav__link[for=__toc]~.md-nav{display:flex}html [dir=rtl] .md-nav__link{padding-right:.8rem;padding-left:2.4rem}.md-nav__source{display:block;padding:0 .2rem;background-color:var(--md-primary-fg-color--dark);color:var(--md-primary-bg-color)}.md-search__overlay{position:absolute;top:.2rem;left:-2.2rem;width:2rem;height:2rem;transform-origin:center;transition:transform 300ms 100ms,opacity 200ms 200ms;border-radius:1rem;background-color:var(--md-default-bg-color);overflow:hidden;pointer-events:none}[dir=rtl] .md-search__overlay{right:-2.2rem;left:initial}[data-md-toggle=search]:checked~.md-header .md-search__overlay{transition:transform 400ms,opacity 100ms;opacity:1}.md-search__inner{position:fixed;top:0;left:100%;width:100%;height:100%;transform:translateX(5%);transition:right 0ms 300ms,left 0ms 300ms,transform 150ms 150ms cubic-bezier(0.4, 0, 0.2, 1),opacity 150ms 150ms;opacity:0;z-index:2}[data-md-toggle=search]:checked~.md-header .md-search__inner{left:0;transform:translateX(0);transition:right 0ms 0ms,left 0ms 0ms,transform 150ms 150ms cubic-bezier(0.1, 0.7, 0.1, 1),opacity 150ms 150ms;opacity:1}[dir=rtl] [data-md-toggle=search]:checked~.md-header .md-search__inner{right:0;left:initial}html [dir=rtl] .md-search__inner{right:100%;left:initial;transform:translateX(-5%)}.md-search__input{width:100%;height:2.4rem;font-size:.9rem}.md-search__icon[for=__search]{top:.6rem;left:.8rem}[dir=rtl] .md-search__icon[for=__search]{right:.8rem;left:initial}.md-search__icon[for=__search] svg:first-child{display:none}.md-search__icon[type=reset]{top:.6rem;right:.8rem}[dir=rtl] .md-search__icon[type=reset]{right:initial;left:.8rem}.md-search__output{top:2.4rem;bottom:0}.md-search-result__icon{display:none}}@media screen and (max-width: 76.1875em){[data-md-toggle=drawer]:checked~.md-overlay{width:100%;height:100%;transition:width 0ms,height 0ms,opacity 250ms;opacity:1}.md-header-nav__button.md-logo{display:none}.md-hero__inner{margin-top:2.4rem;margin-bottom:1.2rem}.md-nav{background-color:var(--md-default-bg-color)}.md-nav--primary,.md-nav--primary .md-nav{display:flex;position:absolute;top:0;right:0;left:0;flex-direction:column;height:100%;z-index:1}.md-nav--primary .md-nav__title,.md-nav--primary .md-nav__item{font-size:.8rem;line-height:1.5}.md-nav--primary .md-nav__title{position:relative;height:5.6rem;padding:3rem .8rem .2rem;background-color:var(--md-default-fg-color--lightest);color:var(--md-default-fg-color--light);font-weight:400;line-height:2.4rem;white-space:nowrap;cursor:pointer}.md-nav--primary .md-nav__title .md-nav__icon{display:block;position:absolute;top:.4rem;left:.4rem;width:1.2rem;height:1.2rem;margin:.2rem}[dir=rtl] .md-nav--primary .md-nav__title .md-nav__icon{right:.4rem;left:initial}.md-nav--primary .md-nav__title~.md-nav__list{background-color:var(--md-default-bg-color);box-shadow:inset 0 .05rem 0 var(--md-default-fg-color--lightest);overflow-y:auto;-webkit-scroll-snap-type:y mandatory;-ms-scroll-snap-type:y mandatory;scroll-snap-type:y mandatory}.md-nav--primary .md-nav__title~.md-nav__list>.md-nav__item:first-child{border-top:0}.md-nav--primary .md-nav__title[for=__drawer]{position:relative;background-color:var(--md-primary-fg-color);color:var(--md-primary-bg-color)}.md-nav--primary .md-nav__title[for=__drawer] .md-nav__button{display:block;position:absolute;top:.2rem;left:.2rem;width:3.2rem;height:3.2rem;margin:.2rem;padding:.4rem;font-size:2.4rem}html [dir=rtl] .md-nav--primary .md-nav__title[for=__drawer] .md-nav__button{right:.2rem;left:initial}.md-nav--primary .md-nav__list{flex:1}.md-nav--primary .md-nav__item{padding:0;border-top:.05rem solid var(--md-default-fg-color--lightest)}[dir=rtl] .md-nav--primary .md-nav__item{padding:0}.md-nav--primary .md-nav__item--nested>.md-nav__link{padding-right:2.4rem}[dir=rtl] .md-nav--primary .md-nav__item--nested>.md-nav__link{padding-right:.8rem;padding-left:2.4rem}.md-nav--primary .md-nav__item--active>.md-nav__link{color:var(--md-primary-fg-color)}.md-nav--primary .md-nav__link{position:relative;margin-top:0;padding:.6rem .8rem}.md-nav--primary .md-nav__link .md-nav__icon{position:absolute;top:50%;right:.6rem;margin-top:-0.6rem;color:inherit;font-size:1.2rem}[dir=rtl] .md-nav--primary .md-nav__link .md-nav__icon{right:initial;left:.6rem}[dir=rtl] .md-nav--primary .md-nav__icon svg{transform:scale(-1)}.md-nav--primary .md-nav--secondary .md-nav__link{position:static}.md-nav--primary .md-nav--secondary .md-nav{position:static;background-color:transparent}.md-nav--primary .md-nav--secondary .md-nav .md-nav__link{padding-left:1.4rem}[dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav__link{padding-right:1.4rem;padding-left:initial}.md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav__link{padding-left:2rem}[dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav__link{padding-right:2rem;padding-left:initial}.md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav__link{padding-left:2.6rem}[dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav__link{padding-right:2.6rem;padding-left:initial}.md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav .md-nav__link{padding-left:3.2rem}[dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav .md-nav__link{padding-right:3.2rem;padding-left:initial}.md-nav__toggle~.md-nav{display:flex;transform:translateX(100%);transition:transform 250ms cubic-bezier(0.8, 0, 0.6, 1),opacity 125ms 50ms;opacity:0}[dir=rtl] .md-nav__toggle~.md-nav{transform:translateX(-100%)}.md-nav__toggle:checked~.md-nav{transform:translateX(0);transition:transform 250ms cubic-bezier(0.4, 0, 0.2, 1),opacity 125ms 125ms;opacity:1}.md-sidebar--primary{position:fixed;top:0;left:-12.1rem;width:12.1rem;height:100%;transform:translateX(0);transition:transform 250ms cubic-bezier(0.4, 0, 0.2, 1),box-shadow 250ms;background-color:var(--md-default-bg-color);z-index:3}[dir=rtl] .md-sidebar--primary{right:-12.1rem;left:initial}[data-md-toggle=drawer]:checked~.md-container .md-sidebar--primary{box-shadow:0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12),0 5px 5px -3px rgba(0,0,0,.4);transform:translateX(12.1rem)}[dir=rtl] [data-md-toggle=drawer]:checked~.md-container .md-sidebar--primary{transform:translateX(-12.1rem)}.md-sidebar--primary .md-sidebar__scrollwrap{overflow:hidden}.md-sidebar--primary .md-sidebar__scrollwrap{position:absolute;top:0;right:0;bottom:0;left:0;margin:0;-webkit-scroll-snap-type:none;-ms-scroll-snap-type:none;scroll-snap-type:none}.md-tabs{display:none}}@media screen and (min-width: 60em){.md-content{margin-right:12.1rem}[dir=rtl] .md-content{margin-right:initial;margin-left:12.1rem}.md-header-nav__button[for=__search]{display:none}.md-header-nav__source{display:block;width:11.7rem;max-width:11.7rem;margin-left:1rem}[dir=rtl] .md-header-nav__source{margin-right:1rem;margin-left:initial}.md-nav--secondary .md-nav__title[for=__toc]{scroll-snap-align:start}.md-nav--secondary .md-nav__title .md-nav__icon{display:none}.md-search{padding:.2rem 0}.md-search__overlay{position:fixed;top:0;left:0;width:0;height:0;transition:width 0ms 250ms,height 0ms 250ms,opacity 250ms;background-color:var(--md-default-fg-color--light);cursor:pointer}[dir=rtl] .md-search__overlay{right:0;left:initial}[data-md-toggle=search]:checked~.md-header .md-search__overlay{width:100%;height:100%;transition:width 0ms,height 0ms,opacity 250ms;opacity:1}.md-search__inner{position:relative;width:11.7rem;padding:.1rem 0;float:right;transition:width 250ms cubic-bezier(0.1, 0.7, 0.1, 1)}[dir=rtl] .md-search__inner{float:left}.md-search__form{border-radius:.1rem}.md-search__input{width:100%;height:1.8rem;padding-left:2.2rem;transition:background-color 250ms cubic-bezier(0.1, 0.7, 0.1, 1),color 250ms cubic-bezier(0.1, 0.7, 0.1, 1);border-radius:.1rem;background-color:var(--md-default-fg-color--lighter);color:inherit;font-size:.8rem}[dir=rtl] .md-search__input{padding-right:2.2rem}.md-search__input+.md-search__icon{color:var(--md-primary-bg-color)}.md-search__input::-webkit-input-placeholder{color:var(--md-primary-bg-color--light)}.md-search__input::-moz-placeholder{color:var(--md-primary-bg-color--light)}.md-search__input::-ms-input-placeholder{color:var(--md-primary-bg-color--light)}.md-search__input::placeholder{color:var(--md-primary-bg-color--light)}.md-search__input:hover{background-color:var(--md-default-bg-color--lightest)}[data-md-toggle=search]:checked~.md-header .md-search__input{border-radius:.1rem .1rem 0 0;background-color:var(--md-default-bg-color);color:var(--md-default-fg-color);text-overflow:clip}[data-md-toggle=search]:checked~.md-header .md-search__input::-webkit-input-placeholder{color:var(--md-default-fg-color--light)}[data-md-toggle=search]:checked~.md-header .md-search__input::-moz-placeholder{color:var(--md-default-fg-color--light)}[data-md-toggle=search]:checked~.md-header .md-search__input::-ms-input-placeholder{color:var(--md-default-fg-color--light)}[data-md-toggle=search]:checked~.md-header .md-search__input+.md-search__icon,[data-md-toggle=search]:checked~.md-header .md-search__input::placeholder{color:var(--md-default-fg-color--light)}.md-search__icon[for=__search] svg:last-child{display:none}.md-search__output{top:1.9rem;transition:opacity 400ms;opacity:0}[data-md-toggle=search]:checked~.md-header .md-search__output{box-shadow:0 6px 10px 0 rgba(0,0,0,.14),0 1px 18px 0 rgba(0,0,0,.12),0 3px 5px -1px rgba(0,0,0,.4);opacity:1}.md-search__scrollwrap{max-height:0}[data-md-toggle=search]:checked~.md-header .md-search__scrollwrap{max-height:75vh}.md-search__scrollwrap::-webkit-scrollbar{width:.2rem;height:.2rem}.md-search__scrollwrap::-webkit-scrollbar-thumb{background-color:var(--md-default-fg-color--lighter)}.md-search__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:var(--md-accent-fg-color)}.md-search-result__meta{padding-left:2.2rem}[dir=rtl] .md-search-result__meta{padding-right:2.2rem;padding-left:initial}.md-search-result__article{padding-left:2.2rem}[dir=rtl] .md-search-result__article{padding-right:2.2rem;padding-left:.8rem}.md-sidebar--secondary{display:block;margin-left:calc(100% - 12.1rem)}[dir=rtl] .md-sidebar--secondary{margin-right:calc(100% - 12.1rem);margin-left:initial}.md-sidebar--secondary .md-sidebar__scrollwrap{-webkit-overflow-scrolling:touch}}@media screen and (min-width: 76.25em){.md-content{margin-left:12.1rem}[dir=rtl] .md-content{margin-right:12.1rem}.md-content__inner{margin-right:1.2rem;margin-left:1.2rem}.md-header-nav__button[for=__drawer]{display:none}.md-header-nav__source{margin-left:1.4rem}[dir=rtl] .md-header-nav__source{margin-right:1.4rem}.md-nav{transition:max-height 250ms cubic-bezier(0.86, 0, 0.07, 1)}.md-nav--primary .md-nav__title[for=__drawer]{scroll-snap-align:start}.md-nav--primary .md-nav__title .md-nav__icon{display:none}.md-nav__toggle~.md-nav{display:none}.md-nav__toggle:checked~.md-nav{display:block}.md-nav__item--nested>.md-nav>.md-nav__title{display:none}.md-nav__icon{height:.9rem;float:right;transition:transform 250ms}.md-nav__icon svg{display:inline-block;width:.9rem;height:.9rem;vertical-align:-0.1rem}.md-nav__item--nested .md-nav__toggle:checked~.md-nav__link .md-nav__icon{transform:rotateZ(90deg)}[data-md-toggle=search]:checked~.md-header .md-search__inner{width:34.4rem}.md-search__scrollwrap{width:34.4rem}.md-sidebar--secondary{margin-left:48.9rem}[dir=rtl] .md-sidebar--secondary{margin-right:48.9rem;margin-left:initial}.md-tabs~.md-main .md-nav--primary>.md-nav__list>.md-nav__item--nested{display:none}.md-tabs--active~.md-main .md-nav--primary .md-nav__title{display:block;padding:0 .6rem;pointer-events:none;scroll-snap-align:start}.md-tabs--active~.md-main .md-nav--primary .md-nav__title[for=__drawer]{display:none}.md-tabs--active~.md-main .md-nav--primary>.md-nav__list>.md-nav__item{display:none}.md-tabs--active~.md-main .md-nav--primary>.md-nav__list>.md-nav__item--active{display:block;padding:0}.md-tabs--active~.md-main .md-nav--primary>.md-nav__list>.md-nav__item--active>.md-nav__link{display:none}.md-tabs--active~.md-main .md-nav[data-md-level="1"]>.md-nav__list>.md-nav__item{padding:0 .6rem}.md-tabs--active~.md-main .md-nav[data-md-level="1"] .md-nav .md-nav__title{display:none}}@media screen and (min-width: 45em){.md-footer-nav__link{width:50%}.md-footer-copyright{max-width:75%;float:left}[dir=rtl] .md-footer-copyright{float:right}.md-footer-social{padding:.6rem 0;float:right}[dir=rtl] .md-footer-social{float:left}}@media screen and (max-width: 29.9375em){[data-md-toggle=search]:checked~.md-header .md-search__overlay{transform:scale(45)}}@media screen and (min-width: 30em)and (max-width: 44.9375em){[data-md-toggle=search]:checked~.md-header .md-search__overlay{transform:scale(60)}}@media screen and (min-width: 45em)and (max-width: 59.9375em){[data-md-toggle=search]:checked~.md-header .md-search__overlay{transform:scale(75)}}@media screen and (min-width: 60em)and (max-width: 76.1875em){[data-md-toggle=search]:checked~.md-header .md-search__inner{width:23.4rem}.md-search__scrollwrap{width:23.4rem}.md-search-result__teaser{max-height:2.5rem;-webkit-line-clamp:3}}@media(-webkit-max-device-pixel-ratio: 1), (max-resolution: 1dppx){.md-search__scrollwrap{transform:translateZ(0)}} \ No newline at end of file diff --git a/material/assets/stylesheets/main.css b/material/assets/stylesheets/main.css new file mode 100644 index 000000000..969e3aee5 --- /dev/null +++ b/material/assets/stylesheets/main.css @@ -0,0 +1,2940 @@ +@charset "UTF-8"; +html { + box-sizing: border-box; +} + +*, +*::before, +*::after { + box-sizing: inherit; +} + +html { + -webkit-text-size-adjust: none; + -moz-text-size-adjust: none; + -ms-text-size-adjust: none; + text-size-adjust: none; +} + +body { + margin: 0; +} + +hr { + overflow: visible; + box-sizing: content-box; +} + +a { + -webkit-text-decoration-skip: objects; +} + +a, +button, +label, +input { + -webkit-tap-highlight-color: transparent; +} + +a { + color: inherit; + text-decoration: none; +} + +small { + font-size: 80%; +} + +sub, +sup { + position: relative; + font-size: 80%; + line-height: 0; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +img { + border-style: none; +} + +table { + border-collapse: separate; + border-spacing: 0; +} + +td, +th { + font-weight: normal; + vertical-align: top; +} + +button { + margin: 0; + padding: 0; + border: 0; + background: transparent; + font-size: inherit; +} + +input { + border: 0; + outline: 0; +} + +:root { + --md-default-fg-color: hsla(0, 0%, 0%, 0.87); + --md-default-fg-color--light: hsla(0, 0%, 0%, 0.54); + --md-default-fg-color--lighter: hsla(0, 0%, 0%, 0.26); + --md-default-fg-color--lightest: hsla(0, 0%, 0%, 0.07); + --md-default-bg-color: hsla(0, 0%, 100%, 1); + --md-default-bg-color--light: hsla(0, 0%, 100%, 0.7); + --md-default-bg-color--lighter: hsla(0, 0%, 100%, 0.3); + --md-default-bg-color--lightest: hsla(0, 0%, 100%, 0.12); + --md-primary-fg-color: hsla(231deg, 48%, 48%, 1); + --md-primary-fg-color--light: hsla(230deg, 44%, 64%, 1); + --md-primary-fg-color--dark: hsla(232deg, 54%, 41%, 1); + --md-primary-bg-color: var(--md-default-bg-color); + --md-primary-bg-color--light: var(--md-default-bg-color--light); + --md-accent-fg-color: hsla(231deg, 99%, 66%, 1); + --md-accent-fg-color--transparent: hsla(231deg, 99%, 66%, 0.1); + --md-accent-bg-color: var(--md-default-bg-color); + --md-accent-bg-color--light: var(--md-default-bg-color--light); + --md-code-bg-color: hsla(0, 0%, 92.5%, 0.5); + --md-code-fg-color: hsla(200, 18%, 26%, 1); +} + +.md-icon svg { + display: block; + width: 1.2rem; + height: 1.2rem; + margin: 0 auto; + fill: currentColor; +} + +body { + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +body, +input { + color: var(--md-default-fg-color); + -webkit-font-feature-settings: "kern", "liga"; + font-feature-settings: "kern", "liga"; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; +} + +code, +pre, +kbd { + color: var(--md-default-fg-color); + -webkit-font-feature-settings: "kern"; + font-feature-settings: "kern"; + font-family: "Courier New", Courier, monospace; +} + +.md-typeset { + font-size: 0.8rem; + line-height: 1.6; + -webkit-print-color-adjust: exact; +} +.md-typeset p, +.md-typeset ul, +.md-typeset ol, +.md-typeset blockquote { + margin: 1em 0; +} +.md-typeset h1 { + margin: 0 0 2rem; + color: var(--md-default-fg-color--light); + font-size: 1.5625rem; + font-weight: 300; + letter-spacing: -0.01em; + line-height: 1.3; +} +.md-typeset h2 { + margin: 2rem 0 0.8rem; + font-size: 1.25rem; + font-weight: 300; + letter-spacing: -0.01em; + line-height: 1.4; +} +.md-typeset h3 { + margin: 1.6rem 0 0.8rem; + font-size: 1rem; + font-weight: 400; + letter-spacing: -0.01em; + line-height: 1.5; +} +.md-typeset h2 + h3 { + margin-top: 0.8rem; +} +.md-typeset h4 { + margin: 0.8rem 0; + font-size: 0.8rem; + font-weight: 700; + letter-spacing: -0.01em; +} +.md-typeset h5, +.md-typeset h6 { + margin: 0.8rem 0; + color: var(--md-default-fg-color--light); + font-size: 0.64rem; + font-weight: 700; + letter-spacing: -0.01em; +} +.md-typeset h5 { + text-transform: uppercase; +} +.md-typeset hr { + margin: 1.5em 0; + border-bottom: 0.05rem dotted var(--md-default-fg-color--lighter); +} +.md-typeset a { + color: var(--md-primary-fg-color); + word-break: break-word; +} +.md-typeset a, .md-typeset a::before { + transition: color 125ms; +} +.md-typeset a:focus, .md-typeset a:hover { + color: var(--md-accent-fg-color); +} +.md-typeset code, +.md-typeset pre, +.md-typeset kbd { + background-color: var(--md-code-bg-color); + color: var(--md-code-fg-color); + font-size: 85%; + direction: ltr; +} +.md-typeset code { + margin: 0 0.2941176471em; + padding: 0.0735294118em 0; + border-radius: 0.1rem; + box-shadow: 0.2941176471em 0 0 var(--md-code-bg-color), -0.2941176471em 0 0 var(--md-code-bg-color); + word-break: break-word; + -webkit-box-decoration-break: clone; + box-decoration-break: clone; +} +.md-typeset h1 code, +.md-typeset h2 code, +.md-typeset h3 code, +.md-typeset h4 code, +.md-typeset h5 code, +.md-typeset h6 code { + margin: 0; + background-color: transparent; + box-shadow: none; +} +.md-typeset a > code { + margin: inherit; + padding: inherit; + border-radius: initial; + background-color: inherit; + color: inherit; + box-shadow: none; +} +.md-typeset pre { + position: relative; + margin: 1em 0; + border-radius: 0.1rem; + line-height: 1.4; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + -webkit-overflow-scrolling: touch; +} +.md-typeset pre > code { + display: block; + margin: 0; + padding: 0.525rem 0.6rem; + background-color: transparent; + font-size: inherit; + box-shadow: none; + -webkit-box-decoration-break: slice; + box-decoration-break: slice; + overflow: auto; + word-break: normal; +} +.md-typeset pre > code::-webkit-scrollbar { + width: 0.2rem; + height: 0.2rem; +} +.md-typeset pre > code::-webkit-scrollbar-thumb { + background-color: var(--md-default-fg-color--lighter); +} +.md-typeset pre > code::-webkit-scrollbar-thumb:hover { + background-color: var(--md-accent-fg-color); +} +.md-typeset kbd { + display: inline-block; + padding: 0 0.5882352941em; + border-radius: 0.1rem; + font-size: 0.75em; + line-height: 1.5; + box-shadow: 0 0.1rem 0 0.05rem var(--md-default-fg-color--lighter), 0 0.1rem 0 var(--md-default-fg-color--lighter), inset 0 -0.1rem 0.2rem var(--md-default-bg-color); + word-break: break-word; + vertical-align: text-top; +} +.md-typeset mark { + margin: 0 0.25em; + padding: 0.0625em 0; + border-radius: 0.1rem; + background-color: rgba(255, 235, 59, 0.5); + box-shadow: 0.25em 0 0 rgba(255, 235, 59, 0.5), -0.25em 0 0 rgba(255, 235, 59, 0.5); + word-break: break-word; + -webkit-box-decoration-break: clone; + box-decoration-break: clone; +} +.md-typeset abbr { + border-bottom: 0.05rem dotted var(--md-default-fg-color--light); + text-decoration: none; + cursor: help; +} +.md-typeset small { + opacity: 0.75; +} +.md-typeset sup, +.md-typeset sub { + margin-left: 0.078125em; +} +[dir=rtl] .md-typeset sup, +[dir=rtl] .md-typeset sub { + margin-right: 0.078125em; + margin-left: initial; +} +.md-typeset blockquote { + padding-left: 0.6rem; + border-left: 0.2rem solid var(--md-default-fg-color--lighter); + color: var(--md-default-fg-color--light); +} +[dir=rtl] .md-typeset blockquote { + padding-right: 0.6rem; + padding-left: initial; + border-right: 0.2rem solid var(--md-default-fg-color--lighter); + border-left: initial; +} +.md-typeset ul { + list-style-type: disc; +} +.md-typeset ul, +.md-typeset ol { + margin-left: 0.625em; + padding: 0; +} +[dir=rtl] .md-typeset ul, +[dir=rtl] .md-typeset ol { + margin-right: 0.625em; + margin-left: initial; +} +.md-typeset ul ol, +.md-typeset ol ol { + list-style-type: lower-alpha; +} +.md-typeset ul ol ol, +.md-typeset ol ol ol { + list-style-type: lower-roman; +} +.md-typeset ul li, +.md-typeset ol li { + margin-bottom: 0.5em; + margin-left: 1.25em; +} +[dir=rtl] .md-typeset ul li, +[dir=rtl] .md-typeset ol li { + margin-right: 1.25em; + margin-left: initial; +} +.md-typeset ul li p, +.md-typeset ul li blockquote, +.md-typeset ol li p, +.md-typeset ol li blockquote { + margin: 0.5em 0; +} +.md-typeset ul li:last-child, +.md-typeset ol li:last-child { + margin-bottom: 0; +} +.md-typeset ul li ul, +.md-typeset ul li ol, +.md-typeset ol li ul, +.md-typeset ol li ol { + margin: 0.5em 0 0.5em 0.625em; +} +[dir=rtl] .md-typeset ul li ul, +[dir=rtl] .md-typeset ul li ol, +[dir=rtl] .md-typeset ol li ul, +[dir=rtl] .md-typeset ol li ol { + margin-right: 0.625em; + margin-left: initial; +} +.md-typeset dd { + margin: 1em 0 1em 1.875em; +} +[dir=rtl] .md-typeset dd { + margin-right: 1.875em; + margin-left: initial; +} +.md-typeset iframe, +.md-typeset img, +.md-typeset svg { + max-width: 100%; +} +.md-typeset table:not([class]) { + display: inline-block; + max-width: 100%; + border-radius: 0.1rem; + background: var(--md-default-bg-color); + font-size: 0.64rem; + box-shadow: 0 0.2rem 0.5rem rgba(0, 0, 0, 0.05), 0 0 0.05rem rgba(0, 0, 0, 0.1); + overflow: auto; + -webkit-overflow-scrolling: touch; +} +.md-typeset table:not([class]) + * { + margin-top: 1.5em; +} +.md-typeset table:not([class]) th:not([align]), +.md-typeset table:not([class]) td:not([align]) { + text-align: left; +} +[dir=rtl] .md-typeset table:not([class]) th:not([align]), +[dir=rtl] .md-typeset table:not([class]) td:not([align]) { + text-align: right; +} +.md-typeset table:not([class]) th { + min-width: 5rem; + padding: 0.6rem 0.8rem; + background-color: var(--md-default-fg-color--light); + color: var(--md-default-bg-color); + vertical-align: top; +} +.md-typeset table:not([class]) td { + padding: 0.6rem 0.8rem; + border-top: 0.05rem solid var(--md-default-fg-color--lightest); + vertical-align: top; +} +.md-typeset table:not([class]) tr { + transition: background-color 125ms; +} +.md-typeset table:not([class]) tr:hover { + background-color: rgba(0, 0, 0, 0.035); + box-shadow: 0 0.05rem 0 var(--md-default-bg-color) inset; +} +.md-typeset table:not([class]) tr:first-child td { + border-top: 0; +} +.md-typeset table:not([class]) a { + word-break: normal; +} +.md-typeset__scrollwrap { + margin: 1em -0.8rem; + overflow-x: auto; + -webkit-overflow-scrolling: touch; +} +.md-typeset .md-typeset__table { + display: inline-block; + margin-bottom: 0.5em; + padding: 0 0.8rem; +} +.md-typeset .md-typeset__table table { + display: table; + width: 100%; + margin: 0; + overflow: hidden; +} + +html { + height: 100%; + background-color: var(--md-default-bg-color); + font-size: 125%; + overflow-x: hidden; +} + +body { + display: flex; + position: relative; + flex-direction: column; + width: 100%; + min-height: 100%; + font-size: 0.5rem; +} + +hr { + display: block; + height: 0.05rem; + padding: 0; + border: 0; +} + +.md-grid { + max-width: 61rem; + margin-right: auto; + margin-left: auto; +} + +.md-container { + display: flex; + flex-direction: column; + flex-grow: 1; +} + +.md-main { + flex-grow: 1; +} +.md-main__inner { + height: 100%; + padding-top: 1.5rem; + padding-bottom: 0.05rem; +} + +.md-ellipsis { + display: block; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; +} + +.md-toggle { + display: none; +} + +.md-overlay { + position: fixed; + top: 0; + width: 0; + height: 0; + transition: width 0ms 250ms, height 0ms 250ms, opacity 250ms; + background-color: var(--md-default-fg-color--light); + opacity: 0; + z-index: 3; +} + +.md-skip { + position: fixed; + margin: 0.5rem; + padding: 0.3rem 0.5rem; + transform: translateY(0.4rem); + border-radius: 0.1rem; + background-color: var(--md-default-fg-color); + color: var(--md-default-bg-color); + font-size: 0.64rem; + opacity: 0; +} +.md-skip:focus { + transform: translateY(0); + transition: transform 250ms cubic-bezier(0.4, 0, 0.2, 1), opacity 175ms 75ms; + opacity: 1; + z-index: 10; +} + +@page { + margin: 25mm; +} +.md-announce { + background-color: var(--md-default-fg-color); +} +.md-announce__inner { + min-height: 2.4rem; + padding: 0 0.8rem; + color: var(--md-default-bg-color); + font-size: 0.7rem; + line-height: 2.4rem; +} + +.md-clipboard { + position: absolute; + top: 0.4rem; + right: 0.4rem; + width: 1.2rem; + height: 1.2rem; + transition: color 250ms; + border-radius: 0.1rem; + color: var(--md-default-fg-color--lightest); + cursor: pointer; + z-index: 1; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; +} +.md-clipboard svg { + width: 0.9rem; + height: 0.9rem; +} +pre:hover .md-clipboard { + color: var(--md-default-fg-color--light); +} +pre .md-clipboard:focus, pre .md-clipboard:hover { + color: var(--md-accent-fg-color); +} +.md-content__inner { + margin: 0 0.8rem 1.2rem; + padding-top: 0.6rem; +} +.md-content__inner::before { + display: block; + height: 0.4rem; + content: ""; +} +.md-content__inner > :last-child { + margin-bottom: 0; +} +.md-content__button { + margin: 0.4rem 0; + margin-left: 0.4rem; + padding: 0; + float: right; +} +[dir=rtl] .md-content__button { + margin-right: 0.4rem; + margin-left: initial; + float: left; +} +[dir=rtl] .md-content__button svg { + transform: scaleX(-1); +} +.md-typeset .md-content__button { + color: var(--md-default-fg-color--lighter); +} +.md-content__button svg { + display: inline; + vertical-align: top; +} + +.md-dialog { + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12), 0 3px 1px -2px rgba(0, 0, 0, 0.2); + display: block; + position: fixed; + right: 0.8rem; + bottom: 0.8rem; + left: initial; + min-width: 11.1rem; + padding: 0.4rem 0.6rem; + transform: translateY(100%); + transition: transform 0ms 400ms, opacity 400ms; + border: none; + border-radius: 0.1rem; + background: var(--md-default-fg-color); + color: var(--md-default-bg-color); + font-size: 0.7rem; + opacity: 0; + z-index: 2; +} +[dir=rtl] .md-dialog { + right: initial; + left: 0.8rem; +} +.md-dialog[data-md-state=open] { + transform: translateY(0); + transition: transform 400ms cubic-bezier(0.075, 0.85, 0.175, 1), opacity 400ms; + opacity: 1; +} + +.md-header { + position: -webkit-sticky; + position: sticky; + top: 0; + right: 0; + left: 0; + height: 2.4rem; + transition: background-color 250ms, color 250ms; + background-color: var(--md-primary-fg-color); + color: var(--md-primary-bg-color); + box-shadow: 0 0 0.2rem rgba(0, 0, 0, 0), 0 0.2rem 0.4rem rgba(0, 0, 0, 0); + z-index: 2; +} +.no-js .md-header { + transition: none; + box-shadow: none; +} +.md-header[data-md-state=shadow] { + transition: background-color 250ms, color 250ms, box-shadow 250ms; + box-shadow: 0 0 0.2rem rgba(0, 0, 0, 0.1), 0 0.2rem 0.4rem rgba(0, 0, 0, 0.2); +} + +.md-header-nav { + display: flex; + padding: 0 0.2rem; +} +.md-header-nav__button { + position: relative; + margin: 0.2rem; + padding: 0.4rem; + transition: opacity 250ms; + cursor: pointer; + z-index: 1; +} +[dir=rtl] .md-header-nav__button svg { + transform: scaleX(-1); +} +.md-header-nav__button:focus, .md-header-nav__button:hover { + opacity: 0.7; +} +.md-header-nav__button.md-logo { + margin: 0.2rem; + padding: 0.4rem; +} +.md-header-nav__button.md-logo img, +.md-header-nav__button.md-logo svg { + display: block; + width: 1.2rem; + height: 1.2rem; + fill: currentColor; +} +.no-js .md-header-nav__button[for=__search] { + display: none; +} +.md-header-nav__topic { + display: block; + position: absolute; + width: 100%; + padding: 0 1rem; + transition: transform 400ms cubic-bezier(0.1, 0.7, 0.1, 1), opacity 150ms; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; +} +.md-header-nav__topic + .md-header-nav__topic { + transform: translateX(1.25rem); + transition: transform 400ms cubic-bezier(1, 0.7, 0.1, 0.1), opacity 150ms; + opacity: 0; + z-index: -1; + pointer-events: none; +} +[dir=rtl] .md-header-nav__topic + .md-header-nav__topic { + transform: translateX(-1.25rem); +} +.no-js .md-header-nav__topic { + position: initial; +} +.no-js .md-header-nav__topic + .md-header-nav__topic { + display: none; +} +.md-header-nav__title { + flex-grow: 1; + font-size: 0.9rem; + line-height: 2.4rem; +} +.md-header-nav__title[data-md-state=active] .md-header-nav__topic { + transform: translateX(-1.25rem); + transition: transform 400ms cubic-bezier(1, 0.7, 0.1, 0.1), opacity 150ms; + opacity: 0; + z-index: -1; + pointer-events: none; +} +[dir=rtl] .md-header-nav__title[data-md-state=active] .md-header-nav__topic { + transform: translateX(1.25rem); +} +.md-header-nav__title[data-md-state=active] .md-header-nav__topic + .md-header-nav__topic { + transform: translateX(0); + transition: transform 400ms cubic-bezier(0.1, 0.7, 0.1, 1), opacity 150ms; + opacity: 1; + z-index: 0; + pointer-events: initial; +} +.md-header-nav__title > .md-header-nav__ellipsis { + position: relative; + width: 100%; + height: 100%; +} +.md-header-nav__source { + display: none; +} + +.md-hero { + transition: background 250ms; + background-color: var(--md-primary-fg-color); + color: var(--md-primary-bg-color); + font-size: 1rem; + overflow: hidden; +} +.md-hero__inner { + margin-top: 1rem; + padding: 0.8rem 0.8rem 0.4rem; + transition: transform 400ms cubic-bezier(0.1, 0.7, 0.1, 1), opacity 250ms; + transition-delay: 100ms; +} +[data-md-state=hidden] .md-hero__inner { + pointer-events: none; + transform: translateY(0.625rem); + transition: transform 0ms 400ms, opacity 100ms 0ms; + opacity: 0; +} +.md-hero--expand .md-hero__inner { + margin-bottom: 1.2rem; +} + +.md-footer { + background-color: var(--md-default-fg-color); + color: var(--md-default-bg-color); +} + +.md-footer-nav__inner { + padding: 0.2rem; + overflow: auto; +} +.md-footer-nav__link { + display: flex; + padding-top: 1.4rem; + padding-bottom: 0.4rem; + transition: opacity 250ms; +} +.md-footer-nav__link:focus, .md-footer-nav__link:hover { + opacity: 0.7; +} +.md-footer-nav__link--prev { + width: 25%; + float: left; +} +[dir=rtl] .md-footer-nav__link--prev { + float: right; +} +[dir=rtl] .md-footer-nav__link--prev svg { + transform: scaleX(-1); +} +.md-footer-nav__link--next { + width: 75%; + float: right; + text-align: right; +} +[dir=rtl] .md-footer-nav__link--next { + float: left; + text-align: left; +} +[dir=rtl] .md-footer-nav__link--next svg { + transform: scaleX(-1); +} +.md-footer-nav__title { + position: relative; + flex-grow: 1; + max-width: calc(100% - 2.4rem); + padding: 0 1rem; + font-size: 0.9rem; + line-height: 2.4rem; +} +.md-footer-nav__button { + margin: 0.2rem; + padding: 0.4rem; +} +.md-footer-nav__direction { + position: absolute; + right: 0; + left: 0; + margin-top: -1rem; + padding: 0 1rem; + color: var(--md-default-bg-color--light); + font-size: 0.64rem; +} + +.md-footer-meta { + background-color: var(--md-default-fg-color--lighter); +} +.md-footer-meta__inner { + padding: 0.2rem; + overflow: auto; +} +html .md-footer-meta.md-typeset a { + color: var(--md-default-bg-color--light); +} +html .md-footer-meta.md-typeset a:focus, html .md-footer-meta.md-typeset a:hover { + color: var(--md-default-bg-color); +} + +.md-footer-copyright { + margin: 0 0.6rem; + padding: 0.4rem 0; + color: var(--md-default-bg-color--lighter); + font-size: 0.64rem; +} +.md-footer-copyright__highlight { + color: var(--md-default-bg-color--light); +} + +.md-footer-social { + margin: 0 0.4rem; + padding: 0.2rem 0 0.6rem; +} +.md-footer-social__link { + display: inline-block; + width: 1.6rem; + height: 1.6rem; + transition: color 250ms; + text-align: center; +} +.md-footer-social__link::before { + line-height: 1.9; +} +.md-footer-social__link svg { + width: 0.8rem; + vertical-align: -25%; + fill: currentColor; +} + +.md-nav { + font-size: 0.7rem; + line-height: 1.3; +} +.md-nav__title { + display: block; + padding: 0 0.6rem; + font-weight: 700; + text-overflow: ellipsis; + overflow: hidden; +} +.md-nav__title .md-nav__button { + display: none; +} +.md-nav__title .md-nav__button img { + width: 100%; + height: auto; +} +.md-nav__title .md-nav__button.md-logo img, +.md-nav__title .md-nav__button.md-logo svg { + display: block; + width: 2.4rem; + height: 2.4rem; +} +.md-nav__title .md-nav__button.md-logo svg { + fill: currentColor; +} +.md-nav__list { + margin: 0; + padding: 0; + list-style: none; +} +.md-nav__item { + padding: 0 0.6rem; +} +.md-nav__item:last-child { + padding-bottom: 0.6rem; +} +.md-nav__item .md-nav__item { + padding-right: 0; +} +[dir=rtl] .md-nav__item .md-nav__item { + padding-right: 0.6rem; + padding-left: 0; +} +.md-nav__item .md-nav__item:last-child { + padding-bottom: 0; +} +.md-nav__link { + display: block; + margin-top: 0.625em; + transition: color 125ms; + text-overflow: ellipsis; + cursor: pointer; + overflow: hidden; + scroll-snap-align: start; +} +html .md-nav__link[for=__toc] { + display: none; +} +html .md-nav__link[for=__toc] ~ .md-nav { + display: none; +} +.md-nav__link[data-md-state=blur] { + color: var(--md-default-fg-color--light); +} +.md-nav__item .md-nav__link--active { + color: var(--md-primary-fg-color); +} +.md-nav__item--nested > .md-nav__link { + color: inherit; +} +.md-nav__link:focus, .md-nav__link:hover { + color: var(--md-accent-fg-color); +} +.md-nav__source { + display: none; +} + +.md-search { + position: relative; +} +.no-js .md-search { + display: none; +} +.md-search__overlay { + opacity: 0; + z-index: 1; +} +.md-search__inner { + -webkit-backface-visibility: hidden; + backface-visibility: hidden; +} +.md-search__form { + position: relative; +} +.md-search__input { + position: relative; + padding: 0 2.2rem 0 3.6rem; + text-overflow: ellipsis; + z-index: 2; +} +[dir=rtl] .md-search__input { + padding: 0 3.6rem 0 2.2rem; +} +.md-search__input::-webkit-input-placeholder { + -webkit-transition: color 250ms; + transition: color 250ms; +} +.md-search__input::-moz-placeholder { + -moz-transition: color 250ms; + transition: color 250ms; +} +.md-search__input::-ms-input-placeholder { + -ms-transition: color 250ms; + transition: color 250ms; +} +.md-search__input::placeholder { + transition: color 250ms; +} +.md-search__input::-webkit-input-placeholder { + color: var(--md-default-fg-color--light); +} +.md-search__input::-moz-placeholder { + color: var(--md-default-fg-color--light); +} +.md-search__input::-ms-input-placeholder { + color: var(--md-default-fg-color--light); +} +.md-search__input ~ .md-search__icon, .md-search__input::placeholder { + color: var(--md-default-fg-color--light); +} +.md-search__input::-ms-clear { + display: none; +} +.md-search__icon { + position: absolute; + width: 1.2rem; + height: 1.2rem; + transition: color 250ms, opacity 250ms; + cursor: pointer; + z-index: 2; +} +.md-search__icon:hover { + opacity: 0.7; +} +.md-search__icon[for=__search] { + top: 0.3rem; + left: 0.5rem; +} +[dir=rtl] .md-search__icon[for=__search] { + right: 0.5rem; + left: initial; +} +[dir=rtl] .md-search__icon[for=__search] svg { + transform: scaleX(-1); +} +.md-search__icon[type=reset] { + top: 0.3rem; + right: 0.5rem; + transform: scale(0.75); + transition: transform 150ms cubic-bezier(0.1, 0.7, 0.1, 1), opacity 150ms; + opacity: 0; + pointer-events: none; +} +[dir=rtl] .md-search__icon[type=reset] { + right: initial; + left: 0.5rem; +} +[data-md-toggle=search]:checked ~ .md-header .md-search__input:valid ~ .md-search__icon[type=reset] { + transform: scale(1); + opacity: 1; + pointer-events: initial; +} +[data-md-toggle=search]:checked ~ .md-header .md-search__input:valid ~ .md-search__icon[type=reset]:hover { + opacity: 0.7; +} +.md-search__output { + position: absolute; + width: 100%; + border-radius: 0 0 0.1rem 0.1rem; + overflow: hidden; + z-index: 1; +} +.md-search__scrollwrap { + height: 100%; + background-color: var(--md-default-bg-color); + box-shadow: inset 0 0.05rem 0 var(--md-default-fg-color--lightest); + overflow-y: auto; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + -webkit-scroll-snap-type: y mandatory; + -ms-scroll-snap-type: y mandatory; + scroll-snap-type: y mandatory; + -webkit-overflow-scrolling: touch; +} + +.md-search-result { + color: var(--md-default-fg-color); + word-break: break-word; +} +.md-search-result__meta { + padding: 0 0.8rem; + background-color: var(--md-default-fg-color--lightest); + color: var(--md-default-fg-color--light); + font-size: 0.64rem; + line-height: 1.8rem; + scroll-snap-align: start; +} +.md-search-result__list { + margin: 0; + padding: 0; + border-top: 0.05rem solid var(--md-default-fg-color--lightest); + list-style: none; +} +.md-search-result__item { + box-shadow: 0 -0.05rem 0 var(--md-default-fg-color--lightest); +} +.md-search-result__link { + display: block; + transition: background 250ms; + outline: 0; + overflow: hidden; + scroll-snap-align: start; +} +.md-search-result__link:focus, .md-search-result__link:hover { + background-color: var(--md-accent-fg-color--transparent); +} +.md-search-result__link:focus .md-search-result__article::before, .md-search-result__link:hover .md-search-result__article::before { + opacity: 0.7; +} +.md-search-result__link:last-child .md-search-result__teaser { + margin-bottom: 0.6rem; +} +.md-search-result__article { + position: relative; + padding: 0 0.8rem; + overflow: auto; +} +.md-search-result__article--document .md-search-result__title { + margin: 0.55rem 0; + font-size: 0.8rem; + font-weight: 400; + line-height: 1.4; +} +.md-search-result__icon { + position: absolute; + left: 0; + margin: 0.1rem; + padding: 0.4rem; + color: var(--md-default-fg-color--light); +} +[dir=rtl] .md-search-result__icon { + right: 0; + left: initial; +} +[dir=rtl] .md-search-result__icon svg { + transform: scaleX(-1); +} +.md-search-result__title { + margin: 0.5em 0; + font-size: 0.64rem; + font-weight: 700; + line-height: 1.4; +} +.md-search-result__teaser { + display: -webkit-box; + max-height: 1.65rem; + margin: 0.5em 0; + color: var(--md-default-fg-color--light); + font-size: 0.64rem; + line-height: 1.4; + text-overflow: ellipsis; + overflow: hidden; + -webkit-box-orient: vertical; + -webkit-line-clamp: 2; +} +.md-search-result em { + font-style: normal; + font-weight: 700; + text-decoration: underline; +} + +.md-sidebar { + position: absolute; + width: 12.1rem; + padding: 1.2rem 0; + overflow: hidden; +} +.md-sidebar[data-md-state=lock] { + position: fixed; + top: 2.4rem; +} +.md-sidebar--secondary { + display: none; +} +.md-sidebar__scrollwrap { + max-height: 100%; + margin: 0 0.2rem; + overflow-y: auto; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + -webkit-scroll-snap-type: y mandatory; + -ms-scroll-snap-type: y mandatory; + scroll-snap-type: y mandatory; +} +.md-sidebar__scrollwrap::-webkit-scrollbar { + width: 0.2rem; + height: 0.2rem; +} +.md-sidebar__scrollwrap::-webkit-scrollbar-thumb { + background-color: var(--md-default-fg-color--lighter); +} +.md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover { + background-color: var(--md-accent-fg-color); +} + +@-webkit-keyframes md-source__facts--done { + 0% { + height: 0; + } + 100% { + height: 0.65rem; + } +} + +@keyframes md-source__facts--done { + 0% { + height: 0; + } + 100% { + height: 0.65rem; + } +} +@-webkit-keyframes md-source__fact--done { + 0% { + transform: translateY(100%); + opacity: 0; + } + 50% { + opacity: 0; + } + 100% { + transform: translateY(0%); + opacity: 1; + } +} +@keyframes md-source__fact--done { + 0% { + transform: translateY(100%); + opacity: 0; + } + 50% { + opacity: 0; + } + 100% { + transform: translateY(0%); + opacity: 1; + } +} +.md-source { + display: block; + transition: opacity 250ms; + font-size: 0.65rem; + line-height: 1.25; + white-space: nowrap; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; +} +[dir=rtl] .md-source { + padding-right: initial; + padding-left: 0.6rem; +} +.md-source:hover { + opacity: 0.7; +} +.md-source__icon { + display: inline-block; + width: 2.4rem; + height: 2.4rem; + vertical-align: middle; +} +.md-source__icon svg { + margin-top: 0.6rem; + margin-left: 0.6rem; +} +[dir=rtl] .md-source__icon svg { + margin-right: 0.6rem; + margin-left: initial; +} +.md-source__icon + .md-source__repository { + margin-left: -2rem; + padding-left: 2rem; +} +[dir=rtl] .md-source__icon + .md-source__repository { + margin-right: -2rem; + margin-left: initial; + padding-right: 2rem; + padding-left: initial; +} +.md-source__repository { + display: inline-block; + max-width: calc(100% - 1.2rem); + margin-left: 0.6rem; + font-weight: 700; + text-overflow: ellipsis; + overflow: hidden; + vertical-align: middle; +} +.md-source__facts { + margin: 0; + padding: 0; + font-size: 0.55rem; + font-weight: 700; + list-style-type: none; + opacity: 0.75; + overflow: hidden; +} +[data-md-state=done] .md-source__facts { + -webkit-animation: md-source__facts--done 250ms ease-in; + animation: md-source__facts--done 250ms ease-in; +} +.md-source__fact { + float: left; +} +[dir=rtl] .md-source__fact { + float: right; +} +[data-md-state=done] .md-source__fact { + -webkit-animation: md-source__fact--done 400ms ease-out; + animation: md-source__fact--done 400ms ease-out; +} +.md-source__fact::before { + margin: 0 0.1rem; + content: "·"; +} +.md-source__fact:first-child::before { + display: none; +} + +.md-tabs { + width: 100%; + transition: background 250ms; + background-color: var(--md-primary-fg-color); + color: var(--md-primary-bg-color); + overflow: auto; +} +.no-js .md-tabs { + transition: none; +} +.md-tabs__list { + margin: 0; + margin-left: 0.2rem; + padding: 0; + list-style: none; + white-space: nowrap; +} +[dir=rtl] .md-tabs__list { + margin-right: 0.2rem; + margin-left: initial; +} +.md-tabs__item { + display: inline-block; + height: 2.4rem; + padding-right: 0.6rem; + padding-left: 0.6rem; +} +.md-tabs__link { + display: block; + margin-top: 0.8rem; + transition: transform 400ms cubic-bezier(0.1, 0.7, 0.1, 1), opacity 250ms; + font-size: 0.7rem; + opacity: 0.7; +} +.no-js .md-tabs__link { + transition: none; +} +.md-tabs__link--active, .md-tabs__link:hover { + color: inherit; + opacity: 1; +} +.md-tabs__item:nth-child(2) .md-tabs__link { + transition-delay: 20ms; +} +.md-tabs__item:nth-child(3) .md-tabs__link { + transition-delay: 40ms; +} +.md-tabs__item:nth-child(4) .md-tabs__link { + transition-delay: 60ms; +} +.md-tabs__item:nth-child(5) .md-tabs__link { + transition-delay: 80ms; +} +.md-tabs__item:nth-child(6) .md-tabs__link { + transition-delay: 100ms; +} +.md-tabs__item:nth-child(7) .md-tabs__link { + transition-delay: 120ms; +} +.md-tabs__item:nth-child(8) .md-tabs__link { + transition-delay: 140ms; +} +.md-tabs__item:nth-child(9) .md-tabs__link { + transition-delay: 160ms; +} +.md-tabs__item:nth-child(10) .md-tabs__link { + transition-delay: 180ms; +} +.md-tabs__item:nth-child(11) .md-tabs__link { + transition-delay: 200ms; +} +.md-tabs__item:nth-child(12) .md-tabs__link { + transition-delay: 220ms; +} +.md-tabs__item:nth-child(13) .md-tabs__link { + transition-delay: 240ms; +} +.md-tabs__item:nth-child(14) .md-tabs__link { + transition-delay: 260ms; +} +.md-tabs__item:nth-child(15) .md-tabs__link { + transition-delay: 280ms; +} +.md-tabs__item:nth-child(16) .md-tabs__link { + transition-delay: 300ms; +} +.md-tabs[data-md-state=hidden] { + pointer-events: none; +} +.md-tabs[data-md-state=hidden] .md-tabs__link { + transform: translateY(50%); + transition: color 250ms, transform 0ms 400ms, opacity 100ms; + opacity: 0; +} + +.md-typeset .admonition, .md-typeset details { + margin: 1.5625em 0; + padding: 0 0.6rem; + border-left: 0.2rem solid #448aff; + border-radius: 0.1rem; + font-size: 0.64rem; + box-shadow: 0 0.2rem 0.5rem rgba(0, 0, 0, 0.05), 0 0 0.05rem rgba(0, 0, 0, 0.1); + overflow: auto; +} +[dir=rtl] .md-typeset .admonition, [dir=rtl] .md-typeset details { + border-right: 0.2rem solid #448aff; + border-left: none; +} +html .md-typeset .admonition > :last-child, html .md-typeset details > :last-child { + margin-bottom: 0.6rem; +} +.md-typeset .admonition .admonition, .md-typeset details .admonition, .md-typeset .admonition details, .md-typeset details details { + margin: 1em 0; +} +.md-typeset .admonition.tldr, .md-typeset details.tldr, .md-typeset .admonition.summary, .md-typeset details.summary, .md-typeset .admonition.abstract, .md-typeset details.abstract { + border-left-color: #00b0ff; +} +.md-typeset .admonition.tldr > :first-child, .md-typeset details.tldr > :first-child, .md-typeset .admonition.summary > :first-child, .md-typeset details.summary > :first-child, .md-typeset .admonition.abstract > :first-child, .md-typeset details.abstract > :first-child { + background-color: rgba(0, 176, 255, 0.1); +} +.md-typeset .admonition.tldr > :first-child::before, .md-typeset details.tldr > :first-child::before, .md-typeset .admonition.summary > :first-child::before, .md-typeset details.summary > :first-child::before, .md-typeset .admonition.abstract > :first-child::before, .md-typeset details.abstract > :first-child::before { + background-color: #00b0ff; + -webkit-mask-image: url("data:image/svg+xml;utf8,"); + mask-image: url("data:image/svg+xml;utf8,"); +} +.md-typeset .admonition.todo, .md-typeset details.todo, .md-typeset .admonition.info, .md-typeset details.info { + border-left-color: #00b8d4; +} +.md-typeset .admonition.todo > :first-child, .md-typeset details.todo > :first-child, .md-typeset .admonition.info > :first-child, .md-typeset details.info > :first-child { + background-color: rgba(0, 184, 212, 0.1); +} +.md-typeset .admonition.todo > :first-child::before, .md-typeset details.todo > :first-child::before, .md-typeset .admonition.info > :first-child::before, .md-typeset details.info > :first-child::before { + background-color: #00b8d4; + -webkit-mask-image: url("data:image/svg+xml;utf8,"); + mask-image: url("data:image/svg+xml;utf8,"); +} +.md-typeset .admonition.important, .md-typeset details.important, .md-typeset .admonition.hint, .md-typeset details.hint, .md-typeset .admonition.tip, .md-typeset details.tip { + border-left-color: #00bfa5; +} +.md-typeset .admonition.important > :first-child, .md-typeset details.important > :first-child, .md-typeset .admonition.hint > :first-child, .md-typeset details.hint > :first-child, .md-typeset .admonition.tip > :first-child, .md-typeset details.tip > :first-child { + background-color: rgba(0, 191, 165, 0.1); +} +.md-typeset .admonition.important > :first-child::before, .md-typeset details.important > :first-child::before, .md-typeset .admonition.hint > :first-child::before, .md-typeset details.hint > :first-child::before, .md-typeset .admonition.tip > :first-child::before, .md-typeset details.tip > :first-child::before { + background-color: #00bfa5; + -webkit-mask-image: url("data:image/svg+xml;utf8,"); + mask-image: url("data:image/svg+xml;utf8,"); +} +.md-typeset .admonition.done, .md-typeset details.done, .md-typeset .admonition.check, .md-typeset details.check, .md-typeset .admonition.success, .md-typeset details.success { + border-left-color: #00c853; +} +.md-typeset .admonition.done > :first-child, .md-typeset details.done > :first-child, .md-typeset .admonition.check > :first-child, .md-typeset details.check > :first-child, .md-typeset .admonition.success > :first-child, .md-typeset details.success > :first-child { + background-color: rgba(0, 200, 83, 0.1); +} +.md-typeset .admonition.done > :first-child::before, .md-typeset details.done > :first-child::before, .md-typeset .admonition.check > :first-child::before, .md-typeset details.check > :first-child::before, .md-typeset .admonition.success > :first-child::before, .md-typeset details.success > :first-child::before { + background-color: #00c853; + -webkit-mask-image: url("data:image/svg+xml;utf8,"); + mask-image: url("data:image/svg+xml;utf8,"); +} +.md-typeset .admonition.faq, .md-typeset details.faq, .md-typeset .admonition.help, .md-typeset details.help, .md-typeset .admonition.question, .md-typeset details.question { + border-left-color: #64dd17; +} +.md-typeset .admonition.faq > :first-child, .md-typeset details.faq > :first-child, .md-typeset .admonition.help > :first-child, .md-typeset details.help > :first-child, .md-typeset .admonition.question > :first-child, .md-typeset details.question > :first-child { + background-color: rgba(100, 221, 23, 0.1); +} +.md-typeset .admonition.faq > :first-child::before, .md-typeset details.faq > :first-child::before, .md-typeset .admonition.help > :first-child::before, .md-typeset details.help > :first-child::before, .md-typeset .admonition.question > :first-child::before, .md-typeset details.question > :first-child::before { + background-color: #64dd17; + -webkit-mask-image: url("data:image/svg+xml;utf8,"); + mask-image: url("data:image/svg+xml;utf8,"); +} +.md-typeset .admonition.attention, .md-typeset details.attention, .md-typeset .admonition.caution, .md-typeset details.caution, .md-typeset .admonition.warning, .md-typeset details.warning { + border-left-color: #ff9100; +} +.md-typeset .admonition.attention > :first-child, .md-typeset details.attention > :first-child, .md-typeset .admonition.caution > :first-child, .md-typeset details.caution > :first-child, .md-typeset .admonition.warning > :first-child, .md-typeset details.warning > :first-child { + background-color: rgba(255, 145, 0, 0.1); +} +.md-typeset .admonition.attention > :first-child::before, .md-typeset details.attention > :first-child::before, .md-typeset .admonition.caution > :first-child::before, .md-typeset details.caution > :first-child::before, .md-typeset .admonition.warning > :first-child::before, .md-typeset details.warning > :first-child::before { + background-color: #ff9100; + -webkit-mask-image: url("data:image/svg+xml;utf8,"); + mask-image: url("data:image/svg+xml;utf8,"); +} +.md-typeset .admonition.missing, .md-typeset details.missing, .md-typeset .admonition.fail, .md-typeset details.fail, .md-typeset .admonition.failure, .md-typeset details.failure { + border-left-color: #ff5252; +} +.md-typeset .admonition.missing > :first-child, .md-typeset details.missing > :first-child, .md-typeset .admonition.fail > :first-child, .md-typeset details.fail > :first-child, .md-typeset .admonition.failure > :first-child, .md-typeset details.failure > :first-child { + background-color: rgba(255, 82, 82, 0.1); +} +.md-typeset .admonition.missing > :first-child::before, .md-typeset details.missing > :first-child::before, .md-typeset .admonition.fail > :first-child::before, .md-typeset details.fail > :first-child::before, .md-typeset .admonition.failure > :first-child::before, .md-typeset details.failure > :first-child::before { + background-color: #ff5252; + -webkit-mask-image: url("data:image/svg+xml;utf8,"); + mask-image: url("data:image/svg+xml;utf8,"); +} +.md-typeset .admonition.error, .md-typeset details.error, .md-typeset .admonition.danger, .md-typeset details.danger { + border-left-color: #ff1744; +} +.md-typeset .admonition.error > :first-child, .md-typeset details.error > :first-child, .md-typeset .admonition.danger > :first-child, .md-typeset details.danger > :first-child { + background-color: rgba(255, 23, 68, 0.1); +} +.md-typeset .admonition.error > :first-child::before, .md-typeset details.error > :first-child::before, .md-typeset .admonition.danger > :first-child::before, .md-typeset details.danger > :first-child::before { + background-color: #ff1744; + -webkit-mask-image: url("data:image/svg+xml;utf8,"); + mask-image: url("data:image/svg+xml;utf8,"); +} +.md-typeset .admonition.bug, .md-typeset details.bug { + border-left-color: #f50057; +} +.md-typeset .admonition.bug > :first-child, .md-typeset details.bug > :first-child { + background-color: rgba(245, 0, 87, 0.1); +} +.md-typeset .admonition.bug > :first-child::before, .md-typeset details.bug > :first-child::before { + background-color: #f50057; + -webkit-mask-image: url("data:image/svg+xml;utf8,"); + mask-image: url("data:image/svg+xml;utf8,"); +} +.md-typeset .admonition.example, .md-typeset details.example { + border-left-color: #651fff; +} +.md-typeset .admonition.example > :first-child, .md-typeset details.example > :first-child { + background-color: rgba(101, 31, 255, 0.1); +} +.md-typeset .admonition.example > :first-child::before, .md-typeset details.example > :first-child::before { + background-color: #651fff; + -webkit-mask-image: url("data:image/svg+xml;utf8,"); + mask-image: url("data:image/svg+xml;utf8,"); +} +.md-typeset .admonition.cite, .md-typeset details.cite, .md-typeset .admonition.quote, .md-typeset details.quote { + border-left-color: #9e9e9e; +} +.md-typeset .admonition.cite > :first-child, .md-typeset details.cite > :first-child, .md-typeset .admonition.quote > :first-child, .md-typeset details.quote > :first-child { + background-color: rgba(158, 158, 158, 0.1); +} +.md-typeset .admonition.cite > :first-child::before, .md-typeset details.cite > :first-child::before, .md-typeset .admonition.quote > :first-child::before, .md-typeset details.quote > :first-child::before { + background-color: #9e9e9e; + -webkit-mask-image: url("data:image/svg+xml;utf8,"); + mask-image: url("data:image/svg+xml;utf8,"); +} +.md-typeset .admonition-title, .md-typeset summary { + margin: 0 -0.6rem; + padding: 0.4rem 0.6rem 0.4rem 2rem; + background-color: rgba(68, 138, 255, 0.1); + font-weight: 700; +} +[dir=rtl] .md-typeset .admonition-title, [dir=rtl] .md-typeset summary { + padding: 0.4rem 2rem 0.4rem 0.6rem; +} +.md-typeset .admonition-title:last-child, .md-typeset summary:last-child { + margin-bottom: 0; +} +.md-typeset .admonition-title::before, .md-typeset summary::before { + position: absolute; + width: 1rem; + height: 1rem; + margin-left: -1.4rem; + background-color: #448aff; + -webkit-mask-image: url("data:image/svg+xml;utf8,"); + mask-image: url("data:image/svg+xml;utf8,"); + content: ""; +} +[dir=rtl] .md-typeset .admonition-title::before, [dir=rtl] .md-typeset summary::before { + margin-right: -1.4rem; + margin-left: initial; +} + +.codehilite .o, .highlight .o { + color: inherit; +} +.codehilite .ow, .highlight .ow { + color: inherit; +} +.codehilite .ge, .highlight .ge { + color: #000000; +} +.codehilite .gr, .highlight .gr { + color: #AA0000; +} +.codehilite .gh, .highlight .gh { + color: #999999; +} +.codehilite .go, .highlight .go { + color: #888888; +} +.codehilite .gp, .highlight .gp { + color: #555555; +} +.codehilite .gs, .highlight .gs { + color: inherit; +} +.codehilite .gu, .highlight .gu { + color: #AAAAAA; +} +.codehilite .gt, .highlight .gt { + color: #AA0000; +} +.codehilite .gd, .highlight .gd { + background-color: #FFDDDD; +} +.codehilite .gi, .highlight .gi { + background-color: #DDFFDD; +} +.codehilite .k, .highlight .k { + color: #3B78E7; +} +.codehilite .kc, .highlight .kc { + color: #A71D5D; +} +.codehilite .kd, .highlight .kd { + color: #3B78E7; +} +.codehilite .kn, .highlight .kn { + color: #3B78E7; +} +.codehilite .kp, .highlight .kp { + color: #A71D5D; +} +.codehilite .kr, .highlight .kr { + color: #3E61A2; +} +.codehilite .kt, .highlight .kt { + color: #3E61A2; +} +.codehilite .c, .highlight .c { + color: #999999; +} +.codehilite .cm, .highlight .cm { + color: #999999; +} +.codehilite .cp, .highlight .cp { + color: #666666; +} +.codehilite .c1, .highlight .c1 { + color: #999999; +} +.codehilite .ch, .highlight .ch { + color: #999999; +} +.codehilite .cs, .highlight .cs { + color: #999999; +} +.codehilite .na, .highlight .na { + color: #C2185B; +} +.codehilite .nb, .highlight .nb { + color: #C2185B; +} +.codehilite .bp, .highlight .bp { + color: #3E61A2; +} +.codehilite .nc, .highlight .nc { + color: #C2185B; +} +.codehilite .no, .highlight .no { + color: #3E61A2; +} +.codehilite .nd, .highlight .nd { + color: #666666; +} +.codehilite .ni, .highlight .ni { + color: #666666; +} +.codehilite .ne, .highlight .ne { + color: #C2185B; +} +.codehilite .nf, .highlight .nf { + color: #C2185B; +} +.codehilite .nl, .highlight .nl { + color: #3B5179; +} +.codehilite .nn, .highlight .nn { + color: #EC407A; +} +.codehilite .nt, .highlight .nt { + color: #3B78E7; +} +.codehilite .nv, .highlight .nv { + color: #3E61A2; +} +.codehilite .vc, .highlight .vc { + color: #3E61A2; +} +.codehilite .vg, .highlight .vg { + color: #3E61A2; +} +.codehilite .vi, .highlight .vi { + color: #3E61A2; +} +.codehilite .nx, .highlight .nx { + color: #EC407A; +} +.codehilite .m, .highlight .m { + color: #E74C3C; +} +.codehilite .mf, .highlight .mf { + color: #E74C3C; +} +.codehilite .mh, .highlight .mh { + color: #E74C3C; +} +.codehilite .mi, .highlight .mi { + color: #E74C3C; +} +.codehilite .il, .highlight .il { + color: #E74C3C; +} +.codehilite .mo, .highlight .mo { + color: #E74C3C; +} +.codehilite .s, .highlight .s { + color: #0D904F; +} +.codehilite .sb, .highlight .sb { + color: #0D904F; +} +.codehilite .sc, .highlight .sc { + color: #0D904F; +} +.codehilite .sd, .highlight .sd { + color: #999999; +} +.codehilite .s2, .highlight .s2 { + color: #0D904F; +} +.codehilite .se, .highlight .se { + color: #183691; +} +.codehilite .sh, .highlight .sh { + color: #183691; +} +.codehilite .si, .highlight .si { + color: #183691; +} +.codehilite .sx, .highlight .sx { + color: #183691; +} +.codehilite .sr, .highlight .sr { + color: #009926; +} +.codehilite .s1, .highlight .s1 { + color: #0D904F; +} +.codehilite .ss, .highlight .ss { + color: #0D904F; +} +.codehilite .err, .highlight .err { + color: #A61717; +} +.codehilite .w, .highlight .w { + color: transparent; +} +.codehilite .hll, .highlight .hll { + display: block; + margin: 0 -0.6rem; + padding: 0 0.6rem; + background-color: rgba(255, 235, 59, 0.5); +} + +.codehilitetable, .highlighttable { + display: block; + overflow: hidden; +} +.codehilitetable tbody, .highlighttable tbody, +.codehilitetable td, +.highlighttable td { + display: block; + padding: 0; +} +.codehilitetable tr, .highlighttable tr { + display: flex; +} +.codehilitetable pre, .highlighttable pre, +.codehilitetable .linenodiv, +.highlighttable .linenodiv { + margin: 0; + border-radius: 0; +} +.codehilitetable .linenodiv, .highlighttable .linenodiv { + padding: 0.525rem 0.6rem; +} +.codehilitetable .linenos, .highlighttable .linenos { + color: var(--md-default-fg-color--lighter); + box-shadow: inset 0 0 0 0.05rem var(--md-code-bg-color); + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.codehilitetable .linenos pre, .highlighttable .linenos pre { + background-color: transparent; + color: inherit; + text-align: right; +} +.codehilitetable .code, .highlighttable .code { + flex: 1; + overflow: hidden; +} + +.md-typeset > .codehilitetable, .md-typeset > .highlighttable { + margin: 1em 0; + border-radius: 0.2em; +} + +.md-typeset [id^="fnref:"] { + display: inline-block; +} +.md-typeset [id^="fnref:"]:target { + margin-top: -3.8rem; + padding-top: 3.8rem; + pointer-events: none; +} +.md-typeset [id^="fn:"]::before { + display: none; + height: 0; + content: ""; +} +.md-typeset [id^="fn:"]:target::before { + display: block; + margin-top: -3.5rem; + padding-top: 3.5rem; + pointer-events: none; +} +.md-typeset .footnote { + color: var(--md-default-fg-color--light); + font-size: 0.64rem; +} +.md-typeset .footnote ol { + margin-left: 0; +} +.md-typeset .footnote li { + transition: color 250ms; +} +.md-typeset .footnote li:target { + color: var(--md-default-fg-color); +} +.md-typeset .footnote li :first-child { + margin-top: 0; +} +.md-typeset .footnote li:hover .footnote-backref, .md-typeset .footnote li:target .footnote-backref { + transform: translateX(0); + opacity: 1; +} +.md-typeset .footnote li:hover .footnote-backref:hover, .md-typeset .footnote li:target .footnote-backref { + color: var(--md-accent-fg-color); +} +.md-typeset .footnote-ref { + display: inline-block; + pointer-events: initial; +} +.md-typeset .footnote-ref::before { + display: inline; + margin: 0 0.2em; + border-left: 0.05rem solid var(--md-default-fg-color--lighter); + font-size: 1.25em; + content: ""; + vertical-align: -0.25rem; +} +.md-typeset .footnote-backref { + display: inline-block; + transform: translateX(0.25rem); + transition: transform 250ms 250ms, color 250ms, opacity 125ms 250ms; + color: var(--md-default-fg-color--lighter); + font-size: 0; + opacity: 0; + vertical-align: text-bottom; +} +[dir=rtl] .md-typeset .footnote-backref { + transform: translateX(-0.25rem); +} +.md-typeset .footnote-backref::before { + display: inline-block; + width: 0.8rem; + height: 0.8rem; + background-color: currentColor; + -webkit-mask-image: url("data:image/svg+xml;utf8,"); + mask-image: url("data:image/svg+xml;utf8,"); + content: ""; +} +[dir=rtl] .md-typeset .footnote-backref::before svg { + transform: scaleX(-1); +} + +.md-typeset .headerlink { + display: inline-block; + margin-left: 0.5rem; + transform: translate(0, 0.25rem); + transition: transform 250ms 250ms, color 250ms, opacity 125ms 250ms, visibility 0ms 500ms; + opacity: 0; + visibility: hidden; +} +[dir=rtl] .md-typeset .headerlink { + margin-right: 0.5rem; + margin-left: initial; +} +html body .md-typeset .headerlink { + color: var(--md-default-fg-color--lighter); +} +.md-typeset :hover .headerlink, +.md-typeset :target .headerlink, +.md-typeset .headerlink:focus { + transform: translate(0, 0); + transition: transform 250ms 250ms, color 250ms, opacity 125ms 250ms, visibility 0ms; + opacity: 1; + visibility: visible; +} +.md-typeset .headerlink:focus, +.md-typeset .headerlink:hover, +.md-typeset :target .headerlink { + color: var(--md-accent-fg-color); +} +.md-typeset h3[id]::before, .md-typeset h2[id]::before, .md-typeset h1[id]::before { + display: block; + margin-top: -0.4rem; + padding-top: 0.4rem; + content: ""; +} +.md-typeset h3[id]:target::before, .md-typeset h2[id]:target::before, .md-typeset h1[id]:target::before { + margin-top: -3.4rem; + padding-top: 3.4rem; +} +.md-typeset h4[id]::before { + display: block; + margin-top: -0.45rem; + padding-top: 0.45rem; + content: ""; +} +.md-typeset h4[id]:target::before { + margin-top: -3.45rem; + padding-top: 3.45rem; +} +.md-typeset h6[id]::before, .md-typeset h5[id]::before { + display: block; + margin-top: -0.6rem; + padding-top: 0.6rem; + content: ""; +} +.md-typeset h6[id]:target::before, .md-typeset h5[id]:target::before { + margin-top: -3.6rem; + padding-top: 3.6rem; +} +.md-typeset .MJXc-display { + margin: 0.75em 0; + padding: 0.75em 0; + overflow: auto; + -webkit-overflow-scrolling: touch; +} +.md-typeset .MathJax_CHTML { + outline: 0; +} + +.md-typeset del.critic, +.md-typeset ins.critic, +.md-typeset .critic.comment { + margin: 0 0.25em; + padding: 0.0625em 0; + border-radius: 0.1rem; + -webkit-box-decoration-break: clone; + box-decoration-break: clone; +} +.md-typeset del.critic { + background-color: #FFDDDD; + box-shadow: 0.25em 0 0 #FFDDDD, -0.25em 0 0 #FFDDDD; +} +.md-typeset ins.critic { + background-color: #DDFFDD; + box-shadow: 0.25em 0 0 #DDFFDD, -0.25em 0 0 #DDFFDD; +} +.md-typeset .critic.comment { + color: #999999; +} +.md-typeset .critic.comment::before { + content: "/* "; +} +.md-typeset .critic.comment::after { + content: " */"; +} +.md-typeset .critic.block { + display: block; + margin: 1em 0; + padding-right: 0.8rem; + padding-left: 0.8rem; + box-shadow: none; +} +.md-typeset .critic.block :first-child { + margin-top: 0.5em; +} +.md-typeset .critic.block :last-child { + margin-bottom: 0.5em; +} + +.md-typeset details { + display: block; + padding-top: 0; +} +.md-typeset details[open] > summary::after { + transform: rotate(180deg); +} +.md-typeset details:not([open]) { + padding-bottom: 0; +} +.md-typeset details:not([open]) > summary { + border-bottom: none; +} +.md-typeset details summary { + position: relative; + padding-right: 2rem; +} +[dir=rtl] .md-typeset details summary { + padding-left: 2rem; +} +.md-typeset summary { + display: block; + outline: none; + cursor: pointer; +} +.md-typeset summary::-webkit-details-marker { + display: none; +} +.md-typeset summary::after { + position: absolute; + right: 0.6rem; + width: 1rem; + height: 1rem; + background-color: var(--md-default-fg-color--lighter); + -webkit-mask-image: url("data:image/svg+xml;utf8,"); + mask-image: url("data:image/svg+xml;utf8,"); + content: ""; +} +[dir=rtl] .md-typeset summary::after { + right: initial; + left: 0.6rem; +} + +.md-typeset .emojione, +.md-typeset .twemoji, +.md-typeset .gemoji { + width: 1rem; + vertical-align: text-top; +} + +.highlight [data-linenos]::before { + display: inline-block; + position: -webkit-sticky; + position: sticky; + left: -0.6rem; + margin-right: 0.6rem; + margin-left: -0.6rem; + padding-left: 0.6rem; + border-right: 0.05rem solid var(--md-default-fg-color--lightest); + color: var(--md-default-fg-color--lighter); + content: attr(data-linenos); + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.md-typeset code.codehilite, .md-typeset code.highlight { + margin: 0 0.2941176471em; + padding: 0.0735294118em 0; +} + +.md-typeset .tabbed-content { + display: none; + order: 99; + width: 100%; + background-color: var(--md-code-bg-color); +} +.md-typeset .tabbed-content pre { + margin: 0; + border-radius: 0; +} +.md-typeset .tabbed-set { + display: flex; + position: relative; + flex-wrap: wrap; + margin: 1em 0; + border: 0.05rem solid var(--md-default-fg-color--lightest); + border-radius: 0.1rem; +} +.md-typeset .tabbed-set > input { + display: none; +} +.md-typeset .tabbed-set > input:checked + label { + border-color: var(--md-accent-fg-color); + color: var(--md-accent-fg-color); +} +.md-typeset .tabbed-set > input:checked + label + .tabbed-content { + display: block; + padding: 0 0.6rem; +} +.md-typeset .tabbed-set > input:checked + label + .tabbed-content > :last-child { + margin-bottom: 0.6rem; +} +.md-typeset .tabbed-set > input:checked + label + .tabbed-content > pre:only-child, +.md-typeset .tabbed-set > input:checked + label + .tabbed-content > .highlight:only-child, +.md-typeset .tabbed-set > input:checked + label + .tabbed-content > .highlighttable:only-child, +.md-typeset .tabbed-set > input:checked + label + .tabbed-content > .codehilite:only-child, +.md-typeset .tabbed-set > input:checked + label + .tabbed-content > .codehilitetable:only-child { + margin: 0 -0.6rem; +} +.md-typeset .tabbed-set > input:checked + label + .tabbed-content > pre:only-child pre, +.md-typeset .tabbed-set > input:checked + label + .tabbed-content > .highlight:only-child pre, +.md-typeset .tabbed-set > input:checked + label + .tabbed-content > .highlighttable:only-child pre, +.md-typeset .tabbed-set > input:checked + label + .tabbed-content > .codehilite:only-child pre, +.md-typeset .tabbed-set > input:checked + label + .tabbed-content > .codehilitetable:only-child pre { + background: transparent; +} +.md-typeset .tabbed-set > label { + width: auto; + padding: 0.6rem; + padding-bottom: 0.5rem; + transition: color 125ms, border 250ms; + border-bottom: 0.1rem solid transparent; + color: var(--md-default-fg-color--light); + font-size: 0.64rem; + font-weight: 700; + cursor: pointer; +} +html .md-typeset .tabbed-set > label:hover { + color: var(--md-accent-fg-color); +} + +.md-typeset .task-list-item { + position: relative; + list-style-type: none; +} +.md-typeset .task-list-item [type=checkbox] { + position: absolute; + top: 0.45em; + left: -2em; +} +[dir=rtl] .md-typeset .task-list-item [type=checkbox] { + right: -2em; + left: initial; +} +.md-typeset .task-list-control .task-list-indicator::before { + position: absolute; + top: 0.15em; + left: -1.5em; + width: 1.25em; + height: 1.25em; + background-color: var(--md-default-fg-color--lightest); + -webkit-mask-image: url("data:image/svg+xml;utf8,"); + mask-image: url("data:image/svg+xml;utf8,"); + content: ""; +} +[dir=rtl] .md-typeset .task-list-control .task-list-indicator::before { + right: -1.5em; + left: initial; +} +.md-typeset .task-list-control [type=checkbox]:checked + .task-list-indicator::before { + background-color: #00e676; + -webkit-mask-image: url("data:image/svg+xml;utf8,"); + mask-image: url("data:image/svg+xml;utf8,"); +} +.md-typeset .task-list-control [type=checkbox] { + opacity: 0; + z-index: -1; +} +@media print { + .md-typeset a::after { + color: var(--md-default-fg-color--light); + content: " [" attr(href) "]"; + } + .md-typeset code, +.md-typeset pre, +.md-typeset kbd { + white-space: pre-wrap; + } + .md-clipboard { + display: none; + } + .md-content__button { + display: none; + } + .md-dialog { + display: none; + } + .md-header { + display: none; + } + .md-footer { + display: none; + } + .md-sidebar { + display: none; + } + .md-tabs { + display: none; + } + .md-typeset .headerlink { + display: none; + } +} +@media screen and (max-width: 44.9375em) { + .md-typeset > pre { + margin: 1em -0.8rem; + border-radius: 0; + } + .md-typeset > pre > code { + padding: 0.525rem 0.8rem; + } + .md-footer-nav__link--prev .md-footer-nav__title { + display: none; + } + .md-search-result__teaser { + max-height: 2.5rem; + -webkit-line-clamp: 3; + } + .codehilite .hll, .highlight .hll { + margin: 0 -0.8rem; + padding: 0 0.8rem; + } + .md-typeset > .codehilite, .md-typeset > .highlight { + margin: 1em -0.8rem; + } + .md-typeset > .codehilite code, .md-typeset > .highlight code { + padding: 0.525rem 0.8rem; + } + .md-typeset > .codehilitetable, .md-typeset > .highlighttable { + margin: 1em -0.8rem; + border-radius: 0; + } + .md-typeset > .codehilitetable .linenodiv, .md-typeset > .highlighttable .linenodiv { + padding: 0.5rem 0.8rem; + } + .md-typeset > p > .MJXc-display { + margin: 0.75em -0.8rem; + padding: 0.25em 0.8rem; + } + .highlight [data-linenos]::before { + left: -1.6rem; + margin-left: -1.6rem; + padding-left: 1.6rem; + } + .md-typeset > .tabbed-set { + margin: 1em -0.8rem; + border: 0; + border-top: 0.05rem solid var(--md-default-fg-color--lightest); + border-radius: 0; + } + .md-typeset > .tabbed-set code { + padding: 0.525rem 0.8rem; + } + .md-typeset > .tabbed-set input:first-child + label { + margin-left: 0.2rem; + } +} +@media screen and (min-width: 100em) { + html { + font-size: 137.5%; + } +} +@media screen and (min-width: 125em) { + html { + font-size: 150%; + } +} +@media screen and (max-width: 59.9375em) { + body[data-md-state=lock] { + position: fixed; + } + html .md-nav__link[for=__toc] { + display: block; + padding-right: 2.4rem; + } + html .md-nav__link[for=__toc] + .md-nav__link { + display: none; + } + html .md-nav__link[for=__toc] ~ .md-nav { + display: flex; + } + html [dir=rtl] .md-nav__link { + padding-right: 0.8rem; + padding-left: 2.4rem; + } + .md-nav__source { + display: block; + padding: 0 0.2rem; + background-color: var(--md-primary-fg-color--dark); + color: var(--md-primary-bg-color); + } + .md-search__overlay { + position: absolute; + top: 0.2rem; + left: -2.2rem; + width: 2rem; + height: 2rem; + transform-origin: center; + transition: transform 300ms 100ms, opacity 200ms 200ms; + border-radius: 1rem; + background-color: var(--md-default-bg-color); + overflow: hidden; + pointer-events: none; + } + [dir=rtl] .md-search__overlay { + right: -2.2rem; + left: initial; + } + [data-md-toggle=search]:checked ~ .md-header .md-search__overlay { + transition: transform 400ms, opacity 100ms; + opacity: 1; + } + .md-search__inner { + position: fixed; + top: 0; + left: 100%; + width: 100%; + height: 100%; + transform: translateX(5%); + transition: right 0ms 300ms, left 0ms 300ms, transform 150ms 150ms cubic-bezier(0.4, 0, 0.2, 1), opacity 150ms 150ms; + opacity: 0; + z-index: 2; + } + [data-md-toggle=search]:checked ~ .md-header .md-search__inner { + left: 0; + transform: translateX(0); + transition: right 0ms 0ms, left 0ms 0ms, transform 150ms 150ms cubic-bezier(0.1, 0.7, 0.1, 1), opacity 150ms 150ms; + opacity: 1; + } + [dir=rtl] [data-md-toggle=search]:checked ~ .md-header .md-search__inner { + right: 0; + left: initial; + } + html [dir=rtl] .md-search__inner { + right: 100%; + left: initial; + transform: translateX(-5%); + } + .md-search__input { + width: 100%; + height: 2.4rem; + font-size: 0.9rem; + } + .md-search__icon[for=__search] { + top: 0.6rem; + left: 0.8rem; + } + [dir=rtl] .md-search__icon[for=__search] { + right: 0.8rem; + left: initial; + } + .md-search__icon[for=__search] svg:first-child { + display: none; + } + .md-search__icon[type=reset] { + top: 0.6rem; + right: 0.8rem; + } + [dir=rtl] .md-search__icon[type=reset] { + right: initial; + left: 0.8rem; + } + .md-search__output { + top: 2.4rem; + bottom: 0; + } + .md-search-result__icon { + display: none; + } +} +@media screen and (max-width: 76.1875em) { + [data-md-toggle=drawer]:checked ~ .md-overlay { + width: 100%; + height: 100%; + transition: width 0ms, height 0ms, opacity 250ms; + opacity: 1; + } + .md-header-nav__button.md-logo { + display: none; + } + .md-hero__inner { + margin-top: 2.4rem; + margin-bottom: 1.2rem; + } + .md-nav { + background-color: var(--md-default-bg-color); + } + .md-nav--primary, .md-nav--primary .md-nav { + display: flex; + position: absolute; + top: 0; + right: 0; + left: 0; + flex-direction: column; + height: 100%; + z-index: 1; + } + .md-nav--primary .md-nav__title, +.md-nav--primary .md-nav__item { + font-size: 0.8rem; + line-height: 1.5; + } + .md-nav--primary .md-nav__title { + position: relative; + height: 5.6rem; + padding: 3rem 0.8rem 0.2rem; + background-color: var(--md-default-fg-color--lightest); + color: var(--md-default-fg-color--light); + font-weight: 400; + line-height: 2.4rem; + white-space: nowrap; + cursor: pointer; + } + .md-nav--primary .md-nav__title .md-nav__icon { + display: block; + position: absolute; + top: 0.4rem; + left: 0.4rem; + width: 1.2rem; + height: 1.2rem; + margin: 0.2rem; + } + [dir=rtl] .md-nav--primary .md-nav__title .md-nav__icon { + right: 0.4rem; + left: initial; + } + .md-nav--primary .md-nav__title ~ .md-nav__list { + background-color: var(--md-default-bg-color); + box-shadow: inset 0 0.05rem 0 var(--md-default-fg-color--lightest); + overflow-y: auto; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + -webkit-scroll-snap-type: y mandatory; + -ms-scroll-snap-type: y mandatory; + scroll-snap-type: y mandatory; + } + .md-nav--primary .md-nav__title ~ .md-nav__list > .md-nav__item:first-child { + border-top: 0; + } + .md-nav--primary .md-nav__title[for=__drawer] { + position: relative; + background-color: var(--md-primary-fg-color); + color: var(--md-primary-bg-color); + } + .md-nav--primary .md-nav__title[for=__drawer] .md-nav__button { + display: block; + position: absolute; + top: 0.2rem; + left: 0.2rem; + margin: 0.2rem; + padding: 0.4rem; + font-size: 2.4rem; + } + html [dir=rtl] .md-nav--primary .md-nav__title[for=__drawer] .md-nav__button { + right: 0.2rem; + left: initial; + } + .md-nav--primary .md-nav__list { + flex: 1; + } + .md-nav--primary .md-nav__item { + padding: 0; + border-top: 0.05rem solid var(--md-default-fg-color--lightest); + } + [dir=rtl] .md-nav--primary .md-nav__item { + padding: 0; + } + .md-nav--primary .md-nav__item--nested > .md-nav__link { + padding-right: 2.4rem; + } + [dir=rtl] .md-nav--primary .md-nav__item--nested > .md-nav__link { + padding-right: 0.8rem; + padding-left: 2.4rem; + } + .md-nav--primary .md-nav__item--active > .md-nav__link { + color: var(--md-primary-fg-color); + } + .md-nav--primary .md-nav__link { + position: relative; + margin-top: 0; + padding: 0.6rem 0.8rem; + } + .md-nav--primary .md-nav__link .md-nav__icon { + position: absolute; + top: 50%; + right: 0.6rem; + margin-top: -0.6rem; + color: inherit; + font-size: 1.2rem; + } + [dir=rtl] .md-nav--primary .md-nav__link .md-nav__icon { + right: initial; + left: 0.6rem; + } + [dir=rtl] .md-nav--primary .md-nav__icon svg { + transform: scale(-1); + } + .md-nav--primary .md-nav--secondary .md-nav__link { + position: static; + } + .md-nav--primary .md-nav--secondary .md-nav { + position: static; + background-color: transparent; + } + .md-nav--primary .md-nav--secondary .md-nav .md-nav__link { + padding-left: 1.4rem; + } + [dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav__link { + padding-right: 1.4rem; + padding-left: initial; + } + .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav__link { + padding-left: 2rem; + } + [dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav__link { + padding-right: 2rem; + padding-left: initial; + } + .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav__link { + padding-left: 2.6rem; + } + [dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav__link { + padding-right: 2.6rem; + padding-left: initial; + } + .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav .md-nav__link { + padding-left: 3.2rem; + } + [dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav .md-nav__link { + padding-right: 3.2rem; + padding-left: initial; + } + .md-nav__toggle ~ .md-nav { + display: flex; + transform: translateX(100%); + transition: transform 250ms cubic-bezier(0.8, 0, 0.6, 1), opacity 125ms 50ms; + opacity: 0; + } + [dir=rtl] .md-nav__toggle ~ .md-nav { + transform: translateX(-100%); + } + .md-nav__toggle:checked ~ .md-nav { + transform: translateX(0); + transition: transform 250ms cubic-bezier(0.4, 0, 0.2, 1), opacity 125ms 125ms; + opacity: 1; + } + .md-sidebar--primary { + position: fixed; + top: 0; + left: -12.1rem; + width: 12.1rem; + height: 100%; + transform: translateX(0); + transition: transform 250ms cubic-bezier(0.4, 0, 0.2, 1), box-shadow 250ms; + background-color: var(--md-default-bg-color); + z-index: 3; + } + [dir=rtl] .md-sidebar--primary { + right: -12.1rem; + left: initial; + } + [data-md-toggle=drawer]:checked ~ .md-container .md-sidebar--primary { + box-shadow: 0 8px 10px 1px rgba(0, 0, 0, 0.14), 0 3px 14px 2px rgba(0, 0, 0, 0.12), 0 5px 5px -3px rgba(0, 0, 0, 0.4); + transform: translateX(12.1rem); + } + [dir=rtl] [data-md-toggle=drawer]:checked ~ .md-container .md-sidebar--primary { + transform: translateX(-12.1rem); + } + .md-sidebar--primary .md-sidebar__scrollwrap { + overflow: hidden; + } + .md-sidebar--primary .md-sidebar__scrollwrap { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + margin: 0; + -webkit-scroll-snap-type: none; + -ms-scroll-snap-type: none; + scroll-snap-type: none; + } + .md-tabs { + display: none; + } +} +@media screen and (min-width: 60em) { + .md-content { + margin-right: 12.1rem; + } + [dir=rtl] .md-content { + margin-right: initial; + margin-left: 12.1rem; + } + .md-header-nav__button[for=__search] { + display: none; + } + .md-header-nav__source { + display: block; + width: 11.7rem; + max-width: 11.7rem; + margin-left: 1rem; + } + [dir=rtl] .md-header-nav__source { + margin-right: 1rem; + margin-left: initial; + } + .md-nav--secondary .md-nav__title[for=__toc] { + scroll-snap-align: start; + } + .md-nav--secondary .md-nav__title .md-nav__icon { + display: none; + } + .md-search { + padding: 0.2rem 0; + } + .md-search__overlay { + position: fixed; + top: 0; + left: 0; + width: 0; + height: 0; + transition: width 0ms 250ms, height 0ms 250ms, opacity 250ms; + background-color: var(--md-default-fg-color--light); + cursor: pointer; + } + [dir=rtl] .md-search__overlay { + right: 0; + left: initial; + } + [data-md-toggle=search]:checked ~ .md-header .md-search__overlay { + width: 100%; + height: 100%; + transition: width 0ms, height 0ms, opacity 250ms; + opacity: 1; + } + .md-search__inner { + position: relative; + width: 11.7rem; + padding: 0.1rem 0; + float: right; + transition: width 250ms cubic-bezier(0.1, 0.7, 0.1, 1); + } + [dir=rtl] .md-search__inner { + float: left; + } + .md-search__form { + border-radius: 0.1rem; + } + .md-search__input { + width: 100%; + height: 1.8rem; + padding-left: 2.2rem; + transition: background-color 250ms, color 250ms; + border-radius: 0.1rem; + background-color: var(--md-default-fg-color--lighter); + color: inherit; + font-size: 0.8rem; + } + [dir=rtl] .md-search__input { + padding-right: 2.2rem; + } + .md-search__input + .md-search__icon { + color: var(--md-primary-bg-color); + } + .md-search__input::-webkit-input-placeholder { + color: var(--md-primary-bg-color--light); + } + .md-search__input::-moz-placeholder { + color: var(--md-primary-bg-color--light); + } + .md-search__input::-ms-input-placeholder { + color: var(--md-primary-bg-color--light); + } + .md-search__input::placeholder { + color: var(--md-primary-bg-color--light); + } + .md-search__input:hover { + background-color: var(--md-default-bg-color--lightest); + } + [data-md-toggle=search]:checked ~ .md-header .md-search__input { + border-radius: 0.1rem 0.1rem 0 0; + background-color: var(--md-default-bg-color); + color: var(--md-default-fg-color); + text-overflow: clip; + } + [data-md-toggle=search]:checked ~ .md-header .md-search__input::-webkit-input-placeholder { + color: var(--md-default-fg-color--light); + } + [data-md-toggle=search]:checked ~ .md-header .md-search__input::-moz-placeholder { + color: var(--md-default-fg-color--light); + } + [data-md-toggle=search]:checked ~ .md-header .md-search__input::-ms-input-placeholder { + color: var(--md-default-fg-color--light); + } + [data-md-toggle=search]:checked ~ .md-header .md-search__input + .md-search__icon, [data-md-toggle=search]:checked ~ .md-header .md-search__input::placeholder { + color: var(--md-default-fg-color--light); + } + .md-search__icon[for=__search] svg:last-child { + display: none; + } + .md-search__output { + top: 1.9rem; + transition: opacity 400ms; + opacity: 0; + } + [data-md-toggle=search]:checked ~ .md-header .md-search__output { + box-shadow: 0 6px 10px 0 rgba(0, 0, 0, 0.14), 0 1px 18px 0 rgba(0, 0, 0, 0.12), 0 3px 5px -1px rgba(0, 0, 0, 0.4); + opacity: 1; + } + .md-search__scrollwrap { + max-height: 0; + } + [data-md-toggle=search]:checked ~ .md-header .md-search__scrollwrap { + max-height: 75vh; + } + .md-search__scrollwrap::-webkit-scrollbar { + width: 0.2rem; + height: 0.2rem; + } + .md-search__scrollwrap::-webkit-scrollbar-thumb { + background-color: var(--md-default-fg-color--lighter); + } + .md-search__scrollwrap::-webkit-scrollbar-thumb:hover { + background-color: var(--md-accent-fg-color); + } + .md-search-result__meta { + padding-left: 2.2rem; + } + [dir=rtl] .md-search-result__meta { + padding-right: 2.2rem; + padding-left: initial; + } + .md-search-result__article { + padding-left: 2.2rem; + } + [dir=rtl] .md-search-result__article { + padding-right: 2.2rem; + padding-left: 0.8rem; + } + .md-sidebar--secondary { + display: block; + margin-left: calc(100% - 12.1rem); + } + [dir=rtl] .md-sidebar--secondary { + margin-right: calc(100% - 12.1rem); + margin-left: initial; + } + .md-sidebar--secondary .md-sidebar__scrollwrap { + -webkit-overflow-scrolling: touch; + } +} +@media screen and (min-width: 76.25em) { + .md-content { + margin-left: 12.1rem; + } + [dir=rtl] .md-content { + margin-right: 12.1rem; + } + .md-content__inner { + margin-right: 1.2rem; + margin-left: 1.2rem; + } + .md-header-nav__button[for=__drawer] { + display: none; + } + .md-header-nav__source { + margin-left: 1.4rem; + } + [dir=rtl] .md-header-nav__source { + margin-right: 1.4rem; + } + .md-nav { + transition: max-height 250ms cubic-bezier(0.86, 0, 0.07, 1); + } + .md-nav--primary .md-nav__title[for=__drawer] { + scroll-snap-align: start; + } + .md-nav--primary .md-nav__title .md-nav__icon { + display: none; + } + .md-nav__toggle ~ .md-nav { + display: none; + } + .md-nav__toggle:checked ~ .md-nav { + display: block; + } + .md-nav__item--nested > .md-nav > .md-nav__title { + display: none; + } + .md-nav__icon { + height: 0.9rem; + float: right; + transition: transform 250ms; + } + .md-nav__icon svg { + display: inline-block; + width: 0.9rem; + height: 0.9rem; + vertical-align: -0.1rem; + } + .md-nav__item--nested .md-nav__toggle:checked ~ .md-nav__link .md-nav__icon { + transform: rotateZ(90deg); + } + [data-md-toggle=search]:checked ~ .md-header .md-search__inner { + width: 34.4rem; + } + .md-search__scrollwrap { + width: 34.4rem; + } + .md-sidebar--secondary { + margin-left: 48.9rem; + } + [dir=rtl] .md-sidebar--secondary { + margin-right: 48.9rem; + margin-left: initial; + } + .md-tabs ~ .md-main .md-nav--primary > .md-nav__list > .md-nav__item--nested { + display: none; + } + .md-tabs--active ~ .md-main .md-nav--primary .md-nav__title { + display: block; + padding: 0 0.6rem; + pointer-events: none; + scroll-snap-align: start; + } + .md-tabs--active ~ .md-main .md-nav--primary .md-nav__title[for=__drawer] { + display: none; + } + .md-tabs--active ~ .md-main .md-nav--primary > .md-nav__list > .md-nav__item { + display: none; + } + .md-tabs--active ~ .md-main .md-nav--primary > .md-nav__list > .md-nav__item--active { + display: block; + padding: 0; + } + .md-tabs--active ~ .md-main .md-nav--primary > .md-nav__list > .md-nav__item--active > .md-nav__link { + display: none; + } + .md-tabs--active ~ .md-main .md-nav[data-md-level="1"] > .md-nav__list > .md-nav__item { + padding: 0 0.6rem; + } + .md-tabs--active ~ .md-main .md-nav[data-md-level="1"] .md-nav .md-nav__title { + display: none; + } +} +@media screen and (min-width: 45em) { + .md-footer-nav__link { + width: 50%; + } + .md-footer-copyright { + max-width: 75%; + float: left; + } + [dir=rtl] .md-footer-copyright { + float: right; + } + .md-footer-social { + padding: 0.6rem 0; + float: right; + } + [dir=rtl] .md-footer-social { + float: left; + } +} +@media screen and (max-width: 29.9375em) { + [data-md-toggle=search]:checked ~ .md-header .md-search__overlay { + transform: scale(45); + } +} +@media screen and (min-width: 30em) and (max-width: 44.9375em) { + [data-md-toggle=search]:checked ~ .md-header .md-search__overlay { + transform: scale(60); + } +} +@media screen and (min-width: 45em) and (max-width: 59.9375em) { + [data-md-toggle=search]:checked ~ .md-header .md-search__overlay { + transform: scale(75); + } +} +@media screen and (min-width: 60em) and (max-width: 76.1875em) { + [data-md-toggle=search]:checked ~ .md-header .md-search__inner { + width: 23.4rem; + } + .md-search__scrollwrap { + width: 23.4rem; + } + .md-search-result__teaser { + max-height: 2.5rem; + -webkit-line-clamp: 3; + } +} +@media (-webkit-max-device-pixel-ratio: 1), (max-resolution: 1dppx) { + .md-search__scrollwrap { + transform: translateZ(0); + } +} +/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/src/assets/stylesheets/main.scss */ +/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/src/assets/stylesheets/base/_reset.scss */ +/*# sourceURL=main.scss */ +/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/src/assets/stylesheets/base/_colors.scss */ +/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/src/assets/stylesheets/base/_icons.scss */ +/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/src/assets/stylesheets/base/_typeset.scss */ +/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/src/assets/stylesheets/layout/_base.scss */ +/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/src/assets/stylesheets/layout/_announce.scss */ +/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/src/assets/stylesheets/layout/_clipboard.scss */ +/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/src/assets/stylesheets/layout/_content.scss */ +/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/src/assets/stylesheets/layout/_dialog.scss */ +/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/node_modules/material-shadows/material-shadows.scss */ +/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/src/assets/stylesheets/layout/_header.scss */ +/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/src/assets/stylesheets/layout/_hero.scss */ +/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/src/assets/stylesheets/layout/_footer.scss */ +/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/src/assets/stylesheets/layout/_nav.scss */ +/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/src/assets/stylesheets/layout/_search.scss */ +/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/src/assets/stylesheets/layout/_sidebar.scss */ +/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/src/assets/stylesheets/layout/_source.scss */ +/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/src/assets/stylesheets/layout/_tabs.scss */ +/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/src/assets/stylesheets/extensions/_admonition.scss */ +/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/src/assets/stylesheets/extensions/_codehilite.scss */ +/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/src/assets/stylesheets/extensions/_footnotes.scss */ +/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/src/assets/stylesheets/extensions/_permalinks.scss */ +/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/src/assets/stylesheets/extensions/pymdown/_arithmatex.scss */ +/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/src/assets/stylesheets/extensions/pymdown/_critic.scss */ +/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/src/assets/stylesheets/extensions/pymdown/_details.scss */ +/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/src/assets/stylesheets/extensions/pymdown/_emoji.scss */ +/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/src/assets/stylesheets/extensions/pymdown/_highlight.scss */ +/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/src/assets/stylesheets/extensions/pymdown/_inlinehilite.scss */ +/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/src/assets/stylesheets/extensions/pymdown/_tabbed.scss */ +/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/src/assets/stylesheets/extensions/pymdown/_tasklist.scss */ +/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/src/assets/stylesheets/utilities/_break.scss */ +/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9zcXVpZGZ1bmsvRGVza3RvcC9HZW5lcmFsL1NvdXJjZXMvbWtkb2NzLW1hdGVyaWFsLXR5cGVzY3JpcHQvc3JjL2Fzc2V0cy9zdHlsZXNoZWV0cy9tYWluLnNjc3MiLCIvVXNlcnMvc3F1aWRmdW5rL0Rlc2t0b3AvR2VuZXJhbC9Tb3VyY2VzL21rZG9jcy1tYXRlcmlhbC10eXBlc2NyaXB0L3NyYy9hc3NldHMvc3R5bGVzaGVldHMvYmFzZS9fcmVzZXQuc2NzcyIsIm1haW4uc2NzcyIsIi9Vc2Vycy9zcXVpZGZ1bmsvRGVza3RvcC9HZW5lcmFsL1NvdXJjZXMvbWtkb2NzLW1hdGVyaWFsLXR5cGVzY3JpcHQvc3JjL2Fzc2V0cy9zdHlsZXNoZWV0cy9iYXNlL19jb2xvcnMuc2NzcyIsIi9Vc2Vycy9zcXVpZGZ1bmsvRGVza3RvcC9HZW5lcmFsL1NvdXJjZXMvbWtkb2NzLW1hdGVyaWFsLXR5cGVzY3JpcHQvc3JjL2Fzc2V0cy9zdHlsZXNoZWV0cy9iYXNlL19pY29ucy5zY3NzIiwiL1VzZXJzL3NxdWlkZnVuay9EZXNrdG9wL0dlbmVyYWwvU291cmNlcy9ta2RvY3MtbWF0ZXJpYWwtdHlwZXNjcmlwdC9zcmMvYXNzZXRzL3N0eWxlc2hlZXRzL2Jhc2UvX3R5cGVzZXQuc2NzcyIsIi9Vc2Vycy9zcXVpZGZ1bmsvRGVza3RvcC9HZW5lcmFsL1NvdXJjZXMvbWtkb2NzLW1hdGVyaWFsLXR5cGVzY3JpcHQvc3JjL2Fzc2V0cy9zdHlsZXNoZWV0cy9sYXlvdXQvX2Jhc2Uuc2NzcyIsIi9Vc2Vycy9zcXVpZGZ1bmsvRGVza3RvcC9HZW5lcmFsL1NvdXJjZXMvbWtkb2NzLW1hdGVyaWFsLXR5cGVzY3JpcHQvc3JjL2Fzc2V0cy9zdHlsZXNoZWV0cy9sYXlvdXQvX2Fubm91bmNlLnNjc3MiLCIvVXNlcnMvc3F1aWRmdW5rL0Rlc2t0b3AvR2VuZXJhbC9Tb3VyY2VzL21rZG9jcy1tYXRlcmlhbC10eXBlc2NyaXB0L3NyYy9hc3NldHMvc3R5bGVzaGVldHMvbGF5b3V0L19jbGlwYm9hcmQuc2NzcyIsIi9Vc2Vycy9zcXVpZGZ1bmsvRGVza3RvcC9HZW5lcmFsL1NvdXJjZXMvbWtkb2NzLW1hdGVyaWFsLXR5cGVzY3JpcHQvc3JjL2Fzc2V0cy9zdHlsZXNoZWV0cy9sYXlvdXQvX2NvbnRlbnQuc2NzcyIsIi9Vc2Vycy9zcXVpZGZ1bmsvRGVza3RvcC9HZW5lcmFsL1NvdXJjZXMvbWtkb2NzLW1hdGVyaWFsLXR5cGVzY3JpcHQvc3JjL2Fzc2V0cy9zdHlsZXNoZWV0cy9sYXlvdXQvX2RpYWxvZy5zY3NzIiwiL1VzZXJzL3NxdWlkZnVuay9EZXNrdG9wL0dlbmVyYWwvU291cmNlcy9ta2RvY3MtbWF0ZXJpYWwtdHlwZXNjcmlwdC9ub2RlX21vZHVsZXMvbWF0ZXJpYWwtc2hhZG93cy9tYXRlcmlhbC1zaGFkb3dzLnNjc3MiLCIvVXNlcnMvc3F1aWRmdW5rL0Rlc2t0b3AvR2VuZXJhbC9Tb3VyY2VzL21rZG9jcy1tYXRlcmlhbC10eXBlc2NyaXB0L3NyYy9hc3NldHMvc3R5bGVzaGVldHMvbGF5b3V0L19oZWFkZXIuc2NzcyIsIi9Vc2Vycy9zcXVpZGZ1bmsvRGVza3RvcC9HZW5lcmFsL1NvdXJjZXMvbWtkb2NzLW1hdGVyaWFsLXR5cGVzY3JpcHQvc3JjL2Fzc2V0cy9zdHlsZXNoZWV0cy9sYXlvdXQvX2hlcm8uc2NzcyIsIi9Vc2Vycy9zcXVpZGZ1bmsvRGVza3RvcC9HZW5lcmFsL1NvdXJjZXMvbWtkb2NzLW1hdGVyaWFsLXR5cGVzY3JpcHQvc3JjL2Fzc2V0cy9zdHlsZXNoZWV0cy9sYXlvdXQvX2Zvb3Rlci5zY3NzIiwiL1VzZXJzL3NxdWlkZnVuay9EZXNrdG9wL0dlbmVyYWwvU291cmNlcy9ta2RvY3MtbWF0ZXJpYWwtdHlwZXNjcmlwdC9zcmMvYXNzZXRzL3N0eWxlc2hlZXRzL2xheW91dC9fbmF2LnNjc3MiLCIvVXNlcnMvc3F1aWRmdW5rL0Rlc2t0b3AvR2VuZXJhbC9Tb3VyY2VzL21rZG9jcy1tYXRlcmlhbC10eXBlc2NyaXB0L3NyYy9hc3NldHMvc3R5bGVzaGVldHMvbGF5b3V0L19zZWFyY2guc2NzcyIsIi9Vc2Vycy9zcXVpZGZ1bmsvRGVza3RvcC9HZW5lcmFsL1NvdXJjZXMvbWtkb2NzLW1hdGVyaWFsLXR5cGVzY3JpcHQvc3JjL2Fzc2V0cy9zdHlsZXNoZWV0cy9sYXlvdXQvX3NpZGViYXIuc2NzcyIsIi9Vc2Vycy9zcXVpZGZ1bmsvRGVza3RvcC9HZW5lcmFsL1NvdXJjZXMvbWtkb2NzLW1hdGVyaWFsLXR5cGVzY3JpcHQvc3JjL2Fzc2V0cy9zdHlsZXNoZWV0cy9sYXlvdXQvX3NvdXJjZS5zY3NzIiwiL1VzZXJzL3NxdWlkZnVuay9EZXNrdG9wL0dlbmVyYWwvU291cmNlcy9ta2RvY3MtbWF0ZXJpYWwtdHlwZXNjcmlwdC9zcmMvYXNzZXRzL3N0eWxlc2hlZXRzL2xheW91dC9fdGFicy5zY3NzIiwiL1VzZXJzL3NxdWlkZnVuay9EZXNrdG9wL0dlbmVyYWwvU291cmNlcy9ta2RvY3MtbWF0ZXJpYWwtdHlwZXNjcmlwdC9zcmMvYXNzZXRzL3N0eWxlc2hlZXRzL2V4dGVuc2lvbnMvX2FkbW9uaXRpb24uc2NzcyIsIi9Vc2Vycy9zcXVpZGZ1bmsvRGVza3RvcC9HZW5lcmFsL1NvdXJjZXMvbWtkb2NzLW1hdGVyaWFsLXR5cGVzY3JpcHQvc3JjL2Fzc2V0cy9zdHlsZXNoZWV0cy9leHRlbnNpb25zL19jb2RlaGlsaXRlLnNjc3MiLCIvVXNlcnMvc3F1aWRmdW5rL0Rlc2t0b3AvR2VuZXJhbC9Tb3VyY2VzL21rZG9jcy1tYXRlcmlhbC10eXBlc2NyaXB0L3NyYy9hc3NldHMvc3R5bGVzaGVldHMvZXh0ZW5zaW9ucy9fZm9vdG5vdGVzLnNjc3MiLCIvVXNlcnMvc3F1aWRmdW5rL0Rlc2t0b3AvR2VuZXJhbC9Tb3VyY2VzL21rZG9jcy1tYXRlcmlhbC10eXBlc2NyaXB0L3NyYy9hc3NldHMvc3R5bGVzaGVldHMvZXh0ZW5zaW9ucy9fcGVybWFsaW5rcy5zY3NzIiwiL1VzZXJzL3NxdWlkZnVuay9EZXNrdG9wL0dlbmVyYWwvU291cmNlcy9ta2RvY3MtbWF0ZXJpYWwtdHlwZXNjcmlwdC9zcmMvYXNzZXRzL3N0eWxlc2hlZXRzL2V4dGVuc2lvbnMvcHltZG93bi9fYXJpdGhtYXRleC5zY3NzIiwiL1VzZXJzL3NxdWlkZnVuay9EZXNrdG9wL0dlbmVyYWwvU291cmNlcy9ta2RvY3MtbWF0ZXJpYWwtdHlwZXNjcmlwdC9zcmMvYXNzZXRzL3N0eWxlc2hlZXRzL2V4dGVuc2lvbnMvcHltZG93bi9fY3JpdGljLnNjc3MiLCIvVXNlcnMvc3F1aWRmdW5rL0Rlc2t0b3AvR2VuZXJhbC9Tb3VyY2VzL21rZG9jcy1tYXRlcmlhbC10eXBlc2NyaXB0L3NyYy9hc3NldHMvc3R5bGVzaGVldHMvZXh0ZW5zaW9ucy9weW1kb3duL19kZXRhaWxzLnNjc3MiLCIvVXNlcnMvc3F1aWRmdW5rL0Rlc2t0b3AvR2VuZXJhbC9Tb3VyY2VzL21rZG9jcy1tYXRlcmlhbC10eXBlc2NyaXB0L3NyYy9hc3NldHMvc3R5bGVzaGVldHMvZXh0ZW5zaW9ucy9weW1kb3duL19lbW9qaS5zY3NzIiwiL1VzZXJzL3NxdWlkZnVuay9EZXNrdG9wL0dlbmVyYWwvU291cmNlcy9ta2RvY3MtbWF0ZXJpYWwtdHlwZXNjcmlwdC9zcmMvYXNzZXRzL3N0eWxlc2hlZXRzL2V4dGVuc2lvbnMvcHltZG93bi9faGlnaGxpZ2h0LnNjc3MiLCIvVXNlcnMvc3F1aWRmdW5rL0Rlc2t0b3AvR2VuZXJhbC9Tb3VyY2VzL21rZG9jcy1tYXRlcmlhbC10eXBlc2NyaXB0L3NyYy9hc3NldHMvc3R5bGVzaGVldHMvZXh0ZW5zaW9ucy9weW1kb3duL19pbmxpbmVoaWxpdGUuc2NzcyIsIi9Vc2Vycy9zcXVpZGZ1bmsvRGVza3RvcC9HZW5lcmFsL1NvdXJjZXMvbWtkb2NzLW1hdGVyaWFsLXR5cGVzY3JpcHQvc3JjL2Fzc2V0cy9zdHlsZXNoZWV0cy9leHRlbnNpb25zL3B5bWRvd24vX3RhYmJlZC5zY3NzIiwiL1VzZXJzL3NxdWlkZnVuay9EZXNrdG9wL0dlbmVyYWwvU291cmNlcy9ta2RvY3MtbWF0ZXJpYWwtdHlwZXNjcmlwdC9zcmMvYXNzZXRzL3N0eWxlc2hlZXRzL2V4dGVuc2lvbnMvcHltZG93bi9fdGFza2xpc3Quc2NzcyIsIi9Vc2Vycy9zcXVpZGZ1bmsvRGVza3RvcC9HZW5lcmFsL1NvdXJjZXMvbWtkb2NzLW1hdGVyaWFsLXR5cGVzY3JpcHQvc3JjL2Fzc2V0cy9zdHlsZXNoZWV0cy91dGlsaXRpZXMvX2JyZWFrLnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZ0JBQUE7QUM2QkE7RUFDRSxzQkFBQTtBQzNCRjs7QUQrQkE7OztFQUdFLG1CQUFBO0FDNUJGOztBRGdDQTtFQUNFLDhCQUFBO0tBQUEsMkJBQUE7TUFBQSwwQkFBQTtVQUFBLHNCQUFBO0FDMUJGOztBRDhCQTtFQUNFLFNBQUE7QUMzQkY7O0FEK0JBO0VBQ0UsaUJBQUE7RUFDQSx1QkFBQTtBQzVCRjs7QURnQ0E7RUFDRSxxQ0FBQTtBQzdCRjs7QURpQ0E7Ozs7RUFJRSx3Q0FBQTtBQzlCRjs7QURrQ0E7RUFDRSxjQUFBO0VBQ0EscUJBQUE7QUMvQkY7O0FEbUNBO0VBQ0UsY0FBQTtBQ2hDRjs7QURvQ0E7O0VBRUUsa0JBQUE7RUFDQSxjQUFBO0VBQ0EsY0FBQTtFQUNBLHdCQUFBO0FDakNGOztBRHFDQTtFQUNFLGVBQUE7QUNsQ0Y7O0FEc0NBO0VBQ0UsV0FBQTtBQ25DRjs7QUR1Q0E7RUFDRSxrQkFBQTtBQ3BDRjs7QUR3Q0E7RUFDRSx5QkFBQTtFQUNBLGlCQUFBO0FDckNGOztBRHlDQTs7RUFFRSxtQkFBQTtFQUNBLG1CQUFBO0FDdENGOztBRDBDQTtFQUNFLFNBQUE7RUFDQSxVQUFBO0VBQ0EsU0FBQTtFQUNBLHVCQUFBO0VBQ0Esa0JBQUE7QUN2Q0Y7O0FEMkNBO0VBQ0UsU0FBQTtFQUNBLFVBQUE7QUN4Q0Y7O0FDL0RBO0VBR0UsNENBQUE7RUFDQSxtREFBQTtFQUNBLHFEQUFBO0VBQ0Esc0RBQUE7RUFDQSwyQ0FBQTtFQUNBLG9EQUFBO0VBQ0Esc0RBQUE7RUFDQSx3REFBQTtFQUdBLGdEQUFBO0VBQ0EsdURB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LGNBQUE7QW5CcytDUjtBbUJuK0NFO0VBQU0sY0FBQTtBbkJzK0NSO0FtQnIrQ0U7RUFBTSxjQUFBO0FuQncrQ1I7QW1CditDRTtFQUFNLGNBQUE7QW5CMCtDUjtBbUJ6K0NFO0VBQU0sY0FBQTtBbkI0K0NSO0FtQjMrQ0U7RUFBTSxjQUFBO0FuQjgrQ1I7QW1CNytDRTtFQUFNLGNBQUE7QW5CZy9DUjtBbUIvK0NFO0VBQU0sY0FBQTtBbkJrL0NSO0FtQmovQ0U7RUFBTSxjQUFBO0FuQm8vQ1I7QW1Cbi9DRTtFQUFNLGNBQUE7QW5Ccy9DUjtBbUJyL0NFO0VBQU0sY0FBQTtBbkJ3L0NSO0FtQnYvQ0U7RUFBTSxjQUFBO0FuQjAvQ1I7QW1Cei9DRTtFQUFNLGNBQUE7QW5CNC9DUjtBbUIzL0NFO0VBQU0sY0FBQTtBbkI4L0NSO0FtQjcvQ0U7RUFBTSxjQUFBO0FuQmdnRFI7QW1CLy9DRTtFQUFNLGNBQUE7QW5Ca2dEUjtBbUJqZ0RFO0VBQU0sY0FBQTtBbkJvZ0RSO0FtQm5nREU7RUFBTSxjQUFBO0FuQnNnRFI7QW1CbmdERTtFQUFNLGNBQUE7QW5Cc2dEUjtBbUJyZ0RFO0VBQU0sY0FBQTtBbkJ3Z0RSO0FtQnZnREU7RUFBTSxjQUFBO0FuQjBnRFI7QW1CemdERTtFQUFNLGNBQUE7QW5CNGdEUjtBbUIzZ0RFO0VBQU0sY0FBQTtBbkI4Z0RSO0FtQjdnREU7RUFBTSxjQUFBO0FuQmdoRFI7QW1CN2dERTtFQUFNLGNBQUE7QW5CZ2hEUjtBbUIvZ0RFO0VBQU0sY0FBQTtBbkJraERSO0FtQmpoREU7RUFBTSxjQUFBO0FuQm9oRFI7QW1CbmhERTtFQUFNLGNBQUE7QW5Cc2hEUjtBbUJyaERFO0VBQU0sY0FBQTtBbkJ3aERSO0FtQnZoREU7RUFBTSxjQUFBO0FuQjBoRFI7QW1CemhERTtFQUFNLGNBQUE7QW5CNGhEUjtBbUIzaERFO0VBQU0sY0FBQTtBbkI4aERSO0FtQjdoREU7RUFBTSxjQUFBO0FuQmdpRFI7QW1CL2hERTtFQUFNLGNBQUE7QW5Ca2lEUjtBbUJqaURFO0VBQU0sY0FBQTtBbkJvaURSO0Ft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QmpGRjtJQVNJLG9CQUFBO0Vkb3VGTjtBQUNGO0E4QjdwRk07RWhCakZGO0lBY0ksb0JBQUE7RWRvdUZOO0FBQ0Y7QThCbHFGTTtFaEJnQ0Y7SUFJSSxjQUFBO0Vka29GTjtFY3Q1RUE7SUFpQkksY0FBQTtFZHc0RUo7RWNsdUVBO0lBb0JJLGtCQUFBO0lBQ0EscUJBQUE7RWRpdEVKO0FBQ0Y7QWNuNUVJO0VBWEY7SUFZSSx3QkFBQTtFZHM1RUo7QUFDRiIsImZpbGUiOiJtYWluLnNjc3MiLCJzb3VyY2VzQ29udGVudCI6WyJAY2hhcnNldCBcIlVURi04XCI7XG5odG1sIHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbn1cblxuKixcbio6OmJlZm9yZSxcbio6OmFmdGVyIHtcbiAgYm94LXNpemluZzogaW5oZXJpdDtcbn1cblxuaHRtbCB7XG4gIHRleHQtc2l6ZS1hZGp1c3Q6IG5vbmU7XG59XG5cbmJvZHkge1xuICBtYXJnaW46IDA7XG59XG5cbmhyIHtcbiAgb3ZlcmZsb3c6IHZpc2libGU7XG4gIGJveC1zaXppbmc6IGNvbnRlbnQtYm94O1xufVxuXG5hIHtcbiAgLXdlYmtpdC10ZXh0LWRlY29yYXRpb24tc2tpcDogb2JqZWN0cztcbn1cblxuYSxcbmJ1dHRvbixcbmxhYmVsLFxuaW5wdXQge1xuICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50O1xufVxuXG5hIHtcbiAgY29sb3I6IGluaGVyaXQ7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cblxuc21hbGwge1xuICBmb250LXNpemU6IDgwJTtcbn1cblxuc3ViLFxuc3VwIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBmb250LXNpemU6IDgwJTtcbiAgbGluZS1oZWlnaHQ6IDA7XG4gIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTtcbn1cblxuc3ViIHtcbiAgYm90dG9tOiAtMC4yNWVtO1xufVxuXG5zdXAge1xuICB0b3A6IC0wLjVlbTtcbn1cblxuaW1nIHtcbiAgYm9yZGVyLXN0eWxlOiBub25lO1xufVxuXG50YWJsZSB7XG4gIGJvcmRlci1jb2xsYXBzZTogc2VwYXJhdGU7XG4gIGJvcmRlci1zcGFjaW5nOiAwO1xufVxuXG50ZCxcbnRoIHtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgdmVydGljYWwtYWxpZ246IHRvcDtcbn1cblxuYnV0dG9uIHtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwO1xuICBib3JkZXI6IDA7XG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICBmb250LXNpemU6IGluaGVyaXQ7XG59XG5cbmlucHV0IHtcbiAgYm9yZGVyOiAwO1xuICBvdXRsaW5lOiAwO1xufVxuXG46cm9vdCB7XG4gIC0tbWQtZGVmYXVsdC1mZy1jb2xvcjogaHNsYSgwLCAwJSwgMCUsIDAuODcpO1xuICAtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0OiBoc2xhKDAsIDAlLCAwJSwgMC41NCk7XG4gIC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlcjogaHNsYSgwLCAwJSwgMCUsIDAuMjYpO1xuICAtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXN0OiBoc2xhKDAsIDAlLCAwJSwgMC4wNyk7XG4gIC0tbWQtZGVmYXVsdC1iZy1jb2xvcjogaHNsYSgwLCAwJSwgMTAwJSwgMSk7XG4gIC0tbWQtZGVmYXVsdC1iZy1jb2xvci0tbGlnaHQ6IGhzbGEoMCwgMCUsIDEwMCUsIDAuNyk7XG4gIC0tbWQtZGVmYXVsdC1iZy1jb2xvci0tbGlnaHRlcjogaHNsYSgwLCAwJSwgMTAwJSwgMC4zKTtcbiAgLS1tZC1kZWZhdWx0LWJnLWNvbG9yLS1saWdodGVzdDogaHNsYSgwLCAwJSwgMTAwJSwgMC4xMik7XG4gIC0tbWQtcHJpbWFyeS1mZy1jb2xvcjogaHNsYSgyMzFkZWcsIDQ4JSwgNDglLCAxKTtcbiAgLS1tZC1wcmltYXJ5LWZnLWNvbG9yLS1saWdodDogaHNsYSgyMzBkZWcsIDQ0JSwgNjQlLCAxKTtcbiAgLS1tZC1wcmltYXJ5LWZnLWNvbG9yLS1kYXJrOiBoc2xhKDIzMmRlZywgNTQlLCA0MSUsIDEpO1xuICAtLW1kLXByaW1hcnktYmctY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtYmctY29sb3IpO1xuICAtLW1kLXByaW1hcnktYmctY29sb3ItLWxpZ2h0OiB2YXIoLS1tZC1kZWZhdWx0LWJnLWNvbG9yLS1saWdodCk7XG4gIC0tbWQtYWNjZW50LWZnLWNvbG9yOiBoc2xhKDIzMWRlZywgOTklLCA2NiUsIDEpO1xuICAtLW1kLWFjY2VudC1mZy1jb2xvci0tdHJhbnNwYXJlbnQ6IGhzbGEoMjMxZGVnLCA5OSUsIDY2JSwgMC4xKTtcbiAgLS1tZC1hY2NlbnQtYmctY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtYmctY29sb3IpO1xuICAtLW1kLWFjY2VudC1iZy1jb2xvci0tbGlnaHQ6IHZhcigtLW1kLWRlZmF1bHQtYmctY29sb3ItLWxpZ2h0KTtcbiAgLS1tZC1jb2RlLWJnLWNvbG9yOiBoc2xhKDAsIDAlLCA5Mi41JSwgMC41KTtcbiAgLS1tZC1jb2RlLWZnLWNvbG9yOiBoc2xhKDIwMCwgMTglLCAyNiUsIDEpO1xufVxuXG4ubWQtaWNvbiBzdmcge1xuICBkaXNwbGF5OiBibG9jaztcbiAgd2lkdGg6IDEuMnJlbTtcbiAgaGVpZ2h0OiAxLjJyZW07XG4gIG1hcmdpbjogMCBhdXRvO1xuICBmaWxsOiBjdXJyZW50Q29sb3I7XG59XG5cbmJvZHkge1xuICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDtcbiAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTtcbn1cblxuYm9keSxcbmlucHV0IHtcbiAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3IpO1xuICBmb250LWZlYXR1cmUtc2V0dGluZ3M6IFwia2VyblwiLCBcImxpZ2FcIjtcbiAgZm9udC1mYW1pbHk6IFwiSGVsdmV0aWNhIE5ldWVcIiwgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjtcbn1cblxuY29kZSxcbnByZSxcbmtiZCB7XG4gIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yKTtcbiAgZm9udC1mZWF0dXJlLXNldHRpbmdzOiBcImtlcm5cIjtcbiAgZm9udC1mYW1pbHk6IFwiQ291cmllciBOZXdcIiwgQ291cmllciwgbW9ub3NwYWNlO1xufVxuXG4ubWQtdHlwZXNldCB7XG4gIGZvbnQtc2l6ZTogMC44cmVtO1xuICBsaW5lLWhlaWdodDogMS42O1xuICAtd2Via2l0LXByaW50LWNvbG9yLWFkanVzdDogZXhhY3Q7XG59XG4ubWQtdHlwZXNldCBwLFxuLm1kLXR5cGVzZXQgdWwsXG4ubWQtdHlwZXNldCBvbCxcbi5tZC10eXBlc2V0IGJsb2NrcXVvdGUge1xuICBtYXJnaW46IDFlbSAwO1xufVxuLm1kLXR5cGVzZXQgaDEge1xuICBtYXJnaW46IDAgMCAycmVtO1xuICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHQpO1xuICBmb250LXNpemU6IDEuNTYyNXJlbTtcbiAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjM7XG59XG4ubWQtdHlwZXNldCBoMiB7XG4gIG1hcmdpbjogMnJlbSAwIDAuOHJlbTtcbiAgZm9udC1zaXplOiAxLjI1cmVtO1xuICBmb250LXdlaWdodDogMzAwO1xuICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cbi5tZC10eXBlc2V0IGgzIHtcbiAgbWFyZ2luOiAxLjZyZW0gMCAwLjhyZW07XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjU7XG59XG4ubWQtdHlwZXNldCBoMiArIGgzIHtcbiAgbWFyZ2luLXRvcDogMC44cmVtO1xufVxuLm1kLXR5cGVzZXQgaDQge1xuICBtYXJnaW46IDAuOHJlbSAwO1xuICBmb250LXNpemU6IDAuOHJlbTtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07XG59XG4ubWQtdHlwZXNldCBoNSxcbi5tZC10eXBlc2V0IGg2IHtcbiAgbWFyZ2luOiAwLjhyZW0gMDtcbiAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0KTtcbiAgZm9udC1zaXplOiAwLjY0cmVtO1xuICBmb250LXdlaWdodDogNzAwO1xuICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTtcbn1cbi5tZC10eXBlc2V0IGg1IHtcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbn1cbi5tZC10eXBlc2V0IGhyIHtcbiAgbWFyZ2luOiAxLjVlbSAwO1xuICBib3JkZXItYm90dG9tOiAwLjA1cmVtIGRvdHRlZCB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodGVyKTtcbn1cbi5tZC10eXBlc2V0IGEge1xuICBjb2xvcjogdmFyKC0tbWQtcHJpbWFyeS1mZy1jb2xvcik7XG4gIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7XG59XG4ubWQtdHlwZXNldCBhLCAubWQtdHlwZXNldCBhOjpiZWZvcmUge1xuICB0cmFuc2l0aW9uOiBjb2xvciAxMjVtcztcbn1cbi5tZC10eXBlc2V0IGE6Zm9jdXMsIC5tZC10eXBlc2V0IGE6aG92ZXIge1xuICBjb2xvcjogdmFyKC0tbWQtYWNjZW50LWZnLWNvbG9yKTtcbn1cbkBtZWRpYSBwcmludCB7XG4gIC5tZC10eXBlc2V0IGE6OmFmdGVyIHtcbiAgICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHQpO1xuICAgIGNvbnRlbnQ6IFwiIFtcIiBhdHRyKGhyZWYpIFwiXVwiO1xuICB9XG59XG4ubWQtdHlwZXNldCBjb2RlLFxuLm1kLXR5cGVzZXQgcHJlLFxuLm1kLXR5cGVzZXQga2JkIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtY29kZS1iZy1jb2xvcik7XG4gIGNvbG9yOiB2YXIoLS1tZC1jb2RlLWZnLWNvbG9yKTtcbiAgZm9udC1zaXplOiA4NSU7XG4gIGRpcmVjdGlvbjogbHRyO1xufVxuQG1lZGlhIHByaW50IHtcbiAgLm1kLXR5cGVzZXQgY29kZSxcbi5tZC10eXBlc2V0IHByZSxcbi5tZC10eXBlc2V0IGtiZCB7XG4gICAgd2hpdGUtc3BhY2U6IHByZS13cmFwO1xuICB9XG59XG4ubWQtdHlwZXNldCBjb2RlIHtcbiAgbWFyZ2luOiAwIDAuMjk0MTE3NjQ3MWVtO1xuICBwYWRkaW5nOiAwLjA3MzUyOTQxMThlbSAwO1xuICBib3JkZXItcmFkaXVzOiAwLjFyZW07XG4gIGJveC1zaGFkb3c6IDAuMjk0MTE3NjQ3MWVtIDAgMCB2YXIoLS1tZC1jb2RlLWJnLWNvbG9yKSwgLTAuMjk0MTE3NjQ3MWVtIDAgMCB2YXIoLS1tZC1jb2RlLWJnLWNvbG9yKTtcbiAgd29yZC1icmVhazogYnJlYWstd29yZDtcbiAgYm94LWRlY29yYXRpb24tYnJlYWs6IGNsb25lO1xufVxuLm1kLXR5cGVzZXQgaDEgY29kZSxcbi5tZC10eXBlc2V0IGgyIGNvZGUsXG4ubWQtdHlwZXNldCBoMyBjb2RlLFxuLm1kLXR5cGVzZXQgaDQgY29kZSxcbi5tZC10eXBlc2V0IGg1IGNvZGUsXG4ubWQtdHlwZXNldCBoNiBjb2RlIHtcbiAgbWFyZ2luOiAwO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgYm94LXNoYWRvdzogbm9uZTtcbn1cbi5tZC10eXBlc2V0IGEgPiBjb2RlIHtcbiAgbWFyZ2luOiBpbmhlcml0O1xuICBwYWRkaW5nOiBpbmhlcml0O1xuICBib3JkZXItcmFkaXVzOiBpbml0aWFsO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiBpbmhlcml0O1xuICBjb2xvcjogaW5oZXJpdDtcbiAgYm94LXNoYWRvdzogbm9uZTtcbn1cbi5tZC10eXBlc2V0IHByZSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWFyZ2luOiAxZW0gMDtcbiAgYm9yZGVyLXJhZGl1czogMC4xcmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xuICBiYWNrZmFjZS12aXNpYmlsaXR5OiBoaWRkZW47XG4gIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDtcbn1cbi5tZC10eXBlc2V0IHByZSA+IGNvZGUge1xuICBkaXNwbGF5OiBibG9jaztcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwLjUyNXJlbSAwLjZyZW07XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICBmb250LXNpemU6IGluaGVyaXQ7XG4gIGJveC1zaGFkb3c6IG5vbmU7XG4gIGJveC1kZWNvcmF0aW9uLWJyZWFrOiBzbGljZTtcbiAgb3ZlcmZsb3c6IGF1dG87XG4gIHdvcmQtYnJlYWs6IG5vcm1hbDtcbn1cbi5tZC10eXBlc2V0IHByZSA+IGNvZGU6Oi13ZWJraXQtc2Nyb2xsYmFyIHtcbiAgd2lkdGg6IDAuMnJlbTtcbiAgaGVpZ2h0OiAwLjJyZW07XG59XG4ubWQtdHlwZXNldCBwcmUgPiBjb2RlOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXIpO1xufVxuLm1kLXR5cGVzZXQgcHJlID4gY29kZTo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWI6aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1hY2NlbnQtZmctY29sb3IpO1xufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNDQuOTM3NWVtKSB7XG4gIC5tZC10eXBlc2V0ID4gcHJlIHtcbiAgICBtYXJnaW46IDFlbSAtMC44cmVtO1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG4gIH1cbiAgLm1kLXR5cGVzZXQgPiBwcmUgPiBjb2RlIHtcbiAgICBwYWRkaW5nOiAwLjUyNXJlbSAwLjhyZW07XG4gIH1cbn1cbi5tZC10eXBlc2V0IGtiZCB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgcGFkZGluZzogMCAwLjU4ODIzNTI5NDFlbTtcbiAgYm9yZGVyLXJhZGl1czogMC4xcmVtO1xuICBmb250LXNpemU6IDAuNzVlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNTtcbiAgYm94LXNoYWRvdzogMCAwLjFyZW0gMCAwLjA1cmVtIHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXIpLCAwIDAuMXJlbSAwIHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXIpLCBpbnNldCAwIC0wLjFyZW0gMC4ycmVtIHZhcigtLW1kLWRlZmF1bHQtYmctY29sb3IpO1xuICB3b3JkLWJyZWFrOiBicmVhay13b3JkO1xuICB2ZXJ0aWNhbC1hbGlnbjogdGV4dC10b3A7XG59XG4ubWQtdHlwZXNldCBtYXJrIHtcbiAgbWFyZ2luOiAwIDAuMjVlbTtcbiAgcGFkZGluZzogMC4wNjI1ZW0gMDtcbiAgYm9yZGVyLXJhZGl1czogMC4xcmVtO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjM1LCA1OSwgMC41KTtcbiAgYm94LXNoYWRvdzogMC4yNWVtIDAgMCByZ2JhKDI1NSwgMjM1LCA1OSwgMC41KSwgLTAuMjVlbSAwIDAgcmdiYSgyNTUsIDIzNSwgNTksIDAuNSk7XG4gIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7XG4gIGJveC1kZWNvcmF0aW9uLWJyZWFrOiBjbG9uZTtcbn1cbi5tZC10eXBlc2V0IGFiYnIge1xuICBib3JkZXItYm90dG9tOiAwLjA1cmVtIGRvdHRlZCB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodCk7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgY3Vyc29yOiBoZWxwO1xufVxuLm1kLXR5cGVzZXQgc21hbGwge1xuICBvcGFjaXR5OiAwLjc1O1xufVxuLm1kLXR5cGVzZXQgc3VwLFxuLm1kLXR5cGVzZXQgc3ViIHtcbiAgbWFyZ2luLWxlZnQ6IDAuMDc4MTI1ZW07XG59XG5bZGlyPXJ0bF0gLm1kLXR5cGVzZXQgc3VwLFxuW2Rpcj1ydGxdIC5tZC10eXBlc2V0IHN1YiB7XG4gIG1hcmdpbi1yaWdodDogMC4wNzgxMjVlbTtcbiAgbWFyZ2luLWxlZnQ6IGluaXRpYWw7XG59XG4ubWQtdHlwZXNldCBibG9ja3F1b3RlIHtcbiAgcGFkZGluZy1sZWZ0OiAwLjZyZW07XG4gIGJvcmRlci1sZWZ0OiAwLjJyZW0gc29saWQgdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlcik7XG4gIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodCk7XG59XG5bZGlyPXJ0bF0gLm1kLXR5cGVzZXQgYmxvY2txdW90ZSB7XG4gIHBhZGRpbmctcmlnaHQ6IDAuNnJlbTtcbiAgcGFkZGluZy1sZWZ0OiBpbml0aWFsO1xuICBib3JkZXItcmlnaHQ6IDAuMnJlbSBzb2xpZCB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodGVyKTtcbiAgYm9yZGVyLWxlZnQ6IGluaXRpYWw7XG59XG4ubWQtdHlwZXNldCB1bCB7XG4gIGxpc3Qtc3R5bGUtdHlwZTogZGlzYztcbn1cbi5tZC10eXBlc2V0IHVsLFxuLm1kLXR5cGVzZXQgb2wge1xuICBtYXJnaW4tbGVmdDogMC42MjVlbTtcbiAgcGFkZGluZzogMDtcbn1cbltkaXI9cnRsXSAubWQtdHlwZXNldCB1bCxcbltkaXI9cnRsXSAubWQtdHlwZXNldCBvbCB7XG4gIG1hcmdpbi1yaWdodDogMC42MjVlbTtcbiAgbWFyZ2luLWxlZnQ6IGluaXRpYWw7XG59XG4ubWQtdHlwZXNldCB1bCBvbCxcbi5tZC10eXBlc2V0IG9sIG9sIHtcbiAgbGlzdC1zdHlsZS10eXBlOiBsb3dlci1hbHBoYTtcbn1cbi5tZC10eXBlc2V0IHVsIG9sIG9sLFxuLm1kLXR5cGVzZXQgb2wgb2wgb2wge1xuICBsaXN0LXN0eWxlLXR5cGU6IGxvd2VyLXJvbWFuO1xufVxuLm1kLXR5cGVzZXQgdWwgbGksXG4ubWQtdHlwZXNldCBvbCBsaSB7XG4gIG1hcmdpbi1ib3R0b206IDAuNWVtO1xuICBtYXJnaW4tbGVmdDogMS4yNWVtO1xufVxuW2Rpcj1ydGxdIC5tZC10eXBlc2V0IHVsIGxpLFxuW2Rpcj1ydGxdIC5tZC10eXBlc2V0IG9sIGxpIHtcbiAgbWFyZ2luLXJpZ2h0OiAxLjI1ZW07XG4gIG1hcmdpbi1sZWZ0OiBpbml0aWFsO1xufVxuLm1kLXR5cGVzZXQgdWwgbGkgcCxcbi5tZC10eXBlc2V0IHVsIGxpIGJsb2NrcXVvdGUsXG4ubWQtdHlwZXNldCBvbCBsaSBwLFxuLm1kLXR5cGVzZXQgb2wgbGkgYmxvY2txdW90ZSB7XG4gIG1hcmdpbjogMC41ZW0gMDtcbn1cbi5tZC10eXBlc2V0IHVsIGxpOmxhc3QtY2hpbGQsXG4ubWQtdHlwZXNldCBvbCBsaTpsYXN0LWNoaWxkIHtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbn1cbi5tZC10eXBlc2V0IHVsIGxpIHVsLFxuLm1kLXR5cGVzZXQgdWwgbGkgb2wsXG4ubWQtdHlwZXNldCBvbCBsaSB1bCxcbi5tZC10eXBlc2V0IG9sIGxpIG9sIHtcbiAgbWFyZ2luOiAwLjVlbSAwIDAuNWVtIDAuNjI1ZW07XG59XG5bZGlyPXJ0bF0gLm1kLXR5cGVzZXQgdWwgbGkgdWwsXG5bZGlyPXJ0bF0gLm1kLXR5cGVzZXQgdWwgbGkgb2wsXG5bZGlyPXJ0bF0gLm1kLXR5cGVzZXQgb2wgbGkgdWwsXG5bZGlyPXJ0bF0gLm1kLXR5cGVzZXQgb2wgbGkgb2wge1xuICBtYXJnaW4tcmlnaHQ6IDAuNjI1ZW07XG4gIG1hcmdpbi1sZWZ0OiBpbml0aWFsO1xufVxuLm1kLXR5cGVzZXQgZGQge1xuICBtYXJnaW46IDFlbSAwIDFlbSAxLjg3NWVtO1xufVxuW2Rpcj1ydGxdIC5tZC10eXBlc2V0IGRkIHtcbiAgbWFyZ2luLXJpZ2h0OiAxLjg3NWVtO1xuICBtYXJnaW4tbGVmdDogaW5pdGlhbDtcbn1cbi5tZC10eXBlc2V0IGlmcmFtZSxcbi5tZC10eXBlc2V0IGltZyxcbi5tZC10eXBlc2V0IHN2ZyB7XG4gIG1heC13aWR0aDogMTAwJTtcbn1cbi5tZC10eXBlc2V0IHRhYmxlOm5vdChbY2xhc3NdKSB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgbWF4LXdpZHRoOiAxMDAlO1xuICBib3JkZXItcmFkaXVzOiAwLjFyZW07XG4gIGJhY2tncm91bmQ6IHZhcigtLW1kLWRlZmF1bHQtYmctY29sb3IpO1xuICBmb250LXNpemU6IDAuNjRyZW07XG4gIGJveC1zaGFkb3c6IDAgMC4ycmVtIDAuNXJlbSByZ2JhKDAsIDAsIDAsIDAuMDUpLCAwIDAgMC4wNXJlbSByZ2JhKDAsIDAsIDAsIDAuMSk7XG4gIG92ZXJmbG93OiBhdXRvO1xuICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7XG59XG4ubWQtdHlwZXNldCB0YWJsZTpub3QoW2NsYXNzXSkgKyAqIHtcbiAgbWFyZ2luLXRvcDogMS41ZW07XG59XG4ubWQtdHlwZXNldCB0YWJsZTpub3QoW2NsYXNzXSkgdGg6bm90KFthbGlnbl0pLFxuLm1kLXR5cGVzZXQgdGFibGU6bm90KFtjbGFzc10pIHRkOm5vdChbYWxpZ25dKSB7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG59XG5bZGlyPXJ0bF0gLm1kLXR5cGVzZXQgdGFibGU6bm90KFtjbGFzc10pIHRoOm5vdChbYWxpZ25dKSxcbltkaXI9cnRsXSAubWQtdHlwZXNldCB0YWJsZTpub3QoW2NsYXNzXSkgdGQ6bm90KFthbGlnbl0pIHtcbiAgdGV4dC1hbGlnbjogcmlnaHQ7XG59XG4ubWQtdHlwZXNldCB0YWJsZTpub3QoW2NsYXNzXSkgdGgge1xuICBtaW4td2lkdGg6IDVyZW07XG4gIHBhZGRpbmc6IDAuNnJlbSAwLjhyZW07XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0KTtcbiAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtYmctY29sb3IpO1xuICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xufVxuLm1kLXR5cGVzZXQgdGFibGU6bm90KFtjbGFzc10pIHRkIHtcbiAgcGFkZGluZzogMC42cmVtIDAuOHJlbTtcbiAgYm9yZGVyLXRvcDogMC4wNXJlbSBzb2xpZCB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodGVzdCk7XG4gIHZlcnRpY2FsLWFsaWduOiB0b3A7XG59XG4ubWQtdHlwZXNldCB0YWJsZTpub3QoW2NsYXNzXSkgdHIge1xuICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDEyNW1zO1xufVxuLm1kLXR5cGVzZXQgdGFibGU6bm90KFtjbGFzc10pIHRyOmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjAzNSk7XG4gIGJveC1zaGFkb3c6IDAgMC4wNXJlbSAwIHZhcigtLW1kLWRlZmF1bHQtYmctY29sb3IpIGluc2V0O1xufVxuLm1kLXR5cGVzZXQgdGFibGU6bm90KFtjbGFzc10pIHRyOmZpcnN0LWNoaWxkIHRkIHtcbiAgYm9yZGVyLXRvcDogMDtcbn1cbi5tZC10eXBlc2V0IHRhYmxlOm5vdChbY2xhc3NdKSBhIHtcbiAgd29yZC1icmVhazogbm9ybWFsO1xufVxuLm1kLXR5cGVzZXRfX3Njcm9sbHdyYXAge1xuICBtYXJnaW46IDFlbSAtMC44cmVtO1xuICBvdmVyZmxvdy14OiBhdXRvO1xuICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7XG59XG4ubWQtdHlwZXNldCAubWQtdHlwZXNldF9fdGFibGUge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIG1hcmdpbi1ib3R0b206IDAuNWVtO1xuICBwYWRkaW5nOiAwIDAuOHJlbTtcbn1cbi5tZC10eXBlc2V0IC5tZC10eXBlc2V0X190YWJsZSB0YWJsZSB7XG4gIGRpc3BsYXk6IHRhYmxlO1xuICB3aWR0aDogMTAwJTtcbiAgbWFyZ2luOiAwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuXG5odG1sIHtcbiAgaGVpZ2h0OiAxMDAlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWJnLWNvbG9yKTtcbiAgZm9udC1zaXplOiAxMjUlO1xuICBvdmVyZmxvdy14OiBoaWRkZW47XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDBlbSkge1xuICBodG1sIHtcbiAgICBmb250LXNpemU6IDEzNy41JTtcbiAgfVxufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTI1ZW0pIHtcbiAgaHRtbCB7XG4gICAgZm9udC1zaXplOiAxNTAlO1xuICB9XG59XG5cbmJvZHkge1xuICBkaXNwbGF5OiBmbGV4O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIHdpZHRoOiAxMDAlO1xuICBtaW4taGVpZ2h0OiAxMDAlO1xuICBmb250LXNpemU6IDAuNXJlbTtcbn1cbkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDU5LjkzNzVlbSkge1xuICBib2R5W2RhdGEtbWQtc3RhdGU9bG9ja10ge1xuICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgfVxufVxuXG5ociB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBoZWlnaHQ6IDAuMDVyZW07XG4gIHBhZGRpbmc6IDA7XG4gIGJvcmRlcjogMDtcbn1cblxuLm1kLWdyaWQge1xuICBtYXgtd2lkdGg6IDYxcmVtO1xuICBtYXJnaW4tcmlnaHQ6IGF1dG87XG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xufVxuXG4ubWQtY29udGFpbmVyIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgZmxleC1ncm93OiAxO1xufVxuXG4ubWQtbWFpbiB7XG4gIGZsZXgtZ3JvdzogMTtcbn1cbi5tZC1tYWluX19pbm5lciB7XG4gIGhlaWdodDogMTAwJTtcbiAgcGFkZGluZy10b3A6IDEuNXJlbTtcbiAgcGFkZGluZy1ib3R0b206IDAuMDVyZW07XG59XG5cbi5tZC1lbGxpcHNpcyB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cblxuLm1kLXRvZ2dsZSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi5tZC1vdmVybGF5IHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDA7XG4gIHdpZHRoOiAwO1xuICBoZWlnaHQ6IDA7XG4gIHRyYW5zaXRpb246IHdpZHRoIDBtcyAyNTBtcywgaGVpZ2h0IDBtcyAyNTBtcywgb3BhY2l0eSAyNTBtcztcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHQpO1xuICBvcGFjaXR5OiAwO1xuICB6LWluZGV4OiAzO1xufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzYuMTg3NWVtKSB7XG4gIFtkYXRhLW1kLXRvZ2dsZT1kcmF3ZXJdOmNoZWNrZWQgfiAubWQtb3ZlcmxheSB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIHRyYW5zaXRpb246IHdpZHRoIDBtcywgaGVpZ2h0IDBtcywgb3BhY2l0eSAyNTBtcztcbiAgICBvcGFjaXR5OiAxO1xuICB9XG59XG5cbi5tZC1za2lwIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICBtYXJnaW46IDAuNXJlbTtcbiAgcGFkZGluZzogMC4zcmVtIDAuNXJlbTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDAuNHJlbSk7XG4gIGJvcmRlci1yYWRpdXM6IDAuMXJlbTtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvcik7XG4gIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWJnLWNvbG9yKTtcbiAgZm9udC1zaXplOiAwLjY0cmVtO1xuICBvcGFjaXR5OiAwO1xufVxuLm1kLXNraXA6Zm9jdXMge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7XG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSAyNTBtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpLCBvcGFjaXR5IDE3NW1zIDc1bXM7XG4gIG9wYWNpdHk6IDE7XG4gIHotaW5kZXg6IDEwO1xufVxuXG5AcGFnZSB7XG4gIG1hcmdpbjogMjVtbTtcbn1cbi5tZC1hbm5vdW5jZSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3IpO1xufVxuLm1kLWFubm91bmNlX19pbm5lciB7XG4gIG1pbi1oZWlnaHQ6IDIuNHJlbTtcbiAgcGFkZGluZzogMCAwLjhyZW07XG4gIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWJnLWNvbG9yKTtcbiAgZm9udC1zaXplOiAwLjdyZW07XG4gIGxpbmUtaGVpZ2h0OiAyLjRyZW07XG59XG5cbi5tZC1jbGlwYm9hcmQge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMC40cmVtO1xuICByaWdodDogMC40cmVtO1xuICB3aWR0aDogMS4ycmVtO1xuICBoZWlnaHQ6IDEuMnJlbTtcbiAgdHJhbnNpdGlvbjogY29sb3IgMjUwbXM7XG4gIGJvcmRlci1yYWRpdXM6IDAuMXJlbTtcbiAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXN0KTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB6LWluZGV4OiAxO1xuICBiYWNrZmFjZS12aXNpYmlsaXR5OiBoaWRkZW47XG59XG5AbWVkaWEgcHJpbnQge1xuICAubWQtY2xpcGJvYXJkIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG4ubWQtY2xpcGJvYXJkIHN2ZyB7XG4gIHdpZHRoOiAwLjlyZW07XG4gIGhlaWdodDogMC45cmVtO1xufVxucHJlOmhvdmVyIC5tZC1jbGlwYm9hcmQge1xuICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHQpO1xufVxucHJlIC5tZC1jbGlwYm9hcmQ6Zm9jdXMsIHByZSAubWQtY2xpcGJvYXJkOmhvdmVyIHtcbiAgY29sb3I6IHZhcigtLW1kLWFjY2VudC1mZy1jb2xvcik7XG59XG5cbkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDYwZW0pIHtcbiAgLm1kLWNvbnRlbnQge1xuICAgIG1hcmdpbi1yaWdodDogMTIuMXJlbTtcbiAgfVxuICBbZGlyPXJ0bF0gLm1kLWNvbnRlbnQge1xuICAgIG1hcmdpbi1yaWdodDogaW5pdGlhbDtcbiAgICBtYXJnaW4tbGVmdDogMTIuMXJlbTtcbiAgfVxufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzYuMjVlbSkge1xuICAubWQtY29udGVudCB7XG4gICAgbWFyZ2luLWxlZnQ6IDEyLjFyZW07XG4gIH1cbiAgW2Rpcj1ydGxdIC5tZC1jb250ZW50IHtcbiAgICBtYXJnaW4tcmlnaHQ6IDEyLjFyZW07XG4gIH1cbn1cbi5tZC1jb250ZW50X19pbm5lciB7XG4gIG1hcmdpbjogMCAwLjhyZW0gMS4ycmVtO1xuICBwYWRkaW5nLXRvcDogMC42cmVtO1xufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzYuMjVlbSkge1xuICAubWQtY29udGVudF9faW5uZXIge1xuICAgIG1hcmdpbi1yaWdodDogMS4ycmVtO1xuICAgIG1hcmdpbi1sZWZ0OiAxLjJyZW07XG4gIH1cbn1cbi5tZC1jb250ZW50X19pbm5lcjo6YmVmb3JlIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGhlaWdodDogMC40cmVtO1xuICBjb250ZW50OiBcIlwiO1xufVxuLm1kLWNvbnRlbnRfX2lubmVyID4gOmxhc3QtY2hpbGQge1xuICBtYXJnaW4tYm90dG9tOiAwO1xufVxuLm1kLWNvbnRlbnRfX2J1dHRvbiB7XG4gIG1hcmdpbjogMC40cmVtIDA7XG4gIG1hcmdpbi1sZWZ0OiAwLjRyZW07XG4gIHBhZGRpbmc6IDA7XG4gIGZsb2F0OiByaWdodDtcbn1cbltkaXI9cnRsXSAubWQtY29udGVudF9fYnV0dG9uIHtcbiAgbWFyZ2luLXJpZ2h0OiAwLjRyZW07XG4gIG1hcmdpbi1sZWZ0OiBpbml0aWFsO1xuICBmbG9hdDogbGVmdDtcbn1cbltkaXI9cnRsXSAubWQtY29udGVudF9fYnV0dG9uIHN2ZyB7XG4gIHRyYW5zZm9ybTogc2NhbGVYKC0xKTtcbn1cbi5tZC10eXBlc2V0IC5tZC1jb250ZW50X19idXR0b24ge1xuICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlcik7XG59XG4ubWQtY29udGVudF9fYnV0dG9uIHN2ZyB7XG4gIGRpc3BsYXk6IGlubGluZTtcbiAgdmVydGljYWwtYWxpZ246IHRvcDtcbn1cbkBtZWRpYSBwcmludCB7XG4gIC5tZC1jb250ZW50X19idXR0b24ge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cblxuLm1kLWRpYWxvZyB7XG4gIGJveC1zaGFkb3c6IDAgMnB4IDJweCAwIHJnYmEoMCwgMCwgMCwgMC4xNCksIDAgMXB4IDVweCAwIHJnYmEoMCwgMCwgMCwgMC4xMiksIDAgM3B4IDFweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4yKTtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgcmlnaHQ6IDAuOHJlbTtcbiAgYm90dG9tOiAwLjhyZW07XG4gIGxlZnQ6IGluaXRpYWw7XG4gIG1pbi13aWR0aDogMTEuMXJlbTtcbiAgcGFkZGluZzogMC40cmVtIDAuNnJlbTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwMCUpO1xuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMG1zIDQwMG1zLCBvcGFjaXR5IDQwMG1zO1xuICBib3JkZXI6IG5vbmU7XG4gIGJvcmRlci1yYWRpdXM6IDAuMXJlbTtcbiAgYmFja2dyb3VuZDogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvcik7XG4gIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWJnLWNvbG9yKTtcbiAgZm9udC1zaXplOiAwLjdyZW07XG4gIG9wYWNpdHk6IDA7XG4gIHotaW5kZXg6IDI7XG59XG5bZGlyPXJ0bF0gLm1kLWRpYWxvZyB7XG4gIHJpZ2h0OiBpbml0aWFsO1xuICBsZWZ0OiAwLjhyZW07XG59XG4ubWQtZGlhbG9nW2RhdGEtbWQtc3RhdGU9b3Blbl0ge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7XG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSA0MDBtcyBjdWJpYy1iZXppZXIoMC4wNzUsIDAuODUsIDAuMTc1LCAxKSwgb3BhY2l0eSA0MDBtcztcbiAgb3BhY2l0eTogMTtcbn1cbkBtZWRpYSBwcmludCB7XG4gIC5tZC1kaWFsb2cge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cblxuLm1kLWhlYWRlciB7XG4gIHBvc2l0aW9uOiBzdGlja3k7XG4gIHRvcDogMDtcbiAgcmlnaHQ6IDA7XG4gIGxlZnQ6IDA7XG4gIGhlaWdodDogMi40cmVtO1xuICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDI1MG1zLCBjb2xvciAyNTBtcztcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtcHJpbWFyeS1mZy1jb2xvcik7XG4gIGNvbG9yOiB2YXIoLS1tZC1wcmltYXJ5LWJnLWNvbG9yKTtcbiAgYm94LXNoYWRvdzogMCAwIDAuMnJlbSByZ2JhKDAsIDAsIDAsIDApLCAwIDAuMnJlbSAwLjRyZW0gcmdiYSgwLCAwLCAwLCAwKTtcbiAgei1pbmRleDogMjtcbn1cbi5uby1qcyAubWQtaGVhZGVyIHtcbiAgdHJhbnNpdGlvbjogbm9uZTtcbiAgYm94LXNoYWRvdzogbm9uZTtcbn1cbi5tZC1oZWFkZXJbZGF0YS1tZC1zdGF0ZT1zaGFkb3ddIHtcbiAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAyNTBtcywgY29sb3IgMjUwbXMsIGJveC1zaGFkb3cgMjUwbXM7XG4gIGJveC1zaGFkb3c6IDAgMCAwLjJyZW0gcmdiYSgwLCAwLCAwLCAwLjEpLCAwIDAuMnJlbSAwLjRyZW0gcmdiYSgwLCAwLCAwLCAwLjIpO1xufVxuQG1lZGlhIHByaW50IHtcbiAgLm1kLWhlYWRlciB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuXG4ubWQtaGVhZGVyLW5hdiB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIHBhZGRpbmc6IDAgMC4ycmVtO1xufVxuLm1kLWhlYWRlci1uYXZfX2J1dHRvbiB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWFyZ2luOiAwLjJyZW07XG4gIHBhZGRpbmc6IDAuNHJlbTtcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAyNTBtcztcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB6LWluZGV4OiAxO1xufVxuW2Rpcj1ydGxdIC5tZC1oZWFkZXItbmF2X19idXR0b24gc3ZnIHtcbiAgdHJhbnNmb3JtOiBzY2FsZVgoLTEpO1xufVxuLm1kLWhlYWRlci1uYXZfX2J1dHRvbjpmb2N1cywgLm1kLWhlYWRlci1uYXZfX2J1dHRvbjpob3ZlciB7XG4gIG9wYWNpdHk6IDAuNztcbn1cbi5tZC1oZWFkZXItbmF2X19idXR0b24ubWQtbG9nbyB7XG4gIG1hcmdpbjogMC4ycmVtO1xuICBwYWRkaW5nOiAwLjRyZW07XG59XG4ubWQtaGVhZGVyLW5hdl9fYnV0dG9uLm1kLWxvZ28gaW1nLFxuLm1kLWhlYWRlci1uYXZfX2J1dHRvbi5tZC1sb2dvIHN2ZyB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB3aWR0aDogMS4ycmVtO1xuICBoZWlnaHQ6IDEuMnJlbTtcbiAgZmlsbDogY3VycmVudENvbG9yO1xufVxuLm5vLWpzIC5tZC1oZWFkZXItbmF2X19idXR0b25bZm9yPV9fc2VhcmNoXSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA2MGVtKSB7XG4gIC5tZC1oZWFkZXItbmF2X19idXR0b25bZm9yPV9fc2VhcmNoXSB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzYuMTg3NWVtKSB7XG4gIC5tZC1oZWFkZXItbmF2X19idXR0b24ubWQtbG9nbyB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzYuMjVlbSkge1xuICAubWQtaGVhZGVyLW5hdl9fYnV0dG9uW2Zvcj1fX2RyYXdlcl0ge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cbi5tZC1oZWFkZXItbmF2X190b3BpYyB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHdpZHRoOiAxMDAlO1xuICBwYWRkaW5nOiAwIDFyZW07XG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSA0MDBtcyBjdWJpYy1iZXppZXIoMC4xLCAwLjcsIDAuMSwgMSksIG9wYWNpdHkgMTUwbXM7XG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBiYWNrZmFjZS12aXNpYmlsaXR5OiBoaWRkZW47XG59XG4ubWQtaGVhZGVyLW5hdl9fdG9waWMgKyAubWQtaGVhZGVyLW5hdl9fdG9waWMge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMS4yNXJlbSk7XG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSA0MDBtcyBjdWJpYy1iZXppZXIoMSwgMC43LCAwLjEsIDAuMSksIG9wYWNpdHkgMTUwbXM7XG4gIG9wYWNpdHk6IDA7XG4gIHotaW5kZXg6IC0xO1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbn1cbltkaXI9cnRsXSAubWQtaGVhZGVyLW5hdl9fdG9waWMgKyAubWQtaGVhZGVyLW5hdl9fdG9waWMge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTEuMjVyZW0pO1xufVxuLm5vLWpzIC5tZC1oZWFkZXItbmF2X190b3BpYyB7XG4gIHBvc2l0aW9uOiBpbml0aWFsO1xufVxuLm5vLWpzIC5tZC1oZWFkZXItbmF2X190b3BpYyArIC5tZC1oZWFkZXItbmF2X190b3BpYyB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4ubWQtaGVhZGVyLW5hdl9fdGl0bGUge1xuICBmbGV4LWdyb3c6IDE7XG4gIGZvbnQtc2l6ZTogMC45cmVtO1xuICBsaW5lLWhlaWdodDogMi40cmVtO1xufVxuLm1kLWhlYWRlci1uYXZfX3RpdGxlW2RhdGEtbWQtc3RhdGU9YWN0aXZlXSAubWQtaGVhZGVyLW5hdl9fdG9waWMge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTEuMjVyZW0pO1xuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gNDAwbXMgY3ViaWMtYmV6aWVyKDEsIDAuNywgMC4xLCAwLjEpLCBvcGFjaXR5IDE1MG1zO1xuICBvcGFjaXR5OiAwO1xuICB6LWluZGV4OiAtMTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG5bZGlyPXJ0bF0gLm1kLWhlYWRlci1uYXZfX3RpdGxlW2RhdGEtbWQtc3RhdGU9YWN0aXZlXSAubWQtaGVhZGVyLW5hdl9fdG9waWMge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMS4yNXJlbSk7XG59XG4ubWQtaGVhZGVyLW5hdl9fdGl0bGVbZGF0YS1tZC1zdGF0ZT1hY3RpdmVdIC5tZC1oZWFkZXItbmF2X190b3BpYyArIC5tZC1oZWFkZXItbmF2X190b3BpYyB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKTtcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDQwMG1zIGN1YmljLWJlemllcigwLjEsIDAuNywgMC4xLCAxKSwgb3BhY2l0eSAxNTBtcztcbiAgb3BhY2l0eTogMTtcbiAgei1pbmRleDogMDtcbiAgcG9pbnRlci1ldmVudHM6IGluaXRpYWw7XG59XG4ubWQtaGVhZGVyLW5hdl9fdGl0bGUgPiAubWQtaGVhZGVyLW5hdl9fZWxsaXBzaXMge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG59XG4ubWQtaGVhZGVyLW5hdl9fc291cmNlIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDYwZW0pIHtcbiAgLm1kLWhlYWRlci1uYXZfX3NvdXJjZSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgd2lkdGg6IDExLjdyZW07XG4gICAgbWF4LXdpZHRoOiAxMS43cmVtO1xuICAgIG1hcmdpbi1sZWZ0OiAxcmVtO1xuICB9XG4gIFtkaXI9cnRsXSAubWQtaGVhZGVyLW5hdl9fc291cmNlIHtcbiAgICBtYXJnaW4tcmlnaHQ6IDFyZW07XG4gICAgbWFyZ2luLWxlZnQ6IGluaXRpYWw7XG4gIH1cbn1cbkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2LjI1ZW0pIHtcbiAgLm1kLWhlYWRlci1uYXZfX3NvdXJjZSB7XG4gICAgbWFyZ2luLWxlZnQ6IDEuNHJlbTtcbiAgfVxuICBbZGlyPXJ0bF0gLm1kLWhlYWRlci1uYXZfX3NvdXJjZSB7XG4gICAgbWFyZ2luLXJpZ2h0OiAxLjRyZW07XG4gIH1cbn1cblxuLm1kLWhlcm8ge1xuICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDI1MG1zO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1wcmltYXJ5LWZnLWNvbG9yKTtcbiAgY29sb3I6IHZhcigtLW1kLXByaW1hcnktYmctY29sb3IpO1xuICBmb250LXNpemU6IDFyZW07XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4ubWQtaGVyb19faW5uZXIge1xuICBtYXJnaW4tdG9wOiAxcmVtO1xuICBwYWRkaW5nOiAwLjhyZW0gMC44cmVtIDAuNHJlbTtcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDQwMG1zIGN1YmljLWJlemllcigwLjEsIDAuNywgMC4xLCAxKSwgb3BhY2l0eSAyNTBtcztcbiAgdHJhbnNpdGlvbi1kZWxheTogMTAwbXM7XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3Ni4xODc1ZW0pIHtcbiAgLm1kLWhlcm9fX2lubmVyIHtcbiAgICBtYXJnaW4tdG9wOiAyLjRyZW07XG4gICAgbWFyZ2luLWJvdHRvbTogMS4ycmVtO1xuICB9XG59XG5bZGF0YS1tZC1zdGF0ZT1oaWRkZW5dIC5tZC1oZXJvX19pbm5lciB7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMC42MjVyZW0pO1xuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMG1zIDQwMG1zLCBvcGFjaXR5IDEwMG1zIDBtcztcbiAgb3BhY2l0eTogMDtcbn1cbi5tZC1oZXJvLS1leHBhbmQgLm1kLWhlcm9fX2lubmVyIHtcbiAgbWFyZ2luLWJvdHRvbTogMS4ycmVtO1xufVxuXG4ubWQtZm9vdGVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvcik7XG4gIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWJnLWNvbG9yKTtcbn1cbkBtZWRpYSBwcmludCB7XG4gIC5tZC1mb290ZXIge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cblxuLm1kLWZvb3Rlci1uYXZfX2lubmVyIHtcbiAgcGFkZGluZzogMC4ycmVtO1xuICBvdmVyZmxvdzogYXV0bztcbn1cbi5tZC1mb290ZXItbmF2X19saW5rIHtcbiAgZGlzcGxheTogZmxleDtcbiAgcGFkZGluZy10b3A6IDEuNHJlbTtcbiAgcGFkZGluZy1ib3R0b206IDAuNHJlbTtcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAyNTBtcztcbn1cbkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDQ1ZW0pIHtcbiAgLm1kLWZvb3Rlci1uYXZfX2xpbmsge1xuICAgIHdpZHRoOiA1MCU7XG4gIH1cbn1cbi5tZC1mb290ZXItbmF2X19saW5rOmZvY3VzLCAubWQtZm9vdGVyLW5hdl9fbGluazpob3ZlciB7XG4gIG9wYWNpdHk6IDAuNztcbn1cbi5tZC1mb290ZXItbmF2X19saW5rLS1wcmV2IHtcbiAgd2lkdGg6IDI1JTtcbiAgZmxvYXQ6IGxlZnQ7XG59XG5bZGlyPXJ0bF0gLm1kLWZvb3Rlci1uYXZfX2xpbmstLXByZXYge1xuICBmbG9hdDogcmlnaHQ7XG59XG5bZGlyPXJ0bF0gLm1kLWZvb3Rlci1uYXZfX2xpbmstLXByZXYgc3ZnIHtcbiAgdHJhbnNmb3JtOiBzY2FsZVgoLTEpO1xufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNDQuOTM3NWVtKSB7XG4gIC5tZC1mb290ZXItbmF2X19saW5rLS1wcmV2IC5tZC1mb290ZXItbmF2X190aXRsZSB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuLm1kLWZvb3Rlci1uYXZfX2xpbmstLW5leHQge1xuICB3aWR0aDogNzUlO1xuICBmbG9hdDogcmlnaHQ7XG4gIHRleHQtYWxpZ246IHJpZ2h0O1xufVxuW2Rpcj1ydGxdIC5tZC1mb290ZXItbmF2X19saW5rLS1uZXh0IHtcbiAgZmxvYXQ6IGxlZnQ7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG59XG5bZGlyPXJ0bF0gLm1kLWZvb3Rlci1uYXZfX2xpbmstLW5leHQgc3ZnIHtcbiAgdHJhbnNmb3JtOiBzY2FsZVgoLTEpO1xufVxuLm1kLWZvb3Rlci1uYXZfX3RpdGxlIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBmbGV4LWdyb3c6IDE7XG4gIG1heC13aWR0aDogY2FsYygxMDAlIC0gMi40cmVtKTtcbiAgcGFkZGluZzogMCAxcmVtO1xuICBmb250LXNpemU6IDAuOXJlbTtcbiAgbGluZS1oZWlnaHQ6IDIuNHJlbTtcbn1cbi5tZC1mb290ZXItbmF2X19idXR0b24ge1xuICBtYXJnaW46IDAuMnJlbTtcbiAgcGFkZGluZzogMC40cmVtO1xufVxuLm1kLWZvb3Rlci1uYXZfX2RpcmVjdGlvbiB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgcmlnaHQ6IDA7XG4gIGxlZnQ6IDA7XG4gIG1hcmdpbi10b3A6IC0xcmVtO1xuICBwYWRkaW5nOiAwIDFyZW07XG4gIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWJnLWNvbG9yLS1saWdodCk7XG4gIGZvbnQtc2l6ZTogMC42NHJlbTtcbn1cblxuLm1kLWZvb3Rlci1tZXRhIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlcik7XG59XG4ubWQtZm9vdGVyLW1ldGFfX2lubmVyIHtcbiAgcGFkZGluZzogMC4ycmVtO1xuICBvdmVyZmxvdzogYXV0bztcbn1cbmh0bWwgLm1kLWZvb3Rlci1tZXRhLm1kLXR5cGVzZXQgYSB7XG4gIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWJnLWNvbG9yLS1saWdodCk7XG59XG5odG1sIC5tZC1mb290ZXItbWV0YS5tZC10eXBlc2V0IGE6Zm9jdXMsIGh0bWwgLm1kLWZvb3Rlci1tZXRhLm1kLXR5cGVzZXQgYTpob3ZlciB7XG4gIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWJnLWNvbG9yKTtcbn1cblxuLm1kLWZvb3Rlci1jb3B5cmlnaHQge1xuICBtYXJnaW46IDAgMC42cmVtO1xuICBwYWRkaW5nOiAwLjRyZW0gMDtcbiAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtYmctY29sb3ItLWxpZ2h0ZXIpO1xuICBmb250LXNpemU6IDAuNjRyZW07XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA0NWVtKSB7XG4gIC5tZC1mb290ZXItY29weXJpZ2h0IHtcbiAgICBtYXgtd2lkdGg6IDc1JTtcbiAgICBmbG9hdDogbGVmdDtcbiAgfVxuICBbZGlyPXJ0bF0gLm1kLWZvb3Rlci1jb3B5cmlnaHQge1xuICAgIGZsb2F0OiByaWdodDtcbiAgfVxufVxuLm1kLWZvb3Rlci1jb3B5cmlnaHRfX2hpZ2hsaWdodCB7XG4gIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWJnLWNvbG9yLS1saWdodCk7XG59XG5cbi5tZC1mb290ZXItc29jaWFsIHtcbiAgbWFyZ2luOiAwIDAuNHJlbTtcbiAgcGFkZGluZzogMC4ycmVtIDAgMC42cmVtO1xufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNDVlbSkge1xuICAubWQtZm9vdGVyLXNvY2lhbCB7XG4gICAgcGFkZGluZzogMC42cmVtIDA7XG4gICAgZmxvYXQ6IHJpZ2h0O1xuICB9XG4gIFtkaXI9cnRsXSAubWQtZm9vdGVyLXNvY2lhbCB7XG4gICAgZmxvYXQ6IGxlZnQ7XG4gIH1cbn1cbi5tZC1mb290ZXItc29jaWFsX19saW5rIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB3aWR0aDogMS42cmVtO1xuICBoZWlnaHQ6IDEuNnJlbTtcbiAgdHJhbnNpdGlvbjogY29sb3IgMjUwbXM7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cbi5tZC1mb290ZXItc29jaWFsX19saW5rOjpiZWZvcmUge1xuICBsaW5lLWhlaWdodDogMS45O1xufVxuLm1kLWZvb3Rlci1zb2NpYWxfX2xpbmsgc3ZnIHtcbiAgd2lkdGg6IDAuOHJlbTtcbiAgdmVydGljYWwtYWxpZ246IC0yNSU7XG4gIGZpbGw6IGN1cnJlbnRDb2xvcjtcbn1cblxuLm1kLW5hdiB7XG4gIGZvbnQtc2l6ZTogMC43cmVtO1xuICBsaW5lLWhlaWdodDogMS4zO1xufVxuLm1kLW5hdl9fdGl0bGUge1xuICBkaXNwbGF5OiBibG9jaztcbiAgcGFkZGluZzogMCAwLjZyZW07XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm1kLW5hdl9fdGl0bGUgLm1kLW5hdl9fYnV0dG9uIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbi5tZC1uYXZfX3RpdGxlIC5tZC1uYXZfX2J1dHRvbiBpbWcge1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiBhdXRvO1xufVxuLm1kLW5hdl9fdGl0bGUgLm1kLW5hdl9fYnV0dG9uLm1kLWxvZ28gaW1nLFxuLm1kLW5hdl9fdGl0bGUgLm1kLW5hdl9fYnV0dG9uLm1kLWxvZ28gc3ZnIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHdpZHRoOiAyLjRyZW07XG4gIGhlaWdodDogMi40cmVtO1xufVxuLm1kLW5hdl9fdGl0bGUgLm1kLW5hdl9fYnV0dG9uLm1kLWxvZ28gc3ZnIHtcbiAgZmlsbDogY3VycmVudENvbG9yO1xufVxuLm1kLW5hdl9fbGlzdCB7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMDtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbn1cbi5tZC1uYXZfX2l0ZW0ge1xuICBwYWRkaW5nOiAwIDAuNnJlbTtcbn1cbi5tZC1uYXZfX2l0ZW06bGFzdC1jaGlsZCB7XG4gIHBhZGRpbmctYm90dG9tOiAwLjZyZW07XG59XG4ubWQtbmF2X19pdGVtIC5tZC1uYXZfX2l0ZW0ge1xuICBwYWRkaW5nLXJpZ2h0OiAwO1xufVxuW2Rpcj1ydGxdIC5tZC1uYXZfX2l0ZW0gLm1kLW5hdl9faXRlbSB7XG4gIHBhZGRpbmctcmlnaHQ6IDAuNnJlbTtcbiAgcGFkZGluZy1sZWZ0OiAwO1xufVxuLm1kLW5hdl9faXRlbSAubWQtbmF2X19pdGVtOmxhc3QtY2hpbGQge1xuICBwYWRkaW5nLWJvdHRvbTogMDtcbn1cbi5tZC1uYXZfX2xpbmsge1xuICBkaXNwbGF5OiBibG9jaztcbiAgbWFyZ2luLXRvcDogMC42MjVlbTtcbiAgdHJhbnNpdGlvbjogY29sb3IgMTI1bXM7XG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHNjcm9sbC1zbmFwLWFsaWduOiBzdGFydDtcbn1cbmh0bWwgLm1kLW5hdl9fbGlua1tmb3I9X190b2NdIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbmh0bWwgLm1kLW5hdl9fbGlua1tmb3I9X190b2NdIH4gLm1kLW5hdiB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4ubWQtbmF2X19saW5rW2RhdGEtbWQtc3RhdGU9Ymx1cl0ge1xuICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHQpO1xufVxuLm1kLW5hdl9faXRlbSAubWQtbmF2X19saW5rLS1hY3RpdmUge1xuICBjb2xvcjogdmFyKC0tbWQtcHJpbWFyeS1mZy1jb2xvcik7XG59XG4ubWQtbmF2X19pdGVtLS1uZXN0ZWQgPiAubWQtbmF2X19saW5rIHtcbiAgY29sb3I6IGluaGVyaXQ7XG59XG4ubWQtbmF2X19saW5rOmZvY3VzLCAubWQtbmF2X19saW5rOmhvdmVyIHtcbiAgY29sb3I6IHZhcigtLW1kLWFjY2VudC1mZy1jb2xvcik7XG59XG4ubWQtbmF2X19zb3VyY2Uge1xuICBkaXNwbGF5OiBub25lO1xufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzYuMTg3NWVtKSB7XG4gIC5tZC1uYXYge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtYmctY29sb3IpO1xuICB9XG4gIC5tZC1uYXYtLXByaW1hcnksIC5tZC1uYXYtLXByaW1hcnkgLm1kLW5hdiB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwO1xuICAgIHJpZ2h0OiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgei1pbmRleDogMTtcbiAgfVxuICAubWQtbmF2LS1wcmltYXJ5IC5tZC1uYXZfX3RpdGxlLFxuLm1kLW5hdi0tcHJpbWFyeSAubWQtbmF2X19pdGVtIHtcbiAgICBmb250LXNpemU6IDAuOHJlbTtcbiAgICBsaW5lLWhlaWdodDogMS41O1xuICB9XG4gIC5tZC1uYXYtLXByaW1hcnkgLm1kLW5hdl9fdGl0bGUge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBoZWlnaHQ6IDUuNnJlbTtcbiAgICBwYWRkaW5nOiAzcmVtIDAuOHJlbSAwLjJyZW07XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlc3QpO1xuICAgIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodCk7XG4gICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICBsaW5lLWhlaWdodDogMi40cmVtO1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICB9XG4gIC5tZC1uYXYtLXByaW1hcnkgLm1kLW5hdl9fdGl0bGUgLm1kLW5hdl9faWNvbiB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMC40cmVtO1xuICAgIGxlZnQ6IDAuNHJlbTtcbiAgICB3aWR0aDogMS4ycmVtO1xuICAgIGhlaWdodDogMS4ycmVtO1xuICAgIG1hcmdpbjogMC4ycmVtO1xuICB9XG4gIFtkaXI9cnRsXSAubWQtbmF2LS1wcmltYXJ5IC5tZC1uYXZfX3RpdGxlIC5tZC1uYXZfX2ljb24ge1xuICAgIHJpZ2h0OiAwLjRyZW07XG4gICAgbGVmdDogaW5pdGlhbDtcbiAgfVxuICAubWQtbmF2LS1wcmltYXJ5IC5tZC1uYXZfX3RpdGxlIH4gLm1kLW5hdl9fbGlzdCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1iZy1jb2xvcik7XG4gICAgYm94LXNoYWRvdzogaW5zZXQgMCAwLjA1cmVtIDAgdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlc3QpO1xuICAgIG92ZXJmbG93LXk6IGF1dG87XG4gICAgYmFja2ZhY2UtdmlzaWJpbGl0eTogaGlkZGVuO1xuICAgIHNjcm9sbC1zbmFwLXR5cGU6IHkgbWFuZGF0b3J5O1xuICB9XG4gIC5tZC1uYXYtLXByaW1hcnkgLm1kLW5hdl9fdGl0bGUgfiAubWQtbmF2X19saXN0ID4gLm1kLW5hdl9faXRlbTpmaXJzdC1jaGlsZCB7XG4gICAgYm9yZGVyLXRvcDogMDtcbiAgfVxuICAubWQtbmF2LS1wcmltYXJ5IC5tZC1uYXZfX3RpdGxlW2Zvcj1fX2RyYXdlcl0ge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1wcmltYXJ5LWZnLWNvbG9yKTtcbiAgICBjb2xvcjogdmFyKC0tbWQtcHJpbWFyeS1iZy1jb2xvcik7XG4gIH1cbiAgLm1kLW5hdi0tcHJpbWFyeSAubWQtbmF2X190aXRsZVtmb3I9X19kcmF3ZXJdIC5tZC1uYXZfX2J1dHRvbiB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMC4ycmVtO1xuICAgIGxlZnQ6IDAuMnJlbTtcbiAgICBtYXJnaW46IDAuMnJlbTtcbiAgICBwYWRkaW5nOiAwLjRyZW07XG4gICAgZm9udC1zaXplOiAyLjRyZW07XG4gIH1cbiAgaHRtbCBbZGlyPXJ0bF0gLm1kLW5hdi0tcHJpbWFyeSAubWQtbmF2X190aXRsZVtmb3I9X19kcmF3ZXJdIC5tZC1uYXZfX2J1dHRvbiB7XG4gICAgcmlnaHQ6IDAuMnJlbTtcbiAgICBsZWZ0OiBpbml0aWFsO1xuICB9XG4gIC5tZC1uYXYtLXByaW1hcnkgLm1kLW5hdl9fbGlzdCB7XG4gICAgZmxleDogMTtcbiAgfVxuICAubWQtbmF2LS1wcmltYXJ5IC5tZC1uYXZfX2l0ZW0ge1xuICAgIHBhZGRpbmc6IDA7XG4gICAgYm9yZGVyLXRvcDogMC4wNXJlbSBzb2xpZCB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodGVzdCk7XG4gIH1cbiAgW2Rpcj1ydGxdIC5tZC1uYXYtLXByaW1hcnkgLm1kLW5hdl9faXRlbSB7XG4gICAgcGFkZGluZzogMDtcbiAgfVxuICAubWQtbmF2LS1wcmltYXJ5IC5tZC1uYXZfX2l0ZW0tLW5lc3RlZCA+IC5tZC1uYXZfX2xpbmsge1xuICAgIHBhZGRpbmctcmlnaHQ6IDIuNHJlbTtcbiAgfVxuICBbZGlyPXJ0bF0gLm1kLW5hdi0tcHJpbWFyeSAubWQtbmF2X19pdGVtLS1uZXN0ZWQgPiAubWQtbmF2X19saW5rIHtcbiAgICBwYWRkaW5nLXJpZ2h0OiAwLjhyZW07XG4gICAgcGFkZGluZy1sZWZ0OiAyLjRyZW07XG4gIH1cbiAgLm1kLW5hdi0tcHJpbWFyeSAubWQtbmF2X19pdGVtLS1hY3RpdmUgPiAubWQtbmF2X19saW5rIHtcbiAgICBjb2xvcjogdmFyKC0tbWQtcHJpbWFyeS1mZy1jb2xvcik7XG4gIH1cbiAgLm1kLW5hdi0tcHJpbWFyeSAubWQtbmF2X19saW5rIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgbWFyZ2luLXRvcDogMDtcbiAgICBwYWRkaW5nOiAwLjZyZW0gMC44cmVtO1xuICB9XG4gIC5tZC1uYXYtLXByaW1hcnkgLm1kLW5hdl9fbGluayAubWQtbmF2X19pY29uIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiA1MCU7XG4gICAgcmlnaHQ6IDAuNnJlbTtcbiAgICBtYXJnaW4tdG9wOiAtMC42cmVtO1xuICAgIGNvbG9yOiBpbmhlcml0O1xuICAgIGZvbnQtc2l6ZTogMS4ycmVtO1xuICB9XG4gIFtkaXI9cnRsXSAubWQtbmF2LS1wcmltYXJ5IC5tZC1uYXZfX2xpbmsgLm1kLW5hdl9faWNvbiB7XG4gICAgcmlnaHQ6IGluaXRpYWw7XG4gICAgbGVmdDogMC42cmVtO1xuICB9XG4gIFtkaXI9cnRsXSAubWQtbmF2LS1wcmltYXJ5IC5tZC1uYXZfX2ljb24gc3ZnIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKC0xKTtcbiAgfVxuICAubWQtbmF2LS1wcmltYXJ5IC5tZC1uYXYtLXNlY29uZGFyeSAubWQtbmF2X19saW5rIHtcbiAgICBwb3NpdGlvbjogc3RhdGljO1xuICB9XG4gIC5tZC1uYXYtLXByaW1hcnkgLm1kLW5hdi0tc2Vjb25kYXJ5IC5tZC1uYXYge1xuICAgIHBvc2l0aW9uOiBzdGF0aWM7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIH1cbiAgLm1kLW5hdi0tcHJpbWFyeSAubWQtbmF2LS1zZWNvbmRhcnkgLm1kLW5hdiAubWQtbmF2X19saW5rIHtcbiAgICBwYWRkaW5nLWxlZnQ6IDEuNHJlbTtcbiAgfVxuICBbZGlyPXJ0bF0gLm1kLW5hdi0tcHJpbWFyeSAubWQtbmF2LS1zZWNvbmRhcnkgLm1kLW5hdiAubWQtbmF2X19saW5rIHtcbiAgICBwYWRkaW5nLXJpZ2h0OiAxLjRyZW07XG4gICAgcGFkZGluZy1sZWZ0OiBpbml0aWFsO1xuICB9XG4gIC5tZC1uYXYtLXByaW1hcnkgLm1kLW5hdi0tc2Vjb25kYXJ5IC5tZC1uYXYgLm1kLW5hdiAubWQtbmF2X19saW5rIHtcbiAgICBwYWRkaW5nLWxlZnQ6IDJyZW07XG4gIH1cbiAgW2Rpcj1ydGxdIC5tZC1uYXYtLXByaW1hcnkgLm1kLW5hdi0tc2Vjb25kYXJ5IC5tZC1uYXYgLm1kLW5hdiAubWQtbmF2X19saW5rIHtcbiAgICBwYWRkaW5nLXJpZ2h0OiAycmVtO1xuICAgIHBhZGRpbmctbGVmdDogaW5pdGlhbDtcbiAgfVxuICAubWQtbmF2LS1wcmltYXJ5IC5tZC1uYXYtLXNlY29uZGFyeSAubWQtbmF2IC5tZC1uYXYgLm1kLW5hdiAubWQtbmF2X19saW5rIHtcbiAgICBwYWRkaW5nLWxlZnQ6IDIuNnJlbTtcbiAgfVxuICBbZGlyPXJ0bF0gLm1kLW5hdi0tcHJpbWFyeSAubWQtbmF2LS1zZWNvbmRhcnkgLm1kLW5hdiAubWQtbmF2IC5tZC1uYXYgLm1kLW5hdl9fbGluayB7XG4gICAgcGFkZGluZy1yaWdodDogMi42cmVtO1xuICAgIHBhZGRpbmctbGVmdDogaW5pdGlhbDtcbiAgfVxuICAubWQtbmF2LS1wcmltYXJ5IC5tZC1uYXYtLXNlY29uZGFyeSAubWQtbmF2IC5tZC1uYXYgLm1kLW5hdiAubWQtbmF2IC5tZC1uYXZfX2xpbmsge1xuICAgIHBhZGRpbmctbGVmdDogMy4ycmVtO1xuICB9XG4gIFtkaXI9cnRsXSAubWQtbmF2LS1wcmltYXJ5IC5tZC1uYXYtLXNlY29uZGFyeSAubWQtbmF2IC5tZC1uYXYgLm1kLW5hdiAubWQtbmF2IC5tZC1uYXZfX2xpbmsge1xuICAgIHBhZGRpbmctcmlnaHQ6IDMuMnJlbTtcbiAgICBwYWRkaW5nLWxlZnQ6IGluaXRpYWw7XG4gIH1cbiAgLm1kLW5hdl9fdG9nZ2xlIH4gLm1kLW5hdiB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMTAwJSk7XG4gICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDI1MG1zIGN1YmljLWJlemllcigwLjgsIDAsIDAuNiwgMSksIG9wYWNpdHkgMTI1bXMgNTBtcztcbiAgICBvcGFjaXR5OiAwO1xuICB9XG4gIFtkaXI9cnRsXSAubWQtbmF2X190b2dnbGUgfiAubWQtbmF2IHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTEwMCUpO1xuICB9XG4gIC5tZC1uYXZfX3RvZ2dsZTpjaGVja2VkIH4gLm1kLW5hdiB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApO1xuICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAyNTBtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpLCBvcGFjaXR5IDEyNW1zIDEyNW1zO1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cbn1cbkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDU5LjkzNzVlbSkge1xuICBodG1sIC5tZC1uYXZfX2xpbmtbZm9yPV9fdG9jXSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgcGFkZGluZy1yaWdodDogMi40cmVtO1xuICB9XG4gIGh0bWwgLm1kLW5hdl9fbGlua1tmb3I9X190b2NdICsgLm1kLW5hdl9fbGluayB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxuICBodG1sIC5tZC1uYXZfX2xpbmtbZm9yPV9fdG9jXSB+IC5tZC1uYXYge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gIH1cbiAgaHRtbCBbZGlyPXJ0bF0gLm1kLW5hdl9fbGluayB7XG4gICAgcGFkZGluZy1yaWdodDogMC44cmVtO1xuICAgIHBhZGRpbmctbGVmdDogMi40cmVtO1xuICB9XG4gIC5tZC1uYXZfX3NvdXJjZSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgcGFkZGluZzogMCAwLjJyZW07XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtcHJpbWFyeS1mZy1jb2xvci0tZGFyayk7XG4gICAgY29sb3I6IHZhcigtLW1kLXByaW1hcnktYmctY29sb3IpO1xuICB9XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA2MGVtKSB7XG4gIC5tZC1uYXYtLXNlY29uZGFyeSAubWQtbmF2X190aXRsZVtmb3I9X190b2NdIHtcbiAgICBzY3JvbGwtc25hcC1hbGlnbjogc3RhcnQ7XG4gIH1cbiAgLm1kLW5hdi0tc2Vjb25kYXJ5IC5tZC1uYXZfX3RpdGxlIC5tZC1uYXZfX2ljb24ge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cbkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2LjI1ZW0pIHtcbiAgLm1kLW5hdiB7XG4gICAgdHJhbnNpdGlvbjogbWF4LWhlaWdodCAyNTBtcyBjdWJpYy1iZXppZXIoMC44NiwgMCwgMC4wNywgMSk7XG4gIH1cbiAgLm1kLW5hdi0tcHJpbWFyeSAubWQtbmF2X190aXRsZVtmb3I9X19kcmF3ZXJdIHtcbiAgICBzY3JvbGwtc25hcC1hbGlnbjogc3RhcnQ7XG4gIH1cbiAgLm1kLW5hdi0tcHJpbWFyeSAubWQtbmF2X190aXRsZSAubWQtbmF2X19pY29uIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG4gIC5tZC1uYXZfX3RvZ2dsZSB+IC5tZC1uYXYge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbiAgLm1kLW5hdl9fdG9nZ2xlOmNoZWNrZWQgfiAubWQtbmF2IHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgfVxuICAubWQtbmF2X19pdGVtLS1uZXN0ZWQgPiAubWQtbmF2ID4gLm1kLW5hdl9fdGl0bGUge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbiAgLm1kLW5hdl9faWNvbiB7XG4gICAgaGVpZ2h0OiAwLjlyZW07XG4gICAgZmxvYXQ6IHJpZ2h0O1xuICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAyNTBtcztcbiAgfVxuICAubWQtbmF2X19pY29uIHN2ZyB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHdpZHRoOiAwLjlyZW07XG4gICAgaGVpZ2h0OiAwLjlyZW07XG4gICAgdmVydGljYWwtYWxpZ246IC0wLjFyZW07XG4gIH1cbiAgLm1kLW5hdl9faXRlbS0tbmVzdGVkIC5tZC1uYXZfX3RvZ2dsZTpjaGVja2VkIH4gLm1kLW5hdl9fbGluayAubWQtbmF2X19pY29uIHtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZVooOTBkZWcpO1xuICB9XG59XG5cbi5tZC1zZWFyY2gge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG4ubm8tanMgLm1kLXNlYXJjaCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA2MGVtKSB7XG4gIC5tZC1zZWFyY2gge1xuICAgIHBhZGRpbmc6IDAuMnJlbSAwO1xuICB9XG59XG4ubWQtc2VhcmNoX19vdmVybGF5IHtcbiAgb3BhY2l0eTogMDtcbiAgei1pbmRleDogMTtcbn1cbkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDU5LjkzNzVlbSkge1xuICAubWQtc2VhcmNoX19vdmVybGF5IHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwLjJyZW07XG4gICAgbGVmdDogLTIuMnJlbTtcbiAgICB3aWR0aDogMnJlbTtcbiAgICBoZWlnaHQ6IDJyZW07XG4gICAgdHJhbnNmb3JtLW9yaWdpbjogY2VudGVyO1xuICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAzMDBtcyAxMDBtcywgb3BhY2l0eSAyMDBtcyAyMDBtcztcbiAgICBib3JkZXItcmFkaXVzOiAxcmVtO1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtYmctY29sb3IpO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIH1cbiAgW2Rpcj1ydGxdIC5tZC1zZWFyY2hfX292ZXJsYXkge1xuICAgIHJpZ2h0OiAtMi4ycmVtO1xuICAgIGxlZnQ6IGluaXRpYWw7XG4gIH1cbiAgW2RhdGEtbWQtdG9nZ2xlPXNlYXJjaF06Y2hlY2tlZCB+IC5tZC1oZWFkZXIgLm1kLXNlYXJjaF9fb3ZlcmxheSB7XG4gICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDQwMG1zLCBvcGFjaXR5IDEwMG1zO1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cbn1cbkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDI5LjkzNzVlbSkge1xuICBbZGF0YS1tZC10b2dnbGU9c2VhcmNoXTpjaGVja2VkIH4gLm1kLWhlYWRlciAubWQtc2VhcmNoX19vdmVybGF5IHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDQ1KTtcbiAgfVxufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMzBlbSkgYW5kIChtYXgtd2lkdGg6IDQ0LjkzNzVlbSkge1xuICBbZGF0YS1tZC10b2dnbGU9c2VhcmNoXTpjaGVja2VkIH4gLm1kLWhlYWRlciAubWQtc2VhcmNoX19vdmVybGF5IHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDYwKTtcbiAgfVxufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNDVlbSkgYW5kIChtYXgtd2lkdGg6IDU5LjkzNzVlbSkge1xuICBbZGF0YS1tZC10b2dnbGU9c2VhcmNoXTpjaGVja2VkIH4gLm1kLWhlYWRlciAubWQtc2VhcmNoX19vdmVybGF5IHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDc1KTtcbiAgfVxufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNjBlbSkge1xuICAubWQtc2VhcmNoX19vdmVybGF5IHtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgdG9wOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgd2lkdGg6IDA7XG4gICAgaGVpZ2h0OiAwO1xuICAgIHRyYW5zaXRpb246IHdpZHRoIDBtcyAyNTBtcywgaGVpZ2h0IDBtcyAyNTBtcywgb3BhY2l0eSAyNTBtcztcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodCk7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICB9XG4gIFtkaXI9cnRsXSAubWQtc2VhcmNoX19vdmVybGF5IHtcbiAgICByaWdodDogMDtcbiAgICBsZWZ0OiBpbml0aWFsO1xuICB9XG4gIFtkYXRhLW1kLXRvZ2dsZT1zZWFyY2hdOmNoZWNrZWQgfiAubWQtaGVhZGVyIC5tZC1zZWFyY2hfX292ZXJsYXkge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICB0cmFuc2l0aW9uOiB3aWR0aCAwbXMsIGhlaWdodCAwbXMsIG9wYWNpdHkgMjUwbXM7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxufVxuLm1kLXNlYXJjaF9faW5uZXIge1xuICBiYWNrZmFjZS12aXNpYmlsaXR5OiBoaWRkZW47XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA1OS45Mzc1ZW0pIHtcbiAgLm1kLXNlYXJjaF9faW5uZXIge1xuICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICB0b3A6IDA7XG4gICAgbGVmdDogMTAwJTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDUlKTtcbiAgICB0cmFuc2l0aW9uOiByaWdodCAwbXMgMzAwbXMsIGxlZnQgMG1zIDMwMG1zLCB0cmFuc2Zvcm0gMTUwbXMgMTUwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSwgb3BhY2l0eSAxNTBtcyAxNTBtcztcbiAgICBvcGFjaXR5OiAwO1xuICAgIHotaW5kZXg6IDI7XG4gIH1cbiAgW2RhdGEtbWQtdG9nZ2xlPXNlYXJjaF06Y2hlY2tlZCB+IC5tZC1oZWFkZXIgLm1kLXNlYXJjaF9faW5uZXIge1xuICAgIGxlZnQ6IDA7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApO1xuICAgIHRyYW5zaXRpb246IHJpZ2h0IDBtcyAwbXMsIGxlZnQgMG1zIDBtcywgdHJhbnNmb3JtIDE1MG1zIDE1MG1zIGN1YmljLWJlemllcigwLjEsIDAuNywgMC4xLCAxKSwgb3BhY2l0eSAxNTBtcyAxNTBtcztcbiAgICBvcGFjaXR5OiAxO1xuICB9XG4gIFtkaXI9cnRsXSBbZGF0YS1tZC10b2dnbGU9c2VhcmNoXTpjaGVja2VkIH4gLm1kLWhlYWRlciAubWQtc2VhcmNoX19pbm5lciB7XG4gICAgcmlnaHQ6IDA7XG4gICAgbGVmdDogaW5pdGlhbDtcbiAgfVxuICBodG1sIFtkaXI9cnRsXSAubWQtc2VhcmNoX19pbm5lciB7XG4gICAgcmlnaHQ6IDEwMCU7XG4gICAgbGVmdDogaW5pdGlhbDtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUlKTtcbiAgfVxufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNjBlbSkge1xuICAubWQtc2VhcmNoX19pbm5lciB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHdpZHRoOiAxMS43cmVtO1xuICAgIHBhZGRpbmc6IDAuMXJlbSAwO1xuICAgIGZsb2F0OiByaWdodDtcbiAgICB0cmFuc2l0aW9uOiB3aWR0aCAyNTBtcyBjdWJpYy1iZXppZXIoMC4xLCAwLjcsIDAuMSwgMSk7XG4gIH1cbiAgW2Rpcj1ydGxdIC5tZC1zZWFyY2hfX2lubmVyIHtcbiAgICBmbG9hdDogbGVmdDtcbiAgfVxufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNjBlbSkgYW5kIChtYXgtd2lkdGg6IDc2LjE4NzVlbSkge1xuICBbZGF0YS1tZC10b2dnbGU9c2VhcmNoXTpjaGVja2VkIH4gLm1kLWhlYWRlciAubWQtc2VhcmNoX19pbm5lciB7XG4gICAgd2lkdGg6IDIzLjRyZW07XG4gIH1cbn1cbkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2LjI1ZW0pIHtcbiAgW2RhdGEtbWQtdG9nZ2xlPXNlYXJjaF06Y2hlY2tlZCB+IC5tZC1oZWFkZXIgLm1kLXNlYXJjaF9faW5uZXIge1xuICAgIHdpZHRoOiAzNC40cmVtO1xuICB9XG59XG4ubWQtc2VhcmNoX19mb3JtIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNjBlbSkge1xuICAubWQtc2VhcmNoX19mb3JtIHtcbiAgICBib3JkZXItcmFkaXVzOiAwLjFyZW07XG4gIH1cbn1cbi5tZC1zZWFyY2hfX2lucHV0IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBwYWRkaW5nOiAwIDIuMnJlbSAwIDMuNnJlbTtcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gIHotaW5kZXg6IDI7XG59XG5bZGlyPXJ0bF0gLm1kLXNlYXJjaF9faW5wdXQge1xuICBwYWRkaW5nOiAwIDMuNnJlbSAwIDIuMnJlbTtcbn1cbi5tZC1zZWFyY2hfX2lucHV0OjpwbGFjZWhvbGRlciB7XG4gIHRyYW5zaXRpb246IGNvbG9yIDI1MG1zO1xufVxuLm1kLXNlYXJjaF9faW5wdXQgfiAubWQtc2VhcmNoX19pY29uLCAubWQtc2VhcmNoX19pbnB1dDo6cGxhY2Vob2xkZXIge1xuICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHQpO1xufVxuLm1kLXNlYXJjaF9faW5wdXQ6Oi1tcy1jbGVhciB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA1OS45Mzc1ZW0pIHtcbiAgLm1kLXNlYXJjaF9faW5wdXQge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMi40cmVtO1xuICAgIGZvbnQtc2l6ZTogMC45cmVtO1xuICB9XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA2MGVtKSB7XG4gIC5tZC1zZWFyY2hfX2lucHV0IHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDEuOHJlbTtcbiAgICBwYWRkaW5nLWxlZnQ6IDIuMnJlbTtcbiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDI1MG1zLCBjb2xvciAyNTBtcztcbiAgICBib3JkZXItcmFkaXVzOiAwLjFyZW07XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlcik7XG4gICAgY29sb3I6IGluaGVyaXQ7XG4gICAgZm9udC1zaXplOiAwLjhyZW07XG4gIH1cbiAgW2Rpcj1ydGxdIC5tZC1zZWFyY2hfX2lucHV0IHtcbiAgICBwYWRkaW5nLXJpZ2h0OiAyLjJyZW07XG4gIH1cbiAgLm1kLXNlYXJjaF9faW5wdXQgKyAubWQtc2VhcmNoX19pY29uIHtcbiAgICBjb2xvcjogdmFyKC0tbWQtcHJpbWFyeS1iZy1jb2xvcik7XG4gIH1cbiAgLm1kLXNlYXJjaF9faW5wdXQ6OnBsYWNlaG9sZGVyIHtcbiAgICBjb2xvcjogdmFyKC0tbWQtcHJpbWFyeS1iZy1jb2xvci0tbGlnaHQpO1xuICB9XG4gIC5tZC1zZWFyY2hfX2lucHV0OmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWJnLWNvbG9yLS1saWdodGVzdCk7XG4gIH1cbiAgW2RhdGEtbWQtdG9nZ2xlPXNlYXJjaF06Y2hlY2tlZCB+IC5tZC1oZWFkZXIgLm1kLXNlYXJjaF9faW5wdXQge1xuICAgIGJvcmRlci1yYWRpdXM6IDAuMXJlbSAwLjFyZW0gMCAwO1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtYmctY29sb3IpO1xuICAgIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yKTtcbiAgICB0ZXh0LW92ZXJmbG93OiBjbGlwO1xuICB9XG4gIFtkYXRhLW1kLXRvZ2dsZT1zZWFyY2hdOmNoZWNrZWQgfiAubWQtaGVhZGVyIC5tZC1zZWFyY2hfX2lucHV0ICsgLm1kLXNlYXJjaF9faWNvbiwgW2RhdGEtbWQtdG9nZ2xlPXNlYXJjaF06Y2hlY2tlZCB+IC5tZC1oZWFkZXIgLm1kLXNlYXJjaF9faW5wdXQ6OnBsYWNlaG9sZGVyIHtcbiAgICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHQpO1xuICB9XG59XG4ubWQtc2VhcmNoX19pY29uIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB3aWR0aDogMS4ycmVtO1xuICBoZWlnaHQ6IDEuMnJlbTtcbiAgdHJhbnNpdGlvbjogY29sb3IgMjUwbXMsIG9wYWNpdHkgMjUwbXM7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgei1pbmRleDogMjtcbn1cbi5tZC1zZWFyY2hfX2ljb246aG92ZXIge1xuICBvcGFjaXR5OiAwLjc7XG59XG4ubWQtc2VhcmNoX19pY29uW2Zvcj1fX3NlYXJjaF0ge1xuICB0b3A6IDAuM3JlbTtcbiAgbGVmdDogMC41cmVtO1xufVxuW2Rpcj1ydGxdIC5tZC1zZWFyY2hfX2ljb25bZm9yPV9fc2VhcmNoXSB7XG4gIHJpZ2h0OiAwLjVyZW07XG4gIGxlZnQ6IGluaXRpYWw7XG59XG5bZGlyPXJ0bF0gLm1kLXNlYXJjaF9faWNvbltmb3I9X19zZWFyY2hdIHN2ZyB7XG4gIHRyYW5zZm9ybTogc2NhbGVYKC0xKTtcbn1cbkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDU5LjkzNzVlbSkge1xuICAubWQtc2VhcmNoX19pY29uW2Zvcj1fX3NlYXJjaF0ge1xuICAgIHRvcDogMC42cmVtO1xuICAgIGxlZnQ6IDAuOHJlbTtcbiAgfVxuICBbZGlyPXJ0bF0gLm1kLXNlYXJjaF9faWNvbltmb3I9X19zZWFyY2hdIHtcbiAgICByaWdodDogMC44cmVtO1xuICAgIGxlZnQ6IGluaXRpYWw7XG4gIH1cbiAgLm1kLXNlYXJjaF9faWNvbltmb3I9X19zZWFyY2hdIHN2ZzpmaXJzdC1jaGlsZCB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNjBlbSkge1xuICAubWQtc2VhcmNoX19pY29uW2Zvcj1fX3NlYXJjaF0gc3ZnOmxhc3QtY2hpbGQge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cbi5tZC1zZWFyY2hfX2ljb25bdHlwZT1yZXNldF0ge1xuICB0b3A6IDAuM3JlbTtcbiAgcmlnaHQ6IDAuNXJlbTtcbiAgdHJhbnNmb3JtOiBzY2FsZSgwLjc1KTtcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDE1MG1zIGN1YmljLWJlemllcigwLjEsIDAuNywgMC4xLCAxKSwgb3BhY2l0eSAxNTBtcztcbiAgb3BhY2l0eTogMDtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG5bZGlyPXJ0bF0gLm1kLXNlYXJjaF9faWNvblt0eXBlPXJlc2V0XSB7XG4gIHJpZ2h0OiBpbml0aWFsO1xuICBsZWZ0OiAwLjVyZW07XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA1OS45Mzc1ZW0pIHtcbiAgLm1kLXNlYXJjaF9faWNvblt0eXBlPXJlc2V0XSB7XG4gICAgdG9wOiAwLjZyZW07XG4gICAgcmlnaHQ6IDAuOHJlbTtcbiAgfVxuICBbZGlyPXJ0bF0gLm1kLXNlYXJjaF9faWNvblt0eXBlPXJlc2V0XSB7XG4gICAgcmlnaHQ6IGluaXRpYWw7XG4gICAgbGVmdDogMC44cmVtO1xuICB9XG59XG5bZGF0YS1tZC10b2dnbGU9c2VhcmNoXTpjaGVja2VkIH4gLm1kLWhlYWRlciAubWQtc2VhcmNoX19pbnB1dDp2YWxpZCB+IC5tZC1zZWFyY2hfX2ljb25bdHlwZT1yZXNldF0ge1xuICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICBvcGFjaXR5OiAxO1xuICBwb2ludGVyLWV2ZW50czogaW5pdGlhbDtcbn1cbltkYXRhLW1kLXRvZ2dsZT1zZWFyY2hdOmNoZWNrZWQgfiAubWQtaGVhZGVyIC5tZC1zZWFyY2hfX2lucHV0OnZhbGlkIH4gLm1kLXNlYXJjaF9faWNvblt0eXBlPXJlc2V0XTpob3ZlciB7XG4gIG9wYWNpdHk6IDAuNztcbn1cbi5tZC1zZWFyY2hfX291dHB1dCB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgd2lkdGg6IDEwMCU7XG4gIGJvcmRlci1yYWRpdXM6IDAgMCAwLjFyZW0gMC4xcmVtO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICB6LWluZGV4OiAxO1xufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNTkuOTM3NWVtKSB7XG4gIC5tZC1zZWFyY2hfX291dHB1dCB7XG4gICAgdG9wOiAyLjRyZW07XG4gICAgYm90dG9tOiAwO1xuICB9XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA2MGVtKSB7XG4gIC5tZC1zZWFyY2hfX291dHB1dCB7XG4gICAgdG9wOiAxLjlyZW07XG4gICAgdHJhbnNpdGlvbjogb3BhY2l0eSA0MDBtcztcbiAgICBvcGFjaXR5OiAwO1xuICB9XG4gIFtkYXRhLW1kLXRvZ2dsZT1zZWFyY2hdOmNoZWNrZWQgfiAubWQtaGVhZGVyIC5tZC1zZWFyY2hfX291dHB1dCB7XG4gICAgYm94LXNoYWRvdzogMCA2cHggMTBweCAwIHJnYmEoMCwgMCwgMCwgMC4xNCksIDAgMXB4IDE4cHggMCByZ2JhKDAsIDAsIDAsIDAuMTIpLCAwIDNweCA1cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuNCk7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxufVxuLm1kLXNlYXJjaF9fc2Nyb2xsd3JhcCB7XG4gIGhlaWdodDogMTAwJTtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1iZy1jb2xvcik7XG4gIGJveC1zaGFkb3c6IGluc2V0IDAgMC4wNXJlbSAwIHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXN0KTtcbiAgb3ZlcmZsb3cteTogYXV0bztcbiAgYmFja2ZhY2UtdmlzaWJpbGl0eTogaGlkZGVuO1xuICBzY3JvbGwtc25hcC10eXBlOiB5IG1hbmRhdG9yeTtcbiAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoO1xufVxuQG1lZGlhIChtYXgtcmVzb2x1dGlvbjogMWRwcHgpIHtcbiAgLm1kLXNlYXJjaF9fc2Nyb2xsd3JhcCB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVaKDApO1xuICB9XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA2MGVtKSBhbmQgKG1heC13aWR0aDogNzYuMTg3NWVtKSB7XG4gIC5tZC1zZWFyY2hfX3Njcm9sbHdyYXAge1xuICAgIHdpZHRoOiAyMy40cmVtO1xuICB9XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3Ni4yNWVtKSB7XG4gIC5tZC1zZWFyY2hfX3Njcm9sbHdyYXAge1xuICAgIHdpZHRoOiAzNC40cmVtO1xuICB9XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA2MGVtKSB7XG4gIC5tZC1zZWFyY2hfX3Njcm9sbHdyYXAge1xuICAgIG1heC1oZWlnaHQ6IDA7XG4gIH1cbiAgW2RhdGEtbWQtdG9nZ2xlPXNlYXJjaF06Y2hlY2tlZCB+IC5tZC1oZWFkZXIgLm1kLXNlYXJjaF9fc2Nyb2xsd3JhcCB7XG4gICAgbWF4LWhlaWdodDogNzV2aDtcbiAgfVxuICAubWQtc2VhcmNoX19zY3JvbGx3cmFwOjotd2Via2l0LXNjcm9sbGJhciB7XG4gICAgd2lkdGg6IDAuMnJlbTtcbiAgICBoZWlnaHQ6IDAuMnJlbTtcbiAgfVxuICAubWQtc2VhcmNoX19zY3JvbGx3cmFwOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlcik7XG4gIH1cbiAgLm1kLXNlYXJjaF9fc2Nyb2xsd3JhcDo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWI6aG92ZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW1kLWFjY2VudC1mZy1jb2xvcik7XG4gIH1cbn1cblxuLm1kLXNlYXJjaC1yZXN1bHQge1xuICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvcik7XG4gIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7XG59XG4ubWQtc2VhcmNoLXJlc3VsdF9fbWV0YSB7XG4gIHBhZGRpbmc6IDAgMC44cmVtO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodGVzdCk7XG4gIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodCk7XG4gIGZvbnQtc2l6ZTogMC42NHJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuOHJlbTtcbiAgc2Nyb2xsLXNuYXAtYWxpZ246IHN0YXJ0O1xufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNjBlbSkge1xuICAubWQtc2VhcmNoLXJlc3VsdF9fbWV0YSB7XG4gICAgcGFkZGluZy1sZWZ0OiAyLjJyZW07XG4gIH1cbiAgW2Rpcj1ydGxdIC5tZC1zZWFyY2gtcmVzdWx0X19tZXRhIHtcbiAgICBwYWRkaW5nLXJpZ2h0OiAyLjJyZW07XG4gICAgcGFkZGluZy1sZWZ0OiBpbml0aWFsO1xuICB9XG59XG4ubWQtc2VhcmNoLXJlc3VsdF9fbGlzdCB7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMDtcbiAgYm9yZGVyLXRvcDogMC4wNXJlbSBzb2xpZCB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodGVzdCk7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG59XG4ubWQtc2VhcmNoLXJlc3VsdF9faXRlbSB7XG4gIGJveC1zaGFkb3c6IDAgLTAuMDVyZW0gMCB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodGVzdCk7XG59XG4ubWQtc2VhcmNoLXJlc3VsdF9fbGluayB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDI1MG1zO1xuICBvdXRsaW5lOiAwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBzY3JvbGwtc25hcC1hbGlnbjogc3RhcnQ7XG59XG4ubWQtc2VhcmNoLXJlc3VsdF9fbGluazpmb2N1cywgLm1kLXNlYXJjaC1yZXN1bHRfX2xpbms6aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1hY2NlbnQtZmctY29sb3ItLXRyYW5zcGFyZW50KTtcbn1cbi5tZC1zZWFyY2gtcmVzdWx0X19saW5rOmZvY3VzIC5tZC1zZWFyY2gtcmVzdWx0X19hcnRpY2xlOjpiZWZvcmUsIC5tZC1zZWFyY2gtcmVzdWx0X19saW5rOmhvdmVyIC5tZC1zZWFyY2gtcmVzdWx0X19hcnRpY2xlOjpiZWZvcmUge1xuICBvcGFjaXR5OiAwLjc7XG59XG4ubWQtc2VhcmNoLXJlc3VsdF9fbGluazpsYXN0LWNoaWxkIC5tZC1zZWFyY2gtcmVzdWx0X190ZWFzZXIge1xuICBtYXJnaW4tYm90dG9tOiAwLjZyZW07XG59XG4ubWQtc2VhcmNoLXJlc3VsdF9fYXJ0aWNsZSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgcGFkZGluZzogMCAwLjhyZW07XG4gIG92ZXJmbG93OiBhdXRvO1xufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNjBlbSkge1xuICAubWQtc2VhcmNoLXJlc3VsdF9fYXJ0aWNsZSB7XG4gICAgcGFkZGluZy1sZWZ0OiAyLjJyZW07XG4gIH1cbiAgW2Rpcj1ydGxdIC5tZC1zZWFyY2gtcmVzdWx0X19hcnRpY2xlIHtcbiAgICBwYWRkaW5nLXJpZ2h0OiAyLjJyZW07XG4gICAgcGFkZGluZy1sZWZ0OiAwLjhyZW07XG4gIH1cbn1cbi5tZC1zZWFyY2gtcmVzdWx0X19hcnRpY2xlLS1kb2N1bWVudCAubWQtc2VhcmNoLXJlc3VsdF9fdGl0bGUge1xuICBtYXJnaW46IDAuNTVyZW0gMDtcbiAgZm9udC1zaXplOiAwLjhyZW07XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG59XG4ubWQtc2VhcmNoLXJlc3VsdF9faWNvbiB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgbGVmdDogMDtcbiAgbWFyZ2luOiAwLjFyZW07XG4gIHBhZGRpbmc6IDAuNHJlbTtcbiAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0KTtcbn1cbltkaXI9cnRsXSAubWQtc2VhcmNoLXJlc3VsdF9faWNvbiB7XG4gIHJpZ2h0OiAwO1xuICBsZWZ0OiBpbml0aWFsO1xufVxuW2Rpcj1ydGxdIC5tZC1zZWFyY2gtcmVzdWx0X19pY29uIHN2ZyB7XG4gIHRyYW5zZm9ybTogc2NhbGVYKC0xKTtcbn1cbkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDU5LjkzNzVlbSkge1xuICAubWQtc2VhcmNoLXJlc3VsdF9faWNvbiB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuLm1kLXNlYXJjaC1yZXN1bHRfX3RpdGxlIHtcbiAgbWFyZ2luOiAwLjVlbSAwO1xuICBmb250LXNpemU6IDAuNjRyZW07XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG59XG4ubWQtc2VhcmNoLXJlc3VsdF9fdGVhc2VyIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIG1heC1oZWlnaHQ6IDEuNjVyZW07XG4gIG1hcmdpbjogMC41ZW0gMDtcbiAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0KTtcbiAgZm9udC1zaXplOiAwLjY0cmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbiAgLXdlYmtpdC1saW5lLWNsYW1wOiAyO1xufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNDQuOTM3NWVtKSB7XG4gIC5tZC1zZWFyY2gtcmVzdWx0X190ZWFzZXIge1xuICAgIG1heC1oZWlnaHQ6IDIuNXJlbTtcbiAgICAtd2Via2l0LWxpbmUtY2xhbXA6IDM7XG4gIH1cbn1cbkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDYwZW0pIGFuZCAobWF4LXdpZHRoOiA3Ni4xODc1ZW0pIHtcbiAgLm1kLXNlYXJjaC1yZXN1bHRfX3RlYXNlciB7XG4gICAgbWF4LWhlaWdodDogMi41cmVtO1xuICAgIC13ZWJraXQtbGluZS1jbGFtcDogMztcbiAgfVxufVxuLm1kLXNlYXJjaC1yZXN1bHQgZW0ge1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuXG4ubWQtc2lkZWJhciB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgd2lkdGg6IDEyLjFyZW07XG4gIHBhZGRpbmc6IDEuMnJlbSAwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuQG1lZGlhIHByaW50IHtcbiAgLm1kLXNpZGViYXIge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cbi5tZC1zaWRlYmFyW2RhdGEtbWQtc3RhdGU9bG9ja10ge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHRvcDogMi40cmVtO1xufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzYuMTg3NWVtKSB7XG4gIC5tZC1zaWRlYmFyLS1wcmltYXJ5IHtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgdG9wOiAwO1xuICAgIGxlZnQ6IC0xMi4xcmVtO1xuICAgIHdpZHRoOiAxMi4xcmVtO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCk7XG4gICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDI1MG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSksIGJveC1zaGFkb3cgMjUwbXM7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1iZy1jb2xvcik7XG4gICAgei1pbmRleDogMztcbiAgfVxuICBbZGlyPXJ0bF0gLm1kLXNpZGViYXItLXByaW1hcnkge1xuICAgIHJpZ2h0OiAtMTIuMXJlbTtcbiAgICBsZWZ0OiBpbml0aWFsO1xuICB9XG4gIFtkYXRhLW1kLXRvZ2dsZT1kcmF3ZXJdOmNoZWNrZWQgfiAubWQtY29udGFpbmVyIC5tZC1zaWRlYmFyLS1wcmltYXJ5IHtcbiAgICBib3gtc2hhZG93OiAwIDhweCAxMHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwIDNweCAxNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTIpLCAwIDVweCA1cHggLTNweCByZ2JhKDAsIDAsIDAsIDAuNCk7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDEyLjFyZW0pO1xuICB9XG4gIFtkaXI9cnRsXSBbZGF0YS1tZC10b2dnbGU9ZHJhd2VyXTpjaGVja2VkIH4gLm1kLWNvbnRhaW5lciAubWQtc2lkZWJhci0tcHJpbWFyeSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0xMi4xcmVtKTtcbiAgfVxuICAubWQtc2lkZWJhci0tcHJpbWFyeSAubWQtc2lkZWJhcl9fc2Nyb2xsd3JhcCB7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgfVxufVxuLm1kLXNpZGViYXItLXNlY29uZGFyeSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA2MGVtKSB7XG4gIC5tZC1zaWRlYmFyLS1zZWNvbmRhcnkge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIG1hcmdpbi1sZWZ0OiBjYWxjKDEwMCUgLSAxMi4xcmVtKTtcbiAgfVxuICBbZGlyPXJ0bF0gLm1kLXNpZGViYXItLXNlY29uZGFyeSB7XG4gICAgbWFyZ2luLXJpZ2h0OiBjYWxjKDEwMCUgLSAxMi4xcmVtKTtcbiAgICBtYXJnaW4tbGVmdDogaW5pdGlhbDtcbiAgfVxuICAubWQtc2lkZWJhci0tc2Vjb25kYXJ5IC5tZC1zaWRlYmFyX19zY3JvbGx3cmFwIHtcbiAgICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7XG4gIH1cbn1cbkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2LjI1ZW0pIHtcbiAgLm1kLXNpZGViYXItLXNlY29uZGFyeSB7XG4gICAgbWFyZ2luLWxlZnQ6IDQ4LjlyZW07XG4gIH1cbiAgW2Rpcj1ydGxdIC5tZC1zaWRlYmFyLS1zZWNvbmRhcnkge1xuICAgIG1hcmdpbi1yaWdodDogNDguOXJlbTtcbiAgICBtYXJnaW4tbGVmdDogaW5pdGlhbDtcbiAgfVxufVxuLm1kLXNpZGViYXJfX3Njcm9sbHdyYXAge1xuICBtYXgtaGVpZ2h0OiAxMDAlO1xuICBtYXJnaW46IDAgMC4ycmVtO1xuICBvdmVyZmxvdy15OiBhdXRvO1xuICBiYWNrZmFjZS12aXNpYmlsaXR5OiBoaWRkZW47XG4gIHNjcm9sbC1zbmFwLXR5cGU6IHkgbWFuZGF0b3J5O1xufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzYuMTg3NWVtKSB7XG4gIC5tZC1zaWRlYmFyLS1wcmltYXJ5IC5tZC1zaWRlYmFyX19zY3JvbGx3cmFwIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwO1xuICAgIHJpZ2h0OiAwO1xuICAgIGJvdHRvbTogMDtcbiAgICBsZWZ0OiAwO1xuICAgIG1hcmdpbjogMDtcbiAgICBzY3JvbGwtc25hcC10eXBlOiBub25lO1xuICB9XG59XG4ubWQtc2lkZWJhcl9fc2Nyb2xsd3JhcDo6LXdlYmtpdC1zY3JvbGxiYXIge1xuICB3aWR0aDogMC4ycmVtO1xuICBoZWlnaHQ6IDAuMnJlbTtcbn1cbi5tZC1zaWRlYmFyX19zY3JvbGx3cmFwOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXIpO1xufVxuLm1kLXNpZGViYXJfX3Njcm9sbHdyYXA6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iOmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtYWNjZW50LWZnLWNvbG9yKTtcbn1cblxuQGtleWZyYW1lcyBtZC1zb3VyY2VfX2ZhY3RzLS1kb25lIHtcbiAgMCUge1xuICAgIGhlaWdodDogMDtcbiAgfVxuICAxMDAlIHtcbiAgICBoZWlnaHQ6IDAuNjVyZW07XG4gIH1cbn1cbkBrZXlmcmFtZXMgbWQtc291cmNlX19mYWN0LS1kb25lIHtcbiAgMCUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMDAlKTtcbiAgICBvcGFjaXR5OiAwO1xuICB9XG4gIDUwJSB7XG4gICAgb3BhY2l0eTogMDtcbiAgfVxuICAxMDAlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCUpO1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cbn1cbi5tZC1zb3VyY2Uge1xuICBkaXNwbGF5OiBibG9jaztcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAyNTBtcztcbiAgZm9udC1zaXplOiAwLjY1cmVtO1xuICBsaW5lLWhlaWdodDogMS4yNTtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgYmFja2ZhY2UtdmlzaWJpbGl0eTogaGlkZGVuO1xufVxuW2Rpcj1ydGxdIC5tZC1zb3VyY2Uge1xuICBwYWRkaW5nLXJpZ2h0OiBpbml0aWFsO1xuICBwYWRkaW5nLWxlZnQ6IDAuNnJlbTtcbn1cbi5tZC1zb3VyY2U6aG92ZXIge1xuICBvcGFjaXR5OiAwLjc7XG59XG4ubWQtc291cmNlX19pY29uIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB3aWR0aDogMi40cmVtO1xuICBoZWlnaHQ6IDIuNHJlbTtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cbi5tZC1zb3VyY2VfX2ljb24gc3ZnIHtcbiAgbWFyZ2luLXRvcDogMC42cmVtO1xuICBtYXJnaW4tbGVmdDogMC42cmVtO1xufVxuW2Rpcj1ydGxdIC5tZC1zb3VyY2VfX2ljb24gc3ZnIHtcbiAgbWFyZ2luLXJpZ2h0OiAwLjZyZW07XG4gIG1hcmdpbi1sZWZ0OiBpbml0aWFsO1xufVxuLm1kLXNvdXJjZV9faWNvbiArIC5tZC1zb3VyY2VfX3JlcG9zaXRvcnkge1xuICBtYXJnaW4tbGVmdDogLTJyZW07XG4gIHBhZGRpbmctbGVmdDogMnJlbTtcbn1cbltkaXI9cnRsXSAubWQtc291cmNlX19pY29uICsgLm1kLXNvdXJjZV9fcmVwb3NpdG9yeSB7XG4gIG1hcmdpbi1yaWdodDogLTJyZW07XG4gIG1hcmdpbi1sZWZ0OiBpbml0aWFsO1xuICBwYWRkaW5nLXJpZ2h0OiAycmVtO1xuICBwYWRkaW5nLWxlZnQ6IGluaXRpYWw7XG59XG4ubWQtc291cmNlX19yZXBvc2l0b3J5IHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBtYXgtd2lkdGg6IGNhbGMoMTAwJSAtIDEuMnJlbSk7XG4gIG1hcmdpbi1sZWZ0OiAwLjZyZW07XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuLm1kLXNvdXJjZV9fZmFjdHMge1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDA7XG4gIGZvbnQtc2l6ZTogMC41NXJlbTtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xuICBvcGFjaXR5OiAwLjc1O1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuW2RhdGEtbWQtc3RhdGU9ZG9uZV0gLm1kLXNvdXJjZV9fZmFjdHMge1xuICBhbmltYXRpb246IG1kLXNvdXJjZV9fZmFjdHMtLWRvbmUgMjUwbXMgZWFzZS1pbjtcbn1cbi5tZC1zb3VyY2VfX2ZhY3Qge1xuICBmbG9hdDogbGVmdDtcbn1cbltkaXI9cnRsXSAubWQtc291cmNlX19mYWN0IHtcbiAgZmxvYXQ6IHJpZ2h0O1xufVxuW2RhdGEtbWQtc3RhdGU9ZG9uZV0gLm1kLXNvdXJjZV9fZmFjdCB7XG4gIGFuaW1hdGlvbjogbWQtc291cmNlX19mYWN0LS1kb25lIDQwMG1zIGVhc2Utb3V0O1xufVxuLm1kLXNvdXJjZV9fZmFjdDo6YmVmb3JlIHtcbiAgbWFyZ2luOiAwIDAuMXJlbTtcbiAgY29udGVudDogXCLCt1wiO1xufVxuLm1kLXNvdXJjZV9fZmFjdDpmaXJzdC1jaGlsZDo6YmVmb3JlIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLm1kLXRhYnMge1xuICB3aWR0aDogMTAwJTtcbiAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAyNTBtcztcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtcHJpbWFyeS1mZy1jb2xvcik7XG4gIGNvbG9yOiB2YXIoLS1tZC1wcmltYXJ5LWJnLWNvbG9yKTtcbiAgb3ZlcmZsb3c6IGF1dG87XG59XG4ubm8tanMgLm1kLXRhYnMge1xuICB0cmFuc2l0aW9uOiBub25lO1xufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzYuMTg3NWVtKSB7XG4gIC5tZC10YWJzIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG5AbWVkaWEgcHJpbnQge1xuICAubWQtdGFicyB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuLm1kLXRhYnNfX2xpc3Qge1xuICBtYXJnaW46IDA7XG4gIG1hcmdpbi1sZWZ0OiAwLjJyZW07XG4gIHBhZGRpbmc6IDA7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG59XG5bZGlyPXJ0bF0gLm1kLXRhYnNfX2xpc3Qge1xuICBtYXJnaW4tcmlnaHQ6IDAuMnJlbTtcbiAgbWFyZ2luLWxlZnQ6IGluaXRpYWw7XG59XG4ubWQtdGFic19faXRlbSB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgaGVpZ2h0OiAyLjRyZW07XG4gIHBhZGRpbmctcmlnaHQ6IDAuNnJlbTtcbiAgcGFkZGluZy1sZWZ0OiAwLjZyZW07XG59XG4ubWQtdGFic19fbGluayB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBtYXJnaW4tdG9wOiAwLjhyZW07XG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSA0MDBtcyBjdWJpYy1iZXppZXIoMC4xLCAwLjcsIDAuMSwgMSksIG9wYWNpdHkgMjUwbXM7XG4gIGZvbnQtc2l6ZTogMC43cmVtO1xuICBvcGFjaXR5OiAwLjc7XG59XG4ubm8tanMgLm1kLXRhYnNfX2xpbmsge1xuICB0cmFuc2l0aW9uOiBub25lO1xufVxuLm1kLXRhYnNfX2xpbmstLWFjdGl2ZSwgLm1kLXRhYnNfX2xpbms6aG92ZXIge1xuICBjb2xvcjogaW5oZXJpdDtcbiAgb3BhY2l0eTogMTtcbn1cbi5tZC10YWJzX19pdGVtOm50aC1jaGlsZCgyKSAubWQtdGFic19fbGluayB7XG4gIHRyYW5zaXRpb24tZGVsYXk6IDIwbXM7XG59XG4ubWQtdGFic19faXRlbTpudGgtY2hpbGQoMykgLm1kLXRhYnNfX2xpbmsge1xuICB0cmFuc2l0aW9uLWRlbGF5OiA0MG1zO1xufVxuLm1kLXRhYnNfX2l0ZW06bnRoLWNoaWxkKDQpIC5tZC10YWJzX19saW5rIHtcbiAgdHJhbnNpdGlvbi1kZWxheTogNjBtcztcbn1cbi5tZC10YWJzX19pdGVtOm50aC1jaGlsZCg1KSAubWQtdGFic19fbGluayB7XG4gIHRyYW5zaXRpb24tZGVsYXk6IDgwbXM7XG59XG4ubWQtdGFic19faXRlbTpudGgtY2hpbGQoNikgLm1kLXRhYnNfX2xpbmsge1xuICB0cmFuc2l0aW9uLWRlbGF5OiAxMDBtcztcbn1cbi5tZC10YWJzX19pdGVtOm50aC1jaGlsZCg3KSAubWQtdGFic19fbGluayB7XG4gIHRyYW5zaXRpb24tZGVsYXk6IDEyMG1zO1xufVxuLm1kLXRhYnNfX2l0ZW06bnRoLWNoaWxkKDgpIC5tZC10YWJzX19saW5rIHtcbiAgdHJhbnNpdGlvbi1kZWxheTogMTQwbXM7XG59XG4ubWQtdGFic19faXRlbTpudGgtY2hpbGQoOSkgLm1kLXRhYnNfX2xpbmsge1xuICB0cmFuc2l0aW9uLWRlbGF5OiAxNjBtcztcbn1cbi5tZC10YWJzX19pdGVtOm50aC1jaGlsZCgxMCkgLm1kLXRhYnNfX2xpbmsge1xuICB0cmFuc2l0aW9uLWRlbGF5OiAxODBtcztcbn1cbi5tZC10YWJzX19pdGVtOm50aC1jaGlsZCgxMSkgLm1kLXRhYnNfX2xpbmsge1xuICB0cmFuc2l0aW9uLWRlbGF5OiAyMDBtcztcbn1cbi5tZC10YWJzX19pdGVtOm50aC1jaGlsZCgxMikgLm1kLXRhYnNfX2xpbmsge1xuICB0cmFuc2l0aW9uLWRlbGF5OiAyMjBtcztcbn1cbi5tZC10YWJzX19pdGVtOm50aC1jaGlsZCgxMykgLm1kLXRhYnNfX2xpbmsge1xuICB0cmFuc2l0aW9uLWRlbGF5OiAyNDBtcztcbn1cbi5tZC10YWJzX19pdGVtOm50aC1jaGlsZCgxNCkgLm1kLXRhYnNfX2xpbmsge1xuICB0cmFuc2l0aW9uLWRlbGF5OiAyNjBtcztcbn1cbi5tZC10YWJzX19pdGVtOm50aC1jaGlsZCgxNSkgLm1kLXRhYnNfX2xpbmsge1xuICB0cmFuc2l0aW9uLWRlbGF5OiAyODBtcztcbn1cbi5tZC10YWJzX19pdGVtOm50aC1jaGlsZCgxNikgLm1kLXRhYnNfX2xpbmsge1xuICB0cmFuc2l0aW9uLWRlbGF5OiAzMDBtcztcbn1cbi5tZC10YWJzW2RhdGEtbWQtc3RhdGU9aGlkZGVuXSB7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xufVxuLm1kLXRhYnNbZGF0YS1tZC1zdGF0ZT1oaWRkZW5dIC5tZC10YWJzX19saW5rIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDUwJSk7XG4gIHRyYW5zaXRpb246IGNvbG9yIDI1MG1zLCB0cmFuc2Zvcm0gMG1zIDQwMG1zLCBvcGFjaXR5IDEwMG1zO1xuICBvcGFjaXR5OiAwO1xufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzYuMjVlbSkge1xuICAubWQtdGFicyB+IC5tZC1tYWluIC5tZC1uYXYtLXByaW1hcnkgPiAubWQtbmF2X19saXN0ID4gLm1kLW5hdl9faXRlbS0tbmVzdGVkIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG4gIC5tZC10YWJzLS1hY3RpdmUgfiAubWQtbWFpbiAubWQtbmF2LS1wcmltYXJ5IC5tZC1uYXZfX3RpdGxlIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBwYWRkaW5nOiAwIDAuNnJlbTtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICBzY3JvbGwtc25hcC1hbGlnbjogc3RhcnQ7XG4gIH1cbiAgLm1kLXRhYnMtLWFjdGl2ZSB+IC5tZC1tYWluIC5tZC1uYXYtLXByaW1hcnkgLm1kLW5hdl9fdGl0bGVbZm9yPV9fZHJhd2VyXSB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxuICAubWQtdGFicy0tYWN0aXZlIH4gLm1kLW1haW4gLm1kLW5hdi0tcHJpbWFyeSA+IC5tZC1uYXZfX2xpc3QgPiAubWQtbmF2X19pdGVtIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG4gIC5tZC10YWJzLS1hY3RpdmUgfiAubWQtbWFpbiAubWQtbmF2LS1wcmltYXJ5ID4gLm1kLW5hdl9fbGlzdCA+IC5tZC1uYXZfX2l0ZW0tLWFjdGl2ZSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgcGFkZGluZzogMDtcbiAgfVxuICAubWQtdGFicy0tYWN0aXZlIH4gLm1kLW1haW4gLm1kLW5hdi0tcHJpbWFyeSA+IC5tZC1uYXZfX2xpc3QgPiAubWQtbmF2X19pdGVtLS1hY3RpdmUgPiAubWQtbmF2X19saW5rIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG4gIC5tZC10YWJzLS1hY3RpdmUgfiAubWQtbWFpbiAubWQtbmF2W2RhdGEtbWQtbGV2ZWw9XCIxXCJdID4gLm1kLW5hdl9fbGlzdCA+IC5tZC1uYXZfX2l0ZW0ge1xuICAgIHBhZGRpbmc6IDAgMC42cmVtO1xuICB9XG4gIC5tZC10YWJzLS1hY3RpdmUgfiAubWQtbWFpbiAubWQtbmF2W2RhdGEtbWQtbGV2ZWw9XCIxXCJdIC5tZC1uYXYgLm1kLW5hdl9fdGl0bGUge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cblxuLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24sIC5tZC10eXBlc2V0IGRldGFpbHMge1xuICBtYXJnaW46IDEuNTYyNWVtIDA7XG4gIHBhZGRpbmc6IDAgMC42cmVtO1xuICBib3JkZXItbGVmdDogMC4ycmVtIHNvbGlkICM0NDhhZmY7XG4gIGJvcmRlci1yYWRpdXM6IDAuMXJlbTtcbiAgZm9udC1zaXplOiAwLjY0cmVtO1xuICBib3gtc2hhZG93OiAwIDAuMnJlbSAwLjVyZW0gcmdiYSgwLCAwLCAwLCAwLjA1KSwgMCAwIDAuMDVyZW0gcmdiYSgwLCAwLCAwLCAwLjEpO1xuICBvdmVyZmxvdzogYXV0bztcbn1cbltkaXI9cnRsXSAubWQtdHlwZXNldCAuYWRtb25pdGlvbiwgW2Rpcj1ydGxdIC5tZC10eXBlc2V0IGRldGFpbHMge1xuICBib3JkZXItcmlnaHQ6IDAuMnJlbSBzb2xpZCAjNDQ4YWZmO1xuICBib3JkZXItbGVmdDogbm9uZTtcbn1cbmh0bWwgLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24gPiA6bGFzdC1jaGlsZCwgaHRtbCAubWQtdHlwZXNldCBkZXRhaWxzID4gOmxhc3QtY2hpbGQge1xuICBtYXJnaW4tYm90dG9tOiAwLjZyZW07XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbiAuYWRtb25pdGlvbiwgLm1kLXR5cGVzZXQgZGV0YWlscyAuYWRtb25pdGlvbiwgLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24gZGV0YWlscywgLm1kLXR5cGVzZXQgZGV0YWlscyBkZXRhaWxzIHtcbiAgbWFyZ2luOiAxZW0gMDtcbn1cbi5tZC10eXBlc2V0IC5hZG1vbml0aW9uLnRsZHIsIC5tZC10eXBlc2V0IGRldGFpbHMudGxkciwgLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uc3VtbWFyeSwgLm1kLXR5cGVzZXQgZGV0YWlscy5zdW1tYXJ5LCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5hYnN0cmFjdCwgLm1kLXR5cGVzZXQgZGV0YWlscy5hYnN0cmFjdCB7XG4gIGJvcmRlci1sZWZ0LWNvbG9yOiAjMDBiMGZmO1xufVxuLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24udGxkciA+IDpmaXJzdC1jaGlsZCwgLm1kLXR5cGVzZXQgZGV0YWlscy50bGRyID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5zdW1tYXJ5ID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCBkZXRhaWxzLnN1bW1hcnkgPiA6Zmlyc3QtY2hpbGQsIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uLmFic3RyYWN0ID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCBkZXRhaWxzLmFic3RyYWN0ID4gOmZpcnN0LWNoaWxkIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAxNzYsIDI1NSwgMC4xKTtcbn1cbi5tZC10eXBlc2V0IC5hZG1vbml0aW9uLnRsZHIgPiA6Zmlyc3QtY2hpbGQ6OmJlZm9yZSwgLm1kLXR5cGVzZXQgZGV0YWlscy50bGRyID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uLnN1bW1hcnkgPiA6Zmlyc3QtY2hpbGQ6OmJlZm9yZSwgLm1kLXR5cGVzZXQgZGV0YWlscy5zdW1tYXJ5ID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uLmFic3RyYWN0ID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IGRldGFpbHMuYWJzdHJhY3QgPiA6Zmlyc3QtY2hpbGQ6OmJlZm9yZSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMwMGIwZmY7XG4gIG1hc2staW1hZ2U6IHVybChcInt7IHRleHQtc3ViamVjdCB9fVwiKTtcbn1cbi5tZC10eXBlc2V0IC5hZG1vbml0aW9uLnRvZG8sIC5tZC10eXBlc2V0IGRldGFpbHMudG9kbywgLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uaW5mbywgLm1kLXR5cGVzZXQgZGV0YWlscy5pbmZvIHtcbiAgYm9yZGVyLWxlZnQtY29sb3I6ICMwMGI4ZDQ7XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbi50b2RvID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCBkZXRhaWxzLnRvZG8gPiA6Zmlyc3QtY2hpbGQsIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uLmluZm8gPiA6Zmlyc3QtY2hpbGQsIC5tZC10eXBlc2V0IGRldGFpbHMuaW5mbyA+IDpmaXJzdC1jaGlsZCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMTg0LCAyMTIsIDAuMSk7XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbi50b2RvID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IGRldGFpbHMudG9kbyA+IDpmaXJzdC1jaGlsZDo6YmVmb3JlLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5pbmZvID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IGRldGFpbHMuaW5mbyA+IDpmaXJzdC1jaGlsZDo6YmVmb3JlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwYjhkNDtcbiAgbWFzay1pbWFnZTogdXJsKFwie3sgaW5mb3JtYXRpb24gfX1cIik7XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbi5pbXBvcnRhbnQsIC5tZC10eXBlc2V0IGRldGFpbHMuaW1wb3J0YW50LCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5oaW50LCAubWQtdHlwZXNldCBkZXRhaWxzLmhpbnQsIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uLnRpcCwgLm1kLXR5cGVzZXQgZGV0YWlscy50aXAge1xuICBib3JkZXItbGVmdC1jb2xvcjogIzAwYmZhNTtcbn1cbi5tZC10eXBlc2V0IC5hZG1vbml0aW9uLmltcG9ydGFudCA+IDpmaXJzdC1jaGlsZCwgLm1kLXR5cGVzZXQgZGV0YWlscy5pbXBvcnRhbnQgPiA6Zmlyc3QtY2hpbGQsIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uLmhpbnQgPiA6Zmlyc3QtY2hpbGQsIC5tZC10eXBlc2V0IGRldGFpbHMuaGludCA+IDpmaXJzdC1jaGlsZCwgLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24udGlwID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCBkZXRhaWxzLnRpcCA+IDpmaXJzdC1jaGlsZCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMTkxLCAxNjUsIDAuMSk7XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbi5pbXBvcnRhbnQgPiA6Zmlyc3QtY2hpbGQ6OmJlZm9yZSwgLm1kLXR5cGVzZXQgZGV0YWlscy5pbXBvcnRhbnQgPiA6Zmlyc3QtY2hpbGQ6OmJlZm9yZSwgLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uaGludCA+IDpmaXJzdC1jaGlsZDo6YmVmb3JlLCAubWQtdHlwZXNldCBkZXRhaWxzLmhpbnQgPiA6Zmlyc3QtY2hpbGQ6OmJlZm9yZSwgLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24udGlwID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IGRldGFpbHMudGlwID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDBiZmE1O1xuICBtYXNrLWltYWdlOiB1cmwoXCJ7eyBmaXJlIH19XCIpO1xufVxuLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uZG9uZSwgLm1kLXR5cGVzZXQgZGV0YWlscy5kb25lLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5jaGVjaywgLm1kLXR5cGVzZXQgZGV0YWlscy5jaGVjaywgLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uc3VjY2VzcywgLm1kLXR5cGVzZXQgZGV0YWlscy5zdWNjZXNzIHtcbiAgYm9yZGVyLWxlZnQtY29sb3I6ICMwMGM4NTM7XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbi5kb25lID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCBkZXRhaWxzLmRvbmUgPiA6Zmlyc3QtY2hpbGQsIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uLmNoZWNrID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCBkZXRhaWxzLmNoZWNrID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5zdWNjZXNzID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCBkZXRhaWxzLnN1Y2Nlc3MgPiA6Zmlyc3QtY2hpbGQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDIwMCwgODMsIDAuMSk7XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbi5kb25lID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IGRldGFpbHMuZG9uZSA+IDpmaXJzdC1jaGlsZDo6YmVmb3JlLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5jaGVjayA+IDpmaXJzdC1jaGlsZDo6YmVmb3JlLCAubWQtdHlwZXNldCBkZXRhaWxzLmNoZWNrID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uLnN1Y2Nlc3MgPiA6Zmlyc3QtY2hpbGQ6OmJlZm9yZSwgLm1kLXR5cGVzZXQgZGV0YWlscy5zdWNjZXNzID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDBjODUzO1xuICBtYXNrLWltYWdlOiB1cmwoXCJ7eyBjaGVjay1jaXJjbGUgfX1cIik7XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbi5mYXEsIC5tZC10eXBlc2V0IGRldGFpbHMuZmFxLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5oZWxwLCAubWQtdHlwZXNldCBkZXRhaWxzLmhlbHAsIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uLnF1ZXN0aW9uLCAubWQtdHlwZXNldCBkZXRhaWxzLnF1ZXN0aW9uIHtcbiAgYm9yZGVyLWxlZnQtY29sb3I6ICM2NGRkMTc7XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbi5mYXEgPiA6Zmlyc3QtY2hpbGQsIC5tZC10eXBlc2V0IGRldGFpbHMuZmFxID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5oZWxwID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCBkZXRhaWxzLmhlbHAgPiA6Zmlyc3QtY2hpbGQsIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uLnF1ZXN0aW9uID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCBkZXRhaWxzLnF1ZXN0aW9uID4gOmZpcnN0LWNoaWxkIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgxMDAsIDIyMSwgMjMsIDAuMSk7XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbi5mYXEgPiA6Zmlyc3QtY2hpbGQ6OmJlZm9yZSwgLm1kLXR5cGVzZXQgZGV0YWlscy5mYXEgPiA6Zmlyc3QtY2hpbGQ6OmJlZm9yZSwgLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uaGVscCA+IDpmaXJzdC1jaGlsZDo6YmVmb3JlLCAubWQtdHlwZXNldCBkZXRhaWxzLmhlbHAgPiA6Zmlyc3QtY2hpbGQ6OmJlZm9yZSwgLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24ucXVlc3Rpb24gPiA6Zmlyc3QtY2hpbGQ6OmJlZm9yZSwgLm1kLXR5cGVzZXQgZGV0YWlscy5xdWVzdGlvbiA+IDpmaXJzdC1jaGlsZDo6YmVmb3JlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzY0ZGQxNztcbiAgbWFzay1pbWFnZTogdXJsKFwie3sgaGVscC1jaXJjbGUgfX1cIik7XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbi5hdHRlbnRpb24sIC5tZC10eXBlc2V0IGRldGFpbHMuYXR0ZW50aW9uLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5jYXV0aW9uLCAubWQtdHlwZXNldCBkZXRhaWxzLmNhdXRpb24sIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uLndhcm5pbmcsIC5tZC10eXBlc2V0IGRldGFpbHMud2FybmluZyB7XG4gIGJvcmRlci1sZWZ0LWNvbG9yOiAjZmY5MTAwO1xufVxuLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uYXR0ZW50aW9uID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCBkZXRhaWxzLmF0dGVudGlvbiA+IDpmaXJzdC1jaGlsZCwgLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uY2F1dGlvbiA+IDpmaXJzdC1jaGlsZCwgLm1kLXR5cGVzZXQgZGV0YWlscy5jYXV0aW9uID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi53YXJuaW5nID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCBkZXRhaWxzLndhcm5pbmcgPiA6Zmlyc3QtY2hpbGQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMTQ1LCAwLCAwLjEpO1xufVxuLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uYXR0ZW50aW9uID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IGRldGFpbHMuYXR0ZW50aW9uID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uLmNhdXRpb24gPiA6Zmlyc3QtY2hpbGQ6OmJlZm9yZSwgLm1kLXR5cGVzZXQgZGV0YWlscy5jYXV0aW9uID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uLndhcm5pbmcgPiA6Zmlyc3QtY2hpbGQ6OmJlZm9yZSwgLm1kLXR5cGVzZXQgZGV0YWlscy53YXJuaW5nID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmY5MTAwO1xuICBtYXNrLWltYWdlOiB1cmwoXCJ7eyBhbGVydCB9fVwiKTtcbn1cbi5tZC10eXBlc2V0IC5hZG1vbml0aW9uLm1pc3NpbmcsIC5tZC10eXBlc2V0IGRldGFpbHMubWlzc2luZywgLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uZmFpbCwgLm1kLXR5cGVzZXQgZGV0YWlscy5mYWlsLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5mYWlsdXJlLCAubWQtdHlwZXNldCBkZXRhaWxzLmZhaWx1cmUge1xuICBib3JkZXItbGVmdC1jb2xvcjogI2ZmNTI1Mjtcbn1cbi5tZC10eXBlc2V0IC5hZG1vbml0aW9uLm1pc3NpbmcgPiA6Zmlyc3QtY2hpbGQsIC5tZC10eXBlc2V0IGRldGFpbHMubWlzc2luZyA+IDpmaXJzdC1jaGlsZCwgLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uZmFpbCA+IDpmaXJzdC1jaGlsZCwgLm1kLXR5cGVzZXQgZGV0YWlscy5mYWlsID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5mYWlsdXJlID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCBkZXRhaWxzLmZhaWx1cmUgPiA6Zmlyc3QtY2hpbGQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgODIsIDgyLCAwLjEpO1xufVxuLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24ubWlzc2luZyA+IDpmaXJzdC1jaGlsZDo6YmVmb3JlLCAubWQtdHlwZXNldCBkZXRhaWxzLm1pc3NpbmcgPiA6Zmlyc3QtY2hpbGQ6OmJlZm9yZSwgLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uZmFpbCA+IDpmaXJzdC1jaGlsZDo6YmVmb3JlLCAubWQtdHlwZXNldCBkZXRhaWxzLmZhaWwgPiA6Zmlyc3QtY2hpbGQ6OmJlZm9yZSwgLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uZmFpbHVyZSA+IDpmaXJzdC1jaGlsZDo6YmVmb3JlLCAubWQtdHlwZXNldCBkZXRhaWxzLmZhaWx1cmUgPiA6Zmlyc3QtY2hpbGQ6OmJlZm9yZSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZjUyNTI7XG4gIG1hc2staW1hZ2U6IHVybChcInt7IGNsb3NlLWNpcmNsZSB9fVwiKTtcbn1cbi5tZC10eXBlc2V0IC5hZG1vbml0aW9uLmVycm9yLCAubWQtdHlwZXNldCBkZXRhaWxzLmVycm9yLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5kYW5nZXIsIC5tZC10eXBlc2V0IGRldGFpbHMuZGFuZ2VyIHtcbiAgYm9yZGVyLWxlZnQtY29sb3I6ICNmZjE3NDQ7XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbi5lcnJvciA+IDpmaXJzdC1jaGlsZCwgLm1kLXR5cGVzZXQgZGV0YWlscy5lcnJvciA+IDpmaXJzdC1jaGlsZCwgLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uZGFuZ2VyID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCBkZXRhaWxzLmRhbmdlciA+IDpmaXJzdC1jaGlsZCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyMywgNjgsIDAuMSk7XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbi5lcnJvciA+IDpmaXJzdC1jaGlsZDo6YmVmb3JlLCAubWQtdHlwZXNldCBkZXRhaWxzLmVycm9yID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uLmRhbmdlciA+IDpmaXJzdC1jaGlsZDo6YmVmb3JlLCAubWQtdHlwZXNldCBkZXRhaWxzLmRhbmdlciA+IDpmaXJzdC1jaGlsZDo6YmVmb3JlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmMTc0NDtcbiAgbWFzay1pbWFnZTogdXJsKFwie3sgZmxhc2gtY2lyY2xlIH19XCIpO1xufVxuLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uYnVnLCAubWQtdHlwZXNldCBkZXRhaWxzLmJ1ZyB7XG4gIGJvcmRlci1sZWZ0LWNvbG9yOiAjZjUwMDU3O1xufVxuLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uYnVnID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCBkZXRhaWxzLmJ1ZyA+IDpmaXJzdC1jaGlsZCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjQ1LCAwLCA4NywgMC4xKTtcbn1cbi5tZC10eXBlc2V0IC5hZG1vbml0aW9uLmJ1ZyA+IDpmaXJzdC1jaGlsZDo6YmVmb3JlLCAubWQtdHlwZXNldCBkZXRhaWxzLmJ1ZyA+IDpmaXJzdC1jaGlsZDo6YmVmb3JlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y1MDA1NztcbiAgbWFzay1pbWFnZTogdXJsKFwie3sgYnVnIH19XCIpO1xufVxuLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uZXhhbXBsZSwgLm1kLXR5cGVzZXQgZGV0YWlscy5leGFtcGxlIHtcbiAgYm9yZGVyLWxlZnQtY29sb3I6ICM2NTFmZmY7XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbi5leGFtcGxlID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCBkZXRhaWxzLmV4YW1wbGUgPiA6Zmlyc3QtY2hpbGQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDEwMSwgMzEsIDI1NSwgMC4xKTtcbn1cbi5tZC10eXBlc2V0IC5hZG1vbml0aW9uLmV4YW1wbGUgPiA6Zmlyc3QtY2hpbGQ6OmJlZm9yZSwgLm1kLXR5cGVzZXQgZGV0YWlscy5leGFtcGxlID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNjUxZmZmO1xuICBtYXNrLWltYWdlOiB1cmwoXCJ7eyBmb3JtYXQtbGlzdC1udW1iZXJlZCB9fVwiKTtcbn1cbi5tZC10eXBlc2V0IC5hZG1vbml0aW9uLmNpdGUsIC5tZC10eXBlc2V0IGRldGFpbHMuY2l0ZSwgLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24ucXVvdGUsIC5tZC10eXBlc2V0IGRldGFpbHMucXVvdGUge1xuICBib3JkZXItbGVmdC1jb2xvcjogIzllOWU5ZTtcbn1cbi5tZC10eXBlc2V0IC5hZG1vbml0aW9uLmNpdGUgPiA6Zmlyc3QtY2hpbGQsIC5tZC10eXBlc2V0IGRldGFpbHMuY2l0ZSA+IDpmaXJzdC1jaGlsZCwgLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24ucXVvdGUgPiA6Zmlyc3QtY2hpbGQsIC5tZC10eXBlc2V0IGRldGFpbHMucXVvdGUgPiA6Zmlyc3QtY2hpbGQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDE1OCwgMTU4LCAxNTgsIDAuMSk7XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbi5jaXRlID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IGRldGFpbHMuY2l0ZSA+IDpmaXJzdC1jaGlsZDo6YmVmb3JlLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5xdW90ZSA+IDpmaXJzdC1jaGlsZDo6YmVmb3JlLCAubWQtdHlwZXNldCBkZXRhaWxzLnF1b3RlID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjOWU5ZTllO1xuICBtYXNrLWltYWdlOiB1cmwoXCJ7eyBmb3JtYXQtcXVvdGUtY2xvc2UgfX1cIik7XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbi10aXRsZSwgLm1kLXR5cGVzZXQgc3VtbWFyeSB7XG4gIG1hcmdpbjogMCAtMC42cmVtO1xuICBwYWRkaW5nOiAwLjRyZW0gMC42cmVtIDAuNHJlbSAycmVtO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDY4LCAxMzgsIDI1NSwgMC4xKTtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbn1cbltkaXI9cnRsXSAubWQtdHlwZXNldCAuYWRtb25pdGlvbi10aXRsZSwgW2Rpcj1ydGxdIC5tZC10eXBlc2V0IHN1bW1hcnkge1xuICBwYWRkaW5nOiAwLjRyZW0gMnJlbSAwLjRyZW0gMC42cmVtO1xufVxuLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24tdGl0bGU6bGFzdC1jaGlsZCwgLm1kLXR5cGVzZXQgc3VtbWFyeTpsYXN0LWNoaWxkIHtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbn1cbi5tZC10eXBlc2V0IC5hZG1vbml0aW9uLXRpdGxlOjpiZWZvcmUsIC5tZC10eXBlc2V0IHN1bW1hcnk6OmJlZm9yZSB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgd2lkdGg6IDFyZW07XG4gIGhlaWdodDogMXJlbTtcbiAgbWFyZ2luLWxlZnQ6IC0xLjRyZW07XG4gIGJhY2tncm91bmQtY29sb3I6ICM0NDhhZmY7XG4gIG1hc2staW1hZ2U6IHVybChcInt7IHBlbmNpbCB9fVwiKTtcbiAgY29udGVudDogXCJcIjtcbn1cbltkaXI9cnRsXSAubWQtdHlwZXNldCAuYWRtb25pdGlvbi10aXRsZTo6YmVmb3JlLCBbZGlyPXJ0bF0gLm1kLXR5cGVzZXQgc3VtbWFyeTo6YmVmb3JlIHtcbiAgbWFyZ2luLXJpZ2h0OiAtMS40cmVtO1xuICBtYXJnaW4tbGVmdDogaW5pdGlhbDtcbn1cblxuLmNvZGVoaWxpdGUgLm8sIC5oaWdobGlnaHQgLm8ge1xuICBjb2xvcjogaW5oZXJpdDtcbn1cbi5jb2RlaGlsaXRlIC5vdywgLmhpZ2hsaWdodCAub3cge1xuICBjb2xvcjogaW5oZXJpdDtcbn1cbi5jb2RlaGlsaXRlIC5nZSwgLmhpZ2hsaWdodCAuZ2Uge1xuICBjb2xvcjogIzAwMDAwMDtcbn1cbi5jb2RlaGlsaXRlIC5nciwgLmhpZ2hsaWdodCAuZ3Ige1xuICBjb2xvcjogI0FBMDAwMDtcbn1cbi5jb2RlaGlsaXRlIC5naCwgLmhpZ2hsaWdodCAuZ2gge1xuICBjb2xvcjogIzk5OTk5OTtcbn1cbi5jb2RlaGlsaXRlIC5nbywgLmhpZ2hsaWdodCAuZ28ge1xuICBjb2xvcjogIzg4ODg4ODtcbn1cbi5jb2RlaGlsaXRlIC5ncCwgLmhpZ2hsaWdodCAuZ3Age1xuICBjb2xvcjogIzU1NTU1NTtcbn1cbi5jb2RlaGlsaXRlIC5ncywgLmhpZ2hsaWdodCAuZ3Mge1xuICBjb2xvcjogaW5oZXJpdDtcbn1cbi5jb2RlaGlsaXRlIC5ndSwgLmhpZ2hsaWdodCAuZ3Uge1xuICBjb2xvcjogI0FBQUFBQTtcbn1cbi5jb2RlaGlsaXRlIC5ndCwgLmhpZ2hsaWdodCAuZ3Qge1xuICBjb2xvcjogI0FBMDAwMDtcbn1cbi5jb2RlaGlsaXRlIC5nZCwgLmhpZ2hsaWdodCAuZ2Qge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZEREREO1xufVxuLmNvZGVoaWxpdGUgLmdpLCAuaGlnaGxpZ2h0IC5naSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNEREZGREQ7XG59XG4uY29kZWhpbGl0ZSAuaywgLmhpZ2hsaWdodCAuayB7XG4gIGNvbG9yOiAjM0I3OEU3O1xufVxuLmNvZGVoaWxpdGUgLmtjLCAuaGlnaGxpZ2h0IC5rYyB7XG4gIGNvbG9yOiAjQTcxRDVEO1xufVxuLmNvZGVoaWxpdGUgLmtkLCAuaGlnaGxpZ2h0IC5rZCB7XG4gIGNvbG9yOiAjM0I3OEU3O1xufVxuLmNvZGVoaWxpdGUgLmtuLCAuaGlnaGxpZ2h0IC5rbiB7XG4gIGNvbG9yOiAjM0I3OEU3O1xufVxuLmNvZGVoaWxpdGUgLmtwLCAuaGlnaGxpZ2h0IC5rcCB7XG4gIGNvbG9yOiAjQTcxRDVEO1xufVxuLmNvZGVoaWxpdGUgLmtyLCAuaGlnaGxpZ2h0IC5rciB7XG4gIGNvbG9yOiAjM0U2MUEyO1xufVxuLmNvZGVoaWxpdGUgLmt0LCAuaGlnaGxpZ2h0IC5rdCB7XG4gIGNvbG9yOiAjM0U2MUEyO1xufVxuLmNvZGVoaWxpdGUgLmMsIC5oaWdobGlnaHQgLmMge1xuICBjb2xvcjogIzk5OTk5OTtcbn1cbi5jb2RlaGlsaXRlIC5jbSwgLmhpZ2hsaWdodCAuY20ge1xuICBjb2xvcjogIzk5OTk5OTtcbn1cbi5jb2RlaGlsaXRlIC5jcCwgLmhpZ2hsaWdodCAuY3Age1xuICBjb2xvcjogIzY2NjY2Njtcbn1cbi5jb2RlaGlsaXRlIC5jMSwgLmhpZ2hsaWdodCAuYzEge1xuICBjb2xvcjogIzk5OTk5OTtcbn1cbi5jb2RlaGlsaXRlIC5jaCwgLmhpZ2hsaWdodCAuY2gge1xuICBjb2xvcjogIzk5OTk5OTtcbn1cbi5jb2RlaGlsaXRlIC5jcywgLmhpZ2hsaWdodCAuY3Mge1xuICBjb2xvcjogIzk5OTk5OTtcbn1cbi5jb2RlaGlsaXRlIC5uYSwgLmhpZ2hsaWdodCAubmEge1xuICBjb2xvcjogI0MyMTg1Qjtcbn1cbi5jb2RlaGlsaXRlIC5uYiwgLmhpZ2hsaWdodCAubmIge1xuICBjb2xvcjogI0MyMTg1Qjtcbn1cbi5jb2RlaGlsaXRlIC5icCwgLmhpZ2hsaWdodCAuYnAge1xuICBjb2xvcjogIzNFNjFBMjtcbn1cbi5jb2RlaGlsaXRlIC5uYywgLmhpZ2hsaWdodCAubmMge1xuICBjb2xvcjogI0MyMTg1Qjtcbn1cbi5jb2RlaGlsaXRlIC5ubywgLmhpZ2hsaWdodCAubm8ge1xuICBjb2xvcjogIzNFNjFBMjtcbn1cbi5jb2RlaGlsaXRlIC5uZCwgLmhpZ2hsaWdodCAubmQge1xuICBjb2xvcjogIzY2NjY2Njtcbn1cbi5jb2RlaGlsaXRlIC5uaSwgLmhpZ2hsaWdodCAubmkge1xuICBjb2xvcjogIzY2NjY2Njtcbn1cbi5jb2RlaGlsaXRlIC5uZSwgLmhpZ2hsaWdodCAubmUge1xuICBjb2xvcjogI0MyMTg1Qjtcbn1cbi5jb2RlaGlsaXRlIC5uZiwgLmhpZ2hsaWdodCAubmYge1xuICBjb2xvcjogI0MyMTg1Qjtcbn1cbi5jb2RlaGlsaXRlIC5ubCwgLmhpZ2hsaWdodCAubmwge1xuICBjb2xvcjogIzNCNTE3OTtcbn1cbi5jb2RlaGlsaXRlIC5ubiwgLmhpZ2hsaWdodCAubm4ge1xuICBjb2xvcjogI0VDNDA3QTtcbn1cbi5jb2RlaGlsaXRlIC5udCwgLmhpZ2hsaWdodCAubnQge1xuICBjb2xvcjogIzNCNzhFNztcbn1cbi5jb2RlaGlsaXRlIC5udiwgLmhpZ2hsaWdodCAubnYge1xuICBjb2xvcjogIzNFNjFBMjtcbn1cbi5jb2RlaGlsaXRlIC52YywgLmhpZ2hsaWdodCAudmMge1xuICBjb2xvcjogIzNFNjFBMjtcbn1cbi5jb2RlaGlsaXRlIC52ZywgLmhpZ2hsaWdodCAudmcge1xuICBjb2xvcjogIzNFNjFBMjtcbn1cbi5jb2RlaGlsaXRlIC52aSwgLmhpZ2hsaWdodCAudmkge1xuICBjb2xvcjogIzNFNjFBMjtcbn1cbi5jb2RlaGlsaXRlIC5ueCwgLmhpZ2hsaWdodCAubngge1xuICBjb2xvcjogI0VDNDA3QTtcbn1cbi5jb2RlaGlsaXRlIC5tLCAuaGlnaGxpZ2h0IC5tIHtcbiAgY29sb3I6ICNFNzRDM0M7XG59XG4uY29kZWhpbGl0ZSAubWYsIC5oaWdobGlnaHQgLm1mIHtcbiAgY29sb3I6ICNFNzRDM0M7XG59XG4uY29kZWhpbGl0ZSAubWgsIC5oaWdobGlnaHQgLm1oIHtcbiAgY29sb3I6ICNFNzRDM0M7XG59XG4uY29kZWhpbGl0ZSAubWksIC5oaWdobGlnaHQgLm1pIHtcbiAgY29sb3I6ICNFNzRDM0M7XG59XG4uY29kZWhpbGl0ZSAuaWwsIC5oaWdobGlnaHQgLmlsIHtcbiAgY29sb3I6ICNFNzRDM0M7XG59XG4uY29kZWhpbGl0ZSAubW8sIC5oaWdobGlnaHQgLm1vIHtcbiAgY29sb3I6ICNFNzRDM0M7XG59XG4uY29kZWhpbGl0ZSAucywgLmhpZ2hsaWdodCAucyB7XG4gIGNvbG9yOiAjMEQ5MDRGO1xufVxuLmNvZGVoaWxpdGUgLnNiLCAuaGlnaGxpZ2h0IC5zYiB7XG4gIGNvbG9yOiAjMEQ5MDRGO1xufVxuLmNvZGVoaWxpdGUgLnNjLCAuaGlnaGxpZ2h0IC5zYyB7XG4gIGNvbG9yOiAjMEQ5MDRGO1xufVxuLmNvZGVoaWxpdGUgLnNkLCAuaGlnaGxpZ2h0IC5zZCB7XG4gIGNvbG9yOiAjOTk5OTk5O1xufVxuLmNvZGVoaWxpdGUgLnMyLCAuaGlnaGxpZ2h0IC5zMiB7XG4gIGNvbG9yOiAjMEQ5MDRGO1xufVxuLmNvZGVoaWxpdGUgLnNlLCAuaGlnaGxpZ2h0IC5zZSB7XG4gIGNvbG9yOiAjMTgzNjkxO1xufVxuLmNvZGVoaWxpdGUgLnNoLCAuaGlnaGxpZ2h0IC5zaCB7XG4gIGNvbG9yOiAjMTgzNjkxO1xufVxuLmNvZGVoaWxpdGUgLnNpLCAuaGlnaGxpZ2h0IC5zaSB7XG4gIGNvbG9yOiAjMTgzNjkxO1xufVxuLmNvZGVoaWxpdGUgLnN4LCAuaGlnaGxpZ2h0IC5zeCB7XG4gIGNvbG9yOiAjMTgzNjkxO1xufVxuLmNvZGVoaWxpdGUgLnNyLCAuaGlnaGxpZ2h0IC5zciB7XG4gIGNvbG9yOiAjMDA5OTI2O1xufVxuLmNvZGVoaWxpdGUgLnMxLCAuaGlnaGxpZ2h0IC5zMSB7XG4gIGNvbG9yOiAjMEQ5MDRGO1xufVxuLmNvZGVoaWxpdGUgLnNzLCAuaGlnaGxpZ2h0IC5zcyB7XG4gIGNvbG9yOiAjMEQ5MDRGO1xufVxuLmNvZGVoaWxpdGUgLmVyciwgLmhpZ2hsaWdodCAuZXJyIHtcbiAgY29sb3I6ICNBNjE3MTc7XG59XG4uY29kZWhpbGl0ZSAudywgLmhpZ2hsaWdodCAudyB7XG4gIGNvbG9yOiB0cmFuc3BhcmVudDtcbn1cbi5jb2RlaGlsaXRlIC5obGwsIC5oaWdobGlnaHQgLmhsbCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBtYXJnaW46IDAgLTAuNnJlbTtcbiAgcGFkZGluZzogMCAwLjZyZW07XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyMzUsIDU5LCAwLjUpO1xufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNDQuOTM3NWVtKSB7XG4gIC5jb2RlaGlsaXRlIC5obGwsIC5oaWdobGlnaHQgLmhsbCB7XG4gICAgbWFyZ2luOiAwIC0wLjhyZW07XG4gICAgcGFkZGluZzogMCAwLjhyZW07XG4gIH1cbn1cblxuLmNvZGVoaWxpdGV0YWJsZSwgLmhpZ2hsaWdodHRhYmxlIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4uY29kZWhpbGl0ZXRhYmxlIHRib2R5LCAuaGlnaGxpZ2h0dGFibGUgdGJvZHksXG4uY29kZWhpbGl0ZXRhYmxlIHRkLFxuLmhpZ2hsaWdodHRhYmxlIHRkIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBhZGRpbmc6IDA7XG59XG4uY29kZWhpbGl0ZXRhYmxlIHRyLCAuaGlnaGxpZ2h0dGFibGUgdHIge1xuICBkaXNwbGF5OiBmbGV4O1xufVxuLmNvZGVoaWxpdGV0YWJsZSBwcmUsIC5oaWdobGlnaHR0YWJsZSBwcmUsXG4uY29kZWhpbGl0ZXRhYmxlIC5saW5lbm9kaXYsXG4uaGlnaGxpZ2h0dGFibGUgLmxpbmVub2RpdiB7XG4gIG1hcmdpbjogMDtcbiAgYm9yZGVyLXJhZGl1czogMDtcbn1cbi5jb2RlaGlsaXRldGFibGUgLmxpbmVub2RpdiwgLmhpZ2hsaWdodHRhYmxlIC5saW5lbm9kaXYge1xuICBwYWRkaW5nOiAwLjUyNXJlbSAwLjZyZW07XG59XG4uY29kZWhpbGl0ZXRhYmxlIC5saW5lbm9zLCAuaGlnaGxpZ2h0dGFibGUgLmxpbmVub3Mge1xuICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlcik7XG4gIGJveC1zaGFkb3c6IGluc2V0IDAgMCAwIDAuMDVyZW0gdmFyKC0tbWQtY29kZS1iZy1jb2xvcik7XG4gIHVzZXItc2VsZWN0OiBub25lO1xufVxuLmNvZGVoaWxpdGV0YWJsZSAubGluZW5vcyBwcmUsIC5oaWdobGlnaHR0YWJsZSAubGluZW5vcyBwcmUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgY29sb3I6IGluaGVyaXQ7XG4gIHRleHQtYWxpZ246IHJpZ2h0O1xufVxuLmNvZGVoaWxpdGV0YWJsZSAuY29kZSwgLmhpZ2hsaWdodHRhYmxlIC5jb2RlIHtcbiAgZmxleDogMTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cblxuLm1kLXR5cGVzZXQgPiAuY29kZWhpbGl0ZXRhYmxlLCAubWQtdHlwZXNldCA+IC5oaWdobGlnaHR0YWJsZSB7XG4gIG1hcmdpbjogMWVtIDA7XG4gIGJvcmRlci1yYWRpdXM6IDAuMmVtO1xufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNDQuOTM3NWVtKSB7XG4gIC5tZC10eXBlc2V0ID4gLmNvZGVoaWxpdGUsIC5tZC10eXBlc2V0ID4gLmhpZ2hsaWdodCB7XG4gICAgbWFyZ2luOiAxZW0gLTAuOHJlbTtcbiAgfVxuICAubWQtdHlwZXNldCA+IC5jb2RlaGlsaXRlIGNvZGUsIC5tZC10eXBlc2V0ID4gLmhpZ2hsaWdodCBjb2RlIHtcbiAgICBwYWRkaW5nOiAwLjUyNXJlbSAwLjhyZW07XG4gIH1cbiAgLm1kLXR5cGVzZXQgPiAuY29kZWhpbGl0ZXRhYmxlLCAubWQtdHlwZXNldCA+IC5oaWdobGlnaHR0YWJsZSB7XG4gICAgbWFyZ2luOiAxZW0gLTAuOHJlbTtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xuICB9XG4gIC5tZC10eXBlc2V0ID4gLmNvZGVoaWxpdGV0YWJsZSAubGluZW5vZGl2LCAubWQtdHlwZXNldCA+IC5oaWdobGlnaHR0YWJsZSAubGluZW5vZGl2IHtcbiAgICBwYWRkaW5nOiAwLjVyZW0gMC44cmVtO1xuICB9XG59XG5cbi5tZC10eXBlc2V0IFtpZF49XCJmbnJlZjpcIl0ge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG59XG4ubWQtdHlwZXNldCBbaWRePVwiZm5yZWY6XCJdOnRhcmdldCB7XG4gIG1hcmdpbi10b3A6IC0zLjhyZW07XG4gIHBhZGRpbmctdG9wOiAzLjhyZW07XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xufVxuLm1kLXR5cGVzZXQgW2lkXj1cImZuOlwiXTo6YmVmb3JlIHtcbiAgZGlzcGxheTogbm9uZTtcbiAgaGVpZ2h0OiAwO1xuICBjb250ZW50OiBcIlwiO1xufVxuLm1kLXR5cGVzZXQgW2lkXj1cImZuOlwiXTp0YXJnZXQ6OmJlZm9yZSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBtYXJnaW4tdG9wOiAtMy41cmVtO1xuICBwYWRkaW5nLXRvcDogMy41cmVtO1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbn1cbi5tZC10eXBlc2V0IC5mb290bm90ZSB7XG4gIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodCk7XG4gIGZvbnQtc2l6ZTogMC42NHJlbTtcbn1cbi5tZC10eXBlc2V0IC5mb290bm90ZSBvbCB7XG4gIG1hcmdpbi1sZWZ0OiAwO1xufVxuLm1kLXR5cGVzZXQgLmZvb3Rub3RlIGxpIHtcbiAgdHJhbnNpdGlvbjogY29sb3IgMjUwbXM7XG59XG4ubWQtdHlwZXNldCAuZm9vdG5vdGUgbGk6dGFyZ2V0IHtcbiAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3IpO1xufVxuLm1kLXR5cGVzZXQgLmZvb3Rub3RlIGxpIDpmaXJzdC1jaGlsZCB7XG4gIG1hcmdpbi10b3A6IDA7XG59XG4ubWQtdHlwZXNldCAuZm9vdG5vdGUgbGk6aG92ZXIgLmZvb3Rub3RlLWJhY2tyZWYsIC5tZC10eXBlc2V0IC5mb290bm90ZSBsaTp0YXJnZXQgLmZvb3Rub3RlLWJhY2tyZWYge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCk7XG4gIG9wYWNpdHk6IDE7XG59XG4ubWQtdHlwZXNldCAuZm9vdG5vdGUgbGk6aG92ZXIgLmZvb3Rub3RlLWJhY2tyZWY6aG92ZXIsIC5tZC10eXBlc2V0IC5mb290bm90ZSBsaTp0YXJnZXQgLmZvb3Rub3RlLWJhY2tyZWYge1xuICBjb2xvcjogdmFyKC0tbWQtYWNjZW50LWZnLWNvbG9yKTtcbn1cbi5tZC10eXBlc2V0IC5mb290bm90ZS1yZWYge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHBvaW50ZXItZXZlbnRzOiBpbml0aWFsO1xufVxuLm1kLXR5cGVzZXQgLmZvb3Rub3RlLXJlZjo6YmVmb3JlIHtcbiAgZGlzcGxheTogaW5saW5lO1xuICBtYXJnaW46IDAgMC4yZW07XG4gIGJvcmRlci1sZWZ0OiAwLjA1cmVtIHNvbGlkIHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXIpO1xuICBmb250LXNpemU6IDEuMjVlbTtcbiAgY29udGVudDogXCJcIjtcbiAgdmVydGljYWwtYWxpZ246IC0wLjI1cmVtO1xufVxuLm1kLXR5cGVzZXQgLmZvb3Rub3RlLWJhY2tyZWYge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwLjI1cmVtKTtcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDI1MG1zIDI1MG1zLCBjb2xvciAyNTBtcywgb3BhY2l0eSAxMjVtcyAyNTBtcztcbiAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXIpO1xuICBmb250LXNpemU6IDA7XG4gIG9wYWNpdHk6IDA7XG4gIHZlcnRpY2FsLWFsaWduOiB0ZXh0LWJvdHRvbTtcbn1cbltkaXI9cnRsXSAubWQtdHlwZXNldCAuZm9vdG5vdGUtYmFja3JlZiB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtMC4yNXJlbSk7XG59XG4ubWQtdHlwZXNldCAuZm9vdG5vdGUtYmFja3JlZjo6YmVmb3JlIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB3aWR0aDogMC44cmVtO1xuICBoZWlnaHQ6IDAuOHJlbTtcbiAgYmFja2dyb3VuZC1jb2xvcjogY3VycmVudENvbG9yO1xuICBtYXNrLWltYWdlOiB1cmwoXCJ7eyBrZXlib2FyZC1yZXR1cm4gfX1cIik7XG4gIGNvbnRlbnQ6IFwiXCI7XG59XG5bZGlyPXJ0bF0gLm1kLXR5cGVzZXQgLmZvb3Rub3RlLWJhY2tyZWY6OmJlZm9yZSBzdmcge1xuICB0cmFuc2Zvcm06IHNjYWxlWCgtMSk7XG59XG5cbi5tZC10eXBlc2V0IC5oZWFkZXJsaW5rIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBtYXJnaW4tbGVmdDogMC41cmVtO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAwLjI1cmVtKTtcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDI1MG1zIDI1MG1zLCBjb2xvciAyNTBtcywgb3BhY2l0eSAxMjVtcyAyNTBtcywgdmlzaWJpbGl0eSAwbXMgNTAwbXM7XG4gIG9wYWNpdHk6IDA7XG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcbn1cbltkaXI9cnRsXSAubWQtdHlwZXNldCAuaGVhZGVybGluayB7XG4gIG1hcmdpbi1yaWdodDogMC41cmVtO1xuICBtYXJnaW4tbGVmdDogaW5pdGlhbDtcbn1cbmh0bWwgYm9keSAubWQtdHlwZXNldCAuaGVhZGVybGluayB7XG4gIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodGVyKTtcbn1cbkBtZWRpYSBwcmludCB7XG4gIC5tZC10eXBlc2V0IC5oZWFkZXJsaW5rIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG4ubWQtdHlwZXNldCA6aG92ZXIgLmhlYWRlcmxpbmssXG4ubWQtdHlwZXNldCA6dGFyZ2V0IC5oZWFkZXJsaW5rLFxuLm1kLXR5cGVzZXQgLmhlYWRlcmxpbms6Zm9jdXMge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAwKTtcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDI1MG1zIDI1MG1zLCBjb2xvciAyNTBtcywgb3BhY2l0eSAxMjVtcyAyNTBtcywgdmlzaWJpbGl0eSAwbXM7XG4gIG9wYWNpdHk6IDE7XG4gIHZpc2liaWxpdHk6IHZpc2libGU7XG59XG4ubWQtdHlwZXNldCAuaGVhZGVybGluazpmb2N1cyxcbi5tZC10eXBlc2V0IC5oZWFkZXJsaW5rOmhvdmVyLFxuLm1kLXR5cGVzZXQgOnRhcmdldCAuaGVhZGVybGluayB7XG4gIGNvbG9yOiB2YXIoLS1tZC1hY2NlbnQtZmctY29sb3IpO1xufVxuLm1kLXR5cGVzZXQgaDNbaWRdOjpiZWZvcmUsIC5tZC10eXBlc2V0IGgyW2lkXTo6YmVmb3JlLCAubWQtdHlwZXNldCBoMVtpZF06OmJlZm9yZSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBtYXJnaW4tdG9wOiAtMC40cmVtO1xuICBwYWRkaW5nLXRvcDogMC40cmVtO1xuICBjb250ZW50OiBcIlwiO1xufVxuLm1kLXR5cGVzZXQgaDNbaWRdOnRhcmdldDo6YmVmb3JlLCAubWQtdHlwZXNldCBoMltpZF06dGFyZ2V0OjpiZWZvcmUsIC5tZC10eXBlc2V0IGgxW2lkXTp0YXJnZXQ6OmJlZm9yZSB7XG4gIG1hcmdpbi10b3A6IC0zLjRyZW07XG4gIHBhZGRpbmctdG9wOiAzLjRyZW07XG59XG4ubWQtdHlwZXNldCBoNFtpZF06OmJlZm9yZSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBtYXJnaW4tdG9wOiAtMC40NXJlbTtcbiAgcGFkZGluZy10b3A6IDAuNDVyZW07XG4gIGNvbnRlbnQ6IFwiXCI7XG59XG4ubWQtdHlwZXNldCBoNFtpZF06dGFyZ2V0OjpiZWZvcmUge1xuICBtYXJnaW4tdG9wOiAtMy40NXJlbTtcbiAgcGFkZGluZy10b3A6IDMuNDVyZW07XG59XG4ubWQtdHlwZXNldCBoNltpZF06OmJlZm9yZSwgLm1kLXR5cGVzZXQgaDVbaWRdOjpiZWZvcmUge1xuICBkaXNwbGF5OiBibG9jaztcbiAgbWFyZ2luLXRvcDogLTAuNnJlbTtcbiAgcGFkZGluZy10b3A6IDAuNnJlbTtcbiAgY29udGVudDogXCJcIjtcbn1cbi5tZC10eXBlc2V0IGg2W2lkXTp0YXJnZXQ6OmJlZm9yZSwgLm1kLXR5cGVzZXQgaDVbaWRdOnRhcmdldDo6YmVmb3JlIHtcbiAgbWFyZ2luLXRvcDogLTMuNnJlbTtcbiAgcGFkZGluZy10b3A6IDMuNnJlbTtcbn1cbi5tZC10eXBlc2V0IC5NSlhjLWRpc3BsYXkge1xuICBtYXJnaW46IDAuNzVlbSAwO1xuICBwYWRkaW5nOiAwLjc1ZW0gMDtcbiAgb3ZlcmZsb3c6IGF1dG87XG4gIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDtcbn1cbkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDQ0LjkzNzVlbSkge1xuICAubWQtdHlwZXNldCA+IHAgPiAuTUpYYy1kaXNwbGF5IHtcbiAgICBtYXJnaW46IDAuNzVlbSAtMC44cmVtO1xuICAgIHBhZGRpbmc6IDAuMjVlbSAwLjhyZW07XG4gIH1cbn1cbi5tZC10eXBlc2V0IC5NYXRoSmF4X0NIVE1MIHtcbiAgb3V0bGluZTogMDtcbn1cblxuLm1kLXR5cGVzZXQgZGVsLmNyaXRpYyxcbi5tZC10eXBlc2V0IGlucy5jcml0aWMsXG4ubWQtdHlwZXNldCAuY3JpdGljLmNvbW1lbnQge1xuICBtYXJnaW46IDAgMC4yNWVtO1xuICBwYWRkaW5nOiAwLjA2MjVlbSAwO1xuICBib3JkZXItcmFkaXVzOiAwLjFyZW07XG4gIGJveC1kZWNvcmF0aW9uLWJyZWFrOiBjbG9uZTtcbn1cbi5tZC10eXBlc2V0IGRlbC5jcml0aWMge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZEREREO1xuICBib3gtc2hhZG93OiAwLjI1ZW0gMCAwICNGRkREREQsIC0wLjI1ZW0gMCAwICNGRkREREQ7XG59XG4ubWQtdHlwZXNldCBpbnMuY3JpdGljIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0RERkZERDtcbiAgYm94LXNoYWRvdzogMC4yNWVtIDAgMCAjRERGRkRELCAtMC4yNWVtIDAgMCAjRERGRkREO1xufVxuLm1kLXR5cGVzZXQgLmNyaXRpYy5jb21tZW50IHtcbiAgY29sb3I6ICM5OTk5OTk7XG59XG4ubWQtdHlwZXNldCAuY3JpdGljLmNvbW1lbnQ6OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiLyogXCI7XG59XG4ubWQtdHlwZXNldCAuY3JpdGljLmNvbW1lbnQ6OmFmdGVyIHtcbiAgY29udGVudDogXCIgKi9cIjtcbn1cbi5tZC10eXBlc2V0IC5jcml0aWMuYmxvY2sge1xuICBkaXNwbGF5OiBibG9jaztcbiAgbWFyZ2luOiAxZW0gMDtcbiAgcGFkZGluZy1yaWdodDogMC44cmVtO1xuICBwYWRkaW5nLWxlZnQ6IDAuOHJlbTtcbiAgYm94LXNoYWRvdzogbm9uZTtcbn1cbi5tZC10eXBlc2V0IC5jcml0aWMuYmxvY2sgOmZpcnN0LWNoaWxkIHtcbiAgbWFyZ2luLXRvcDogMC41ZW07XG59XG4ubWQtdHlwZXNldCAuY3JpdGljLmJsb2NrIDpsYXN0LWNoaWxkIHtcbiAgbWFyZ2luLWJvdHRvbTogMC41ZW07XG59XG5cbi5tZC10eXBlc2V0IGRldGFpbHMge1xuICBkaXNwbGF5OiBibG9jaztcbiAgcGFkZGluZy10b3A6IDA7XG59XG4ubWQtdHlwZXNldCBkZXRhaWxzW29wZW5dID4gc3VtbWFyeTo6YWZ0ZXIge1xuICB0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpO1xufVxuLm1kLXR5cGVzZXQgZGV0YWlsczpub3QoW29wZW5dKSB7XG4gIHBhZGRpbmctYm90dG9tOiAwO1xufVxuLm1kLXR5cGVzZXQgZGV0YWlsczpub3QoW29wZW5dKSA+IHN1bW1hcnkge1xuICBib3JkZXItYm90dG9tOiBub25lO1xufVxuLm1kLXR5cGVzZXQgZGV0YWlscyBzdW1tYXJ5IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBwYWRkaW5nLXJpZ2h0OiAycmVtO1xufVxuW2Rpcj1ydGxdIC5tZC10eXBlc2V0IGRldGFpbHMgc3VtbWFyeSB7XG4gIHBhZGRpbmctbGVmdDogMnJlbTtcbn1cbi5tZC10eXBlc2V0IHN1bW1hcnkge1xuICBkaXNwbGF5OiBibG9jaztcbiAgb3V0bGluZTogbm9uZTtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLm1kLXR5cGVzZXQgc3VtbWFyeTo6LXdlYmtpdC1kZXRhaWxzLW1hcmtlciB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4ubWQtdHlwZXNldCBzdW1tYXJ5OjphZnRlciB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgcmlnaHQ6IDAuNnJlbTtcbiAgd2lkdGg6IDFyZW07XG4gIGhlaWdodDogMXJlbTtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlcik7XG4gIG1hc2staW1hZ2U6IHVybChcInt7IGNoZXZyb24tZG93biB9fVwiKTtcbiAgY29udGVudDogXCJcIjtcbn1cbltkaXI9cnRsXSAubWQtdHlwZXNldCBzdW1tYXJ5OjphZnRlciB7XG4gIHJpZ2h0OiBpbml0aWFsO1xuICBsZWZ0OiAwLjZyZW07XG59XG5cbi5tZC10eXBlc2V0IC5lbW9qaW9uZSxcbi5tZC10eXBlc2V0IC50d2Vtb2ppLFxuLm1kLXR5cGVzZXQgLmdlbW9qaSB7XG4gIHdpZHRoOiAxcmVtO1xuICB2ZXJ0aWNhbC1hbGlnbjogdGV4dC10b3A7XG59XG5cbi5oaWdobGlnaHQgW2RhdGEtbGluZW5vc106OmJlZm9yZSB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgcG9zaXRpb246IHN0aWNreTtcbiAgbGVmdDogLTAuNnJlbTtcbiAgbWFyZ2luLXJpZ2h0OiAwLjZyZW07XG4gIG1hcmdpbi1sZWZ0OiAtMC42cmVtO1xuICBwYWRkaW5nLWxlZnQ6IDAuNnJlbTtcbiAgYm9yZGVyLXJpZ2h0OiAwLjA1cmVtIHNvbGlkIHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXN0KTtcbiAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXIpO1xuICBjb250ZW50OiBhdHRyKGRhdGEtbGluZW5vcyk7XG4gIHVzZXItc2VsZWN0OiBub25lO1xufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNDQuOTM3NWVtKSB7XG4gIC5oaWdobGlnaHQgW2RhdGEtbGluZW5vc106OmJlZm9yZSB7XG4gICAgbGVmdDogLTEuNnJlbTtcbiAgICBtYXJnaW4tbGVmdDogLTEuNnJlbTtcbiAgICBwYWRkaW5nLWxlZnQ6IDEuNnJlbTtcbiAgfVxufVxuXG4ubWQtdHlwZXNldCBjb2RlLmNvZGVoaWxpdGUsIC5tZC10eXBlc2V0IGNvZGUuaGlnaGxpZ2h0IHtcbiAgbWFyZ2luOiAwIDAuMjk0MTE3NjQ3MWVtO1xuICBwYWRkaW5nOiAwLjA3MzUyOTQxMThlbSAwO1xufVxuXG4ubWQtdHlwZXNldCAudGFiYmVkLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xuICBvcmRlcjogOTk7XG4gIHdpZHRoOiAxMDAlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1jb2RlLWJnLWNvbG9yKTtcbn1cbi5tZC10eXBlc2V0IC50YWJiZWQtY29udGVudCBwcmUge1xuICBtYXJnaW46IDA7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG59XG4ubWQtdHlwZXNldCAudGFiYmVkLXNldCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZmxleC13cmFwOiB3cmFwO1xuICBtYXJnaW46IDFlbSAwO1xuICBib3JkZXI6IDAuMDVyZW0gc29saWQgdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlc3QpO1xuICBib3JkZXItcmFkaXVzOiAwLjFyZW07XG59XG4ubWQtdHlwZXNldCAudGFiYmVkLXNldCA+IGlucHV0IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbi5tZC10eXBlc2V0IC50YWJiZWQtc2V0ID4gaW5wdXQ6Y2hlY2tlZCArIGxhYmVsIHtcbiAgYm9yZGVyLWNvbG9yOiB2YXIoLS1tZC1hY2NlbnQtZmctY29sb3IpO1xuICBjb2xvcjogdmFyKC0tbWQtYWNjZW50LWZnLWNvbG9yKTtcbn1cbi5tZC10eXBlc2V0IC50YWJiZWQtc2V0ID4gaW5wdXQ6Y2hlY2tlZCArIGxhYmVsICsgLnRhYmJlZC1jb250ZW50IHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBhZGRpbmc6IDAgMC42cmVtO1xufVxuLm1kLXR5cGVzZXQgLnRhYmJlZC1zZXQgPiBpbnB1dDpjaGVja2VkICsgbGFiZWwgKyAudGFiYmVkLWNvbnRlbnQgPiA6bGFzdC1jaGlsZCB7XG4gIG1hcmdpbi1ib3R0b206IDAuNnJlbTtcbn1cbi5tZC10eXBlc2V0IC50YWJiZWQtc2V0ID4gaW5wdXQ6Y2hlY2tlZCArIGxhYmVsICsgLnRhYmJlZC1jb250ZW50ID4gcHJlOm9ubHktY2hpbGQsXG4ubWQtdHlwZXNldCAudGFiYmVkLXNldCA+IGlucHV0OmNoZWNrZWQgKyBsYWJlbCArIC50YWJiZWQtY29udGVudCA+IC5oaWdobGlnaHQ6b25seS1jaGlsZCxcbi5tZC10eXBlc2V0IC50YWJiZWQtc2V0ID4gaW5wdXQ6Y2hlY2tlZCArIGxhYmVsICsgLnRhYmJlZC1jb250ZW50ID4gLmhpZ2hsaWdodHRhYmxlOm9ubHktY2hpbGQsXG4ubWQtdHlwZXNldCAudGFiYmVkLXNldCA+IGlucHV0OmNoZWNrZWQgKyBsYWJlbCArIC50YWJiZWQtY29udGVudCA+IC5jb2RlaGlsaXRlOm9ubHktY2hpbGQsXG4ubWQtdHlwZXNldCAudGFiYmVkLXNldCA+IGlucHV0OmNoZWNrZWQgKyBsYWJlbCArIC50YWJiZWQtY29udGVudCA+IC5jb2RlaGlsaXRldGFibGU6b25seS1jaGlsZCB7XG4gIG1hcmdpbjogMCAtMC42cmVtO1xufVxuLm1kLXR5cGVzZXQgLnRhYmJlZC1zZXQgPiBpbnB1dDpjaGVja2VkICsgbGFiZWwgKyAudGFiYmVkLWNvbnRlbnQgPiBwcmU6b25seS1jaGlsZCBwcmUsXG4ubWQtdHlwZXNldCAudGFiYmVkLXNldCA+IGlucHV0OmNoZWNrZWQgKyBsYWJlbCArIC50YWJiZWQtY29udGVudCA+IC5oaWdobGlnaHQ6b25seS1jaGlsZCBwcmUsXG4ubWQtdHlwZXNldCAudGFiYmVkLXNldCA+IGlucHV0OmNoZWNrZWQgKyBsYWJlbCArIC50YWJiZWQtY29udGVudCA+IC5oaWdobGlnaHR0YWJsZTpvbmx5LWNoaWxkIHByZSxcbi5tZC10eXBlc2V0IC50YWJiZWQtc2V0ID4gaW5wdXQ6Y2hlY2tlZCArIGxhYmVsICsgLnRhYmJlZC1jb250ZW50ID4gLmNvZGVoaWxpdGU6b25seS1jaGlsZCBwcmUsXG4ubWQtdHlwZXNldCAudGFiYmVkLXNldCA+IGlucHV0OmNoZWNrZWQgKyBsYWJlbCArIC50YWJiZWQtY29udGVudCA+IC5jb2RlaGlsaXRldGFibGU6b25seS1jaGlsZCBwcmUge1xuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbn1cbi5tZC10eXBlc2V0IC50YWJiZWQtc2V0ID4gbGFiZWwge1xuICB3aWR0aDogYXV0bztcbiAgcGFkZGluZzogMC42cmVtO1xuICBwYWRkaW5nLWJvdHRvbTogMC41cmVtO1xuICB0cmFuc2l0aW9uOiBjb2xvciAxMjVtcywgYm9yZGVyIDI1MG1zO1xuICBib3JkZXItYm90dG9tOiAwLjFyZW0gc29saWQgdHJhbnNwYXJlbnQ7XG4gIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodCk7XG4gIGZvbnQtc2l6ZTogMC42NHJlbTtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuaHRtbCAubWQtdHlwZXNldCAudGFiYmVkLXNldCA+IGxhYmVsOmhvdmVyIHtcbiAgY29sb3I6IHZhcigtLW1kLWFjY2VudC1mZy1jb2xvcik7XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA0NC45Mzc1ZW0pIHtcbiAgLm1kLXR5cGVzZXQgPiAudGFiYmVkLXNldCB7XG4gICAgbWFyZ2luOiAxZW0gLTAuOHJlbTtcbiAgICBib3JkZXI6IDA7XG4gICAgYm9yZGVyLXRvcDogMC4wNXJlbSBzb2xpZCB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodGVzdCk7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbiAgfVxuICAubWQtdHlwZXNldCA+IC50YWJiZWQtc2V0IGNvZGUge1xuICAgIHBhZGRpbmc6IDAuNTI1cmVtIDAuOHJlbTtcbiAgfVxuICAubWQtdHlwZXNldCA+IC50YWJiZWQtc2V0IGlucHV0OmZpcnN0LWNoaWxkICsgbGFiZWwge1xuICAgIG1hcmdpbi1sZWZ0OiAwLjJyZW07XG4gIH1cbn1cblxuLm1kLXR5cGVzZXQgLnRhc2stbGlzdC1pdGVtIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG59XG4ubWQtdHlwZXNldCAudGFzay1saXN0LWl0ZW0gW3R5cGU9Y2hlY2tib3hdIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDAuNDVlbTtcbiAgbGVmdDogLTJlbTtcbn1cbltkaXI9cnRsXSAubWQtdHlwZXNldCAudGFzay1saXN0LWl0ZW0gW3R5cGU9Y2hlY2tib3hdIHtcbiAgcmlnaHQ6IC0yZW07XG4gIGxlZnQ6IGluaXRpYWw7XG59XG4ubWQtdHlwZXNldCAudGFzay1saXN0LWNvbnRyb2wgLnRhc2stbGlzdC1pbmRpY2F0b3I6OmJlZm9yZSB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwLjE1ZW07XG4gIGxlZnQ6IC0xLjVlbTtcbiAgd2lkdGg6IDEuMjVlbTtcbiAgaGVpZ2h0OiAxLjI1ZW07XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXN0KTtcbiAgbWFzay1pbWFnZTogdXJsKFwie3sgY2hlY2tib3gtYmxhbmstY2lyY2xlIH19XCIpO1xuICBjb250ZW50OiBcIlwiO1xufVxuW2Rpcj1ydGxdIC5tZC10eXBlc2V0IC50YXNrLWxpc3QtY29udHJvbCAudGFzay1saXN0LWluZGljYXRvcjo6YmVmb3JlIHtcbiAgcmlnaHQ6IC0xLjVlbTtcbiAgbGVmdDogaW5pdGlhbDtcbn1cbi5tZC10eXBlc2V0IC50YXNrLWxpc3QtY29udHJvbCBbdHlwZT1jaGVja2JveF06Y2hlY2tlZCArIC50YXNrLWxpc3QtaW5kaWNhdG9yOjpiZWZvcmUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDBlNjc2O1xuICBtYXNrLWltYWdlOiB1cmwoXCJ7eyBjaGVjay1jaXJjbGUgfX1cIik7XG59XG4ubWQtdHlwZXNldCAudGFzay1saXN0LWNvbnRyb2wgW3R5cGU9Y2hlY2tib3hdIHtcbiAgb3BhY2l0eTogMDtcbiAgei1pbmRleDogLTE7XG59IiwiLy8vL1xuLy8vIENvcHlyaWdodCAoYykgMjAxNi0yMDIwIE1hcnRpbiBEb25hdGggPG1hcnRpbi5kb25hdGhAc3F1aWRmdW5rLmNvbT5cbi8vL1xuLy8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLFxuLy8vIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb25cbi8vLyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSxcbi8vLyBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGVcbi8vLyBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy8vXG4vLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vL1xuLy8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTExcbi8vLyBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HXG4vLy8gRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUlxuLy8vIERFQUxJTkdTXG4vLy8vXG5cbi8vIHN0eWxlbGludC1kaXNhYmxlIG5vLWR1cGxpY2F0ZS1zZWxlY3RvcnNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUnVsZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gRW5mb3JjZSBjb3JyZWN0IGJveCBtb2RlbFxuaHRtbCB7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XG5cbi8vIEFsbCBlbGVtZW50cyBzaGFsbCBpbmhlcml0IHRoZSBkb2N1bWVudCBkZWZhdWx0XG4qLFxuKjo6YmVmb3JlLFxuKjo6YWZ0ZXIge1xuICBib3gtc2l6aW5nOiBpbmhlcml0O1xufVxuXG4vLyBQcmV2ZW50IGFkanVzdG1lbnRzIG9mIGZvbnQgc2l6ZSBhZnRlciBvcmllbnRhdGlvbiBjaGFuZ2VzIGluIElFIGFuZCBpT1Ncbmh0bWwge1xuICB0ZXh0LXNpemUtYWRqdXN0OiBub25lO1xufVxuXG4vLyBSZW1vdmUgbWFyZ2luIGluIGFsbCBicm93c2Vyc1xuYm9keSB7XG4gIG1hcmdpbjogMDtcbn1cblxuLy8gUmVzZXQgaG9yaXpvbnRhbCBydWxlcyBpbiBGRlxuaHIge1xuICBvdmVyZmxvdzogdmlzaWJsZTtcbiAgYm94LXNpemluZzogY29udGVudC1ib3g7XG59XG5cbi8vIFJlbW92ZSBnYXBzIGluIHVuZGVybGluZWQgbGlua3MgaW4gaU9TID49IDggYW5kIFNhZmFyaSA+PSA4XG5hIHtcbiAgLXdlYmtpdC10ZXh0LWRlY29yYXRpb24tc2tpcDogb2JqZWN0czsgLy8gc3R5bGVsaW50LWRpc2FibGUtbGluZVxufVxuXG4vLyBSZXNldCB0YXAgb3V0bGluZXMgb24gaU9TIGFuZCBBbmRyb2lkXG5hLFxuYnV0dG9uLFxubGFiZWwsXG5pbnB1dCB7XG4gIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7XG59XG5cbi8vIFJlc2V0IGxpbmsgc3R5bGVzXG5hIHtcbiAgY29sb3I6IGluaGVyaXQ7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cblxuLy8gTm9ybWFsaXplIGZvbnQtc2l6ZSBpbiBhbGwgYnJvd3NlcnNcbnNtYWxsIHtcbiAgZm9udC1zaXplOiA4MCU7XG59XG5cbi8vIFByZXZlbnQgc3Vic2NyaXB0IGFuZCBzdXBlcnNjcmlwdCBmcm9tIGFmZmVjdGluZyBsaW5lLWhlaWdodFxuc3ViLFxuc3VwIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBmb250LXNpemU6IDgwJTtcbiAgbGluZS1oZWlnaHQ6IDA7XG4gIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTtcbn1cblxuLy8gQ29ycmVjdCBzdWJzY3JpcHQgb2Zmc2V0XG5zdWIge1xuICBib3R0b206IC0wLjI1ZW07XG59XG5cbi8vIENvcnJlY3Qgc3VwZXJzY3JpcHQgb2Zmc2V0XG5zdXAge1xuICB0b3A6IC0wLjVlbTtcbn1cblxuLy8gUmVtb3ZlIGJvcmRlcnMgb24gaW1hZ2VzXG5pbWcge1xuICBib3JkZXItc3R5bGU6IG5vbmU7XG59XG5cbi8vIFJlc2V0IHRhYmxlIHN0eWxlc1xudGFibGUge1xuICBib3JkZXItY29sbGFwc2U6IHNlcGFyYXRlO1xuICBib3JkZXItc3BhY2luZzogMDtcbn1cblxuLy8gUmVzZXQgdGFibGUgY2VsbCBzdHlsZXNcbnRkLFxudGgge1xuICBmb250LXdlaWdodDogbm9ybWFsOyAvLyBzdHlsZWxpbnQtZGlzYWJsZS1saW5lXG4gIHZlcnRpY2FsLWFsaWduOiB0b3A7XG59XG5cbi8vIFJlc2V0IChuYXRpdmUpIGJ1dHRvbiBzdHlsZXNcbmJ1dHRvbiB7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMDtcbiAgYm9yZGVyOiAwO1xuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgZm9udC1zaXplOiBpbmhlcml0O1xufVxuXG4vLyBSZXNldCAobmF0aXZlKSBpbnB1dCBzdHlsZXNcbmlucHV0IHtcbiAgYm9yZGVyOiAwO1xuICBvdXRsaW5lOiAwO1xufVxuIiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuaHRtbCB7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XG5cbiosXG4qOjpiZWZvcmUsXG4qOjphZnRlciB7XG4gIGJveC1zaXppbmc6IGluaGVyaXQ7XG59XG5cbmh0bWwge1xuICAtd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IG5vbmU7XG4gICAgIC1tb3otdGV4dC1zaXplLWFkanVzdDogbm9uZTtcbiAgICAgIC1tcy10ZXh0LXNpemUtYWRqdXN0OiBub25lO1xuICAgICAgICAgIHRleHQtc2l6ZS1hZGp1c3Q6IG5vbmU7XG59XG5cbmJvZHkge1xuICBtYXJnaW46IDA7XG59XG5cbmhyIHtcbiAgb3ZlcmZsb3c6IHZpc2libGU7XG4gIGJveC1zaXppbmc6IGNvbnRlbnQtYm94O1xufVxuXG5hIHtcbiAgLXdlYmtpdC10ZXh0LWRlY29yYXRpb24tc2tpcDogb2JqZWN0cztcbn1cblxuYSxcbmJ1dHRvbixcbmxhYmVsLFxuaW5wdXQge1xuICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50O1xufVxuXG5hIHtcbiAgY29sb3I6IGluaGVyaXQ7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cblxuc21hbGwge1xuICBmb250LXNpemU6IDgwJTtcbn1cblxuc3ViLFxuc3VwIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBmb250LXNpemU6IDgwJTtcbiAgbGluZS1oZWlnaHQ6IDA7XG4gIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTtcbn1cblxuc3ViIHtcbiAgYm90dG9tOiAtMC4yNWVtO1xufVxuXG5zdXAge1xuICB0b3A6IC0wLjVlbTtcbn1cblxuaW1nIHtcbiAgYm9yZGVyLXN0eWxlOiBub25lO1xufVxuXG50YWJsZSB7XG4gIGJvcmRlci1jb2xsYXBzZTogc2VwYXJhdGU7XG4gIGJvcmRlci1zcGFjaW5nOiAwO1xufVxuXG50ZCxcbnRoIHtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgdmVydGljYWwtYWxpZ246IHRvcDtcbn1cblxuYnV0dG9uIHtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwO1xuICBib3JkZXI6IDA7XG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICBmb250LXNpemU6IGluaGVyaXQ7XG59XG5cbmlucHV0IHtcbiAgYm9yZGVyOiAwO1xuICBvdXRsaW5lOiAwO1xufVxuXG46cm9vdCB7XG4gIC0tbWQtZGVmYXVsdC1mZy1jb2xvcjogaHNsYSgwLCAwJSwgMCUsIDAuODcpO1xuICAtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0OiBoc2xhKDAsIDAlLCAwJSwgMC41NCk7XG4gIC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlcjogaHNsYSgwLCAwJSwgMCUsIDAuMjYpO1xuICAtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXN0OiBoc2xhKDAsIDAlLCAwJSwgMC4wNyk7XG4gIC0tbWQtZGVmYXVsdC1iZy1jb2xvcjogaHNsYSgwLCAwJSwgMTAwJSwgMSk7XG4gIC0tbWQtZGVmYXVsdC1iZy1jb2xvci0tbGlnaHQ6IGhzbGEoMCwgMCUsIDEwMCUsIDAuNyk7XG4gIC0tbWQtZGVmYXVsdC1iZy1jb2xvci0tbGlnaHRlcjogaHNsYSgwLCAwJSwgMTAwJSwgMC4zKTtcbiAgLS1tZC1kZWZhdWx0LWJnLWNvbG9yLS1saWdodGVzdDogaHNsYSgwLCAwJSwgMTAwJSwgMC4xMik7XG4gIC0tbWQtcHJpbWFyeS1mZy1jb2xvcjogaHNsYSgyMzFkZWcsIDQ4JSwgNDglLCAxKTtcbiAgLS1tZC1wcmltYXJ5LWZnLWNvbG9yLS1saWdodDogaHNsYSgyMzBkZWcsIDQ0JSwgNjQlLCAxKTtcbiAgLS1tZC1wcmltYXJ5LWZnLWNvbG9yLS1kYXJrOiBoc2xhKDIzMmRlZywgNTQlLCA0MSUsIDEpO1xuICAtLW1kLXByaW1hcnktYmctY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtYmctY29sb3IpO1xuICAtLW1kLXByaW1hcnktYmctY29sb3ItLWxpZ2h0OiB2YXIoLS1tZC1kZWZhdWx0LWJnLWNvbG9yLS1saWdodCk7XG4gIC0tbWQtYWNjZW50LWZnLWNvbG9yOiBoc2xhKDIzMWRlZywgOTklLCA2NiUsIDEpO1xuICAtLW1kLWFjY2VudC1mZy1jb2xvci0tdHJhbnNwYXJlbnQ6IGhzbGEoMjMxZGVnLCA5OSUsIDY2JSwgMC4xKTtcbiAgLS1tZC1hY2NlbnQtYmctY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtYmctY29sb3IpO1xuICAtLW1kLWFjY2VudC1iZy1jb2xvci0tbGlnaHQ6IHZhcigtLW1kLWRlZmF1bHQtYmctY29sb3ItLWxpZ2h0KTtcbiAgLS1tZC1jb2RlLWJnLWNvbG9yOiBoc2xhKDAsIDAlLCA5Mi41JSwgMC41KTtcbiAgLS1tZC1jb2RlLWZnLWNvbG9yOiBoc2xhKDIwMCwgMTglLCAyNiUsIDEpO1xufVxuXG4ubWQtaWNvbiBzdmcge1xuICBkaXNwbGF5OiBibG9jaztcbiAgd2lkdGg6IDEuMnJlbTtcbiAgaGVpZ2h0OiAxLjJyZW07XG4gIG1hcmdpbjogMCBhdXRvO1xuICBmaWxsOiBjdXJyZW50Q29sb3I7XG59XG5cbmJvZHkge1xuICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDtcbiAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTtcbn1cblxuYm9keSxcbmlucHV0IHtcbiAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3IpO1xuICAtd2Via2l0LWZvbnQtZmVhdHVyZS1zZXR0aW5nczogXCJrZXJuXCIsIFwibGlnYVwiO1xuICAgICAgICAgIGZvbnQtZmVhdHVyZS1zZXR0aW5nczogXCJrZXJuXCIsIFwibGlnYVwiO1xuICBmb250LWZhbWlseTogXCJIZWx2ZXRpY2EgTmV1ZVwiLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmO1xufVxuXG5jb2RlLFxucHJlLFxua2JkIHtcbiAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3IpO1xuICAtd2Via2l0LWZvbnQtZmVhdHVyZS1zZXR0aW5nczogXCJrZXJuXCI7XG4gICAgICAgICAgZm9udC1mZWF0dXJlLXNldHRpbmdzOiBcImtlcm5cIjtcbiAgZm9udC1mYW1pbHk6IFwiQ291cmllciBOZXdcIiwgQ291cmllciwgbW9ub3NwYWNlO1xufVxuXG4ubWQtdHlwZXNldCB7XG4gIGZvbnQtc2l6ZTogMC44cmVtO1xuICBsaW5lLWhlaWdodDogMS42O1xuICAtd2Via2l0LXByaW50LWNvbG9yLWFkanVzdDogZXhhY3Q7XG59XG4ubWQtdHlwZXNldCBwLFxuLm1kLXR5cGVzZXQgdWwsXG4ubWQtdHlwZXNldCBvbCxcbi5tZC10eXBlc2V0IGJsb2NrcXVvdGUge1xuICBtYXJnaW46IDFlbSAwO1xufVxuLm1kLXR5cGVzZXQgaDEge1xuICBtYXJnaW46IDAgMCAycmVtO1xuICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHQpO1xuICBmb250LXNpemU6IDEuNTYyNXJlbTtcbiAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjM7XG59XG4ubWQtdHlwZXNldCBoMiB7XG4gIG1hcmdpbjogMnJlbSAwIDAuOHJlbTtcbiAgZm9udC1zaXplOiAxLjI1cmVtO1xuICBmb250LXdlaWdodDogMzAwO1xuICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cbi5tZC10eXBlc2V0IGgzIHtcbiAgbWFyZ2luOiAxLjZyZW0gMCAwLjhyZW07XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjU7XG59XG4ubWQtdHlwZXNldCBoMiArIGgzIHtcbiAgbWFyZ2luLXRvcDogMC44cmVtO1xufVxuLm1kLXR5cGVzZXQgaDQge1xuICBtYXJnaW46IDAuOHJlbSAwO1xuICBmb250LXNpemU6IDAuOHJlbTtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07XG59XG4ubWQtdHlwZXNldCBoNSxcbi5tZC10eXBlc2V0IGg2IHtcbiAgbWFyZ2luOiAwLjhyZW0gMDtcbiAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0KTtcbiAgZm9udC1zaXplOiAwLjY0cmVtO1xuICBmb250LXdlaWdodDogNzAwO1xuICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTtcbn1cbi5tZC10eXBlc2V0IGg1IHtcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbn1cbi5tZC10eXBlc2V0IGhyIHtcbiAgbWFyZ2luOiAxLjVlbSAwO1xuICBib3JkZXItYm90dG9tOiAwLjA1cmVtIGRvdHRlZCB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodGVyKTtcbn1cbi5tZC10eXBlc2V0IGEge1xuICBjb2xvcjogdmFyKC0tbWQtcHJpbWFyeS1mZy1jb2xvcik7XG4gIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7XG59XG4ubWQtdHlwZXNldCBhLCAubWQtdHlwZXNldCBhOjpiZWZvcmUge1xuICB0cmFuc2l0aW9uOiBjb2xvciAxMjVtcztcbn1cbi5tZC10eXBlc2V0IGE6Zm9jdXMsIC5tZC10eXBlc2V0IGE6aG92ZXIge1xuICBjb2xvcjogdmFyKC0tbWQtYWNjZW50LWZnLWNvbG9yKTtcbn1cbi5tZC10eXBlc2V0IGNvZGUsXG4ubWQtdHlwZXNldCBwcmUsXG4ubWQtdHlwZXNldCBrYmQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1jb2RlLWJnLWNvbG9yKTtcbiAgY29sb3I6IHZhcigtLW1kLWNvZGUtZmctY29sb3IpO1xuICBmb250LXNpemU6IDg1JTtcbiAgZGlyZWN0aW9uOiBsdHI7XG59XG4ubWQtdHlwZXNldCBjb2RlIHtcbiAgbWFyZ2luOiAwIDAuMjk0MTE3NjQ3MWVtO1xuICBwYWRkaW5nOiAwLjA3MzUyOTQxMThlbSAwO1xuICBib3JkZXItcmFkaXVzOiAwLjFyZW07XG4gIGJveC1zaGFkb3c6IDAuMjk0MTE3NjQ3MWVtIDAgMCB2YXIoLS1tZC1jb2RlLWJnLWNvbG9yKSwgLTAuMjk0MTE3NjQ3MWVtIDAgMCB2YXIoLS1tZC1jb2RlLWJnLWNvbG9yKTtcbiAgd29yZC1icmVhazogYnJlYWstd29yZDtcbiAgLXdlYmtpdC1ib3gtZGVjb3JhdGlvbi1icmVhazogY2xvbmU7XG4gICAgICAgICAgYm94LWRlY29yYXRpb24tYnJlYWs6IGNsb25lO1xufVxuLm1kLXR5cGVzZXQgaDEgY29kZSxcbi5tZC10eXBlc2V0IGgyIGNvZGUsXG4ubWQtdHlwZXNldCBoMyBjb2RlLFxuLm1kLXR5cGVzZXQgaDQgY29kZSxcbi5tZC10eXBlc2V0IGg1IGNvZGUsXG4ubWQtdHlwZXNldCBoNiBjb2RlIHtcbiAgbWFyZ2luOiAwO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgYm94LXNoYWRvdzogbm9uZTtcbn1cbi5tZC10eXBlc2V0IGEgPiBjb2RlIHtcbiAgbWFyZ2luOiBpbmhlcml0O1xuICBwYWRkaW5nOiBpbmhlcml0O1xuICBib3JkZXItcmFkaXVzOiBpbml0aWFsO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiBpbmhlcml0O1xuICBjb2xvcjogaW5oZXJpdDtcbiAgYm94LXNoYWRvdzogbm9uZTtcbn1cbi5tZC10eXBlc2V0IHByZSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWFyZ2luOiAxZW0gMDtcbiAgYm9yZGVyLXJhZGl1czogMC4xcmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xuICAtd2Via2l0LWJhY2tmYWNlLXZpc2liaWxpdHk6IGhpZGRlbjtcbiAgICAgICAgICBiYWNrZmFjZS12aXNpYmlsaXR5OiBoaWRkZW47XG4gIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDtcbn1cbi5tZC10eXBlc2V0IHByZSA+IGNvZGUge1xuICBkaXNwbGF5OiBibG9jaztcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwLjUyNXJlbSAwLjZyZW07XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICBmb250LXNpemU6IGluaGVyaXQ7XG4gIGJveC1zaGFkb3c6IG5vbmU7XG4gIC13ZWJraXQtYm94LWRlY29yYXRpb24tYnJlYWs6IHNsaWNlO1xuICAgICAgICAgIGJveC1kZWNvcmF0aW9uLWJyZWFrOiBzbGljZTtcbiAgb3ZlcmZsb3c6IGF1dG87XG4gIHdvcmQtYnJlYWs6IG5vcm1hbDtcbn1cbi5tZC10eXBlc2V0IHByZSA+IGNvZGU6Oi13ZWJraXQtc2Nyb2xsYmFyIHtcbiAgd2lkdGg6IDAuMnJlbTtcbiAgaGVpZ2h0OiAwLjJyZW07XG59XG4ubWQtdHlwZXNldCBwcmUgPiBjb2RlOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXIpO1xufVxuLm1kLXR5cGVzZXQgcHJlID4gY29kZTo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWI6aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1hY2NlbnQtZmctY29sb3IpO1xufVxuLm1kLXR5cGVzZXQga2JkIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBwYWRkaW5nOiAwIDAuNTg4MjM1Mjk0MWVtO1xuICBib3JkZXItcmFkaXVzOiAwLjFyZW07XG4gIGZvbnQtc2l6ZTogMC43NWVtO1xuICBsaW5lLWhlaWdodDogMS41O1xuICBib3gtc2hhZG93OiAwIDAuMXJlbSAwIDAuMDVyZW0gdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlciksIDAgMC4xcmVtIDAgdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlciksIGluc2V0IDAgLTAuMXJlbSAwLjJyZW0gdmFyKC0tbWQtZGVmYXVsdC1iZy1jb2xvcik7XG4gIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7XG4gIHZlcnRpY2FsLWFsaWduOiB0ZXh0LXRvcDtcbn1cbi5tZC10eXBlc2V0IG1hcmsge1xuICBtYXJnaW46IDAgMC4yNWVtO1xuICBwYWRkaW5nOiAwLjA2MjVlbSAwO1xuICBib3JkZXItcmFkaXVzOiAwLjFyZW07XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyMzUsIDU5LCAwLjUpO1xuICBib3gtc2hhZG93OiAwLjI1ZW0gMCAwIHJnYmEoMjU1LCAyMzUsIDU5LCAwLjUpLCAtMC4yNWVtIDAgMCByZ2JhKDI1NSwgMjM1LCA1OSwgMC41KTtcbiAgd29yZC1icmVhazogYnJlYWstd29yZDtcbiAgLXdlYmtpdC1ib3gtZGVjb3JhdGlvbi1icmVhazogY2xvbmU7XG4gICAgICAgICAgYm94LWRlY29yYXRpb24tYnJlYWs6IGNsb25lO1xufVxuLm1kLXR5cGVzZXQgYWJiciB7XG4gIGJvcmRlci1ib3R0b206IDAuMDVyZW0gZG90dGVkIHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0KTtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICBjdXJzb3I6IGhlbHA7XG59XG4ubWQtdHlwZXNldCBzbWFsbCB7XG4gIG9wYWNpdHk6IDAuNzU7XG59XG4ubWQtdHlwZXNldCBzdXAsXG4ubWQtdHlwZXNldCBzdWIge1xuICBtYXJnaW4tbGVmdDogMC4wNzgxMjVlbTtcbn1cbltkaXI9cnRsXSAubWQtdHlwZXNldCBzdXAsXG5bZGlyPXJ0bF0gLm1kLXR5cGVzZXQgc3ViIHtcbiAgbWFyZ2luLXJpZ2h0OiAwLjA3ODEyNWVtO1xuICBtYXJnaW4tbGVmdDogaW5pdGlhbDtcbn1cbi5tZC10eXBlc2V0IGJsb2NrcXVvdGUge1xuICBwYWRkaW5nLWxlZnQ6IDAuNnJlbTtcbiAgYm9yZGVyLWxlZnQ6IDAuMnJlbSBzb2xpZCB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodGVyKTtcbiAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0KTtcbn1cbltkaXI9cnRsXSAubWQtdHlwZXNldCBibG9ja3F1b3RlIHtcbiAgcGFkZGluZy1yaWdodDogMC42cmVtO1xuICBwYWRkaW5nLWxlZnQ6IGluaXRpYWw7XG4gIGJvcmRlci1yaWdodDogMC4ycmVtIHNvbGlkIHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXIpO1xuICBib3JkZXItbGVmdDogaW5pdGlhbDtcbn1cbi5tZC10eXBlc2V0IHVsIHtcbiAgbGlzdC1zdHlsZS10eXBlOiBkaXNjO1xufVxuLm1kLXR5cGVzZXQgdWwsXG4ubWQtdHlwZXNldCBvbCB7XG4gIG1hcmdpbi1sZWZ0OiAwLjYyNWVtO1xuICBwYWRkaW5nOiAwO1xufVxuW2Rpcj1ydGxdIC5tZC10eXBlc2V0IHVsLFxuW2Rpcj1ydGxdIC5tZC10eXBlc2V0IG9sIHtcbiAgbWFyZ2luLXJpZ2h0OiAwLjYyNWVtO1xuICBtYXJnaW4tbGVmdDogaW5pdGlhbDtcbn1cbi5tZC10eXBlc2V0IHVsIG9sLFxuLm1kLXR5cGVzZXQgb2wgb2wge1xuICBsaXN0LXN0eWxlLXR5cGU6IGxvd2VyLWFscGhhO1xufVxuLm1kLXR5cGVzZXQgdWwgb2wgb2wsXG4ubWQtdHlwZXNldCBvbCBvbCBvbCB7XG4gIGxpc3Qtc3R5bGUtdHlwZTogbG93ZXItcm9tYW47XG59XG4ubWQtdHlwZXNldCB1bCBsaSxcbi5tZC10eXBlc2V0IG9sIGxpIHtcbiAgbWFyZ2luLWJvdHRvbTogMC41ZW07XG4gIG1hcmdpbi1sZWZ0OiAxLjI1ZW07XG59XG5bZGlyPXJ0bF0gLm1kLXR5cGVzZXQgdWwgbGksXG5bZGlyPXJ0bF0gLm1kLXR5cGVzZXQgb2wgbGkge1xuICBtYXJnaW4tcmlnaHQ6IDEuMjVlbTtcbiAgbWFyZ2luLWxlZnQ6IGluaXRpYWw7XG59XG4ubWQtdHlwZXNldCB1bCBsaSBwLFxuLm1kLXR5cGVzZXQgdWwgbGkgYmxvY2txdW90ZSxcbi5tZC10eXBlc2V0IG9sIGxpIHAsXG4ubWQtdHlwZXNldCBvbCBsaSBibG9ja3F1b3RlIHtcbiAgbWFyZ2luOiAwLjVlbSAwO1xufVxuLm1kLXR5cGVzZXQgdWwgbGk6bGFzdC1jaGlsZCxcbi5tZC10eXBlc2V0IG9sIGxpOmxhc3QtY2hpbGQge1xuICBtYXJnaW4tYm90dG9tOiAwO1xufVxuLm1kLXR5cGVzZXQgdWwgbGkgdWwsXG4ubWQtdHlwZXNldCB1bCBsaSBvbCxcbi5tZC10eXBlc2V0IG9sIGxpIHVsLFxuLm1kLXR5cGVzZXQgb2wgbGkgb2wge1xuICBtYXJnaW46IDAuNWVtIDAgMC41ZW0gMC42MjVlbTtcbn1cbltkaXI9cnRsXSAubWQtdHlwZXNldCB1bCBsaSB1bCxcbltkaXI9cnRsXSAubWQtdHlwZXNldCB1bCBsaSBvbCxcbltkaXI9cnRsXSAubWQtdHlwZXNldCBvbCBsaSB1bCxcbltkaXI9cnRsXSAubWQtdHlwZXNldCBvbCBsaSBvbCB7XG4gIG1hcmdpbi1yaWdodDogMC42MjVlbTtcbiAgbWFyZ2luLWxlZnQ6IGluaXRpYWw7XG59XG4ubWQtdHlwZXNldCBkZCB7XG4gIG1hcmdpbjogMWVtIDAgMWVtIDEuODc1ZW07XG59XG5bZGlyPXJ0bF0gLm1kLXR5cGVzZXQgZGQge1xuICBtYXJnaW4tcmlnaHQ6IDEuODc1ZW07XG4gIG1hcmdpbi1sZWZ0OiBpbml0aWFsO1xufVxuLm1kLXR5cGVzZXQgaWZyYW1lLFxuLm1kLXR5cGVzZXQgaW1nLFxuLm1kLXR5cGVzZXQgc3ZnIHtcbiAgbWF4LXdpZHRoOiAxMDAlO1xufVxuLm1kLXR5cGVzZXQgdGFibGU6bm90KFtjbGFzc10pIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBtYXgtd2lkdGg6IDEwMCU7XG4gIGJvcmRlci1yYWRpdXM6IDAuMXJlbTtcbiAgYmFja2dyb3VuZDogdmFyKC0tbWQtZGVmYXVsdC1iZy1jb2xvcik7XG4gIGZvbnQtc2l6ZTogMC42NHJlbTtcbiAgYm94LXNoYWRvdzogMCAwLjJyZW0gMC41cmVtIHJnYmEoMCwgMCwgMCwgMC4wNSksIDAgMCAwLjA1cmVtIHJnYmEoMCwgMCwgMCwgMC4xKTtcbiAgb3ZlcmZsb3c6IGF1dG87XG4gIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDtcbn1cbi5tZC10eXBlc2V0IHRhYmxlOm5vdChbY2xhc3NdKSArICoge1xuICBtYXJnaW4tdG9wOiAxLjVlbTtcbn1cbi5tZC10eXBlc2V0IHRhYmxlOm5vdChbY2xhc3NdKSB0aDpub3QoW2FsaWduXSksXG4ubWQtdHlwZXNldCB0YWJsZTpub3QoW2NsYXNzXSkgdGQ6bm90KFthbGlnbl0pIHtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbn1cbltkaXI9cnRsXSAubWQtdHlwZXNldCB0YWJsZTpub3QoW2NsYXNzXSkgdGg6bm90KFthbGlnbl0pLFxuW2Rpcj1ydGxdIC5tZC10eXBlc2V0IHRhYmxlOm5vdChbY2xhc3NdKSB0ZDpub3QoW2FsaWduXSkge1xuICB0ZXh0LWFsaWduOiByaWdodDtcbn1cbi5tZC10eXBlc2V0IHRhYmxlOm5vdChbY2xhc3NdKSB0aCB7XG4gIG1pbi13aWR0aDogNXJlbTtcbiAgcGFkZGluZzogMC42cmVtIDAuOHJlbTtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHQpO1xuICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1iZy1jb2xvcik7XG4gIHZlcnRpY2FsLWFsaWduOiB0b3A7XG59XG4ubWQtdHlwZXNldCB0YWJsZTpub3QoW2NsYXNzXSkgdGQge1xuICBwYWRkaW5nOiAwLjZyZW0gMC44cmVtO1xuICBib3JkZXItdG9wOiAwLjA1cmVtIHNvbGlkIHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXN0KTtcbiAgdmVydGljYWwtYWxpZ246IHRvcDtcbn1cbi5tZC10eXBlc2V0IHRhYmxlOm5vdChbY2xhc3NdKSB0ciB7XG4gIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMTI1bXM7XG59XG4ubWQtdHlwZXNldCB0YWJsZTpub3QoW2NsYXNzXSkgdHI6aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMDM1KTtcbiAgYm94LXNoYWRvdzogMCAwLjA1cmVtIDAgdmFyKC0tbWQtZGVmYXVsdC1iZy1jb2xvcikgaW5zZXQ7XG59XG4ubWQtdHlwZXNldCB0YWJsZTpub3QoW2NsYXNzXSkgdHI6Zmlyc3QtY2hpbGQgdGQge1xuICBib3JkZXItdG9wOiAwO1xufVxuLm1kLXR5cGVzZXQgdGFibGU6bm90KFtjbGFzc10pIGEge1xuICB3b3JkLWJyZWFrOiBub3JtYWw7XG59XG4ubWQtdHlwZXNldF9fc2Nyb2xsd3JhcCB7XG4gIG1hcmdpbjogMWVtIC0wLjhyZW07XG4gIG92ZXJmbG93LXg6IGF1dG87XG4gIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDtcbn1cbi5tZC10eXBlc2V0IC5tZC10eXBlc2V0X190YWJsZSB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgbWFyZ2luLWJvdHRvbTogMC41ZW07XG4gIHBhZGRpbmc6IDAgMC44cmVtO1xufVxuLm1kLXR5cGVzZXQgLm1kLXR5cGVzZXRfX3RhYmxlIHRhYmxlIHtcbiAgZGlzcGxheTogdGFibGU7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXJnaW46IDA7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG5cbmh0bWwge1xuICBoZWlnaHQ6IDEwMCU7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtYmctY29sb3IpO1xuICBmb250LXNpemU6IDEyNSU7XG4gIG92ZXJmbG93LXg6IGhpZGRlbjtcbn1cblxuYm9keSB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgd2lkdGg6IDEwMCU7XG4gIG1pbi1oZWlnaHQ6IDEwMCU7XG4gIGZvbnQtc2l6ZTogMC41cmVtO1xufVxuXG5ociB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBoZWlnaHQ6IDAuMDVyZW07XG4gIHBhZGRpbmc6IDA7XG4gIGJvcmRlcjogMDtcbn1cblxuLm1kLWdyaWQge1xuICBtYXgtd2lkdGg6IDYxcmVtO1xuICBtYXJnaW4tcmlnaHQ6IGF1dG87XG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xufVxuXG4ubWQtY29udGFpbmVyIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgZmxleC1ncm93OiAxO1xufVxuXG4ubWQtbWFpbiB7XG4gIGZsZXgtZ3JvdzogMTtcbn1cbi5tZC1tYWluX19pbm5lciB7XG4gIGhlaWdodDogMTAwJTtcbiAgcGFkZGluZy10b3A6IDEuNXJlbTtcbiAgcGFkZGluZy1ib3R0b206IDAuMDVyZW07XG59XG5cbi5tZC1lbGxpcHNpcyB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cblxuLm1kLXRvZ2dsZSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi5tZC1vdmVybGF5IHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDA7XG4gIHdpZHRoOiAwO1xuICBoZWlnaHQ6IDA7XG4gIHRyYW5zaXRpb246IHdpZHRoIDBtcyAyNTBtcywgaGVpZ2h0IDBtcyAyNTBtcywgb3BhY2l0eSAyNTBtcztcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHQpO1xuICBvcGFjaXR5OiAwO1xuICB6LWluZGV4OiAzO1xufVxuXG4ubWQtc2tpcCB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgbWFyZ2luOiAwLjVyZW07XG4gIHBhZGRpbmc6IDAuM3JlbSAwLjVyZW07XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwLjRyZW0pO1xuICBib3JkZXItcmFkaXVzOiAwLjFyZW07XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3IpO1xuICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1iZy1jb2xvcik7XG4gIGZvbnQtc2l6ZTogMC42NHJlbTtcbiAgb3BhY2l0eTogMDtcbn1cbi5tZC1za2lwOmZvY3VzIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApO1xuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMjUwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSwgb3BhY2l0eSAxNzVtcyA3NW1zO1xuICBvcGFjaXR5OiAxO1xuICB6LWluZGV4OiAxMDtcbn1cblxuQHBhZ2Uge1xuICBtYXJnaW46IDI1bW07XG59XG4ubWQtYW5ub3VuY2Uge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yKTtcbn1cbi5tZC1hbm5vdW5jZV9faW5uZXIge1xuICBtaW4taGVpZ2h0OiAyLjRyZW07XG4gIHBhZGRpbmc6IDAgMC44cmVtO1xuICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1iZy1jb2xvcik7XG4gIGZvbnQtc2l6ZTogMC43cmVtO1xuICBsaW5lLWhlaWdodDogMi40cmVtO1xufVxuXG4ubWQtY2xpcGJvYXJkIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDAuNHJlbTtcbiAgcmlnaHQ6IDAuNHJlbTtcbiAgd2lkdGg6IDEuMnJlbTtcbiAgaGVpZ2h0OiAxLjJyZW07XG4gIHRyYW5zaXRpb246IGNvbG9yIDI1MG1zO1xuICBib3JkZXItcmFkaXVzOiAwLjFyZW07XG4gIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodGVzdCk7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgei1pbmRleDogMTtcbiAgLXdlYmtpdC1iYWNrZmFjZS12aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgICAgICAgYmFja2ZhY2UtdmlzaWJpbGl0eTogaGlkZGVuO1xufVxuLm1kLWNsaXBib2FyZCBzdmcge1xuICB3aWR0aDogMC45cmVtO1xuICBoZWlnaHQ6IDAuOXJlbTtcbn1cbnByZTpob3ZlciAubWQtY2xpcGJvYXJkIHtcbiAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0KTtcbn1cbnByZSAubWQtY2xpcGJvYXJkOmZvY3VzLCBwcmUgLm1kLWNsaXBib2FyZDpob3ZlciB7XG4gIGNvbG9yOiB2YXIoLS1tZC1hY2NlbnQtZmctY29sb3IpO1xufVxuLm1kLWNvbnRlbnRfX2lubmVyIHtcbiAgbWFyZ2luOiAwIDAuOHJlbSAxLjJyZW07XG4gIHBhZGRpbmctdG9wOiAwLjZyZW07XG59XG4ubWQtY29udGVudF9faW5uZXI6OmJlZm9yZSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBoZWlnaHQ6IDAuNHJlbTtcbiAgY29udGVudDogXCJcIjtcbn1cbi5tZC1jb250ZW50X19pbm5lciA+IDpsYXN0LWNoaWxkIHtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbn1cbi5tZC1jb250ZW50X19idXR0b24ge1xuICBtYXJnaW46IDAuNHJlbSAwO1xuICBtYXJnaW4tbGVmdDogMC40cmVtO1xuICBwYWRkaW5nOiAwO1xuICBmbG9hdDogcmlnaHQ7XG59XG5bZGlyPXJ0bF0gLm1kLWNvbnRlbnRfX2J1dHRvbiB7XG4gIG1hcmdpbi1yaWdodDogMC40cmVtO1xuICBtYXJnaW4tbGVmdDogaW5pdGlhbDtcbiAgZmxvYXQ6IGxlZnQ7XG59XG5bZGlyPXJ0bF0gLm1kLWNvbnRlbnRfX2J1dHRvbiBzdmcge1xuICB0cmFuc2Zvcm06IHNjYWxlWCgtMSk7XG59XG4ubWQtdHlwZXNldCAubWQtY29udGVudF9fYnV0dG9uIHtcbiAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXIpO1xufVxuLm1kLWNvbnRlbnRfX2J1dHRvbiBzdmcge1xuICBkaXNwbGF5OiBpbmxpbmU7XG4gIHZlcnRpY2FsLWFsaWduOiB0b3A7XG59XG5cbi5tZC1kaWFsb2cge1xuICBib3gtc2hhZG93OiAwIDJweCAycHggMCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwIDFweCA1cHggMCByZ2JhKDAsIDAsIDAsIDAuMTIpLCAwIDNweCAxcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMik7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHJpZ2h0OiAwLjhyZW07XG4gIGJvdHRvbTogMC44cmVtO1xuICBsZWZ0OiBpbml0aWFsO1xuICBtaW4td2lkdGg6IDExLjFyZW07XG4gIHBhZGRpbmc6IDAuNHJlbSAwLjZyZW07XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMDAlKTtcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDBtcyA0MDBtcywgb3BhY2l0eSA0MDBtcztcbiAgYm9yZGVyOiBub25lO1xuICBib3JkZXItcmFkaXVzOiAwLjFyZW07XG4gIGJhY2tncm91bmQ6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3IpO1xuICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1iZy1jb2xvcik7XG4gIGZvbnQtc2l6ZTogMC43cmVtO1xuICBvcGFjaXR5OiAwO1xuICB6LWluZGV4OiAyO1xufVxuW2Rpcj1ydGxdIC5tZC1kaWFsb2cge1xuICByaWdodDogaW5pdGlhbDtcbiAgbGVmdDogMC44cmVtO1xufVxuLm1kLWRpYWxvZ1tkYXRhLW1kLXN0YXRlPW9wZW5dIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApO1xuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gNDAwbXMgY3ViaWMtYmV6aWVyKDAuMDc1LCAwLjg1LCAwLjE3NSwgMSksIG9wYWNpdHkgNDAwbXM7XG4gIG9wYWNpdHk6IDE7XG59XG5cbi5tZC1oZWFkZXIge1xuICBwb3NpdGlvbjogLXdlYmtpdC1zdGlja3k7XG4gIHBvc2l0aW9uOiBzdGlja3k7XG4gIHRvcDogMDtcbiAgcmlnaHQ6IDA7XG4gIGxlZnQ6IDA7XG4gIGhlaWdodDogMi40cmVtO1xuICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDI1MG1zLCBjb2xvciAyNTBtcztcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtcHJpbWFyeS1mZy1jb2xvcik7XG4gIGNvbG9yOiB2YXIoLS1tZC1wcmltYXJ5LWJnLWNvbG9yKTtcbiAgYm94LXNoYWRvdzogMCAwIDAuMnJlbSByZ2JhKDAsIDAsIDAsIDApLCAwIDAuMnJlbSAwLjRyZW0gcmdiYSgwLCAwLCAwLCAwKTtcbiAgei1pbmRleDogMjtcbn1cbi5uby1qcyAubWQtaGVhZGVyIHtcbiAgdHJhbnNpdGlvbjogbm9uZTtcbiAgYm94LXNoYWRvdzogbm9uZTtcbn1cbi5tZC1oZWFkZXJbZGF0YS1tZC1zdGF0ZT1zaGFkb3ddIHtcbiAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAyNTBtcywgY29sb3IgMjUwbXMsIGJveC1zaGFkb3cgMjUwbXM7XG4gIGJveC1zaGFkb3c6IDAgMCAwLjJyZW0gcmdiYSgwLCAwLCAwLCAwLjEpLCAwIDAuMnJlbSAwLjRyZW0gcmdiYSgwLCAwLCAwLCAwLjIpO1xufVxuXG4ubWQtaGVhZGVyLW5hdiB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIHBhZGRpbmc6IDAgMC4ycmVtO1xufVxuLm1kLWhlYWRlci1uYXZfX2J1dHRvbiB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWFyZ2luOiAwLjJyZW07XG4gIHBhZGRpbmc6IDAuNHJlbTtcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAyNTBtcztcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB6LWluZGV4OiAxO1xufVxuW2Rpcj1ydGxdIC5tZC1oZWFkZXItbmF2X19idXR0b24gc3ZnIHtcbiAgdHJhbnNmb3JtOiBzY2FsZVgoLTEpO1xufVxuLm1kLWhlYWRlci1uYXZfX2J1dHRvbjpmb2N1cywgLm1kLWhlYWRlci1uYXZfX2J1dHRvbjpob3ZlciB7XG4gIG9wYWNpdHk6IDAuNztcbn1cbi5tZC1oZWFkZXItbmF2X19idXR0b24ubWQtbG9nbyB7XG4gIG1hcmdpbjogMC4ycmVtO1xuICBwYWRkaW5nOiAwLjRyZW07XG59XG4ubWQtaGVhZGVyLW5hdl9fYnV0dG9uLm1kLWxvZ28gaW1nLFxuLm1kLWhlYWRlci1uYXZfX2J1dHRvbi5tZC1sb2dvIHN2ZyB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB3aWR0aDogMS4ycmVtO1xuICBoZWlnaHQ6IDEuMnJlbTtcbiAgZmlsbDogY3VycmVudENvbG9yO1xufVxuLm5vLWpzIC5tZC1oZWFkZXItbmF2X19idXR0b25bZm9yPV9fc2VhcmNoXSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4ubWQtaGVhZGVyLW5hdl9fdG9waWMge1xuICBkaXNwbGF5OiBibG9jaztcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB3aWR0aDogMTAwJTtcbiAgcGFkZGluZzogMCAxcmVtO1xuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gNDAwbXMgY3ViaWMtYmV6aWVyKDAuMSwgMC43LCAwLjEsIDEpLCBvcGFjaXR5IDE1MG1zO1xuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgLXdlYmtpdC1iYWNrZmFjZS12aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgICAgICAgYmFja2ZhY2UtdmlzaWJpbGl0eTogaGlkZGVuO1xufVxuLm1kLWhlYWRlci1uYXZfX3RvcGljICsgLm1kLWhlYWRlci1uYXZfX3RvcGljIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDEuMjVyZW0pO1xuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gNDAwbXMgY3ViaWMtYmV6aWVyKDEsIDAuNywgMC4xLCAwLjEpLCBvcGFjaXR5IDE1MG1zO1xuICBvcGFjaXR5OiAwO1xuICB6LWluZGV4OiAtMTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG5bZGlyPXJ0bF0gLm1kLWhlYWRlci1uYXZfX3RvcGljICsgLm1kLWhlYWRlci1uYXZfX3RvcGljIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0xLjI1cmVtKTtcbn1cbi5uby1qcyAubWQtaGVhZGVyLW5hdl9fdG9waWMge1xuICBwb3NpdGlvbjogaW5pdGlhbDtcbn1cbi5uby1qcyAubWQtaGVhZGVyLW5hdl9fdG9waWMgKyAubWQtaGVhZGVyLW5hdl9fdG9waWMge1xuICBkaXNwbGF5OiBub25lO1xufVxuLm1kLWhlYWRlci1uYXZfX3RpdGxlIHtcbiAgZmxleC1ncm93OiAxO1xuICBmb250LXNpemU6IDAuOXJlbTtcbiAgbGluZS1oZWlnaHQ6IDIuNHJlbTtcbn1cbi5tZC1oZWFkZXItbmF2X190aXRsZVtkYXRhLW1kLXN0YXRlPWFjdGl2ZV0gLm1kLWhlYWRlci1uYXZfX3RvcGljIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0xLjI1cmVtKTtcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDQwMG1zIGN1YmljLWJlemllcigxLCAwLjcsIDAuMSwgMC4xKSwgb3BhY2l0eSAxNTBtcztcbiAgb3BhY2l0eTogMDtcbiAgei1pbmRleDogLTE7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xufVxuW2Rpcj1ydGxdIC5tZC1oZWFkZXItbmF2X190aXRsZVtkYXRhLW1kLXN0YXRlPWFjdGl2ZV0gLm1kLWhlYWRlci1uYXZfX3RvcGljIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDEuMjVyZW0pO1xufVxuLm1kLWhlYWRlci1uYXZfX3RpdGxlW2RhdGEtbWQtc3RhdGU9YWN0aXZlXSAubWQtaGVhZGVyLW5hdl9fdG9waWMgKyAubWQtaGVhZGVyLW5hdl9fdG9waWMge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCk7XG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSA0MDBtcyBjdWJpYy1iZXppZXIoMC4xLCAwLjcsIDAuMSwgMSksIG9wYWNpdHkgMTUwbXM7XG4gIG9wYWNpdHk6IDE7XG4gIHotaW5kZXg6IDA7XG4gIHBvaW50ZXItZXZlbnRzOiBpbml0aWFsO1xufVxuLm1kLWhlYWRlci1uYXZfX3RpdGxlID4gLm1kLWhlYWRlci1uYXZfX2VsbGlwc2lzIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xufVxuLm1kLWhlYWRlci1uYXZfX3NvdXJjZSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi5tZC1oZXJvIHtcbiAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAyNTBtcztcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtcHJpbWFyeS1mZy1jb2xvcik7XG4gIGNvbG9yOiB2YXIoLS1tZC1wcmltYXJ5LWJnLWNvbG9yKTtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm1kLWhlcm9fX2lubmVyIHtcbiAgbWFyZ2luLXRvcDogMXJlbTtcbiAgcGFkZGluZzogMC44cmVtIDAuOHJlbSAwLjRyZW07XG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSA0MDBtcyBjdWJpYy1iZXppZXIoMC4xLCAwLjcsIDAuMSwgMSksIG9wYWNpdHkgMjUwbXM7XG4gIHRyYW5zaXRpb24tZGVsYXk6IDEwMG1zO1xufVxuW2RhdGEtbWQtc3RhdGU9aGlkZGVuXSAubWQtaGVyb19faW5uZXIge1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDAuNjI1cmVtKTtcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDBtcyA0MDBtcywgb3BhY2l0eSAxMDBtcyAwbXM7XG4gIG9wYWNpdHk6IDA7XG59XG4ubWQtaGVyby0tZXhwYW5kIC5tZC1oZXJvX19pbm5lciB7XG4gIG1hcmdpbi1ib3R0b206IDEuMnJlbTtcbn1cblxuLm1kLWZvb3RlciB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3IpO1xuICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1iZy1jb2xvcik7XG59XG5cbi5tZC1mb290ZXItbmF2X19pbm5lciB7XG4gIHBhZGRpbmc6IDAuMnJlbTtcbiAgb3ZlcmZsb3c6IGF1dG87XG59XG4ubWQtZm9vdGVyLW5hdl9fbGluayB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIHBhZGRpbmctdG9wOiAxLjRyZW07XG4gIHBhZGRpbmctYm90dG9tOiAwLjRyZW07XG4gIHRyYW5zaXRpb246IG9wYWNpdHkgMjUwbXM7XG59XG4ubWQtZm9vdGVyLW5hdl9fbGluazpmb2N1cywgLm1kLWZvb3Rlci1uYXZfX2xpbms6aG92ZXIge1xuICBvcGFjaXR5OiAwLjc7XG59XG4ubWQtZm9vdGVyLW5hdl9fbGluay0tcHJldiB7XG4gIHdpZHRoOiAyNSU7XG4gIGZsb2F0OiBsZWZ0O1xufVxuW2Rpcj1ydGxdIC5tZC1mb290ZXItbmF2X19saW5rLS1wcmV2IHtcbiAgZmxvYXQ6IHJpZ2h0O1xufVxuW2Rpcj1ydGxdIC5tZC1mb290ZXItbmF2X19saW5rLS1wcmV2IHN2ZyB7XG4gIHRyYW5zZm9ybTogc2NhbGVYKC0xKTtcbn1cbi5tZC1mb290ZXItbmF2X19saW5rLS1uZXh0IHtcbiAgd2lkdGg6IDc1JTtcbiAgZmxvYXQ6IHJpZ2h0O1xuICB0ZXh0LWFsaWduOiByaWdodDtcbn1cbltkaXI9cnRsXSAubWQtZm9vdGVyLW5hdl9fbGluay0tbmV4dCB7XG4gIGZsb2F0OiBsZWZ0O1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xufVxuW2Rpcj1ydGxdIC5tZC1mb290ZXItbmF2X19saW5rLS1uZXh0IHN2ZyB7XG4gIHRyYW5zZm9ybTogc2NhbGVYKC0xKTtcbn1cbi5tZC1mb290ZXItbmF2X190aXRsZSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZmxleC1ncm93OiAxO1xuICBtYXgtd2lkdGg6IGNhbGMoMTAwJSAtIDIuNHJlbSk7XG4gIHBhZGRpbmc6IDAgMXJlbTtcbiAgZm9udC1zaXplOiAwLjlyZW07XG4gIGxpbmUtaGVpZ2h0OiAyLjRyZW07XG59XG4ubWQtZm9vdGVyLW5hdl9fYnV0dG9uIHtcbiAgbWFyZ2luOiAwLjJyZW07XG4gIHBhZGRpbmc6IDAuNHJlbTtcbn1cbi5tZC1mb290ZXItbmF2X19kaXJlY3Rpb24ge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHJpZ2h0OiAwO1xuICBsZWZ0OiAwO1xuICBtYXJnaW4tdG9wOiAtMXJlbTtcbiAgcGFkZGluZzogMCAxcmVtO1xuICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1iZy1jb2xvci0tbGlnaHQpO1xuICBmb250LXNpemU6IDAuNjRyZW07XG59XG5cbi5tZC1mb290ZXItbWV0YSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXIpO1xufVxuLm1kLWZvb3Rlci1tZXRhX19pbm5lciB7XG4gIHBhZGRpbmc6IDAuMnJlbTtcbiAgb3ZlcmZsb3c6IGF1dG87XG59XG5odG1sIC5tZC1mb290ZXItbWV0YS5tZC10eXBlc2V0IGEge1xuICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1iZy1jb2xvci0tbGlnaHQpO1xufVxuaHRtbCAubWQtZm9vdGVyLW1ldGEubWQtdHlwZXNldCBhOmZvY3VzLCBodG1sIC5tZC1mb290ZXItbWV0YS5tZC10eXBlc2V0IGE6aG92ZXIge1xuICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1iZy1jb2xvcik7XG59XG5cbi5tZC1mb290ZXItY29weXJpZ2h0IHtcbiAgbWFyZ2luOiAwIDAuNnJlbTtcbiAgcGFkZGluZzogMC40cmVtIDA7XG4gIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWJnLWNvbG9yLS1saWdodGVyKTtcbiAgZm9udC1zaXplOiAwLjY0cmVtO1xufVxuLm1kLWZvb3Rlci1jb3B5cmlnaHRfX2hpZ2hsaWdodCB7XG4gIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWJnLWNvbG9yLS1saWdodCk7XG59XG5cbi5tZC1mb290ZXItc29jaWFsIHtcbiAgbWFyZ2luOiAwIDAuNHJlbTtcbiAgcGFkZGluZzogMC4ycmVtIDAgMC42cmVtO1xufVxuLm1kLWZvb3Rlci1zb2NpYWxfX2xpbmsge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHdpZHRoOiAxLjZyZW07XG4gIGhlaWdodDogMS42cmVtO1xuICB0cmFuc2l0aW9uOiBjb2xvciAyNTBtcztcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuLm1kLWZvb3Rlci1zb2NpYWxfX2xpbms6OmJlZm9yZSB7XG4gIGxpbmUtaGVpZ2h0OiAxLjk7XG59XG4ubWQtZm9vdGVyLXNvY2lhbF9fbGluayBzdmcge1xuICB3aWR0aDogMC44cmVtO1xuICB2ZXJ0aWNhbC1hbGlnbjogLTI1JTtcbiAgZmlsbDogY3VycmVudENvbG9yO1xufVxuXG4ubWQtbmF2IHtcbiAgZm9udC1zaXplOiAwLjdyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjM7XG59XG4ubWQtbmF2X190aXRsZSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwYWRkaW5nOiAwIDAuNnJlbTtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4ubWQtbmF2X190aXRsZSAubWQtbmF2X19idXR0b24ge1xuICBkaXNwbGF5OiBub25lO1xufVxuLm1kLW5hdl9fdGl0bGUgLm1kLW5hdl9fYnV0dG9uIGltZyB7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IGF1dG87XG59XG4ubWQtbmF2X190aXRsZSAubWQtbmF2X19idXR0b24ubWQtbG9nbyBpbWcsXG4ubWQtbmF2X190aXRsZSAubWQtbmF2X19idXR0b24ubWQtbG9nbyBzdmcge1xuICBkaXNwbGF5OiBibG9jaztcbiAgd2lkdGg6IDIuNHJlbTtcbiAgaGVpZ2h0OiAyLjRyZW07XG59XG4ubWQtbmF2X190aXRsZSAubWQtbmF2X19idXR0b24ubWQtbG9nbyBzdmcge1xuICBmaWxsOiBjdXJyZW50Q29sb3I7XG59XG4ubWQtbmF2X19saXN0IHtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwO1xuICBsaXN0LXN0eWxlOiBub25lO1xufVxuLm1kLW5hdl9faXRlbSB7XG4gIHBhZGRpbmc6IDAgMC42cmVtO1xufVxuLm1kLW5hdl9faXRlbTpsYXN0LWNoaWxkIHtcbiAgcGFkZGluZy1ib3R0b206IDAuNnJlbTtcbn1cbi5tZC1uYXZfX2l0ZW0gLm1kLW5hdl9faXRlbSB7XG4gIHBhZGRpbmctcmlnaHQ6IDA7XG59XG5bZGlyPXJ0bF0gLm1kLW5hdl9faXRlbSAubWQtbmF2X19pdGVtIHtcbiAgcGFkZGluZy1yaWdodDogMC42cmVtO1xuICBwYWRkaW5nLWxlZnQ6IDA7XG59XG4ubWQtbmF2X19pdGVtIC5tZC1uYXZfX2l0ZW06bGFzdC1jaGlsZCB7XG4gIHBhZGRpbmctYm90dG9tOiAwO1xufVxuLm1kLW5hdl9fbGluayB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBtYXJnaW4tdG9wOiAwLjYyNWVtO1xuICB0cmFuc2l0aW9uOiBjb2xvciAxMjVtcztcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgc2Nyb2xsLXNuYXAtYWxpZ246IHN0YXJ0O1xufVxuaHRtbCAubWQtbmF2X19saW5rW2Zvcj1fX3RvY10ge1xuICBkaXNwbGF5OiBub25lO1xufVxuaHRtbCAubWQtbmF2X19saW5rW2Zvcj1fX3RvY10gfiAubWQtbmF2IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbi5tZC1uYXZfX2xpbmtbZGF0YS1tZC1zdGF0ZT1ibHVyXSB7XG4gIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodCk7XG59XG4ubWQtbmF2X19pdGVtIC5tZC1uYXZfX2xpbmstLWFjdGl2ZSB7XG4gIGNvbG9yOiB2YXIoLS1tZC1wcmltYXJ5LWZnLWNvbG9yKTtcbn1cbi5tZC1uYXZfX2l0ZW0tLW5lc3RlZCA+IC5tZC1uYXZfX2xpbmsge1xuICBjb2xvcjogaW5oZXJpdDtcbn1cbi5tZC1uYXZfX2xpbms6Zm9jdXMsIC5tZC1uYXZfX2xpbms6aG92ZXIge1xuICBjb2xvcjogdmFyKC0tbWQtYWNjZW50LWZnLWNvbG9yKTtcbn1cbi5tZC1uYXZfX3NvdXJjZSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi5tZC1zZWFyY2gge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG4ubm8tanMgLm1kLXNlYXJjaCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4ubWQtc2VhcmNoX19vdmVybGF5IHtcbiAgb3BhY2l0eTogMDtcbiAgei1pbmRleDogMTtcbn1cbi5tZC1zZWFyY2hfX2lubmVyIHtcbiAgLXdlYmtpdC1iYWNrZmFjZS12aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgICAgICAgYmFja2ZhY2UtdmlzaWJpbGl0eTogaGlkZGVuO1xufVxuLm1kLXNlYXJjaF9fZm9ybSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cbi5tZC1zZWFyY2hfX2lucHV0IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBwYWRkaW5nOiAwIDIuMnJlbSAwIDMuNnJlbTtcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gIHotaW5kZXg6IDI7XG59XG5bZGlyPXJ0bF0gLm1kLXNlYXJjaF9faW5wdXQge1xuICBwYWRkaW5nOiAwIDMuNnJlbSAwIDIuMnJlbTtcbn1cbi5tZC1zZWFyY2hfX2lucHV0Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyIHtcbiAgLXdlYmtpdC10cmFuc2l0aW9uOiBjb2xvciAyNTBtcztcbiAgdHJhbnNpdGlvbjogY29sb3IgMjUwbXM7XG59XG4ubWQtc2VhcmNoX19pbnB1dDo6LW1vei1wbGFjZWhvbGRlciB7XG4gIC1tb3otdHJhbnNpdGlvbjogY29sb3IgMjUwbXM7XG4gIHRyYW5zaXRpb246IGNvbG9yIDI1MG1zO1xufVxuLm1kLXNlYXJjaF9faW5wdXQ6Oi1tcy1pbnB1dC1wbGFjZWhvbGRlciB7XG4gIC1tcy10cmFuc2l0aW9uOiBjb2xvciAyNTBtcztcbiAgdHJhbnNpdGlvbjogY29sb3IgMjUwbXM7XG59XG4ubWQtc2VhcmNoX19pbnB1dDo6cGxhY2Vob2xkZXIge1xuICB0cmFuc2l0aW9uOiBjb2xvciAyNTBtcztcbn1cbi5tZC1zZWFyY2hfX2lucHV0Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyIHtcbiAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0KTtcbn1cbi5tZC1zZWFyY2hfX2lucHV0OjotbW96LXBsYWNlaG9sZGVyIHtcbiAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0KTtcbn1cbi5tZC1zZWFyY2hfX2lucHV0OjotbXMtaW5wdXQtcGxhY2Vob2xkZXIge1xuICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHQpO1xufVxuLm1kLXNlYXJjaF9faW5wdXQgfiAubWQtc2VhcmNoX19pY29uLCAubWQtc2VhcmNoX19pbnB1dDo6cGxhY2Vob2xkZXIge1xuICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHQpO1xufVxuLm1kLXNlYXJjaF9faW5wdXQ6Oi1tcy1jbGVhciB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4ubWQtc2VhcmNoX19pY29uIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB3aWR0aDogMS4ycmVtO1xuICBoZWlnaHQ6IDEuMnJlbTtcbiAgdHJhbnNpdGlvbjogY29sb3IgMjUwbXMsIG9wYWNpdHkgMjUwbXM7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgei1pbmRleDogMjtcbn1cbi5tZC1zZWFyY2hfX2ljb246aG92ZXIge1xuICBvcGFjaXR5OiAwLjc7XG59XG4ubWQtc2VhcmNoX19pY29uW2Zvcj1fX3NlYXJjaF0ge1xuICB0b3A6IDAuM3JlbTtcbiAgbGVmdDogMC41cmVtO1xufVxuW2Rpcj1ydGxdIC5tZC1zZWFyY2hfX2ljb25bZm9yPV9fc2VhcmNoXSB7XG4gIHJpZ2h0OiAwLjVyZW07XG4gIGxlZnQ6IGluaXRpYWw7XG59XG5bZGlyPXJ0bF0gLm1kLXNlYXJjaF9faWNvbltmb3I9X19zZWFyY2hdIHN2ZyB7XG4gIHRyYW5zZm9ybTogc2NhbGVYKC0xKTtcbn1cbi5tZC1zZWFyY2hfX2ljb25bdHlwZT1yZXNldF0ge1xuICB0b3A6IDAuM3JlbTtcbiAgcmlnaHQ6IDAuNXJlbTtcbiAgdHJhbnNmb3JtOiBzY2FsZSgwLjc1KTtcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDE1MG1zIGN1YmljLWJlemllcigwLjEsIDAuNywgMC4xLCAxKSwgb3BhY2l0eSAxNTBtcztcbiAgb3BhY2l0eTogMDtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG5bZGlyPXJ0bF0gLm1kLXNlYXJjaF9faWNvblt0eXBlPXJlc2V0XSB7XG4gIHJpZ2h0OiBpbml0aWFsO1xuICBsZWZ0OiAwLjVyZW07XG59XG5bZGF0YS1tZC10b2dnbGU9c2VhcmNoXTpjaGVja2VkIH4gLm1kLWhlYWRlciAubWQtc2VhcmNoX19pbnB1dDp2YWxpZCB+IC5tZC1zZWFyY2hfX2ljb25bdHlwZT1yZXNldF0ge1xuICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICBvcGFjaXR5OiAxO1xuICBwb2ludGVyLWV2ZW50czogaW5pdGlhbDtcbn1cbltkYXRhLW1kLXRvZ2dsZT1zZWFyY2hdOmNoZWNrZWQgfiAubWQtaGVhZGVyIC5tZC1zZWFyY2hfX2lucHV0OnZhbGlkIH4gLm1kLXNlYXJjaF9faWNvblt0eXBlPXJlc2V0XTpob3ZlciB7XG4gIG9wYWNpdHk6IDAuNztcbn1cbi5tZC1zZWFyY2hfX291dHB1dCB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgd2lkdGg6IDEwMCU7XG4gIGJvcmRlci1yYWRpdXM6IDAgMCAwLjFyZW0gMC4xcmVtO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICB6LWluZGV4OiAxO1xufVxuLm1kLXNlYXJjaF9fc2Nyb2xsd3JhcCB7XG4gIGhlaWdodDogMTAwJTtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1iZy1jb2xvcik7XG4gIGJveC1zaGFkb3c6IGluc2V0IDAgMC4wNXJlbSAwIHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXN0KTtcbiAgb3ZlcmZsb3cteTogYXV0bztcbiAgLXdlYmtpdC1iYWNrZmFjZS12aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgICAgICAgYmFja2ZhY2UtdmlzaWJpbGl0eTogaGlkZGVuO1xuICAtd2Via2l0LXNjcm9sbC1zbmFwLXR5cGU6IHkgbWFuZGF0b3J5O1xuICAgICAgLW1zLXNjcm9sbC1zbmFwLXR5cGU6IHkgbWFuZGF0b3J5O1xuICAgICAgICAgIHNjcm9sbC1zbmFwLXR5cGU6IHkgbWFuZGF0b3J5O1xuICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7XG59XG5cbi5tZC1zZWFyY2gtcmVzdWx0IHtcbiAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3IpO1xuICB3b3JkLWJyZWFrOiBicmVhay13b3JkO1xufVxuLm1kLXNlYXJjaC1yZXN1bHRfX21ldGEge1xuICBwYWRkaW5nOiAwIDAuOHJlbTtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlc3QpO1xuICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHQpO1xuICBmb250LXNpemU6IDAuNjRyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjhyZW07XG4gIHNjcm9sbC1zbmFwLWFsaWduOiBzdGFydDtcbn1cbi5tZC1zZWFyY2gtcmVzdWx0X19saXN0IHtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwO1xuICBib3JkZXItdG9wOiAwLjA1cmVtIHNvbGlkIHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXN0KTtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbn1cbi5tZC1zZWFyY2gtcmVzdWx0X19pdGVtIHtcbiAgYm94LXNoYWRvdzogMCAtMC4wNXJlbSAwIHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXN0KTtcbn1cbi5tZC1zZWFyY2gtcmVzdWx0X19saW5rIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHRyYW5zaXRpb246IGJhY2tncm91bmQgMjUwbXM7XG4gIG91dGxpbmU6IDA7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHNjcm9sbC1zbmFwLWFsaWduOiBzdGFydDtcbn1cbi5tZC1zZWFyY2gtcmVzdWx0X19saW5rOmZvY3VzLCAubWQtc2VhcmNoLXJlc3VsdF9fbGluazpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW1kLWFjY2VudC1mZy1jb2xvci0tdHJhbnNwYXJlbnQpO1xufVxuLm1kLXNlYXJjaC1yZXN1bHRfX2xpbms6Zm9jdXMgLm1kLXNlYXJjaC1yZXN1bHRfX2FydGljbGU6OmJlZm9yZSwgLm1kLXNlYXJjaC1yZXN1bHRfX2xpbms6aG92ZXIgLm1kLXNlYXJjaC1yZXN1bHRfX2FydGljbGU6OmJlZm9yZSB7XG4gIG9wYWNpdHk6IDAuNztcbn1cbi5tZC1zZWFyY2gtcmVzdWx0X19saW5rOmxhc3QtY2hpbGQgLm1kLXNlYXJjaC1yZXN1bHRfX3RlYXNlciB7XG4gIG1hcmdpbi1ib3R0b206IDAuNnJlbTtcbn1cbi5tZC1zZWFyY2gtcmVzdWx0X19hcnRpY2xlIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBwYWRkaW5nOiAwIDAuOHJlbTtcbiAgb3ZlcmZsb3c6IGF1dG87XG59XG4ubWQtc2VhcmNoLXJlc3VsdF9fYXJ0aWNsZS0tZG9jdW1lbnQgLm1kLXNlYXJjaC1yZXN1bHRfX3RpdGxlIHtcbiAgbWFyZ2luOiAwLjU1cmVtIDA7XG4gIGZvbnQtc2l6ZTogMC44cmVtO1xuICBmb250LXdlaWdodDogNDAwO1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuLm1kLXNlYXJjaC1yZXN1bHRfX2ljb24ge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGxlZnQ6IDA7XG4gIG1hcmdpbjogMC4xcmVtO1xuICBwYWRkaW5nOiAwLjRyZW07XG4gIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodCk7XG59XG5bZGlyPXJ0bF0gLm1kLXNlYXJjaC1yZXN1bHRfX2ljb24ge1xuICByaWdodDogMDtcbiAgbGVmdDogaW5pdGlhbDtcbn1cbltkaXI9cnRsXSAubWQtc2VhcmNoLXJlc3VsdF9faWNvbiBzdmcge1xuICB0cmFuc2Zvcm06IHNjYWxlWCgtMSk7XG59XG4ubWQtc2VhcmNoLXJlc3VsdF9fdGl0bGUge1xuICBtYXJnaW46IDAuNWVtIDA7XG4gIGZvbnQtc2l6ZTogMC42NHJlbTtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cbi5tZC1zZWFyY2gtcmVzdWx0X190ZWFzZXIge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgbWF4LWhlaWdodDogMS42NXJlbTtcbiAgbWFyZ2luOiAwLjVlbSAwO1xuICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHQpO1xuICBmb250LXNpemU6IDAuNjRyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xuICAtd2Via2l0LWxpbmUtY2xhbXA6IDI7XG59XG4ubWQtc2VhcmNoLXJlc3VsdCBlbSB7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG5cbi5tZC1zaWRlYmFyIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB3aWR0aDogMTIuMXJlbTtcbiAgcGFkZGluZzogMS4ycmVtIDA7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4ubWQtc2lkZWJhcltkYXRhLW1kLXN0YXRlPWxvY2tdIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDIuNHJlbTtcbn1cbi5tZC1zaWRlYmFyLS1zZWNvbmRhcnkge1xuICBkaXNwbGF5OiBub25lO1xufVxuLm1kLXNpZGViYXJfX3Njcm9sbHdyYXAge1xuICBtYXgtaGVpZ2h0OiAxMDAlO1xuICBtYXJnaW46IDAgMC4ycmVtO1xuICBvdmVyZmxvdy15OiBhdXRvO1xuICAtd2Via2l0LWJhY2tmYWNlLXZpc2liaWxpdHk6IGhpZGRlbjtcbiAgICAgICAgICBiYWNrZmFjZS12aXNpYmlsaXR5OiBoaWRkZW47XG4gIC13ZWJraXQtc2Nyb2xsLXNuYXAtdHlwZTogeSBtYW5kYXRvcnk7XG4gICAgICAtbXMtc2Nyb2xsLXNuYXAtdHlwZTogeSBtYW5kYXRvcnk7XG4gICAgICAgICAgc2Nyb2xsLXNuYXAtdHlwZTogeSBtYW5kYXRvcnk7XG59XG4ubWQtc2lkZWJhcl9fc2Nyb2xsd3JhcDo6LXdlYmtpdC1zY3JvbGxiYXIge1xuICB3aWR0aDogMC4ycmVtO1xuICBoZWlnaHQ6IDAuMnJlbTtcbn1cbi5tZC1zaWRlYmFyX19zY3JvbGx3cmFwOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXIpO1xufVxuLm1kLXNpZGViYXJfX3Njcm9sbHdyYXA6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iOmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtYWNjZW50LWZnLWNvbG9yKTtcbn1cblxuQC13ZWJraXQta2V5ZnJhbWVzIG1kLXNvdXJjZV9fZmFjdHMtLWRvbmUge1xuICAwJSB7XG4gICAgaGVpZ2h0OiAwO1xuICB9XG4gIDEwMCUge1xuICAgIGhlaWdodDogMC42NXJlbTtcbiAgfVxufVxuXG5Aa2V5ZnJhbWVzIG1kLXNvdXJjZV9fZmFjdHMtLWRvbmUge1xuICAwJSB7XG4gICAgaGVpZ2h0OiAwO1xuICB9XG4gIDEwMCUge1xuICAgIGhlaWdodDogMC42NXJlbTtcbiAgfVxufVxuQC13ZWJraXQta2V5ZnJhbWVzIG1kLXNvdXJjZV9fZmFjdC0tZG9uZSB7XG4gIDAlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMTAwJSk7XG4gICAgb3BhY2l0eTogMDtcbiAgfVxuICA1MCUge1xuICAgIG9wYWNpdHk6IDA7XG4gIH1cbiAgMTAwJSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDAlKTtcbiAgICBvcGFjaXR5OiAxO1xuICB9XG59XG5Aa2V5ZnJhbWVzIG1kLXNvdXJjZV9fZmFjdC0tZG9uZSB7XG4gIDAlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMTAwJSk7XG4gICAgb3BhY2l0eTogMDtcbiAgfVxuICA1MCUge1xuICAgIG9wYWNpdHk6IDA7XG4gIH1cbiAgMTAwJSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDAlKTtcbiAgICBvcGFjaXR5OiAxO1xuICB9XG59XG4ubWQtc291cmNlIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHRyYW5zaXRpb246IG9wYWNpdHkgMjUwbXM7XG4gIGZvbnQtc2l6ZTogMC42NXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuMjU7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIC13ZWJraXQtYmFja2ZhY2UtdmlzaWJpbGl0eTogaGlkZGVuO1xuICAgICAgICAgIGJhY2tmYWNlLXZpc2liaWxpdHk6IGhpZGRlbjtcbn1cbltkaXI9cnRsXSAubWQtc291cmNlIHtcbiAgcGFkZGluZy1yaWdodDogaW5pdGlhbDtcbiAgcGFkZGluZy1sZWZ0OiAwLjZyZW07XG59XG4ubWQtc291cmNlOmhvdmVyIHtcbiAgb3BhY2l0eTogMC43O1xufVxuLm1kLXNvdXJjZV9faWNvbiB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgd2lkdGg6IDIuNHJlbTtcbiAgaGVpZ2h0OiAyLjRyZW07XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG4ubWQtc291cmNlX19pY29uIHN2ZyB7XG4gIG1hcmdpbi10b3A6IDAuNnJlbTtcbiAgbWFyZ2luLWxlZnQ6IDAuNnJlbTtcbn1cbltkaXI9cnRsXSAubWQtc291cmNlX19pY29uIHN2ZyB7XG4gIG1hcmdpbi1yaWdodDogMC42cmVtO1xuICBtYXJnaW4tbGVmdDogaW5pdGlhbDtcbn1cbi5tZC1zb3VyY2VfX2ljb24gKyAubWQtc291cmNlX19yZXBvc2l0b3J5IHtcbiAgbWFyZ2luLWxlZnQ6IC0ycmVtO1xuICBwYWRkaW5nLWxlZnQ6IDJyZW07XG59XG5bZGlyPXJ0bF0gLm1kLXNvdXJjZV9faWNvbiArIC5tZC1zb3VyY2VfX3JlcG9zaXRvcnkge1xuICBtYXJnaW4tcmlnaHQ6IC0ycmVtO1xuICBtYXJnaW4tbGVmdDogaW5pdGlhbDtcbiAgcGFkZGluZy1yaWdodDogMnJlbTtcbiAgcGFkZGluZy1sZWZ0OiBpbml0aWFsO1xufVxuLm1kLXNvdXJjZV9fcmVwb3NpdG9yeSB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgbWF4LXdpZHRoOiBjYWxjKDEwMCUgLSAxLjJyZW0pO1xuICBtYXJnaW4tbGVmdDogMC42cmVtO1xuICBmb250LXdlaWdodDogNzAwO1xuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cbi5tZC1zb3VyY2VfX2ZhY3RzIHtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwO1xuICBmb250LXNpemU6IDAuNTVyZW07XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG4gIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcbiAgb3BhY2l0eTogMC43NTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbltkYXRhLW1kLXN0YXRlPWRvbmVdIC5tZC1zb3VyY2VfX2ZhY3RzIHtcbiAgLXdlYmtpdC1hbmltYXRpb246IG1kLXNvdXJjZV9fZmFjdHMtLWRvbmUgMjUwbXMgZWFzZS1pbjtcbiAgICAgICAgICBhbmltYXRpb246IG1kLXNvdXJjZV9fZmFjdHMtLWRvbmUgMjUwbXMgZWFzZS1pbjtcbn1cbi5tZC1zb3VyY2VfX2ZhY3Qge1xuICBmbG9hdDogbGVmdDtcbn1cbltkaXI9cnRsXSAubWQtc291cmNlX19mYWN0IHtcbiAgZmxvYXQ6IHJpZ2h0O1xufVxuW2RhdGEtbWQtc3RhdGU9ZG9uZV0gLm1kLXNvdXJjZV9fZmFjdCB7XG4gIC13ZWJraXQtYW5pbWF0aW9uOiBtZC1zb3VyY2VfX2ZhY3QtLWRvbmUgNDAwbXMgZWFzZS1vdXQ7XG4gICAgICAgICAgYW5pbWF0aW9uOiBtZC1zb3VyY2VfX2ZhY3QtLWRvbmUgNDAwbXMgZWFzZS1vdXQ7XG59XG4ubWQtc291cmNlX19mYWN0OjpiZWZvcmUge1xuICBtYXJnaW46IDAgMC4xcmVtO1xuICBjb250ZW50OiBcIsK3XCI7XG59XG4ubWQtc291cmNlX19mYWN0OmZpcnN0LWNoaWxkOjpiZWZvcmUge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4ubWQtdGFicyB7XG4gIHdpZHRoOiAxMDAlO1xuICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDI1MG1zO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1wcmltYXJ5LWZnLWNvbG9yKTtcbiAgY29sb3I6IHZhcigtLW1kLXByaW1hcnktYmctY29sb3IpO1xuICBvdmVyZmxvdzogYXV0bztcbn1cbi5uby1qcyAubWQtdGFicyB7XG4gIHRyYW5zaXRpb246IG5vbmU7XG59XG4ubWQtdGFic19fbGlzdCB7XG4gIG1hcmdpbjogMDtcbiAgbWFyZ2luLWxlZnQ6IDAuMnJlbTtcbiAgcGFkZGluZzogMDtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbn1cbltkaXI9cnRsXSAubWQtdGFic19fbGlzdCB7XG4gIG1hcmdpbi1yaWdodDogMC4ycmVtO1xuICBtYXJnaW4tbGVmdDogaW5pdGlhbDtcbn1cbi5tZC10YWJzX19pdGVtIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBoZWlnaHQ6IDIuNHJlbTtcbiAgcGFkZGluZy1yaWdodDogMC42cmVtO1xuICBwYWRkaW5nLWxlZnQ6IDAuNnJlbTtcbn1cbi5tZC10YWJzX19saW5rIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIG1hcmdpbi10b3A6IDAuOHJlbTtcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDQwMG1zIGN1YmljLWJlemllcigwLjEsIDAuNywgMC4xLCAxKSwgb3BhY2l0eSAyNTBtcztcbiAgZm9udC1zaXplOiAwLjdyZW07XG4gIG9wYWNpdHk6IDAuNztcbn1cbi5uby1qcyAubWQtdGFic19fbGluayB7XG4gIHRyYW5zaXRpb246IG5vbmU7XG59XG4ubWQtdGFic19fbGluay0tYWN0aXZlLCAubWQtdGFic19fbGluazpob3ZlciB7XG4gIGNvbG9yOiBpbmhlcml0O1xuICBvcGFjaXR5OiAxO1xufVxuLm1kLXRhYnNfX2l0ZW06bnRoLWNoaWxkKDIpIC5tZC10YWJzX19saW5rIHtcbiAgdHJhbnNpdGlvbi1kZWxheTogMjBtcztcbn1cbi5tZC10YWJzX19pdGVtOm50aC1jaGlsZCgzKSAubWQtdGFic19fbGluayB7XG4gIHRyYW5zaXRpb24tZGVsYXk6IDQwbXM7XG59XG4ubWQtdGFic19faXRlbTpudGgtY2hpbGQoNCkgLm1kLXRhYnNfX2xpbmsge1xuICB0cmFuc2l0aW9uLWRlbGF5OiA2MG1zO1xufVxuLm1kLXRhYnNfX2l0ZW06bnRoLWNoaWxkKDUpIC5tZC10YWJzX19saW5rIHtcbiAgdHJhbnNpdGlvbi1kZWxheTogODBtcztcbn1cbi5tZC10YWJzX19pdGVtOm50aC1jaGlsZCg2KSAubWQtdGFic19fbGluayB7XG4gIHRyYW5zaXRpb24tZGVsYXk6IDEwMG1zO1xufVxuLm1kLXRhYnNfX2l0ZW06bnRoLWNoaWxkKDcpIC5tZC10YWJzX19saW5rIHtcbiAgdHJhbnNpdGlvbi1kZWxheTogMTIwbXM7XG59XG4ubWQtdGFic19faXRlbTpudGgtY2hpbGQoOCkgLm1kLXRhYnNfX2xpbmsge1xuICB0cmFuc2l0aW9uLWRlbGF5OiAxNDBtcztcbn1cbi5tZC10YWJzX19pdGVtOm50aC1jaGlsZCg5KSAubWQtdGFic19fbGluayB7XG4gIHRyYW5zaXRpb24tZGVsYXk6IDE2MG1zO1xufVxuLm1kLXRhYnNfX2l0ZW06bnRoLWNoaWxkKDEwKSAubWQtdGFic19fbGluayB7XG4gIHRyYW5zaXRpb24tZGVsYXk6IDE4MG1zO1xufVxuLm1kLXRhYnNfX2l0ZW06bnRoLWNoaWxkKDExKSAubWQtdGFic19fbGluayB7XG4gIHRyYW5zaXRpb24tZGVsYXk6IDIwMG1zO1xufVxuLm1kLXRhYnNfX2l0ZW06bnRoLWNoaWxkKDEyKSAubWQtdGFic19fbGluayB7XG4gIHRyYW5zaXRpb24tZGVsYXk6IDIyMG1zO1xufVxuLm1kLXRhYnNfX2l0ZW06bnRoLWNoaWxkKDEzKSAubWQtdGFic19fbGluayB7XG4gIHRyYW5zaXRpb24tZGVsYXk6IDI0MG1zO1xufVxuLm1kLXRhYnNfX2l0ZW06bnRoLWNoaWxkKDE0KSAubWQtdGFic19fbGluayB7XG4gIHRyYW5zaXRpb24tZGVsYXk6IDI2MG1zO1xufVxuLm1kLXRhYnNfX2l0ZW06bnRoLWNoaWxkKDE1KSAubWQtdGFic19fbGluayB7XG4gIHRyYW5zaXRpb24tZGVsYXk6IDI4MG1zO1xufVxuLm1kLXRhYnNfX2l0ZW06bnRoLWNoaWxkKDE2KSAubWQtdGFic19fbGluayB7XG4gIHRyYW5zaXRpb24tZGVsYXk6IDMwMG1zO1xufVxuLm1kLXRhYnNbZGF0YS1tZC1zdGF0ZT1oaWRkZW5dIHtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG4ubWQtdGFic1tkYXRhLW1kLXN0YXRlPWhpZGRlbl0gLm1kLXRhYnNfX2xpbmsge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoNTAlKTtcbiAgdHJhbnNpdGlvbjogY29sb3IgMjUwbXMsIHRyYW5zZm9ybSAwbXMgNDAwbXMsIG9wYWNpdHkgMTAwbXM7XG4gIG9wYWNpdHk6IDA7XG59XG5cbi5tZC10eXBlc2V0IC5hZG1vbml0aW9uLCAubWQtdHlwZXNldCBkZXRhaWxzIHtcbiAgbWFyZ2luOiAxLjU2MjVlbSAwO1xuICBwYWRkaW5nOiAwIDAuNnJlbTtcbiAgYm9yZGVyLWxlZnQ6IDAuMnJlbSBzb2xpZCAjNDQ4YWZmO1xuICBib3JkZXItcmFkaXVzOiAwLjFyZW07XG4gIGZvbnQtc2l6ZTogMC42NHJlbTtcbiAgYm94LXNoYWRvdzogMCAwLjJyZW0gMC41cmVtIHJnYmEoMCwgMCwgMCwgMC4wNSksIDAgMCAwLjA1cmVtIHJnYmEoMCwgMCwgMCwgMC4xKTtcbiAgb3ZlcmZsb3c6IGF1dG87XG59XG5bZGlyPXJ0bF0gLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24sIFtkaXI9cnRsXSAubWQtdHlwZXNldCBkZXRhaWxzIHtcbiAgYm9yZGVyLXJpZ2h0OiAwLjJyZW0gc29saWQgIzQ0OGFmZjtcbiAgYm9yZGVyLWxlZnQ6IG5vbmU7XG59XG5odG1sIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uID4gOmxhc3QtY2hpbGQsIGh0bWwgLm1kLXR5cGVzZXQgZGV0YWlscyA+IDpsYXN0LWNoaWxkIHtcbiAgbWFyZ2luLWJvdHRvbTogMC42cmVtO1xufVxuLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24gLmFkbW9uaXRpb24sIC5tZC10eXBlc2V0IGRldGFpbHMgLmFkbW9uaXRpb24sIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uIGRldGFpbHMsIC5tZC10eXBlc2V0IGRldGFpbHMgZGV0YWlscyB7XG4gIG1hcmdpbjogMWVtIDA7XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbi50bGRyLCAubWQtdHlwZXNldCBkZXRhaWxzLnRsZHIsIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uLnN1bW1hcnksIC5tZC10eXBlc2V0IGRldGFpbHMuc3VtbWFyeSwgLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uYWJzdHJhY3QsIC5tZC10eXBlc2V0IGRldGFpbHMuYWJzdHJhY3Qge1xuICBib3JkZXItbGVmdC1jb2xvcjogIzAwYjBmZjtcbn1cbi5tZC10eXBlc2V0IC5hZG1vbml0aW9uLnRsZHIgPiA6Zmlyc3QtY2hpbGQsIC5tZC10eXBlc2V0IGRldGFpbHMudGxkciA+IDpmaXJzdC1jaGlsZCwgLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uc3VtbWFyeSA+IDpmaXJzdC1jaGlsZCwgLm1kLXR5cGVzZXQgZGV0YWlscy5zdW1tYXJ5ID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5hYnN0cmFjdCA+IDpmaXJzdC1jaGlsZCwgLm1kLXR5cGVzZXQgZGV0YWlscy5hYnN0cmFjdCA+IDpmaXJzdC1jaGlsZCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMTc2LCAyNTUsIDAuMSk7XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbi50bGRyID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IGRldGFpbHMudGxkciA+IDpmaXJzdC1jaGlsZDo6YmVmb3JlLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5zdW1tYXJ5ID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IGRldGFpbHMuc3VtbWFyeSA+IDpmaXJzdC1jaGlsZDo6YmVmb3JlLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5hYnN0cmFjdCA+IDpmaXJzdC1jaGlsZDo6YmVmb3JlLCAubWQtdHlwZXNldCBkZXRhaWxzLmFic3RyYWN0ID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDBiMGZmO1xuICAtd2Via2l0LW1hc2staW1hZ2U6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIiB2aWV3Qm94PVxcXCIwIDAgMjQgMjRcXFwiPjxwYXRoIGQ9XFxcIk00LDVIMjBWN0g0VjVNNCw5SDIwVjExSDRWOU00LDEzSDIwVjE1SDRWMTNNNCwxN0gxNFYxOUg0VjE3WlxcXCIgLz48L3N2Zz5cIik7XG4gICAgICAgICAgbWFzay1pbWFnZTogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sO3V0ZjgsPHN2ZyB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIHZpZXdCb3g9XFxcIjAgMCAyNCAyNFxcXCI+PHBhdGggZD1cXFwiTTQsNUgyMFY3SDRWNU00LDlIMjBWMTFINFY5TTQsMTNIMjBWMTVINFYxM000LDE3SDE0VjE5SDRWMTdaXFxcIiAvPjwvc3ZnPlwiKTtcbn1cbi5tZC10eXBlc2V0IC5hZG1vbml0aW9uLnRvZG8sIC5tZC10eXBlc2V0IGRldGFpbHMudG9kbywgLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uaW5mbywgLm1kLXR5cGVzZXQgZGV0YWlscy5pbmZvIHtcbiAgYm9yZGVyLWxlZnQtY29sb3I6ICMwMGI4ZDQ7XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbi50b2RvID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCBkZXRhaWxzLnRvZG8gPiA6Zmlyc3QtY2hpbGQsIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uLmluZm8gPiA6Zmlyc3QtY2hpbGQsIC5tZC10eXBlc2V0IGRldGFpbHMuaW5mbyA+IDpmaXJzdC1jaGlsZCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMTg0LCAyMTIsIDAuMSk7XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbi50b2RvID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IGRldGFpbHMudG9kbyA+IDpmaXJzdC1jaGlsZDo6YmVmb3JlLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5pbmZvID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IGRldGFpbHMuaW5mbyA+IDpmaXJzdC1jaGlsZDo6YmVmb3JlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwYjhkNDtcbiAgLXdlYmtpdC1tYXNrLWltYWdlOiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWw7dXRmOCw8c3ZnIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCIgdmlld0JveD1cXFwiMCAwIDI0IDI0XFxcIj48cGF0aCBkPVxcXCJNMTMsOUgxMVY3SDEzTTEzLDE3SDExVjExSDEzTTEyLDJBMTAsMTAgMCAwLDAgMiwxMkExMCwxMCAwIDAsMCAxMiwyMkExMCwxMCAwIDAsMCAyMiwxMkExMCwxMCAwIDAsMCAxMiwyWlxcXCIgLz48L3N2Zz5cIik7XG4gICAgICAgICAgbWFzay1pbWFnZTogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sO3V0ZjgsPHN2ZyB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIHZpZXdCb3g9XFxcIjAgMCAyNCAyNFxcXCI+PHBhdGggZD1cXFwiTTEzLDlIMTFWN0gxM00xMywxN0gxMVYxMUgxM00xMiwyQTEwLDEwIDAgMCwwIDIsMTJBMTAsMTAgMCAwLDAgMTIsMjJBMTAsMTAgMCAwLDAgMjIsMTJBMTAsMTAgMCAwLDAgMTIsMlpcXFwiIC8+PC9zdmc+XCIpO1xufVxuLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uaW1wb3J0YW50LCAubWQtdHlwZXNldCBkZXRhaWxzLmltcG9ydGFudCwgLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uaGludCwgLm1kLXR5cGVzZXQgZGV0YWlscy5oaW50LCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi50aXAsIC5tZC10eXBlc2V0IGRldGFpbHMudGlwIHtcbiAgYm9yZGVyLWxlZnQtY29sb3I6ICMwMGJmYTU7XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbi5pbXBvcnRhbnQgPiA6Zmlyc3QtY2hpbGQsIC5tZC10eXBlc2V0IGRldGFpbHMuaW1wb3J0YW50ID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5oaW50ID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCBkZXRhaWxzLmhpbnQgPiA6Zmlyc3QtY2hpbGQsIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uLnRpcCA+IDpmaXJzdC1jaGlsZCwgLm1kLXR5cGVzZXQgZGV0YWlscy50aXAgPiA6Zmlyc3QtY2hpbGQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDE5MSwgMTY1LCAwLjEpO1xufVxuLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uaW1wb3J0YW50ID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IGRldGFpbHMuaW1wb3J0YW50ID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uLmhpbnQgPiA6Zmlyc3QtY2hpbGQ6OmJlZm9yZSwgLm1kLXR5cGVzZXQgZGV0YWlscy5oaW50ID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uLnRpcCA+IDpmaXJzdC1jaGlsZDo6YmVmb3JlLCAubWQtdHlwZXNldCBkZXRhaWxzLnRpcCA+IDpmaXJzdC1jaGlsZDo6YmVmb3JlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwYmZhNTtcbiAgLXdlYmtpdC1tYXNrLWltYWdlOiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWw7dXRmOCw8c3ZnIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCIgdmlld0JveD1cXFwiMCAwIDI0IDI0XFxcIj48cGF0aCBkPVxcXCJNMTcuNTUsMTEuMkMxNy4zMiwxMC45IDE3LjA1LDEwLjY0IDE2Ljc5LDEwLjM4QzE2LjE0LDkuNzggMTUuMzksOS4zNSAxNC43Niw4LjcyQzEzLjMsNy4yNiAxMyw0Ljg1IDEzLjkxLDNDMTMsMy4yMyAxMi4xNiwzLjc1IDExLjQ2LDQuMzJDOC45Miw2LjQgNy45MiwxMC4wNyA5LjEyLDEzLjIyQzkuMTYsMTMuMzIgOS4yLDEzLjQyIDkuMiwxMy41NUM5LjIsMTMuNzcgOS4wNSwxMy45NyA4Ljg1LDE0LjA1QzguNjMsMTQuMTUgOC4zOSwxNC4wOSA4LjIxLDEzLjkzQzguMTUsMTMuODggOC4xMSwxMy44MyA4LjA2LDEzLjc2QzYuOTYsMTIuMzMgNi43OCwxMC4yOCA3LjUzLDguNjRDNS44OSwxMCA1LDEyLjMgNS4xNCwxNC40N0M1LjE4LDE0Ljk3IDUuMjQsMTUuNDcgNS40MSwxNS45N0M1LjU1LDE2LjU3IDUuODEsMTcuMTcgNi4xMywxNy43QzcuMTcsMTkuNDMgOSwyMC42NyAxMC45NywyMC45MkMxMy4wNywyMS4xOSAxNS4zMiwyMC44IDE2LjkzLDE5LjMyQzE4LjczLDE3LjY2IDE5LjM4LDE1IDE4LjQzLDEyLjcyTDE4LjMsMTIuNDZDMTguMSwxMiAxNy44MywxMS41OSAxNy41LDExLjIxTDE3LjU1LDExLjJNMTQuNDUsMTcuNUMxNC4xNywxNy43NCAxMy43MiwxOCAxMy4zNywxOC4xQzEyLjI3LDE4LjUgMTEuMTcsMTcuOTQgMTAuNSwxNy4yOEMxMS42OSwxNyAxMi4zOSwxNi4xMiAxMi41OSwxNS4yM0MxMi43NiwxNC40MyAxMi40NSwxMy43NyAxMi4zMiwxM0MxMi4yLDEyLjI2IDEyLjIyLDExLjYzIDEyLjUsMTAuOTRDMTIuNjcsMTEuMzIgMTIuODcsMTEuNyAxMy4xLDEyQzEzLjg2LDEzIDE1LjA1LDEzLjQ0IDE1LjMsMTQuOEMxNS4zNCwxNC45NCAxNS4zNiwxNS4wOCAxNS4zNiwxNS4yM0MxNS4zOSwxNi4wNSAxNS4wNCwxNi45NSAxNC40NCwxNy41SDE0LjQ1WlxcXCIgLz48L3N2Zz5cIik7XG4gICAgICAgICAgbWFzay1pbWFnZTogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sO3V0ZjgsPHN2ZyB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIHZpZXdCb3g9XFxcIjAgMCAyNCAyNFxcXCI+PHBhdGggZD1cXFwiTTE3LjU1LDExLjJDMTcuMzIsMTAuOSAxNy4wNSwxMC42NCAxNi43OSwxMC4zOEMxNi4xNCw5Ljc4IDE1LjM5LDkuMzUgMTQuNzYsOC43MkMxMy4zLDcuMjYgMTMsNC44NSAxMy45MSwzQzEzLDMuMjMgMTIuMTYsMy43NSAxMS40Niw0LjMyQzguOTIsNi40IDcuOTIsMTAuMDcgOS4xMiwxMy4yMkM5LjE2LDEzLjMyIDkuMiwxMy40MiA5LjIsMTMuNTVDOS4yLDEzLjc3IDkuMDUsMTMuOTcgOC44NSwxNC4wNUM4LjYzLDE0LjE1IDguMzksMTQuMDkgOC4yMSwxMy45M0M4LjE1LDEzLjg4IDguMTEsMTMuODMgOC4wNiwxMy43NkM2Ljk2LDEyLjMzIDYuNzgsMTAuMjggNy41Myw4LjY0QzUuODksMTAgNSwxMi4zIDUuMTQsMTQuNDdDNS4xOCwxNC45NyA1LjI0LDE1LjQ3IDUuNDEsMTUuOTdDNS41NSwxNi41NyA1LjgxLDE3LjE3IDYuMTMsMTcuN0M3LjE3LDE5LjQzIDksMjAuNjcgMTAuOTcsMjAuOTJDMTMuMDcsMjEuMTkgMTUuMzIsMjAuOCAxNi45MywxOS4zMkMxOC43MywxNy42NiAxOS4zOCwxNSAxOC40MywxMi43MkwxOC4zLDEyLjQ2QzE4LjEsMTIgMTcuODMsMTEuNTkgMTcuNSwxMS4yMUwxNy41NSwxMS4yTTE0LjQ1LDE3LjVDMTQuMTcsMTcuNzQgMTMuNzIsMTggMTMuMzcsMTguMUMxMi4yNywxOC41IDExLjE3LDE3Ljk0IDEwLjUsMTcuMjhDMTEuNjksMTcgMTIuMzksMTYuMTIgMTIuNTksMTUuMjNDMTIuNzYsMTQuNDMgMTIuNDUsMTMuNzcgMTIuMzIsMTNDMTIuMiwxMi4yNiAxMi4yMiwxMS42MyAxMi41LDEwLjk0QzEyLjY3LDExLjMyIDEyLjg3LDExLjcgMTMuMSwxMkMxMy44NiwxMyAxNS4wNSwxMy40NCAxNS4zLDE0LjhDMTUuMzQsMTQuOTQgMTUuMzYsMTUuMDggMTUuMzYsMTUuMjNDMTUuMzksMTYuMDUgMTUuMDQsMTYuOTUgMTQuNDQsMTcuNUgxNC40NVpcXFwiIC8+PC9zdmc+XCIpO1xufVxuLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uZG9uZSwgLm1kLXR5cGVzZXQgZGV0YWlscy5kb25lLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5jaGVjaywgLm1kLXR5cGVzZXQgZGV0YWlscy5jaGVjaywgLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uc3VjY2VzcywgLm1kLXR5cGVzZXQgZGV0YWlscy5zdWNjZXNzIHtcbiAgYm9yZGVyLWxlZnQtY29sb3I6ICMwMGM4NTM7XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbi5kb25lID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCBkZXRhaWxzLmRvbmUgPiA6Zmlyc3QtY2hpbGQsIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uLmNoZWNrID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCBkZXRhaWxzLmNoZWNrID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5zdWNjZXNzID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCBkZXRhaWxzLnN1Y2Nlc3MgPiA6Zmlyc3QtY2hpbGQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDIwMCwgODMsIDAuMSk7XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbi5kb25lID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IGRldGFpbHMuZG9uZSA+IDpmaXJzdC1jaGlsZDo6YmVmb3JlLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5jaGVjayA+IDpmaXJzdC1jaGlsZDo6YmVmb3JlLCAubWQtdHlwZXNldCBkZXRhaWxzLmNoZWNrID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uLnN1Y2Nlc3MgPiA6Zmlyc3QtY2hpbGQ6OmJlZm9yZSwgLm1kLXR5cGVzZXQgZGV0YWlscy5zdWNjZXNzID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDBjODUzO1xuICAtd2Via2l0LW1hc2staW1hZ2U6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIiB2aWV3Qm94PVxcXCIwIDAgMjQgMjRcXFwiPjxwYXRoIGQ9XFxcIk0xMiwyQTEwLDEwIDAgMCwxIDIyLDEyQTEwLDEwIDAgMCwxIDEyLDIyQTEwLDEwIDAgMCwxIDIsMTJBMTAsMTAgMCAwLDEgMTIsMk0xMSwxNi41TDE4LDkuNUwxNi41OSw4LjA5TDExLDEzLjY3TDcuOTEsMTAuNTlMNi41LDEyTDExLDE2LjVaXFxcIiAvPjwvc3ZnPlwiKTtcbiAgICAgICAgICBtYXNrLWltYWdlOiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWw7dXRmOCw8c3ZnIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCIgdmlld0JveD1cXFwiMCAwIDI0IDI0XFxcIj48cGF0aCBkPVxcXCJNMTIsMkExMCwxMCAwIDAsMSAyMiwxMkExMCwxMCAwIDAsMSAxMiwyMkExMCwxMCAwIDAsMSAyLDEyQTEwLDEwIDAgMCwxIDEyLDJNMTEsMTYuNUwxOCw5LjVMMTYuNTksOC4wOUwxMSwxMy42N0w3LjkxLDEwLjU5TDYuNSwxMkwxMSwxNi41WlxcXCIgLz48L3N2Zz5cIik7XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbi5mYXEsIC5tZC10eXBlc2V0IGRldGFpbHMuZmFxLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5oZWxwLCAubWQtdHlwZXNldCBkZXRhaWxzLmhlbHAsIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uLnF1ZXN0aW9uLCAubWQtdHlwZXNldCBkZXRhaWxzLnF1ZXN0aW9uIHtcbiAgYm9yZGVyLWxlZnQtY29sb3I6ICM2NGRkMTc7XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbi5mYXEgPiA6Zmlyc3QtY2hpbGQsIC5tZC10eXBlc2V0IGRldGFpbHMuZmFxID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5oZWxwID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCBkZXRhaWxzLmhlbHAgPiA6Zmlyc3QtY2hpbGQsIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uLnF1ZXN0aW9uID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCBkZXRhaWxzLnF1ZXN0aW9uID4gOmZpcnN0LWNoaWxkIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgxMDAsIDIyMSwgMjMsIDAuMSk7XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbi5mYXEgPiA6Zmlyc3QtY2hpbGQ6OmJlZm9yZSwgLm1kLXR5cGVzZXQgZGV0YWlscy5mYXEgPiA6Zmlyc3QtY2hpbGQ6OmJlZm9yZSwgLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uaGVscCA+IDpmaXJzdC1jaGlsZDo6YmVmb3JlLCAubWQtdHlwZXNldCBkZXRhaWxzLmhlbHAgPiA6Zmlyc3QtY2hpbGQ6OmJlZm9yZSwgLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24ucXVlc3Rpb24gPiA6Zmlyc3QtY2hpbGQ6OmJlZm9yZSwgLm1kLXR5cGVzZXQgZGV0YWlscy5xdWVzdGlvbiA+IDpmaXJzdC1jaGlsZDo6YmVmb3JlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzY0ZGQxNztcbiAgLXdlYmtpdC1tYXNrLWltYWdlOiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWw7dXRmOCw8c3ZnIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCIgdmlld0JveD1cXFwiMCAwIDI0IDI0XFxcIj48cGF0aCBkPVxcXCJNMTUuMDcsMTEuMjVMMTQuMTcsMTIuMTdDMTMuNDUsMTIuODkgMTMsMTMuNSAxMywxNUgxMVYxNC41QzExLDEzLjM5IDExLjQ1LDEyLjM5IDEyLjE3LDExLjY3TDEzLjQxLDEwLjQxQzEzLjc4LDEwLjA1IDE0LDkuNTUgMTQsOUMxNCw3Ljg5IDEzLjEsNyAxMiw3QTIsMiAwIDAsMCAxMCw5SDhBNCw0IDAgMCwxIDEyLDVBNCw0IDAgMCwxIDE2LDlDMTYsOS44OCAxNS42NCwxMC42NyAxNS4wNywxMS4yNU0xMywxOUgxMVYxN0gxM00xMiwyQTEwLDEwIDAgMCwwIDIsMTJBMTAsMTAgMCAwLDAgMTIsMjJBMTAsMTAgMCAwLDAgMjIsMTJDMjIsNi40NyAxNy41LDIgMTIsMlpcXFwiIC8+PC9zdmc+XCIpO1xuICAgICAgICAgIG1hc2staW1hZ2U6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIiB2aWV3Qm94PVxcXCIwIDAgMjQgMjRcXFwiPjxwYXRoIGQ9XFxcIk0xNS4wNywxMS4yNUwxNC4xNywxMi4xN0MxMy40NSwxMi44OSAxMywxMy41IDEzLDE1SDExVjE0LjVDMTEsMTMuMzkgMTEuNDUsMTIuMzkgMTIuMTcsMTEuNjdMMTMuNDEsMTAuNDFDMTMuNzgsMTAuMDUgMTQsOS41NSAxNCw5QzE0LDcuODkgMTMuMSw3IDEyLDdBMiwyIDAgMCwwIDEwLDlIOEE0LDQgMCAwLDEgMTIsNUE0LDQgMCAwLDEgMTYsOUMxNiw5Ljg4IDE1LjY0LDEwLjY3IDE1LjA3LDExLjI1TTEzLDE5SDExVjE3SDEzTTEyLDJBMTAsMTAgMCAwLDAgMiwxMkExMCwxMCAwIDAsMCAxMiwyMkExMCwxMCAwIDAsMCAyMiwxMkMyMiw2LjQ3IDE3LjUsMiAxMiwyWlxcXCIgLz48L3N2Zz5cIik7XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbi5hdHRlbnRpb24sIC5tZC10eXBlc2V0IGRldGFpbHMuYXR0ZW50aW9uLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5jYXV0aW9uLCAubWQtdHlwZXNldCBkZXRhaWxzLmNhdXRpb24sIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uLndhcm5pbmcsIC5tZC10eXBlc2V0IGRldGFpbHMud2FybmluZyB7XG4gIGJvcmRlci1sZWZ0LWNvbG9yOiAjZmY5MTAwO1xufVxuLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uYXR0ZW50aW9uID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCBkZXRhaWxzLmF0dGVudGlvbiA+IDpmaXJzdC1jaGlsZCwgLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uY2F1dGlvbiA+IDpmaXJzdC1jaGlsZCwgLm1kLXR5cGVzZXQgZGV0YWlscy5jYXV0aW9uID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi53YXJuaW5nID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCBkZXRhaWxzLndhcm5pbmcgPiA6Zmlyc3QtY2hpbGQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMTQ1LCAwLCAwLjEpO1xufVxuLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uYXR0ZW50aW9uID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IGRldGFpbHMuYXR0ZW50aW9uID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uLmNhdXRpb24gPiA6Zmlyc3QtY2hpbGQ6OmJlZm9yZSwgLm1kLXR5cGVzZXQgZGV0YWlscy5jYXV0aW9uID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uLndhcm5pbmcgPiA6Zmlyc3QtY2hpbGQ6OmJlZm9yZSwgLm1kLXR5cGVzZXQgZGV0YWlscy53YXJuaW5nID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmY5MTAwO1xuICAtd2Via2l0LW1hc2staW1hZ2U6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIiB2aWV3Qm94PVxcXCIwIDAgMjQgMjRcXFwiPjxwYXRoIGQ9XFxcIk0xMywxNEgxMVYxMEgxM00xMywxOEgxMVYxNkgxM00xLDIxSDIzTDEyLDJMMSwyMVpcXFwiIC8+PC9zdmc+XCIpO1xuICAgICAgICAgIG1hc2staW1hZ2U6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIiB2aWV3Qm94PVxcXCIwIDAgMjQgMjRcXFwiPjxwYXRoIGQ9XFxcIk0xMywxNEgxMVYxMEgxM00xMywxOEgxMVYxNkgxM00xLDIxSDIzTDEyLDJMMSwyMVpcXFwiIC8+PC9zdmc+XCIpO1xufVxuLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24ubWlzc2luZywgLm1kLXR5cGVzZXQgZGV0YWlscy5taXNzaW5nLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5mYWlsLCAubWQtdHlwZXNldCBkZXRhaWxzLmZhaWwsIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uLmZhaWx1cmUsIC5tZC10eXBlc2V0IGRldGFpbHMuZmFpbHVyZSB7XG4gIGJvcmRlci1sZWZ0LWNvbG9yOiAjZmY1MjUyO1xufVxuLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24ubWlzc2luZyA+IDpmaXJzdC1jaGlsZCwgLm1kLXR5cGVzZXQgZGV0YWlscy5taXNzaW5nID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5mYWlsID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCBkZXRhaWxzLmZhaWwgPiA6Zmlyc3QtY2hpbGQsIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uLmZhaWx1cmUgPiA6Zmlyc3QtY2hpbGQsIC5tZC10eXBlc2V0IGRldGFpbHMuZmFpbHVyZSA+IDpmaXJzdC1jaGlsZCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCA4MiwgODIsIDAuMSk7XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbi5taXNzaW5nID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IGRldGFpbHMubWlzc2luZyA+IDpmaXJzdC1jaGlsZDo6YmVmb3JlLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5mYWlsID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IGRldGFpbHMuZmFpbCA+IDpmaXJzdC1jaGlsZDo6YmVmb3JlLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5mYWlsdXJlID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IGRldGFpbHMuZmFpbHVyZSA+IDpmaXJzdC1jaGlsZDo6YmVmb3JlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmNTI1MjtcbiAgLXdlYmtpdC1tYXNrLWltYWdlOiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWw7dXRmOCw8c3ZnIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCIgdmlld0JveD1cXFwiMCAwIDI0IDI0XFxcIj48cGF0aCBkPVxcXCJNMTIsMkMxNy41MywyIDIyLDYuNDcgMjIsMTJDMjIsMTcuNTMgMTcuNTMsMjIgMTIsMjJDNi40NywyMiAyLDE3LjUzIDIsMTJDMiw2LjQ3IDYuNDcsMiAxMiwyTTE1LjU5LDdMMTIsMTAuNTlMOC40MSw3TDcsOC40MUwxMC41OSwxMkw3LDE1LjU5TDguNDEsMTdMMTIsMTMuNDFMMTUuNTksMTdMMTcsMTUuNTlMMTMuNDEsMTJMMTcsOC40MUwxNS41OSw3WlxcXCIgLz48L3N2Zz5cIik7XG4gICAgICAgICAgbWFzay1pbWFnZTogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sO3V0ZjgsPHN2ZyB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIHZpZXdCb3g9XFxcIjAgMCAyNCAyNFxcXCI+PHBhdGggZD1cXFwiTTEyLDJDMTcuNTMsMiAyMiw2LjQ3IDIyLDEyQzIyLDE3LjUzIDE3LjUzLDIyIDEyLDIyQzYuNDcsMjIgMiwxNy41MyAyLDEyQzIsNi40NyA2LjQ3LDIgMTIsMk0xNS41OSw3TDEyLDEwLjU5TDguNDEsN0w3LDguNDFMMTAuNTksMTJMNywxNS41OUw4LjQxLDE3TDEyLDEzLjQxTDE1LjU5LDE3TDE3LDE1LjU5TDEzLjQxLDEyTDE3LDguNDFMMTUuNTksN1pcXFwiIC8+PC9zdmc+XCIpO1xufVxuLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uZXJyb3IsIC5tZC10eXBlc2V0IGRldGFpbHMuZXJyb3IsIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uLmRhbmdlciwgLm1kLXR5cGVzZXQgZGV0YWlscy5kYW5nZXIge1xuICBib3JkZXItbGVmdC1jb2xvcjogI2ZmMTc0NDtcbn1cbi5tZC10eXBlc2V0IC5hZG1vbml0aW9uLmVycm9yID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCBkZXRhaWxzLmVycm9yID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5kYW5nZXIgPiA6Zmlyc3QtY2hpbGQsIC5tZC10eXBlc2V0IGRldGFpbHMuZGFuZ2VyID4gOmZpcnN0LWNoaWxkIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDIzLCA2OCwgMC4xKTtcbn1cbi5tZC10eXBlc2V0IC5hZG1vbml0aW9uLmVycm9yID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IGRldGFpbHMuZXJyb3IgPiA6Zmlyc3QtY2hpbGQ6OmJlZm9yZSwgLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uZGFuZ2VyID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IGRldGFpbHMuZGFuZ2VyID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmYxNzQ0O1xuICAtd2Via2l0LW1hc2staW1hZ2U6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIiB2aWV3Qm94PVxcXCIwIDAgMjQgMjRcXFwiPjxwYXRoIGQ9XFxcIk0xMS41LDIwTDE2LjM2LDEwLjI3SDEzVjRMOCwxMy43M0gxMS41VjIwTTEyLDJDMTQuNzUsMiAxNy4xLDMgMTkuMDUsNC45NUMyMSw2LjkgMjIsOS4yNSAyMiwxMkMyMiwxNC43NSAyMSwxNy4xIDE5LjA1LDE5LjA1QzE3LjEsMjEgMTQuNzUsMjIgMTIsMjJDOS4yNSwyMiA2LjksMjEgNC45NSwxOS4wNUMzLDE3LjEgMiwxNC43NSAyLDEyQzIsOS4yNSAzLDYuOSA0Ljk1LDQuOTVDNi45LDMgOS4yNSwyIDEyLDJaXFxcIiAvPjwvc3ZnPlwiKTtcbiAgICAgICAgICBtYXNrLWltYWdlOiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWw7dXRmOCw8c3ZnIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCIgdmlld0JveD1cXFwiMCAwIDI0IDI0XFxcIj48cGF0aCBkPVxcXCJNMTEuNSwyMEwxNi4zNiwxMC4yN0gxM1Y0TDgsMTMuNzNIMTEuNVYyME0xMiwyQzE0Ljc1LDIgMTcuMSwzIDE5LjA1LDQuOTVDMjEsNi45IDIyLDkuMjUgMjIsMTJDMjIsMTQuNzUgMjEsMTcuMSAxOS4wNSwxOS4wNUMxNy4xLDIxIDE0Ljc1LDIyIDEyLDIyQzkuMjUsMjIgNi45LDIxIDQuOTUsMTkuMDVDMywxNy4xIDIsMTQuNzUgMiwxMkMyLDkuMjUgMyw2LjkgNC45NSw0Ljk1QzYuOSwzIDkuMjUsMiAxMiwyWlxcXCIgLz48L3N2Zz5cIik7XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbi5idWcsIC5tZC10eXBlc2V0IGRldGFpbHMuYnVnIHtcbiAgYm9yZGVyLWxlZnQtY29sb3I6ICNmNTAwNTc7XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbi5idWcgPiA6Zmlyc3QtY2hpbGQsIC5tZC10eXBlc2V0IGRldGFpbHMuYnVnID4gOmZpcnN0LWNoaWxkIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNDUsIDAsIDg3LCAwLjEpO1xufVxuLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uYnVnID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IGRldGFpbHMuYnVnID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjUwMDU3O1xuICAtd2Via2l0LW1hc2staW1hZ2U6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIiB2aWV3Qm94PVxcXCIwIDAgMjQgMjRcXFwiPjxwYXRoIGQ9XFxcIk0xNCwxMkgxMFYxMEgxNE0xNCwxNkgxMFYxNEgxNE0yMCw4SDE3LjE5QzE2Ljc0LDcuMjIgMTYuMTIsNi41NSAxNS4zNyw2LjA0TDE3LDQuNDFMMTUuNTksM0wxMy40Miw1LjE3QzEyLjk2LDUuMDYgMTIuNSw1IDEyLDVDMTEuNSw1IDExLjA0LDUuMDYgMTAuNTksNS4xN0w4LjQxLDNMNyw0LjQxTDguNjIsNi4wNEM3Ljg4LDYuNTUgNy4yNiw3LjIyIDYuODEsOEg0VjEwSDYuMDlDNi4wNCwxMC4zMyA2LDEwLjY2IDYsMTFWMTJINFYxNEg2VjE1QzYsMTUuMzQgNi4wNCwxNS42NyA2LjA5LDE2SDRWMThINi44MUM3Ljg1LDE5Ljc5IDkuNzgsMjEgMTIsMjFDMTQuMjIsMjEgMTYuMTUsMTkuNzkgMTcuMTksMThIMjBWMTZIMTcuOTFDMTcuOTYsMTUuNjcgMTgsMTUuMzQgMTgsMTVWMTRIMjBWMTJIMThWMTFDMTgsMTAuNjYgMTcuOTYsMTAuMzMgMTcuOTEsMTBIMjBWOFpcXFwiIC8+PC9zdmc+XCIpO1xuICAgICAgICAgIG1hc2staW1hZ2U6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIiB2aWV3Qm94PVxcXCIwIDAgMjQgMjRcXFwiPjxwYXRoIGQ9XFxcIk0xNCwxMkgxMFYxMEgxNE0xNCwxNkgxMFYxNEgxNE0yMCw4SDE3LjE5QzE2Ljc0LDcuMjIgMTYuMTIsNi41NSAxNS4zNyw2LjA0TDE3LDQuNDFMMTUuNTksM0wxMy40Miw1LjE3QzEyLjk2LDUuMDYgMTIuNSw1IDEyLDVDMTEuNSw1IDExLjA0LDUuMDYgMTAuNTksNS4xN0w4LjQxLDNMNyw0LjQxTDguNjIsNi4wNEM3Ljg4LDYuNTUgNy4yNiw3LjIyIDYuODEsOEg0VjEwSDYuMDlDNi4wNCwxMC4zMyA2LDEwLjY2IDYsMTFWMTJINFYxNEg2VjE1QzYsMTUuMzQgNi4wNCwxNS42NyA2LjA5LDE2SDRWMThINi44MUM3Ljg1LDE5Ljc5IDkuNzgsMjEgMTIsMjFDMTQuMjIsMjEgMTYuMTUsMTkuNzkgMTcuMTksMThIMjBWMTZIMTcuOTFDMTcuOTYsMTUuNjcgMTgsMTUuMzQgMTgsMTVWMTRIMjBWMTJIMThWMTFDMTgsMTAuNjYgMTcuOTYsMTAuMzMgMTcuOTEsMTBIMjBWOFpcXFwiIC8+PC9zdmc+XCIpO1xufVxuLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uZXhhbXBsZSwgLm1kLXR5cGVzZXQgZGV0YWlscy5leGFtcGxlIHtcbiAgYm9yZGVyLWxlZnQtY29sb3I6ICM2NTFmZmY7XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbi5leGFtcGxlID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCBkZXRhaWxzLmV4YW1wbGUgPiA6Zmlyc3QtY2hpbGQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDEwMSwgMzEsIDI1NSwgMC4xKTtcbn1cbi5tZC10eXBlc2V0IC5hZG1vbml0aW9uLmV4YW1wbGUgPiA6Zmlyc3QtY2hpbGQ6OmJlZm9yZSwgLm1kLXR5cGVzZXQgZGV0YWlscy5leGFtcGxlID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNjUxZmZmO1xuICAtd2Via2l0LW1hc2staW1hZ2U6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIiB2aWV3Qm94PVxcXCIwIDAgMjQgMjRcXFwiPjxwYXRoIGQ9XFxcIk03LDEzVjExSDIxVjEzSDdNNywxOVYxN0gyMVYxOUg3TTcsN1Y1SDIxVjdIN00zLDhWNUgyVjRINFY4SDNNMiwxN1YxNkg1VjIwSDJWMTlINFYxOC41SDNWMTcuNUg0VjE3SDJNNC4yNSwxMEEwLjc1LDAuNzUgMCAwLDEgNSwxMC43NUM1LDEwLjk1IDQuOTIsMTEuMTQgNC43OSwxMS4yN0wzLjEyLDEzSDVWMTRIMlYxMy4wOEw0LDExSDJWMTBINC4yNVpcXFwiIC8+PC9zdmc+XCIpO1xuICAgICAgICAgIG1hc2staW1hZ2U6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIiB2aWV3Qm94PVxcXCIwIDAgMjQgMjRcXFwiPjxwYXRoIGQ9XFxcIk03LDEzVjExSDIxVjEzSDdNNywxOVYxN0gyMVYxOUg3TTcsN1Y1SDIxVjdIN00zLDhWNUgyVjRINFY4SDNNMiwxN1YxNkg1VjIwSDJWMTlINFYxOC41SDNWMTcuNUg0VjE3SDJNNC4yNSwxMEEwLjc1LDAuNzUgMCAwLDEgNSwxMC43NUM1LDEwLjk1IDQuOTIsMTEuMTQgNC43OSwxMS4yN0wzLjEyLDEzSDVWMTRIMlYxMy4wOEw0LDExSDJWMTBINC4yNVpcXFwiIC8+PC9zdmc+XCIpO1xufVxuLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uY2l0ZSwgLm1kLXR5cGVzZXQgZGV0YWlscy5jaXRlLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5xdW90ZSwgLm1kLXR5cGVzZXQgZGV0YWlscy5xdW90ZSB7XG4gIGJvcmRlci1sZWZ0LWNvbG9yOiAjOWU5ZTllO1xufVxuLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uY2l0ZSA+IDpmaXJzdC1jaGlsZCwgLm1kLXR5cGVzZXQgZGV0YWlscy5jaXRlID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5xdW90ZSA+IDpmaXJzdC1jaGlsZCwgLm1kLXR5cGVzZXQgZGV0YWlscy5xdW90ZSA+IDpmaXJzdC1jaGlsZCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMTU4LCAxNTgsIDE1OCwgMC4xKTtcbn1cbi5tZC10eXBlc2V0IC5hZG1vbml0aW9uLmNpdGUgPiA6Zmlyc3QtY2hpbGQ6OmJlZm9yZSwgLm1kLXR5cGVzZXQgZGV0YWlscy5jaXRlID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uLnF1b3RlID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IGRldGFpbHMucXVvdGUgPiA6Zmlyc3QtY2hpbGQ6OmJlZm9yZSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICM5ZTllOWU7XG4gIC13ZWJraXQtbWFzay1pbWFnZTogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sO3V0ZjgsPHN2ZyB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIHZpZXdCb3g9XFxcIjAgMCAyNCAyNFxcXCI+PHBhdGggZD1cXFwiTTE0LDE3SDE3TDE5LDEzVjdIMTNWMTNIMTZNNiwxN0g5TDExLDEzVjdINVYxM0g4TDYsMTdaXFxcIiAvPjwvc3ZnPlwiKTtcbiAgICAgICAgICBtYXNrLWltYWdlOiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWw7dXRmOCw8c3ZnIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCIgdmlld0JveD1cXFwiMCAwIDI0IDI0XFxcIj48cGF0aCBkPVxcXCJNMTQsMTdIMTdMMTksMTNWN0gxM1YxM0gxNk02LDE3SDlMMTEsMTNWN0g1VjEzSDhMNiwxN1pcXFwiIC8+PC9zdmc+XCIpO1xufVxuLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24tdGl0bGUsIC5tZC10eXBlc2V0IHN1bW1hcnkge1xuICBtYXJnaW46IDAgLTAuNnJlbTtcbiAgcGFkZGluZzogMC40cmVtIDAuNnJlbSAwLjRyZW0gMnJlbTtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSg2OCwgMTM4LCAyNTUsIDAuMSk7XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG59XG5bZGlyPXJ0bF0gLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24tdGl0bGUsIFtkaXI9cnRsXSAubWQtdHlwZXNldCBzdW1tYXJ5IHtcbiAgcGFkZGluZzogMC40cmVtIDJyZW0gMC40cmVtIDAuNnJlbTtcbn1cbi5tZC10eXBlc2V0IC5hZG1vbml0aW9uLXRpdGxlOmxhc3QtY2hpbGQsIC5tZC10eXBlc2V0IHN1bW1hcnk6bGFzdC1jaGlsZCB7XG4gIG1hcmdpbi1ib3R0b206IDA7XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbi10aXRsZTo6YmVmb3JlLCAubWQtdHlwZXNldCBzdW1tYXJ5OjpiZWZvcmUge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHdpZHRoOiAxcmVtO1xuICBoZWlnaHQ6IDFyZW07XG4gIG1hcmdpbi1sZWZ0OiAtMS40cmVtO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDQ4YWZmO1xuICAtd2Via2l0LW1hc2staW1hZ2U6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIiB2aWV3Qm94PVxcXCIwIDAgMjQgMjRcXFwiPjxwYXRoIGQ9XFxcIk0yMC43MSw3LjA0QzIxLjEsNi42NSAyMS4xLDYgMjAuNzEsNS42M0wxOC4zNywzLjI5QzE4LDIuOSAxNy4zNSwyLjkgMTYuOTYsMy4yOUwxNS4xMiw1LjEyTDE4Ljg3LDguODdNMywxNy4yNVYyMUg2Ljc1TDE3LjgxLDkuOTNMMTQuMDYsNi4xOEwzLDE3LjI1WlxcXCIgLz48L3N2Zz5cIik7XG4gICAgICAgICAgbWFzay1pbWFnZTogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sO3V0ZjgsPHN2ZyB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIHZpZXdCb3g9XFxcIjAgMCAyNCAyNFxcXCI+PHBhdGggZD1cXFwiTTIwLjcxLDcuMDRDMjEuMSw2LjY1IDIxLjEsNiAyMC43MSw1LjYzTDE4LjM3LDMuMjlDMTgsMi45IDE3LjM1LDIuOSAxNi45NiwzLjI5TDE1LjEyLDUuMTJMMTguODcsOC44N00zLDE3LjI1VjIxSDYuNzVMMTcuODEsOS45M0wxNC4wNiw2LjE4TDMsMTcuMjVaXFxcIiAvPjwvc3ZnPlwiKTtcbiAgY29udGVudDogXCJcIjtcbn1cbltkaXI9cnRsXSAubWQtdHlwZXNldCAuYWRtb25pdGlvbi10aXRsZTo6YmVmb3JlLCBbZGlyPXJ0bF0gLm1kLXR5cGVzZXQgc3VtbWFyeTo6YmVmb3JlIHtcbiAgbWFyZ2luLXJpZ2h0OiAtMS40cmVtO1xuICBtYXJnaW4tbGVmdDogaW5pdGlhbDtcbn1cblxuLmNvZGVoaWxpdGUgLm8sIC5oaWdobGlnaHQgLm8ge1xuICBjb2xvcjogaW5oZXJpdDtcbn1cbi5jb2RlaGlsaXRlIC5vdywgLmhpZ2hsaWdodCAub3cge1xuICBjb2xvcjogaW5oZXJpdDtcbn1cbi5jb2RlaGlsaXRlIC5nZSwgLmhpZ2hsaWdodCAuZ2Uge1xuICBjb2xvcjogIzAwMDAwMDtcbn1cbi5jb2RlaGlsaXRlIC5nciwgLmhpZ2hsaWdodCAuZ3Ige1xuICBjb2xvcjogI0FBMDAwMDtcbn1cbi5jb2RlaGlsaXRlIC5naCwgLmhpZ2hsaWdodCAuZ2gge1xuICBjb2xvcjogIzk5OTk5OTtcbn1cbi5jb2RlaGlsaXRlIC5nbywgLmhpZ2hsaWdodCAuZ28ge1xuICBjb2xvcjogIzg4ODg4ODtcbn1cbi5jb2RlaGlsaXRlIC5ncCwgLmhpZ2hsaWdodCAuZ3Age1xuICBjb2xvcjogIzU1NTU1NTtcbn1cbi5jb2RlaGlsaXRlIC5ncywgLmhpZ2hsaWdodCAuZ3Mge1xuICBjb2xvcjogaW5oZXJpdDtcbn1cbi5jb2RlaGlsaXRlIC5ndSwgLmhpZ2hsaWdodCAuZ3Uge1xuICBjb2xvcjogI0FBQUFBQTtcbn1cbi5jb2RlaGlsaXRlIC5ndCwgLmhpZ2hsaWdodCAuZ3Qge1xuICBjb2xvcjogI0FBMDAwMDtcbn1cbi5jb2RlaGlsaXRlIC5nZCwgLmhpZ2hsaWdodCAuZ2Qge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZEREREO1xufVxuLmNvZGVoaWxpdGUgLmdpLCAuaGlnaGxpZ2h0IC5naSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNEREZGREQ7XG59XG4uY29kZWhpbGl0ZSAuaywgLmhpZ2hsaWdodCAuayB7XG4gIGNvbG9yOiAjM0I3OEU3O1xufVxuLmNvZGVoaWxpdGUgLmtjLCAuaGlnaGxpZ2h0IC5rYyB7XG4gIGNvbG9yOiAjQTcxRDVEO1xufVxuLmNvZGVoaWxpdGUgLmtkLCAuaGlnaGxpZ2h0IC5rZCB7XG4gIGNvbG9yOiAjM0I3OEU3O1xufVxuLmNvZGVoaWxpdGUgLmtuLCAuaGlnaGxpZ2h0IC5rbiB7XG4gIGNvbG9yOiAjM0I3OEU3O1xufVxuLmNvZGVoaWxpdGUgLmtwLCAuaGlnaGxpZ2h0IC5rcCB7XG4gIGNvbG9yOiAjQTcxRDVEO1xufVxuLmNvZGVoaWxpdGUgLmtyLCAuaGlnaGxpZ2h0IC5rciB7XG4gIGNvbG9yOiAjM0U2MUEyO1xufVxuLmNvZGVoaWxpdGUgLmt0LCAuaGlnaGxpZ2h0IC5rdCB7XG4gIGNvbG9yOiAjM0U2MUEyO1xufVxuLmNvZGVoaWxpdGUgLmMsIC5oaWdobGlnaHQgLmMge1xuICBjb2xvcjogIzk5OTk5OTtcbn1cbi5jb2RlaGlsaXRlIC5jbSwgLmhpZ2hsaWdodCAuY20ge1xuICBjb2xvcjogIzk5OTk5OTtcbn1cbi5jb2RlaGlsaXRlIC5jcCwgLmhpZ2hsaWdodCAuY3Age1xuICBjb2xvcjogIzY2NjY2Njtcbn1cbi5jb2RlaGlsaXRlIC5jMSwgLmhpZ2hsaWdodCAuYzEge1xuICBjb2xvcjogIzk5OTk5OTtcbn1cbi5jb2RlaGlsaXRlIC5jaCwgLmhpZ2hsaWdodCAuY2gge1xuICBjb2xvcjogIzk5OTk5OTtcbn1cbi5jb2RlaGlsaXRlIC5jcywgLmhpZ2hsaWdodCAuY3Mge1xuICBjb2xvcjogIzk5OTk5OTtcbn1cbi5jb2RlaGlsaXRlIC5uYSwgLmhpZ2hsaWdodCAubmEge1xuICBjb2xvcjogI0MyMTg1Qjtcbn1cbi5jb2RlaGlsaXRlIC5uYiwgLmhpZ2hsaWdodCAubmIge1xuICBjb2xvcjogI0MyMTg1Qjtcbn1cbi5jb2RlaGlsaXRlIC5icCwgLmhpZ2hsaWdodCAuYnAge1xuICBjb2xvcjogIzNFNjFBMjtcbn1cbi5jb2RlaGlsaXRlIC5uYywgLmhpZ2hsaWdodCAubmMge1xuICBjb2xvcjogI0MyMTg1Qjtcbn1cbi5jb2RlaGlsaXRlIC5ubywgLmhpZ2hsaWdodCAubm8ge1xuICBjb2xvcjogIzNFNjFBMjtcbn1cbi5jb2RlaGlsaXRlIC5uZCwgLmhpZ2hsaWdodCAubmQge1xuICBjb2xvcjogIzY2NjY2Njtcbn1cbi5jb2RlaGlsaXRlIC5uaSwgLmhpZ2hsaWdodCAubmkge1xuICBjb2xvcjogIzY2NjY2Njtcbn1cbi5jb2RlaGlsaXRlIC5uZSwgLmhpZ2hsaWdodCAubmUge1xuICBjb2xvcjogI0MyMTg1Qjtcbn1cbi5jb2RlaGlsaXRlIC5uZiwgLmhpZ2hsaWdodCAubmYge1xuICBjb2xvcjogI0MyMTg1Qjtcbn1cbi5jb2RlaGlsaXRlIC5ubCwgLmhpZ2hsaWdodCAubmwge1xuICBjb2xvcjogIzNCNTE3OTtcbn1cbi5jb2RlaGlsaXRlIC5ubiwgLmhpZ2hsaWdodCAubm4ge1xuICBjb2xvcjogI0VDNDA3QTtcbn1cbi5jb2RlaGlsaXRlIC5udCwgLmhpZ2hsaWdodCAubnQge1xuICBjb2xvcjogIzNCNzhFNztcbn1cbi5jb2RlaGlsaXRlIC5udiwgLmhpZ2hsaWdodCAubnYge1xuICBjb2xvcjogIzNFNjFBMjtcbn1cbi5jb2RlaGlsaXRlIC52YywgLmhpZ2hsaWdodCAudmMge1xuICBjb2xvcjogIzNFNjFBMjtcbn1cbi5jb2RlaGlsaXRlIC52ZywgLmhpZ2hsaWdodCAudmcge1xuICBjb2xvcjogIzNFNjFBMjtcbn1cbi5jb2RlaGlsaXRlIC52aSwgLmhpZ2hsaWdodCAudmkge1xuICBjb2xvcjogIzNFNjFBMjtcbn1cbi5jb2RlaGlsaXRlIC5ueCwgLmhpZ2hsaWdodCAubngge1xuICBjb2xvcjogI0VDNDA3QTtcbn1cbi5jb2RlaGlsaXRlIC5tLCAuaGlnaGxpZ2h0IC5tIHtcbiAgY29sb3I6ICNFNzRDM0M7XG59XG4uY29kZWhpbGl0ZSAubWYsIC5oaWdobGlnaHQgLm1mIHtcbiAgY29sb3I6ICNFNzRDM0M7XG59XG4uY29kZWhpbGl0ZSAubWgsIC5oaWdobGlnaHQgLm1oIHtcbiAgY29sb3I6ICNFNzRDM0M7XG59XG4uY29kZWhpbGl0ZSAubWksIC5oaWdobGlnaHQgLm1pIHtcbiAgY29sb3I6ICNFNzRDM0M7XG59XG4uY29kZWhpbGl0ZSAuaWwsIC5oaWdobGlnaHQgLmlsIHtcbiAgY29sb3I6ICNFNzRDM0M7XG59XG4uY29kZWhpbGl0ZSAubW8sIC5oaWdobGlnaHQgLm1vIHtcbiAgY29sb3I6ICNFNzRDM0M7XG59XG4uY29kZWhpbGl0ZSAucywgLmhpZ2hsaWdodCAucyB7XG4gIGNvbG9yOiAjMEQ5MDRGO1xufVxuLmNvZGVoaWxpdGUgLnNiLCAuaGlnaGxpZ2h0IC5zYiB7XG4gIGNvbG9yOiAjMEQ5MDRGO1xufVxuLmNvZGVoaWxpdGUgLnNjLCAuaGlnaGxpZ2h0IC5zYyB7XG4gIGNvbG9yOiAjMEQ5MDRGO1xufVxuLmNvZGVoaWxpdGUgLnNkLCAuaGlnaGxpZ2h0IC5zZCB7XG4gIGNvbG9yOiAjOTk5OTk5O1xufVxuLmNvZGVoaWxpdGUgLnMyLCAuaGlnaGxpZ2h0IC5zMiB7XG4gIGNvbG9yOiAjMEQ5MDRGO1xufVxuLmNvZGVoaWxpdGUgLnNlLCAuaGlnaGxpZ2h0IC5zZSB7XG4gIGNvbG9yOiAjMTgzNjkxO1xufVxuLmNvZGVoaWxpdGUgLnNoLCAuaGlnaGxpZ2h0IC5zaCB7XG4gIGNvbG9yOiAjMTgzNjkxO1xufVxuLmNvZGVoaWxpdGUgLnNpLCAuaGlnaGxpZ2h0IC5zaSB7XG4gIGNvbG9yOiAjMTgzNjkxO1xufVxuLmNvZGVoaWxpdGUgLnN4LCAuaGlnaGxpZ2h0IC5zeCB7XG4gIGNvbG9yOiAjMTgzNjkxO1xufVxuLmNvZGVoaWxpdGUgLnNyLCAuaGlnaGxpZ2h0IC5zciB7XG4gIGNvbG9yOiAjMDA5OTI2O1xufVxuLmNvZGVoaWxpdGUgLnMxLCAuaGlnaGxpZ2h0IC5zMSB7XG4gIGNvbG9yOiAjMEQ5MDRGO1xufVxuLmNvZGVoaWxpdGUgLnNzLCAuaGlnaGxpZ2h0IC5zcyB7XG4gIGNvbG9yOiAjMEQ5MDRGO1xufVxuLmNvZGVoaWxpdGUgLmVyciwgLmhpZ2hsaWdodCAuZXJyIHtcbiAgY29sb3I6ICNBNjE3MTc7XG59XG4uY29kZWhpbGl0ZSAudywgLmhpZ2hsaWdodCAudyB7XG4gIGNvbG9yOiB0cmFuc3BhcmVudDtcbn1cbi5jb2RlaGlsaXRlIC5obGwsIC5oaWdobGlnaHQgLmhsbCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBtYXJnaW46IDAgLTAuNnJlbTtcbiAgcGFkZGluZzogMCAwLjZyZW07XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyMzUsIDU5LCAwLjUpO1xufVxuXG4uY29kZWhpbGl0ZXRhYmxlLCAuaGlnaGxpZ2h0dGFibGUge1xuICBkaXNwbGF5OiBibG9jaztcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5jb2RlaGlsaXRldGFibGUgdGJvZHksIC5oaWdobGlnaHR0YWJsZSB0Ym9keSxcbi5jb2RlaGlsaXRldGFibGUgdGQsXG4uaGlnaGxpZ2h0dGFibGUgdGQge1xuICBkaXNwbGF5OiBibG9jaztcbiAgcGFkZGluZzogMDtcbn1cbi5jb2RlaGlsaXRldGFibGUgdHIsIC5oaWdobGlnaHR0YWJsZSB0ciB7XG4gIGRpc3BsYXk6IGZsZXg7XG59XG4uY29kZWhpbGl0ZXRhYmxlIHByZSwgLmhpZ2hsaWdodHRhYmxlIHByZSxcbi5jb2RlaGlsaXRldGFibGUgLmxpbmVub2Rpdixcbi5oaWdobGlnaHR0YWJsZSAubGluZW5vZGl2IHtcbiAgbWFyZ2luOiAwO1xuICBib3JkZXItcmFkaXVzOiAwO1xufVxuLmNvZGVoaWxpdGV0YWJsZSAubGluZW5vZGl2LCAuaGlnaGxpZ2h0dGFibGUgLmxpbmVub2RpdiB7XG4gIHBhZGRpbmc6IDAuNTI1cmVtIDAuNnJlbTtcbn1cbi5jb2RlaGlsaXRldGFibGUgLmxpbmVub3MsIC5oaWdobGlnaHR0YWJsZSAubGluZW5vcyB7XG4gIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodGVyKTtcbiAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDAgMC4wNXJlbSB2YXIoLS1tZC1jb2RlLWJnLWNvbG9yKTtcbiAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcbiAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTtcbiAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTtcbiAgICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTtcbn1cbi5jb2RlaGlsaXRldGFibGUgLmxpbmVub3MgcHJlLCAuaGlnaGxpZ2h0dGFibGUgLmxpbmVub3MgcHJlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIGNvbG9yOiBpbmhlcml0O1xuICB0ZXh0LWFsaWduOiByaWdodDtcbn1cbi5jb2RlaGlsaXRldGFibGUgLmNvZGUsIC5oaWdobGlnaHR0YWJsZSAuY29kZSB7XG4gIGZsZXg6IDE7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi5tZC10eXBlc2V0ID4gLmNvZGVoaWxpdGV0YWJsZSwgLm1kLXR5cGVzZXQgPiAuaGlnaGxpZ2h0dGFibGUge1xuICBtYXJnaW46IDFlbSAwO1xuICBib3JkZXItcmFkaXVzOiAwLjJlbTtcbn1cblxuLm1kLXR5cGVzZXQgW2lkXj1cImZucmVmOlwiXSB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbn1cbi5tZC10eXBlc2V0IFtpZF49XCJmbnJlZjpcIl06dGFyZ2V0IHtcbiAgbWFyZ2luLXRvcDogLTMuOHJlbTtcbiAgcGFkZGluZy10b3A6IDMuOHJlbTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG4ubWQtdHlwZXNldCBbaWRePVwiZm46XCJdOjpiZWZvcmUge1xuICBkaXNwbGF5OiBub25lO1xuICBoZWlnaHQ6IDA7XG4gIGNvbnRlbnQ6IFwiXCI7XG59XG4ubWQtdHlwZXNldCBbaWRePVwiZm46XCJdOnRhcmdldDo6YmVmb3JlIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIG1hcmdpbi10b3A6IC0zLjVyZW07XG4gIHBhZGRpbmctdG9wOiAzLjVyZW07XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xufVxuLm1kLXR5cGVzZXQgLmZvb3Rub3RlIHtcbiAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0KTtcbiAgZm9udC1zaXplOiAwLjY0cmVtO1xufVxuLm1kLXR5cGVzZXQgLmZvb3Rub3RlIG9sIHtcbiAgbWFyZ2luLWxlZnQ6IDA7XG59XG4ubWQtdHlwZXNldCAuZm9vdG5vdGUgbGkge1xuICB0cmFuc2l0aW9uOiBjb2xvciAyNTBtcztcbn1cbi5tZC10eXBlc2V0IC5mb290bm90ZSBsaTp0YXJnZXQge1xuICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvcik7XG59XG4ubWQtdHlwZXNldCAuZm9vdG5vdGUgbGkgOmZpcnN0LWNoaWxkIHtcbiAgbWFyZ2luLXRvcDogMDtcbn1cbi5tZC10eXBlc2V0IC5mb290bm90ZSBsaTpob3ZlciAuZm9vdG5vdGUtYmFja3JlZiwgLm1kLXR5cGVzZXQgLmZvb3Rub3RlIGxpOnRhcmdldCAuZm9vdG5vdGUtYmFja3JlZiB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKTtcbiAgb3BhY2l0eTogMTtcbn1cbi5tZC10eXBlc2V0IC5mb290bm90ZSBsaTpob3ZlciAuZm9vdG5vdGUtYmFja3JlZjpob3ZlciwgLm1kLXR5cGVzZXQgLmZvb3Rub3RlIGxpOnRhcmdldCAuZm9vdG5vdGUtYmFja3JlZiB7XG4gIGNvbG9yOiB2YXIoLS1tZC1hY2NlbnQtZmctY29sb3IpO1xufVxuLm1kLXR5cGVzZXQgLmZvb3Rub3RlLXJlZiB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgcG9pbnRlci1ldmVudHM6IGluaXRpYWw7XG59XG4ubWQtdHlwZXNldCAuZm9vdG5vdGUtcmVmOjpiZWZvcmUge1xuICBkaXNwbGF5OiBpbmxpbmU7XG4gIG1hcmdpbjogMCAwLjJlbTtcbiAgYm9yZGVyLWxlZnQ6IDAuMDVyZW0gc29saWQgdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlcik7XG4gIGZvbnQtc2l6ZTogMS4yNWVtO1xuICBjb250ZW50OiBcIlwiO1xuICB2ZXJ0aWNhbC1hbGlnbjogLTAuMjVyZW07XG59XG4ubWQtdHlwZXNldCAuZm9vdG5vdGUtYmFja3JlZiB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDAuMjVyZW0pO1xuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMjUwbXMgMjUwbXMsIGNvbG9yIDI1MG1zLCBvcGFjaXR5IDEyNW1zIDI1MG1zO1xuICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlcik7XG4gIGZvbnQtc2l6ZTogMDtcbiAgb3BhY2l0eTogMDtcbiAgdmVydGljYWwtYWxpZ246IHRleHQtYm90dG9tO1xufVxuW2Rpcj1ydGxdIC5tZC10eXBlc2V0IC5mb290bm90ZS1iYWNrcmVmIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0wLjI1cmVtKTtcbn1cbi5tZC10eXBlc2V0IC5mb290bm90ZS1iYWNrcmVmOjpiZWZvcmUge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHdpZHRoOiAwLjhyZW07XG4gIGhlaWdodDogMC44cmVtO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiBjdXJyZW50Q29sb3I7XG4gIC13ZWJraXQtbWFzay1pbWFnZTogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sO3V0ZjgsPHN2ZyB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIHZpZXdCb3g9XFxcIjAgMCAyNCAyNFxcXCI+PHBhdGggZD1cXFwiTTE5LDdWMTFINS44M0w5LjQxLDcuNDFMOCw2TDIsMTJMOCwxOEw5LjQxLDE2LjU4TDUuODMsMTNIMjFWN0gxOVpcXFwiIC8+PC9zdmc+XCIpO1xuICAgICAgICAgIG1hc2staW1hZ2U6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIiB2aWV3Qm94PVxcXCIwIDAgMjQgMjRcXFwiPjxwYXRoIGQ9XFxcIk0xOSw3VjExSDUuODNMOS40MSw3LjQxTDgsNkwyLDEyTDgsMThMOS40MSwxNi41OEw1LjgzLDEzSDIxVjdIMTlaXFxcIiAvPjwvc3ZnPlwiKTtcbiAgY29udGVudDogXCJcIjtcbn1cbltkaXI9cnRsXSAubWQtdHlwZXNldCAuZm9vdG5vdGUtYmFja3JlZjo6YmVmb3JlIHN2ZyB7XG4gIHRyYW5zZm9ybTogc2NhbGVYKC0xKTtcbn1cblxuLm1kLXR5cGVzZXQgLmhlYWRlcmxpbmsge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIG1hcmdpbi1sZWZ0OiAwLjVyZW07XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIDAuMjVyZW0pO1xuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMjUwbXMgMjUwbXMsIGNvbG9yIDI1MG1zLCBvcGFjaXR5IDEyNW1zIDI1MG1zLCB2aXNpYmlsaXR5IDBtcyA1MDBtcztcbiAgb3BhY2l0eTogMDtcbiAgdmlzaWJpbGl0eTogaGlkZGVuO1xufVxuW2Rpcj1ydGxdIC5tZC10eXBlc2V0IC5oZWFkZXJsaW5rIHtcbiAgbWFyZ2luLXJpZ2h0OiAwLjVyZW07XG4gIG1hcmdpbi1sZWZ0OiBpbml0aWFsO1xufVxuaHRtbCBib2R5IC5tZC10eXBlc2V0IC5oZWFkZXJsaW5rIHtcbiAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXIpO1xufVxuLm1kLXR5cGVzZXQgOmhvdmVyIC5oZWFkZXJsaW5rLFxuLm1kLXR5cGVzZXQgOnRhcmdldCAuaGVhZGVybGluayxcbi5tZC10eXBlc2V0IC5oZWFkZXJsaW5rOmZvY3VzIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgMCk7XG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSAyNTBtcyAyNTBtcywgY29sb3IgMjUwbXMsIG9wYWNpdHkgMTI1bXMgMjUwbXMsIHZpc2liaWxpdHkgMG1zO1xuICBvcGFjaXR5OiAxO1xuICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xufVxuLm1kLXR5cGVzZXQgLmhlYWRlcmxpbms6Zm9jdXMsXG4ubWQtdHlwZXNldCAuaGVhZGVybGluazpob3Zlcixcbi5tZC10eXBlc2V0IDp0YXJnZXQgLmhlYWRlcmxpbmsge1xuICBjb2xvcjogdmFyKC0tbWQtYWNjZW50LWZnLWNvbG9yKTtcbn1cbi5tZC10eXBlc2V0IGgzW2lkXTo6YmVmb3JlLCAubWQtdHlwZXNldCBoMltpZF06OmJlZm9yZSwgLm1kLXR5cGVzZXQgaDFbaWRdOjpiZWZvcmUge1xuICBkaXNwbGF5OiBibG9jaztcbiAgbWFyZ2luLXRvcDogLTAuNHJlbTtcbiAgcGFkZGluZy10b3A6IDAuNHJlbTtcbiAgY29udGVudDogXCJcIjtcbn1cbi5tZC10eXBlc2V0IGgzW2lkXTp0YXJnZXQ6OmJlZm9yZSwgLm1kLXR5cGVzZXQgaDJbaWRdOnRhcmdldDo6YmVmb3JlLCAubWQtdHlwZXNldCBoMVtpZF06dGFyZ2V0OjpiZWZvcmUge1xuICBtYXJnaW4tdG9wOiAtMy40cmVtO1xuICBwYWRkaW5nLXRvcDogMy40cmVtO1xufVxuLm1kLXR5cGVzZXQgaDRbaWRdOjpiZWZvcmUge1xuICBkaXNwbGF5OiBibG9jaztcbiAgbWFyZ2luLXRvcDogLTAuNDVyZW07XG4gIHBhZGRpbmctdG9wOiAwLjQ1cmVtO1xuICBjb250ZW50OiBcIlwiO1xufVxuLm1kLXR5cGVzZXQgaDRbaWRdOnRhcmdldDo6YmVmb3JlIHtcbiAgbWFyZ2luLXRvcDogLTMuNDVyZW07XG4gIHBhZGRpbmctdG9wOiAzLjQ1cmVtO1xufVxuLm1kLXR5cGVzZXQgaDZbaWRdOjpiZWZvcmUsIC5tZC10eXBlc2V0IGg1W2lkXTo6YmVmb3JlIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIG1hcmdpbi10b3A6IC0wLjZyZW07XG4gIHBhZGRpbmctdG9wOiAwLjZyZW07XG4gIGNvbnRlbnQ6IFwiXCI7XG59XG4ubWQtdHlwZXNldCBoNltpZF06dGFyZ2V0OjpiZWZvcmUsIC5tZC10eXBlc2V0IGg1W2lkXTp0YXJnZXQ6OmJlZm9yZSB7XG4gIG1hcmdpbi10b3A6IC0zLjZyZW07XG4gIHBhZGRpbmctdG9wOiAzLjZyZW07XG59XG4ubWQtdHlwZXNldCAuTUpYYy1kaXNwbGF5IHtcbiAgbWFyZ2luOiAwLjc1ZW0gMDtcbiAgcGFkZGluZzogMC43NWVtIDA7XG4gIG92ZXJmbG93OiBhdXRvO1xuICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7XG59XG4ubWQtdHlwZXNldCAuTWF0aEpheF9DSFRNTCB7XG4gIG91dGxpbmU6IDA7XG59XG5cbi5tZC10eXBlc2V0IGRlbC5jcml0aWMsXG4ubWQtdHlwZXNldCBpbnMuY3JpdGljLFxuLm1kLXR5cGVzZXQgLmNyaXRpYy5jb21tZW50IHtcbiAgbWFyZ2luOiAwIDAuMjVlbTtcbiAgcGFkZGluZzogMC4wNjI1ZW0gMDtcbiAgYm9yZGVyLXJhZGl1czogMC4xcmVtO1xuICAtd2Via2l0LWJveC1kZWNvcmF0aW9uLWJyZWFrOiBjbG9uZTtcbiAgICAgICAgICBib3gtZGVjb3JhdGlvbi1icmVhazogY2xvbmU7XG59XG4ubWQtdHlwZXNldCBkZWwuY3JpdGljIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0ZGRERERDtcbiAgYm94LXNoYWRvdzogMC4yNWVtIDAgMCAjRkZERERELCAtMC4yNWVtIDAgMCAjRkZEREREO1xufVxuLm1kLXR5cGVzZXQgaW5zLmNyaXRpYyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNEREZGREQ7XG4gIGJveC1zaGFkb3c6IDAuMjVlbSAwIDAgI0RERkZERCwgLTAuMjVlbSAwIDAgI0RERkZERDtcbn1cbi5tZC10eXBlc2V0IC5jcml0aWMuY29tbWVudCB7XG4gIGNvbG9yOiAjOTk5OTk5O1xufVxuLm1kLXR5cGVzZXQgLmNyaXRpYy5jb21tZW50OjpiZWZvcmUge1xuICBjb250ZW50OiBcIi8qIFwiO1xufVxuLm1kLXR5cGVzZXQgLmNyaXRpYy5jb21tZW50OjphZnRlciB7XG4gIGNvbnRlbnQ6IFwiICovXCI7XG59XG4ubWQtdHlwZXNldCAuY3JpdGljLmJsb2NrIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIG1hcmdpbjogMWVtIDA7XG4gIHBhZGRpbmctcmlnaHQ6IDAuOHJlbTtcbiAgcGFkZGluZy1sZWZ0OiAwLjhyZW07XG4gIGJveC1zaGFkb3c6IG5vbmU7XG59XG4ubWQtdHlwZXNldCAuY3JpdGljLmJsb2NrIDpmaXJzdC1jaGlsZCB7XG4gIG1hcmdpbi10b3A6IDAuNWVtO1xufVxuLm1kLXR5cGVzZXQgLmNyaXRpYy5ibG9jayA6bGFzdC1jaGlsZCB7XG4gIG1hcmdpbi1ib3R0b206IDAuNWVtO1xufVxuXG4ubWQtdHlwZXNldCBkZXRhaWxzIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBhZGRpbmctdG9wOiAwO1xufVxuLm1kLXR5cGVzZXQgZGV0YWlsc1tvcGVuXSA+IHN1bW1hcnk6OmFmdGVyIHtcbiAgdHJhbnNmb3JtOiByb3RhdGUoMTgwZGVnKTtcbn1cbi5tZC10eXBlc2V0IGRldGFpbHM6bm90KFtvcGVuXSkge1xuICBwYWRkaW5nLWJvdHRvbTogMDtcbn1cbi5tZC10eXBlc2V0IGRldGFpbHM6bm90KFtvcGVuXSkgPiBzdW1tYXJ5IHtcbiAgYm9yZGVyLWJvdHRvbTogbm9uZTtcbn1cbi5tZC10eXBlc2V0IGRldGFpbHMgc3VtbWFyeSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgcGFkZGluZy1yaWdodDogMnJlbTtcbn1cbltkaXI9cnRsXSAubWQtdHlwZXNldCBkZXRhaWxzIHN1bW1hcnkge1xuICBwYWRkaW5nLWxlZnQ6IDJyZW07XG59XG4ubWQtdHlwZXNldCBzdW1tYXJ5IHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIG91dGxpbmU6IG5vbmU7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5tZC10eXBlc2V0IHN1bW1hcnk6Oi13ZWJraXQtZGV0YWlscy1tYXJrZXIge1xuICBkaXNwbGF5OiBub25lO1xufVxuLm1kLXR5cGVzZXQgc3VtbWFyeTo6YWZ0ZXIge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHJpZ2h0OiAwLjZyZW07XG4gIHdpZHRoOiAxcmVtO1xuICBoZWlnaHQ6IDFyZW07XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXIpO1xuICAtd2Via2l0LW1hc2staW1hZ2U6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIiB2aWV3Qm94PVxcXCIwIDAgMjQgMjRcXFwiPjxwYXRoIGQ9XFxcIk03LjQxLDguNThMMTIsMTMuMTdMMTYuNTksOC41OEwxOCwxMEwxMiwxNkw2LDEwTDcuNDEsOC41OFpcXFwiIC8+PC9zdmc+XCIpO1xuICAgICAgICAgIG1hc2staW1hZ2U6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIiB2aWV3Qm94PVxcXCIwIDAgMjQgMjRcXFwiPjxwYXRoIGQ9XFxcIk03LjQxLDguNThMMTIsMTMuMTdMMTYuNTksOC41OEwxOCwxMEwxMiwxNkw2LDEwTDcuNDEsOC41OFpcXFwiIC8+PC9zdmc+XCIpO1xuICBjb250ZW50OiBcIlwiO1xufVxuW2Rpcj1ydGxdIC5tZC10eXBlc2V0IHN1bW1hcnk6OmFmdGVyIHtcbiAgcmlnaHQ6IGluaXRpYWw7XG4gIGxlZnQ6IDAuNnJlbTtcbn1cblxuLm1kLXR5cGVzZXQgLmVtb2ppb25lLFxuLm1kLXR5cGVzZXQgLnR3ZW1vamksXG4ubWQtdHlwZXNldCAuZ2Vtb2ppIHtcbiAgd2lkdGg6IDFyZW07XG4gIHZlcnRpY2FsLWFsaWduOiB0ZXh0LXRvcDtcbn1cblxuLmhpZ2hsaWdodCBbZGF0YS1saW5lbm9zXTo6YmVmb3JlIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBwb3NpdGlvbjogLXdlYmtpdC1zdGlja3k7XG4gIHBvc2l0aW9uOiBzdGlja3k7XG4gIGxlZnQ6IC0wLjZyZW07XG4gIG1hcmdpbi1yaWdodDogMC42cmVtO1xuICBtYXJnaW4tbGVmdDogLTAuNnJlbTtcbiAgcGFkZGluZy1sZWZ0OiAwLjZyZW07XG4gIGJvcmRlci1yaWdodDogMC4wNXJlbSBzb2xpZCB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodGVzdCk7XG4gIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodGVyKTtcbiAgY29udGVudDogYXR0cihkYXRhLWxpbmVub3MpO1xuICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xuICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lO1xuICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lO1xuICAgICAgICAgIHVzZXItc2VsZWN0OiBub25lO1xufVxuXG4ubWQtdHlwZXNldCBjb2RlLmNvZGVoaWxpdGUsIC5tZC10eXBlc2V0IGNvZGUuaGlnaGxpZ2h0IHtcbiAgbWFyZ2luOiAwIDAuMjk0MTE3NjQ3MWVtO1xuICBwYWRkaW5nOiAwLjA3MzUyOTQxMThlbSAwO1xufVxuXG4ubWQtdHlwZXNldCAudGFiYmVkLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xuICBvcmRlcjogOTk7XG4gIHdpZHRoOiAxMDAlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1jb2RlLWJnLWNvbG9yKTtcbn1cbi5tZC10eXBlc2V0IC50YWJiZWQtY29udGVudCBwcmUge1xuICBtYXJnaW46IDA7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG59XG4ubWQtdHlwZXNldCAudGFiYmVkLXNldCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZmxleC13cmFwOiB3cmFwO1xuICBtYXJnaW46IDFlbSAwO1xuICBib3JkZXI6IDAuMDVyZW0gc29saWQgdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlc3QpO1xuICBib3JkZXItcmFkaXVzOiAwLjFyZW07XG59XG4ubWQtdHlwZXNldCAudGFiYmVkLXNldCA+IGlucHV0IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbi5tZC10eXBlc2V0IC50YWJiZWQtc2V0ID4gaW5wdXQ6Y2hlY2tlZCArIGxhYmVsIHtcbiAgYm9yZGVyLWNvbG9yOiB2YXIoLS1tZC1hY2NlbnQtZmctY29sb3IpO1xuICBjb2xvcjogdmFyKC0tbWQtYWNjZW50LWZnLWNvbG9yKTtcbn1cbi5tZC10eXBlc2V0IC50YWJiZWQtc2V0ID4gaW5wdXQ6Y2hlY2tlZCArIGxhYmVsICsgLnRhYmJlZC1jb250ZW50IHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBhZGRpbmc6IDAgMC42cmVtO1xufVxuLm1kLXR5cGVzZXQgLnRhYmJlZC1zZXQgPiBpbnB1dDpjaGVja2VkICsgbGFiZWwgKyAudGFiYmVkLWNvbnRlbnQgPiA6bGFzdC1jaGlsZCB7XG4gIG1hcmdpbi1ib3R0b206IDAuNnJlbTtcbn1cbi5tZC10eXBlc2V0IC50YWJiZWQtc2V0ID4gaW5wdXQ6Y2hlY2tlZCArIGxhYmVsICsgLnRhYmJlZC1jb250ZW50ID4gcHJlOm9ubHktY2hpbGQsXG4ubWQtdHlwZXNldCAudGFiYmVkLXNldCA+IGlucHV0OmNoZWNrZWQgKyBsYWJlbCArIC50YWJiZWQtY29udGVudCA+IC5oaWdobGlnaHQ6b25seS1jaGlsZCxcbi5tZC10eXBlc2V0IC50YWJiZWQtc2V0ID4gaW5wdXQ6Y2hlY2tlZCArIGxhYmVsICsgLnRhYmJlZC1jb250ZW50ID4gLmhpZ2hsaWdodHRhYmxlOm9ubHktY2hpbGQsXG4ubWQtdHlwZXNldCAudGFiYmVkLXNldCA+IGlucHV0OmNoZWNrZWQgKyBsYWJlbCArIC50YWJiZWQtY29udGVudCA+IC5jb2RlaGlsaXRlOm9ubHktY2hpbGQsXG4ubWQtdHlwZXNldCAudGFiYmVkLXNldCA+IGlucHV0OmNoZWNrZWQgKyBsYWJlbCArIC50YWJiZWQtY29udGVudCA+IC5jb2RlaGlsaXRldGFibGU6b25seS1jaGlsZCB7XG4gIG1hcmdpbjogMCAtMC42cmVtO1xufVxuLm1kLXR5cGVzZXQgLnRhYmJlZC1zZXQgPiBpbnB1dDpjaGVja2VkICsgbGFiZWwgKyAudGFiYmVkLWNvbnRlbnQgPiBwcmU6b25seS1jaGlsZCBwcmUsXG4ubWQtdHlwZXNldCAudGFiYmVkLXNldCA+IGlucHV0OmNoZWNrZWQgKyBsYWJlbCArIC50YWJiZWQtY29udGVudCA+IC5oaWdobGlnaHQ6b25seS1jaGlsZCBwcmUsXG4ubWQtdHlwZXNldCAudGFiYmVkLXNldCA+IGlucHV0OmNoZWNrZWQgKyBsYWJlbCArIC50YWJiZWQtY29udGVudCA+IC5oaWdobGlnaHR0YWJsZTpvbmx5LWNoaWxkIHByZSxcbi5tZC10eXBlc2V0IC50YWJiZWQtc2V0ID4gaW5wdXQ6Y2hlY2tlZCArIGxhYmVsICsgLnRhYmJlZC1jb250ZW50ID4gLmNvZGVoaWxpdGU6b25seS1jaGlsZCBwcmUsXG4ubWQtdHlwZXNldCAudGFiYmVkLXNldCA+IGlucHV0OmNoZWNrZWQgKyBsYWJlbCArIC50YWJiZWQtY29udGVudCA+IC5jb2RlaGlsaXRldGFibGU6b25seS1jaGlsZCBwcmUge1xuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbn1cbi5tZC10eXBlc2V0IC50YWJiZWQtc2V0ID4gbGFiZWwge1xuICB3aWR0aDogYXV0bztcbiAgcGFkZGluZzogMC42cmVtO1xuICBwYWRkaW5nLWJvdHRvbTogMC41cmVtO1xuICB0cmFuc2l0aW9uOiBjb2xvciAxMjVtcywgYm9yZGVyIDI1MG1zO1xuICBib3JkZXItYm90dG9tOiAwLjFyZW0gc29saWQgdHJhbnNwYXJlbnQ7XG4gIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodCk7XG4gIGZvbnQtc2l6ZTogMC42NHJlbTtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuaHRtbCAubWQtdHlwZXNldCAudGFiYmVkLXNldCA+IGxhYmVsOmhvdmVyIHtcbiAgY29sb3I6IHZhcigtLW1kLWFjY2VudC1mZy1jb2xvcik7XG59XG5cbi5tZC10eXBlc2V0IC50YXNrLWxpc3QtaXRlbSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xufVxuLm1kLXR5cGVzZXQgLnRhc2stbGlzdC1pdGVtIFt0eXBlPWNoZWNrYm94XSB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwLjQ1ZW07XG4gIGxlZnQ6IC0yZW07XG59XG5bZGlyPXJ0bF0gLm1kLXR5cGVzZXQgLnRhc2stbGlzdC1pdGVtIFt0eXBlPWNoZWNrYm94XSB7XG4gIHJpZ2h0OiAtMmVtO1xuICBsZWZ0OiBpbml0aWFsO1xufVxuLm1kLXR5cGVzZXQgLnRhc2stbGlzdC1jb250cm9sIC50YXNrLWxpc3QtaW5kaWNhdG9yOjpiZWZvcmUge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMC4xNWVtO1xuICBsZWZ0OiAtMS41ZW07XG4gIHdpZHRoOiAxLjI1ZW07XG4gIGhlaWdodDogMS4yNWVtO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodGVzdCk7XG4gIC13ZWJraXQtbWFzay1pbWFnZTogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sO3V0ZjgsPHN2ZyB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIHZpZXdCb3g9XFxcIjAgMCAyNCAyNFxcXCI+PHBhdGggZD1cXFwiTTEyLDJBMTAsMTAgMCAwLDAgMiwxMkExMCwxMCAwIDAsMCAxMiwyMkExMCwxMCAwIDAsMCAyMiwxMkExMCwxMCAwIDAsMCAxMiwyWlxcXCIgLz48L3N2Zz5cIik7XG4gICAgICAgICAgbWFzay1pbWFnZTogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sO3V0ZjgsPHN2ZyB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIHZpZXdCb3g9XFxcIjAgMCAyNCAyNFxcXCI+PHBhdGggZD1cXFwiTTEyLDJBMTAsMTAgMCAwLDAgMiwxMkExMCwxMCAwIDAsMCAxMiwyMkExMCwxMCAwIDAsMCAyMiwxMkExMCwxMCAwIDAsMCAxMiwyWlxcXCIgLz48L3N2Zz5cIik7XG4gIGNvbnRlbnQ6IFwiXCI7XG59XG5bZGlyPXJ0bF0gLm1kLXR5cGVzZXQgLnRhc2stbGlzdC1jb250cm9sIC50YXNrLWxpc3QtaW5kaWNhdG9yOjpiZWZvcmUge1xuICByaWdodDogLTEuNWVtO1xuICBsZWZ0OiBpbml0aWFsO1xufVxuLm1kLXR5cGVzZXQgLnRhc2stbGlzdC1jb250cm9sIFt0eXBlPWNoZWNrYm94XTpjaGVja2VkICsgLnRhc2stbGlzdC1pbmRpY2F0b3I6OmJlZm9yZSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMwMGU2NzY7XG4gIC13ZWJraXQtbWFzay1pbWFnZTogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sO3V0ZjgsPHN2ZyB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIHZpZXdCb3g9XFxcIjAgMCAyNCAyNFxcXCI+PHBhdGggZD1cXFwiTTEyLDJBMTAsMTAgMCAwLDEgMjIsMTJBMTAsMTAgMCAwLDEgMTIsMjJBMTAsMTAgMCAwLDEgMiwxMkExMCwxMCAwIDAsMSAxMiwyTTExLDE2LjVMMTgsOS41TDE2LjU5LDguMDlMMTEsMTMuNjdMNy45MSwxMC41OUw2LjUsMTJMMTEsMTYuNVpcXFwiIC8+PC9zdmc+XCIpO1xuICAgICAgICAgIG1hc2staW1hZ2U6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIiB2aWV3Qm94PVxcXCIwIDAgMjQgMjRcXFwiPjxwYXRoIGQ9XFxcIk0xMiwyQTEwLDEwIDAgMCwxIDIyLDEyQTEwLDEwIDAgMCwxIDEyLDIyQTEwLDEwIDAgMCwxIDIsMTJBMTAsMTAgMCAwLDEgMTIsMk0xMSwxNi41TDE4LDkuNUwxNi41OSw4LjA5TDExLDEzLjY3TDcuOTEsMTAuNTlMNi41LDEyTDExLDE2LjVaXFxcIiAvPjwvc3ZnPlwiKTtcbn1cbi5tZC10eXBlc2V0IC50YXNrLWxpc3QtY29udHJvbCBbdHlwZT1jaGVja2JveF0ge1xuICBvcGFjaXR5OiAwO1xuICB6LWluZGV4OiAtMTtcbn1cbkBtZWRpYSBwcmludCB7XG4gIC5tZC10eXBlc2V0IGE6OmFmdGVyIHtcbiAgICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHQpO1xuICAgIGNvbnRlbnQ6IFwiIFtcIiBhdHRyKGhyZWYpIFwiXVwiO1xuICB9XG4gIC5tZC10eXBlc2V0IGNvZGUsXG4ubWQtdHlwZXNldCBwcmUsXG4ubWQtdHlwZXNldCBrYmQge1xuICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDtcbiAgfVxuICAubWQtY2xpcGJvYXJkIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG4gIC5tZC1jb250ZW50X19idXR0b24ge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbiAgLm1kLWRpYWxvZyB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxuICAubWQtaGVhZGVyIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG4gIC5tZC1mb290ZXIge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbiAgLm1kLXNpZGViYXIge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbiAgLm1kLXRhYnMge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbiAgLm1kLXR5cGVzZXQgLmhlYWRlcmxpbmsge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cbkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDQ0LjkzNzVlbSkge1xuICAubWQtdHlwZXNldCA+IHByZSB7XG4gICAgbWFyZ2luOiAxZW0gLTAuOHJlbTtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xuICB9XG4gIC5tZC10eXBlc2V0ID4gcHJlID4gY29kZSB7XG4gICAgcGFkZGluZzogMC41MjVyZW0gMC44cmVtO1xuICB9XG4gIC5tZC1mb290ZXItbmF2X19saW5rLS1wcmV2IC5tZC1mb290ZXItbmF2X190aXRsZSB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxuICAubWQtc2VhcmNoLXJlc3VsdF9fdGVhc2VyIHtcbiAgICBtYXgtaGVpZ2h0OiAyLjVyZW07XG4gICAgLXdlYmtpdC1saW5lLWNsYW1wOiAzO1xuICB9XG4gIC5jb2RlaGlsaXRlIC5obGwsIC5oaWdobGlnaHQgLmhsbCB7XG4gICAgbWFyZ2luOiAwIC0wLjhyZW07XG4gICAgcGFkZGluZzogMCAwLjhyZW07XG4gIH1cbiAgLm1kLXR5cGVzZXQgPiAuY29kZWhpbGl0ZSwgLm1kLXR5cGVzZXQgPiAuaGlnaGxpZ2h0IHtcbiAgICBtYXJnaW46IDFlbSAtMC44cmVtO1xuICB9XG4gIC5tZC10eXBlc2V0ID4gLmNvZGVoaWxpdGUgY29kZSwgLm1kLXR5cGVzZXQgPiAuaGlnaGxpZ2h0IGNvZGUge1xuICAgIHBhZGRpbmc6IDAuNTI1cmVtIDAuOHJlbTtcbiAgfVxuICAubWQtdHlwZXNldCA+IC5jb2RlaGlsaXRldGFibGUsIC5tZC10eXBlc2V0ID4gLmhpZ2hsaWdodHRhYmxlIHtcbiAgICBtYXJnaW46IDFlbSAtMC44cmVtO1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG4gIH1cbiAgLm1kLXR5cGVzZXQgPiAuY29kZWhpbGl0ZXRhYmxlIC5saW5lbm9kaXYsIC5tZC10eXBlc2V0ID4gLmhpZ2hsaWdodHRhYmxlIC5saW5lbm9kaXYge1xuICAgIHBhZGRpbmc6IDAuNXJlbSAwLjhyZW07XG4gIH1cbiAgLm1kLXR5cGVzZXQgPiBwID4gLk1KWGMtZGlzcGxheSB7XG4gICAgbWFyZ2luOiAwLjc1ZW0gLTAuOHJlbTtcbiAgICBwYWRkaW5nOiAwLjI1ZW0gMC44cmVtO1xuICB9XG4gIC5oaWdobGlnaHQgW2RhdGEtbGluZW5vc106OmJlZm9yZSB7XG4gICAgbGVmdDogLTEuNnJlbTtcbiAgICBtYXJnaW4tbGVmdDogLTEuNnJlbTtcbiAgICBwYWRkaW5nLWxlZnQ6IDEuNnJlbTtcbiAgfVxuICAubWQtdHlwZXNldCA+IC50YWJiZWQtc2V0IHtcbiAgICBtYXJnaW46IDFlbSAtMC44cmVtO1xuICAgIGJvcmRlcjogMDtcbiAgICBib3JkZXItdG9wOiAwLjA1cmVtIHNvbGlkIHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXN0KTtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xuICB9XG4gIC5tZC10eXBlc2V0ID4gLnRhYmJlZC1zZXQgY29kZSB7XG4gICAgcGFkZGluZzogMC41MjVyZW0gMC44cmVtO1xuICB9XG4gIC5tZC10eXBlc2V0ID4gLnRhYmJlZC1zZXQgaW5wdXQ6Zmlyc3QtY2hpbGQgKyBsYWJlbCB7XG4gICAgbWFyZ2luLWxlZnQ6IDAuMnJlbTtcbiAgfVxufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAwZW0pIHtcbiAgaHRtbCB7XG4gICAgZm9udC1zaXplOiAxMzcuNSU7XG4gIH1cbn1cbkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEyNWVtKSB7XG4gIGh0bWwge1xuICAgIGZvbnQtc2l6ZTogMTUwJTtcbiAgfVxufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNTkuOTM3NWVtKSB7XG4gIGJvZHlbZGF0YS1tZC1zdGF0ZT1sb2NrXSB7XG4gICAgcG9zaXRpb246IGZpeGVkO1xuICB9XG4gIGh0bWwgLm1kLW5hdl9fbGlua1tmb3I9X190b2NdIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBwYWRkaW5nLXJpZ2h0OiAyLjRyZW07XG4gIH1cbiAgaHRtbCAubWQtbmF2X19saW5rW2Zvcj1fX3RvY10gKyAubWQtbmF2X19saW5rIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG4gIGh0bWwgLm1kLW5hdl9fbGlua1tmb3I9X190b2NdIH4gLm1kLW5hdiB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgfVxuICBodG1sIFtkaXI9cnRsXSAubWQtbmF2X19saW5rIHtcbiAgICBwYWRkaW5nLXJpZ2h0OiAwLjhyZW07XG4gICAgcGFkZGluZy1sZWZ0OiAyLjRyZW07XG4gIH1cbiAgLm1kLW5hdl9fc291cmNlIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBwYWRkaW5nOiAwIDAuMnJlbTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1wcmltYXJ5LWZnLWNvbG9yLS1kYXJrKTtcbiAgICBjb2xvcjogdmFyKC0tbWQtcHJpbWFyeS1iZy1jb2xvcik7XG4gIH1cbiAgLm1kLXNlYXJjaF9fb3ZlcmxheSB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMC4ycmVtO1xuICAgIGxlZnQ6IC0yLjJyZW07XG4gICAgd2lkdGg6IDJyZW07XG4gICAgaGVpZ2h0OiAycmVtO1xuICAgIHRyYW5zZm9ybS1vcmlnaW46IGNlbnRlcjtcbiAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMzAwbXMgMTAwbXMsIG9wYWNpdHkgMjAwbXMgMjAwbXM7XG4gICAgYm9yZGVyLXJhZGl1czogMXJlbTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWJnLWNvbG9yKTtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICB9XG4gIFtkaXI9cnRsXSAubWQtc2VhcmNoX19vdmVybGF5IHtcbiAgICByaWdodDogLTIuMnJlbTtcbiAgICBsZWZ0OiBpbml0aWFsO1xuICB9XG4gIFtkYXRhLW1kLXRvZ2dsZT1zZWFyY2hdOmNoZWNrZWQgfiAubWQtaGVhZGVyIC5tZC1zZWFyY2hfX292ZXJsYXkge1xuICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSA0MDBtcywgb3BhY2l0eSAxMDBtcztcbiAgICBvcGFjaXR5OiAxO1xuICB9XG4gIC5tZC1zZWFyY2hfX2lubmVyIHtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgdG9wOiAwO1xuICAgIGxlZnQ6IDEwMCU7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCg1JSk7XG4gICAgdHJhbnNpdGlvbjogcmlnaHQgMG1zIDMwMG1zLCBsZWZ0IDBtcyAzMDBtcywgdHJhbnNmb3JtIDE1MG1zIDE1MG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSksIG9wYWNpdHkgMTUwbXMgMTUwbXM7XG4gICAgb3BhY2l0eTogMDtcbiAgICB6LWluZGV4OiAyO1xuICB9XG4gIFtkYXRhLW1kLXRvZ2dsZT1zZWFyY2hdOmNoZWNrZWQgfiAubWQtaGVhZGVyIC5tZC1zZWFyY2hfX2lubmVyIHtcbiAgICBsZWZ0OiAwO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKTtcbiAgICB0cmFuc2l0aW9uOiByaWdodCAwbXMgMG1zLCBsZWZ0IDBtcyAwbXMsIHRyYW5zZm9ybSAxNTBtcyAxNTBtcyBjdWJpYy1iZXppZXIoMC4xLCAwLjcsIDAuMSwgMSksIG9wYWNpdHkgMTUwbXMgMTUwbXM7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxuICBbZGlyPXJ0bF0gW2RhdGEtbWQtdG9nZ2xlPXNlYXJjaF06Y2hlY2tlZCB+IC5tZC1oZWFkZXIgLm1kLXNlYXJjaF9faW5uZXIge1xuICAgIHJpZ2h0OiAwO1xuICAgIGxlZnQ6IGluaXRpYWw7XG4gIH1cbiAgaHRtbCBbZGlyPXJ0bF0gLm1kLXNlYXJjaF9faW5uZXIge1xuICAgIHJpZ2h0OiAxMDAlO1xuICAgIGxlZnQ6IGluaXRpYWw7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01JSk7XG4gIH1cbiAgLm1kLXNlYXJjaF9faW5wdXQge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMi40cmVtO1xuICAgIGZvbnQtc2l6ZTogMC45cmVtO1xuICB9XG4gIC5tZC1zZWFyY2hfX2ljb25bZm9yPV9fc2VhcmNoXSB7XG4gICAgdG9wOiAwLjZyZW07XG4gICAgbGVmdDogMC44cmVtO1xuICB9XG4gIFtkaXI9cnRsXSAubWQtc2VhcmNoX19pY29uW2Zvcj1fX3NlYXJjaF0ge1xuICAgIHJpZ2h0OiAwLjhyZW07XG4gICAgbGVmdDogaW5pdGlhbDtcbiAgfVxuICAubWQtc2VhcmNoX19pY29uW2Zvcj1fX3NlYXJjaF0gc3ZnOmZpcnN0LWNoaWxkIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG4gIC5tZC1zZWFyY2hfX2ljb25bdHlwZT1yZXNldF0ge1xuICAgIHRvcDogMC42cmVtO1xuICAgIHJpZ2h0OiAwLjhyZW07XG4gIH1cbiAgW2Rpcj1ydGxdIC5tZC1zZWFyY2hfX2ljb25bdHlwZT1yZXNldF0ge1xuICAgIHJpZ2h0OiBpbml0aWFsO1xuICAgIGxlZnQ6IDAuOHJlbTtcbiAgfVxuICAubWQtc2VhcmNoX19vdXRwdXQge1xuICAgIHRvcDogMi40cmVtO1xuICAgIGJvdHRvbTogMDtcbiAgfVxuICAubWQtc2VhcmNoLXJlc3VsdF9faWNvbiB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzYuMTg3NWVtKSB7XG4gIFtkYXRhLW1kLXRvZ2dsZT1kcmF3ZXJdOmNoZWNrZWQgfiAubWQtb3ZlcmxheSB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIHRyYW5zaXRpb246IHdpZHRoIDBtcywgaGVpZ2h0IDBtcywgb3BhY2l0eSAyNTBtcztcbiAgICBvcGFjaXR5OiAxO1xuICB9XG4gIC5tZC1oZWFkZXItbmF2X19idXR0b24ubWQtbG9nbyB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxuICAubWQtaGVyb19faW5uZXIge1xuICAgIG1hcmdpbi10b3A6IDIuNHJlbTtcbiAgICBtYXJnaW4tYm90dG9tOiAxLjJyZW07XG4gIH1cbiAgLm1kLW5hdiB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1iZy1jb2xvcik7XG4gIH1cbiAgLm1kLW5hdi0tcHJpbWFyeSwgLm1kLW5hdi0tcHJpbWFyeSAubWQtbmF2IHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDA7XG4gICAgcmlnaHQ6IDA7XG4gICAgbGVmdDogMDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICB6LWluZGV4OiAxO1xuICB9XG4gIC5tZC1uYXYtLXByaW1hcnkgLm1kLW5hdl9fdGl0bGUsXG4ubWQtbmF2LS1wcmltYXJ5IC5tZC1uYXZfX2l0ZW0ge1xuICAgIGZvbnQtc2l6ZTogMC44cmVtO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjU7XG4gIH1cbiAgLm1kLW5hdi0tcHJpbWFyeSAubWQtbmF2X190aXRsZSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGhlaWdodDogNS42cmVtO1xuICAgIHBhZGRpbmc6IDNyZW0gMC44cmVtIDAuMnJlbTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodGVzdCk7XG4gICAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0KTtcbiAgICBmb250LXdlaWdodDogNDAwO1xuICAgIGxpbmUtaGVpZ2h0OiAyLjRyZW07XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gIH1cbiAgLm1kLW5hdi0tcHJpbWFyeSAubWQtbmF2X190aXRsZSAubWQtbmF2X19pY29uIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwLjRyZW07XG4gICAgbGVmdDogMC40cmVtO1xuICAgIHdpZHRoOiAxLjJyZW07XG4gICAgaGVpZ2h0OiAxLjJyZW07XG4gICAgbWFyZ2luOiAwLjJyZW07XG4gIH1cbiAgW2Rpcj1ydGxdIC5tZC1uYXYtLXByaW1hcnkgLm1kLW5hdl9fdGl0bGUgLm1kLW5hdl9faWNvbiB7XG4gICAgcmlnaHQ6IDAuNHJlbTtcbiAgICBsZWZ0OiBpbml0aWFsO1xuICB9XG4gIC5tZC1uYXYtLXByaW1hcnkgLm1kLW5hdl9fdGl0bGUgfiAubWQtbmF2X19saXN0IHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWJnLWNvbG9yKTtcbiAgICBib3gtc2hhZG93OiBpbnNldCAwIDAuMDVyZW0gMCB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodGVzdCk7XG4gICAgb3ZlcmZsb3cteTogYXV0bztcbiAgICAtd2Via2l0LWJhY2tmYWNlLXZpc2liaWxpdHk6IGhpZGRlbjtcbiAgICAgICAgICAgIGJhY2tmYWNlLXZpc2liaWxpdHk6IGhpZGRlbjtcbiAgICAtd2Via2l0LXNjcm9sbC1zbmFwLXR5cGU6IHkgbWFuZGF0b3J5O1xuICAgICAgICAtbXMtc2Nyb2xsLXNuYXAtdHlwZTogeSBtYW5kYXRvcnk7XG4gICAgICAgICAgICBzY3JvbGwtc25hcC10eXBlOiB5IG1hbmRhdG9yeTtcbiAgfVxuICAubWQtbmF2LS1wcmltYXJ5IC5tZC1uYXZfX3RpdGxlIH4gLm1kLW5hdl9fbGlzdCA+IC5tZC1uYXZfX2l0ZW06Zmlyc3QtY2hpbGQge1xuICAgIGJvcmRlci10b3A6IDA7XG4gIH1cbiAgLm1kLW5hdi0tcHJpbWFyeSAubWQtbmF2X190aXRsZVtmb3I9X19kcmF3ZXJdIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtcHJpbWFyeS1mZy1jb2xvcik7XG4gICAgY29sb3I6IHZhcigtLW1kLXByaW1hcnktYmctY29sb3IpO1xuICB9XG4gIC5tZC1uYXYtLXByaW1hcnkgLm1kLW5hdl9fdGl0bGVbZm9yPV9fZHJhd2VyXSAubWQtbmF2X19idXR0b24ge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDAuMnJlbTtcbiAgICBsZWZ0OiAwLjJyZW07XG4gICAgbWFyZ2luOiAwLjJyZW07XG4gICAgcGFkZGluZzogMC40cmVtO1xuICAgIGZvbnQtc2l6ZTogMi40cmVtO1xuICB9XG4gIGh0bWwgW2Rpcj1ydGxdIC5tZC1uYXYtLXByaW1hcnkgLm1kLW5hdl9fdGl0bGVbZm9yPV9fZHJhd2VyXSAubWQtbmF2X19idXR0b24ge1xuICAgIHJpZ2h0OiAwLjJyZW07XG4gICAgbGVmdDogaW5pdGlhbDtcbiAgfVxuICAubWQtbmF2LS1wcmltYXJ5IC5tZC1uYXZfX2xpc3Qge1xuICAgIGZsZXg6IDE7XG4gIH1cbiAgLm1kLW5hdi0tcHJpbWFyeSAubWQtbmF2X19pdGVtIHtcbiAgICBwYWRkaW5nOiAwO1xuICAgIGJvcmRlci10b3A6IDAuMDVyZW0gc29saWQgdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlc3QpO1xuICB9XG4gIFtkaXI9cnRsXSAubWQtbmF2LS1wcmltYXJ5IC5tZC1uYXZfX2l0ZW0ge1xuICAgIHBhZGRpbmc6IDA7XG4gIH1cbiAgLm1kLW5hdi0tcHJpbWFyeSAubWQtbmF2X19pdGVtLS1uZXN0ZWQgPiAubWQtbmF2X19saW5rIHtcbiAgICBwYWRkaW5nLXJpZ2h0OiAyLjRyZW07XG4gIH1cbiAgW2Rpcj1ydGxdIC5tZC1uYXYtLXByaW1hcnkgLm1kLW5hdl9faXRlbS0tbmVzdGVkID4gLm1kLW5hdl9fbGluayB7XG4gICAgcGFkZGluZy1yaWdodDogMC44cmVtO1xuICAgIHBhZGRpbmctbGVmdDogMi40cmVtO1xuICB9XG4gIC5tZC1uYXYtLXByaW1hcnkgLm1kLW5hdl9faXRlbS0tYWN0aXZlID4gLm1kLW5hdl9fbGluayB7XG4gICAgY29sb3I6IHZhcigtLW1kLXByaW1hcnktZmctY29sb3IpO1xuICB9XG4gIC5tZC1uYXYtLXByaW1hcnkgLm1kLW5hdl9fbGluayB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIG1hcmdpbi10b3A6IDA7XG4gICAgcGFkZGluZzogMC42cmVtIDAuOHJlbTtcbiAgfVxuICAubWQtbmF2LS1wcmltYXJ5IC5tZC1uYXZfX2xpbmsgLm1kLW5hdl9faWNvbiB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogNTAlO1xuICAgIHJpZ2h0OiAwLjZyZW07XG4gICAgbWFyZ2luLXRvcDogLTAuNnJlbTtcbiAgICBjb2xvcjogaW5oZXJpdDtcbiAgICBmb250LXNpemU6IDEuMnJlbTtcbiAgfVxuICBbZGlyPXJ0bF0gLm1kLW5hdi0tcHJpbWFyeSAubWQtbmF2X19saW5rIC5tZC1uYXZfX2ljb24ge1xuICAgIHJpZ2h0OiBpbml0aWFsO1xuICAgIGxlZnQ6IDAuNnJlbTtcbiAgfVxuICBbZGlyPXJ0bF0gLm1kLW5hdi0tcHJpbWFyeSAubWQtbmF2X19pY29uIHN2ZyB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgtMSk7XG4gIH1cbiAgLm1kLW5hdi0tcHJpbWFyeSAubWQtbmF2LS1zZWNvbmRhcnkgLm1kLW5hdl9fbGluayB7XG4gICAgcG9zaXRpb246IHN0YXRpYztcbiAgfVxuICAubWQtbmF2LS1wcmltYXJ5IC5tZC1uYXYtLXNlY29uZGFyeSAubWQtbmF2IHtcbiAgICBwb3NpdGlvbjogc3RhdGljO1xuICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICB9XG4gIC5tZC1uYXYtLXByaW1hcnkgLm1kLW5hdi0tc2Vjb25kYXJ5IC5tZC1uYXYgLm1kLW5hdl9fbGluayB7XG4gICAgcGFkZGluZy1sZWZ0OiAxLjRyZW07XG4gIH1cbiAgW2Rpcj1ydGxdIC5tZC1uYXYtLXByaW1hcnkgLm1kLW5hdi0tc2Vjb25kYXJ5IC5tZC1uYXYgLm1kLW5hdl9fbGluayB7XG4gICAgcGFkZGluZy1yaWdodDogMS40cmVtO1xuICAgIHBhZGRpbmctbGVmdDogaW5pdGlhbDtcbiAgfVxuICAubWQtbmF2LS1wcmltYXJ5IC5tZC1uYXYtLXNlY29uZGFyeSAubWQtbmF2IC5tZC1uYXYgLm1kLW5hdl9fbGluayB7XG4gICAgcGFkZGluZy1sZWZ0OiAycmVtO1xuICB9XG4gIFtkaXI9cnRsXSAubWQtbmF2LS1wcmltYXJ5IC5tZC1uYXYtLXNlY29uZGFyeSAubWQtbmF2IC5tZC1uYXYgLm1kLW5hdl9fbGluayB7XG4gICAgcGFkZGluZy1yaWdodDogMnJlbTtcbiAgICBwYWRkaW5nLWxlZnQ6IGluaXRpYWw7XG4gIH1cbiAgLm1kLW5hdi0tcHJpbWFyeSAubWQtbmF2LS1zZWNvbmRhcnkgLm1kLW5hdiAubWQtbmF2IC5tZC1uYXYgLm1kLW5hdl9fbGluayB7XG4gICAgcGFkZGluZy1sZWZ0OiAyLjZyZW07XG4gIH1cbiAgW2Rpcj1ydGxdIC5tZC1uYXYtLXByaW1hcnkgLm1kLW5hdi0tc2Vjb25kYXJ5IC5tZC1uYXYgLm1kLW5hdiAubWQtbmF2IC5tZC1uYXZfX2xpbmsge1xuICAgIHBhZGRpbmctcmlnaHQ6IDIuNnJlbTtcbiAgICBwYWRkaW5nLWxlZnQ6IGluaXRpYWw7XG4gIH1cbiAgLm1kLW5hdi0tcHJpbWFyeSAubWQtbmF2LS1zZWNvbmRhcnkgLm1kLW5hdiAubWQtbmF2IC5tZC1uYXYgLm1kLW5hdiAubWQtbmF2X19saW5rIHtcbiAgICBwYWRkaW5nLWxlZnQ6IDMuMnJlbTtcbiAgfVxuICBbZGlyPXJ0bF0gLm1kLW5hdi0tcHJpbWFyeSAubWQtbmF2LS1zZWNvbmRhcnkgLm1kLW5hdiAubWQtbmF2IC5tZC1uYXYgLm1kLW5hdiAubWQtbmF2X19saW5rIHtcbiAgICBwYWRkaW5nLXJpZ2h0OiAzLjJyZW07XG4gICAgcGFkZGluZy1sZWZ0OiBpbml0aWFsO1xuICB9XG4gIC5tZC1uYXZfX3RvZ2dsZSB+IC5tZC1uYXYge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDEwMCUpO1xuICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAyNTBtcyBjdWJpYy1iZXppZXIoMC44LCAwLCAwLjYsIDEpLCBvcGFjaXR5IDEyNW1zIDUwbXM7XG4gICAgb3BhY2l0eTogMDtcbiAgfVxuICBbZGlyPXJ0bF0gLm1kLW5hdl9fdG9nZ2xlIH4gLm1kLW5hdiB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0xMDAlKTtcbiAgfVxuICAubWQtbmF2X190b2dnbGU6Y2hlY2tlZCB+IC5tZC1uYXYge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKTtcbiAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMjUwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSwgb3BhY2l0eSAxMjVtcyAxMjVtcztcbiAgICBvcGFjaXR5OiAxO1xuICB9XG4gIC5tZC1zaWRlYmFyLS1wcmltYXJ5IHtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgdG9wOiAwO1xuICAgIGxlZnQ6IC0xMi4xcmVtO1xuICAgIHdpZHRoOiAxMi4xcmVtO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCk7XG4gICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDI1MG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSksIGJveC1zaGFkb3cgMjUwbXM7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1iZy1jb2xvcik7XG4gICAgei1pbmRleDogMztcbiAgfVxuICBbZGlyPXJ0bF0gLm1kLXNpZGViYXItLXByaW1hcnkge1xuICAgIHJpZ2h0OiAtMTIuMXJlbTtcbiAgICBsZWZ0OiBpbml0aWFsO1xuICB9XG4gIFtkYXRhLW1kLXRvZ2dsZT1kcmF3ZXJdOmNoZWNrZWQgfiAubWQtY29udGFpbmVyIC5tZC1zaWRlYmFyLS1wcmltYXJ5IHtcbiAgICBib3gtc2hhZG93OiAwIDhweCAxMHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwIDNweCAxNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTIpLCAwIDVweCA1cHggLTNweCByZ2JhKDAsIDAsIDAsIDAuNCk7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDEyLjFyZW0pO1xuICB9XG4gIFtkaXI9cnRsXSBbZGF0YS1tZC10b2dnbGU9ZHJhd2VyXTpjaGVja2VkIH4gLm1kLWNvbnRhaW5lciAubWQtc2lkZWJhci0tcHJpbWFyeSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0xMi4xcmVtKTtcbiAgfVxuICAubWQtc2lkZWJhci0tcHJpbWFyeSAubWQtc2lkZWJhcl9fc2Nyb2xsd3JhcCB7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgfVxuICAubWQtc2lkZWJhci0tcHJpbWFyeSAubWQtc2lkZWJhcl9fc2Nyb2xsd3JhcCB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMDtcbiAgICByaWdodDogMDtcbiAgICBib3R0b206IDA7XG4gICAgbGVmdDogMDtcbiAgICBtYXJnaW46IDA7XG4gICAgLXdlYmtpdC1zY3JvbGwtc25hcC10eXBlOiBub25lO1xuICAgICAgICAtbXMtc2Nyb2xsLXNuYXAtdHlwZTogbm9uZTtcbiAgICAgICAgICAgIHNjcm9sbC1zbmFwLXR5cGU6IG5vbmU7XG4gIH1cbiAgLm1kLXRhYnMge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cbkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDYwZW0pIHtcbiAgLm1kLWNvbnRlbnQge1xuICAgIG1hcmdpbi1yaWdodDogMTIuMXJlbTtcbiAgfVxuICBbZGlyPXJ0bF0gLm1kLWNvbnRlbnQge1xuICAgIG1hcmdpbi1yaWdodDogaW5pdGlhbDtcbiAgICBtYXJnaW4tbGVmdDogMTIuMXJlbTtcbiAgfVxuICAubWQtaGVhZGVyLW5hdl9fYnV0dG9uW2Zvcj1fX3NlYXJjaF0ge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbiAgLm1kLWhlYWRlci1uYXZfX3NvdXJjZSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgd2lkdGg6IDExLjdyZW07XG4gICAgbWF4LXdpZHRoOiAxMS43cmVtO1xuICAgIG1hcmdpbi1sZWZ0OiAxcmVtO1xuICB9XG4gIFtkaXI9cnRsXSAubWQtaGVhZGVyLW5hdl9fc291cmNlIHtcbiAgICBtYXJnaW4tcmlnaHQ6IDFyZW07XG4gICAgbWFyZ2luLWxlZnQ6IGluaXRpYWw7XG4gIH1cbiAgLm1kLW5hdi0tc2Vjb25kYXJ5IC5tZC1uYXZfX3RpdGxlW2Zvcj1fX3RvY10ge1xuICAgIHNjcm9sbC1zbmFwLWFsaWduOiBzdGFydDtcbiAgfVxuICAubWQtbmF2LS1zZWNvbmRhcnkgLm1kLW5hdl9fdGl0bGUgLm1kLW5hdl9faWNvbiB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxuICAubWQtc2VhcmNoIHtcbiAgICBwYWRkaW5nOiAwLjJyZW0gMDtcbiAgfVxuICAubWQtc2VhcmNoX19vdmVybGF5IHtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgdG9wOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgd2lkdGg6IDA7XG4gICAgaGVpZ2h0OiAwO1xuICAgIHRyYW5zaXRpb246IHdpZHRoIDBtcyAyNTBtcywgaGVpZ2h0IDBtcyAyNTBtcywgb3BhY2l0eSAyNTBtcztcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodCk7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICB9XG4gIFtkaXI9cnRsXSAubWQtc2VhcmNoX19vdmVybGF5IHtcbiAgICByaWdodDogMDtcbiAgICBsZWZ0OiBpbml0aWFsO1xuICB9XG4gIFtkYXRhLW1kLXRvZ2dsZT1zZWFyY2hdOmNoZWNrZWQgfiAubWQtaGVhZGVyIC5tZC1zZWFyY2hfX292ZXJsYXkge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICB0cmFuc2l0aW9uOiB3aWR0aCAwbXMsIGhlaWdodCAwbXMsIG9wYWNpdHkgMjUwbXM7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxuICAubWQtc2VhcmNoX19pbm5lciB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHdpZHRoOiAxMS43cmVtO1xuICAgIHBhZGRpbmc6IDAuMXJlbSAwO1xuICAgIGZsb2F0OiByaWdodDtcbiAgICB0cmFuc2l0aW9uOiB3aWR0aCAyNTBtcyBjdWJpYy1iZXppZXIoMC4xLCAwLjcsIDAuMSwgMSk7XG4gIH1cbiAgW2Rpcj1ydGxdIC5tZC1zZWFyY2hfX2lubmVyIHtcbiAgICBmbG9hdDogbGVmdDtcbiAgfVxuICAubWQtc2VhcmNoX19mb3JtIHtcbiAgICBib3JkZXItcmFkaXVzOiAwLjFyZW07XG4gIH1cbiAgLm1kLXNlYXJjaF9faW5wdXQge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMS44cmVtO1xuICAgIHBhZGRpbmctbGVmdDogMi4ycmVtO1xuICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMjUwbXMsIGNvbG9yIDI1MG1zO1xuICAgIGJvcmRlci1yYWRpdXM6IDAuMXJlbTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodGVyKTtcbiAgICBjb2xvcjogaW5oZXJpdDtcbiAgICBmb250LXNpemU6IDAuOHJlbTtcbiAgfVxuICBbZGlyPXJ0bF0gLm1kLXNlYXJjaF9faW5wdXQge1xuICAgIHBhZGRpbmctcmlnaHQ6IDIuMnJlbTtcbiAgfVxuICAubWQtc2VhcmNoX19pbnB1dCArIC5tZC1zZWFyY2hfX2ljb24ge1xuICAgIGNvbG9yOiB2YXIoLS1tZC1wcmltYXJ5LWJnLWNvbG9yKTtcbiAgfVxuICAubWQtc2VhcmNoX19pbnB1dDo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7XG4gICAgY29sb3I6IHZhcigtLW1kLXByaW1hcnktYmctY29sb3ItLWxpZ2h0KTtcbiAgfVxuICAubWQtc2VhcmNoX19pbnB1dDo6LW1vei1wbGFjZWhvbGRlciB7XG4gICAgY29sb3I6IHZhcigtLW1kLXByaW1hcnktYmctY29sb3ItLWxpZ2h0KTtcbiAgfVxuICAubWQtc2VhcmNoX19pbnB1dDo6LW1zLWlucHV0LXBsYWNlaG9sZGVyIHtcbiAgICBjb2xvcjogdmFyKC0tbWQtcHJpbWFyeS1iZy1jb2xvci0tbGlnaHQpO1xuICB9XG4gIC5tZC1zZWFyY2hfX2lucHV0OjpwbGFjZWhvbGRlciB7XG4gICAgY29sb3I6IHZhcigtLW1kLXByaW1hcnktYmctY29sb3ItLWxpZ2h0KTtcbiAgfVxuICAubWQtc2VhcmNoX19pbnB1dDpob3ZlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1iZy1jb2xvci0tbGlnaHRlc3QpO1xuICB9XG4gIFtkYXRhLW1kLXRvZ2dsZT1zZWFyY2hdOmNoZWNrZWQgfiAubWQtaGVhZGVyIC5tZC1zZWFyY2hfX2lucHV0IHtcbiAgICBib3JkZXItcmFkaXVzOiAwLjFyZW0gMC4xcmVtIDAgMDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWJnLWNvbG9yKTtcbiAgICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvcik7XG4gICAgdGV4dC1vdmVyZmxvdzogY2xpcDtcbiAgfVxuICBbZGF0YS1tZC10b2dnbGU9c2VhcmNoXTpjaGVja2VkIH4gLm1kLWhlYWRlciAubWQtc2VhcmNoX19pbnB1dDo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7XG4gICAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0KTtcbiAgfVxuICBbZGF0YS1tZC10b2dnbGU9c2VhcmNoXTpjaGVja2VkIH4gLm1kLWhlYWRlciAubWQtc2VhcmNoX19pbnB1dDo6LW1vei1wbGFjZWhvbGRlciB7XG4gICAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0KTtcbiAgfVxuICBbZGF0YS1tZC10b2dnbGU9c2VhcmNoXTpjaGVja2VkIH4gLm1kLWhlYWRlciAubWQtc2VhcmNoX19pbnB1dDo6LW1zLWlucHV0LXBsYWNlaG9sZGVyIHtcbiAgICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHQpO1xuICB9XG4gIFtkYXRhLW1kLXRvZ2dsZT1zZWFyY2hdOmNoZWNrZWQgfiAubWQtaGVhZGVyIC5tZC1zZWFyY2hfX2lucHV0ICsgLm1kLXNlYXJjaF9faWNvbiwgW2RhdGEtbWQtdG9nZ2xlPXNlYXJjaF06Y2hlY2tlZCB+IC5tZC1oZWFkZXIgLm1kLXNlYXJjaF9faW5wdXQ6OnBsYWNlaG9sZGVyIHtcbiAgICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHQpO1xuICB9XG4gIC5tZC1zZWFyY2hfX2ljb25bZm9yPV9fc2VhcmNoXSBzdmc6bGFzdC1jaGlsZCB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxuICAubWQtc2VhcmNoX19vdXRwdXQge1xuICAgIHRvcDogMS45cmVtO1xuICAgIHRyYW5zaXRpb246IG9wYWNpdHkgNDAwbXM7XG4gICAgb3BhY2l0eTogMDtcbiAgfVxuICBbZGF0YS1tZC10b2dnbGU9c2VhcmNoXTpjaGVja2VkIH4gLm1kLWhlYWRlciAubWQtc2VhcmNoX19vdXRwdXQge1xuICAgIGJveC1zaGFkb3c6IDAgNnB4IDEwcHggMCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwIDFweCAxOHB4IDAgcmdiYSgwLCAwLCAwLCAwLjEyKSwgMCAzcHggNXB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjQpO1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cbiAgLm1kLXNlYXJjaF9fc2Nyb2xsd3JhcCB7XG4gICAgbWF4LWhlaWdodDogMDtcbiAgfVxuICBbZGF0YS1tZC10b2dnbGU9c2VhcmNoXTpjaGVja2VkIH4gLm1kLWhlYWRlciAubWQtc2VhcmNoX19zY3JvbGx3cmFwIHtcbiAgICBtYXgtaGVpZ2h0OiA3NXZoO1xuICB9XG4gIC5tZC1zZWFyY2hfX3Njcm9sbHdyYXA6Oi13ZWJraXQtc2Nyb2xsYmFyIHtcbiAgICB3aWR0aDogMC4ycmVtO1xuICAgIGhlaWdodDogMC4ycmVtO1xuICB9XG4gIC5tZC1zZWFyY2hfX3Njcm9sbHdyYXA6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodGVyKTtcbiAgfVxuICAubWQtc2VhcmNoX19zY3JvbGx3cmFwOjotd2Via2l0LXNjcm9sbGJhci10aHVtYjpob3ZlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtYWNjZW50LWZnLWNvbG9yKTtcbiAgfVxuICAubWQtc2VhcmNoLXJlc3VsdF9fbWV0YSB7XG4gICAgcGFkZGluZy1sZWZ0OiAyLjJyZW07XG4gIH1cbiAgW2Rpcj1ydGxdIC5tZC1zZWFyY2gtcmVzdWx0X19tZXRhIHtcbiAgICBwYWRkaW5nLXJpZ2h0OiAyLjJyZW07XG4gICAgcGFkZGluZy1sZWZ0OiBpbml0aWFsO1xuICB9XG4gIC5tZC1zZWFyY2gtcmVzdWx0X19hcnRpY2xlIHtcbiAgICBwYWRkaW5nLWxlZnQ6IDIuMnJlbTtcbiAgfVxuICBbZGlyPXJ0bF0gLm1kLXNlYXJjaC1yZXN1bHRfX2FydGljbGUge1xuICAgIHBhZGRpbmctcmlnaHQ6IDIuMnJlbTtcbiAgICBwYWRkaW5nLWxlZnQ6IDAuOHJlbTtcbiAgfVxuICAubWQtc2lkZWJhci0tc2Vjb25kYXJ5IHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBtYXJnaW4tbGVmdDogY2FsYygxMDAlIC0gMTIuMXJlbSk7XG4gIH1cbiAgW2Rpcj1ydGxdIC5tZC1zaWRlYmFyLS1zZWNvbmRhcnkge1xuICAgIG1hcmdpbi1yaWdodDogY2FsYygxMDAlIC0gMTIuMXJlbSk7XG4gICAgbWFyZ2luLWxlZnQ6IGluaXRpYWw7XG4gIH1cbiAgLm1kLXNpZGViYXItLXNlY29uZGFyeSAubWQtc2lkZWJhcl9fc2Nyb2xsd3JhcCB7XG4gICAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoO1xuICB9XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3Ni4yNWVtKSB7XG4gIC5tZC1jb250ZW50IHtcbiAgICBtYXJnaW4tbGVmdDogMTIuMXJlbTtcbiAgfVxuICBbZGlyPXJ0bF0gLm1kLWNvbnRlbnQge1xuICAgIG1hcmdpbi1yaWdodDogMTIuMXJlbTtcbiAgfVxuICAubWQtY29udGVudF9faW5uZXIge1xuICAgIG1hcmdpbi1yaWdodDogMS4ycmVtO1xuICAgIG1hcmdpbi1sZWZ0OiAxLjJyZW07XG4gIH1cbiAgLm1kLWhlYWRlci1uYXZfX2J1dHRvbltmb3I9X19kcmF3ZXJdIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG4gIC5tZC1oZWFkZXItbmF2X19zb3VyY2Uge1xuICAgIG1hcmdpbi1sZWZ0OiAxLjRyZW07XG4gIH1cbiAgW2Rpcj1ydGxdIC5tZC1oZWFkZXItbmF2X19zb3VyY2Uge1xuICAgIG1hcmdpbi1yaWdodDogMS40cmVtO1xuICB9XG4gIC5tZC1uYXYge1xuICAgIHRyYW5zaXRpb246IG1heC1oZWlnaHQgMjUwbXMgY3ViaWMtYmV6aWVyKDAuODYsIDAsIDAuMDcsIDEpO1xuICB9XG4gIC5tZC1uYXYtLXByaW1hcnkgLm1kLW5hdl9fdGl0bGVbZm9yPV9fZHJhd2VyXSB7XG4gICAgc2Nyb2xsLXNuYXAtYWxpZ246IHN0YXJ0O1xuICB9XG4gIC5tZC1uYXYtLXByaW1hcnkgLm1kLW5hdl9fdGl0bGUgLm1kLW5hdl9faWNvbiB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxuICAubWQtbmF2X190b2dnbGUgfiAubWQtbmF2IHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG4gIC5tZC1uYXZfX3RvZ2dsZTpjaGVja2VkIH4gLm1kLW5hdiB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gIH1cbiAgLm1kLW5hdl9faXRlbS0tbmVzdGVkID4gLm1kLW5hdiA+IC5tZC1uYXZfX3RpdGxlIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG4gIC5tZC1uYXZfX2ljb24ge1xuICAgIGhlaWdodDogMC45cmVtO1xuICAgIGZsb2F0OiByaWdodDtcbiAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMjUwbXM7XG4gIH1cbiAgLm1kLW5hdl9faWNvbiBzdmcge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB3aWR0aDogMC45cmVtO1xuICAgIGhlaWdodDogMC45cmVtO1xuICAgIHZlcnRpY2FsLWFsaWduOiAtMC4xcmVtO1xuICB9XG4gIC5tZC1uYXZfX2l0ZW0tLW5lc3RlZCAubWQtbmF2X190b2dnbGU6Y2hlY2tlZCB+IC5tZC1uYXZfX2xpbmsgLm1kLW5hdl9faWNvbiB7XG4gICAgdHJhbnNmb3JtOiByb3RhdGVaKDkwZGVnKTtcbiAgfVxuICBbZGF0YS1tZC10b2dnbGU9c2VhcmNoXTpjaGVja2VkIH4gLm1kLWhlYWRlciAubWQtc2VhcmNoX19pbm5lciB7XG4gICAgd2lkdGg6IDM0LjRyZW07XG4gIH1cbiAgLm1kLXNlYXJjaF9fc2Nyb2xsd3JhcCB7XG4gICAgd2lkdGg6IDM0LjRyZW07XG4gIH1cbiAgLm1kLXNpZGViYXItLXNlY29uZGFyeSB7XG4gICAgbWFyZ2luLWxlZnQ6IDQ4LjlyZW07XG4gIH1cbiAgW2Rpcj1ydGxdIC5tZC1zaWRlYmFyLS1zZWNvbmRhcnkge1xuICAgIG1hcmdpbi1yaWdodDogNDguOXJlbTtcbiAgICBtYXJnaW4tbGVmdDogaW5pdGlhbDtcbiAgfVxuICAubWQtdGFicyB+IC5tZC1tYWluIC5tZC1uYXYtLXByaW1hcnkgPiAubWQtbmF2X19saXN0ID4gLm1kLW5hdl9faXRlbS0tbmVzdGVkIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG4gIC5tZC10YWJzLS1hY3RpdmUgfiAubWQtbWFpbiAubWQtbmF2LS1wcmltYXJ5IC5tZC1uYXZfX3RpdGxlIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBwYWRkaW5nOiAwIDAuNnJlbTtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICBzY3JvbGwtc25hcC1hbGlnbjogc3RhcnQ7XG4gIH1cbiAgLm1kLXRhYnMtLWFjdGl2ZSB+IC5tZC1tYWluIC5tZC1uYXYtLXByaW1hcnkgLm1kLW5hdl9fdGl0bGVbZm9yPV9fZHJhd2VyXSB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxuICAubWQtdGFicy0tYWN0aXZlIH4gLm1kLW1haW4gLm1kLW5hdi0tcHJpbWFyeSA+IC5tZC1uYXZfX2xpc3QgPiAubWQtbmF2X19pdGVtIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG4gIC5tZC10YWJzLS1hY3RpdmUgfiAubWQtbWFpbiAubWQtbmF2LS1wcmltYXJ5ID4gLm1kLW5hdl9fbGlzdCA+IC5tZC1uYXZfX2l0ZW0tLWFjdGl2ZSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgcGFkZGluZzogMDtcbiAgfVxuICAubWQtdGFicy0tYWN0aXZlIH4gLm1kLW1haW4gLm1kLW5hdi0tcHJpbWFyeSA+IC5tZC1uYXZfX2xpc3QgPiAubWQtbmF2X19pdGVtLS1hY3RpdmUgPiAubWQtbmF2X19saW5rIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG4gIC5tZC10YWJzLS1hY3RpdmUgfiAubWQtbWFpbiAubWQtbmF2W2RhdGEtbWQtbGV2ZWw9XCIxXCJdID4gLm1kLW5hdl9fbGlzdCA+IC5tZC1uYXZfX2l0ZW0ge1xuICAgIHBhZGRpbmc6IDAgMC42cmVtO1xuICB9XG4gIC5tZC10YWJzLS1hY3RpdmUgfiAubWQtbWFpbiAubWQtbmF2W2RhdGEtbWQtbGV2ZWw9XCIxXCJdIC5tZC1uYXYgLm1kLW5hdl9fdGl0bGUge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cbkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDQ1ZW0pIHtcbiAgLm1kLWZvb3Rlci1uYXZfX2xpbmsge1xuICAgIHdpZHRoOiA1MCU7XG4gIH1cbiAgLm1kLWZvb3Rlci1jb3B5cmlnaHQge1xuICAgIG1heC13aWR0aDogNzUlO1xuICAgIGZsb2F0OiBsZWZ0O1xuICB9XG4gIFtkaXI9cnRsXSAubWQtZm9vdGVyLWNvcHlyaWdodCB7XG4gICAgZmxvYXQ6IHJpZ2h0O1xuICB9XG4gIC5tZC1mb290ZXItc29jaWFsIHtcbiAgICBwYWRkaW5nOiAwLjZyZW0gMDtcbiAgICBmbG9hdDogcmlnaHQ7XG4gIH1cbiAgW2Rpcj1ydGxdIC5tZC1mb290ZXItc29jaWFsIHtcbiAgICBmbG9hdDogbGVmdDtcbiAgfVxufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogMjkuOTM3NWVtKSB7XG4gIFtkYXRhLW1kLXRvZ2dsZT1zZWFyY2hdOmNoZWNrZWQgfiAubWQtaGVhZGVyIC5tZC1zZWFyY2hfX292ZXJsYXkge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoNDUpO1xuICB9XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAzMGVtKSBhbmQgKG1heC13aWR0aDogNDQuOTM3NWVtKSB7XG4gIFtkYXRhLW1kLXRvZ2dsZT1zZWFyY2hdOmNoZWNrZWQgfiAubWQtaGVhZGVyIC5tZC1zZWFyY2hfX292ZXJsYXkge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoNjApO1xuICB9XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA0NWVtKSBhbmQgKG1heC13aWR0aDogNTkuOTM3NWVtKSB7XG4gIFtkYXRhLW1kLXRvZ2dsZT1zZWFyY2hdOmNoZWNrZWQgfiAubWQtaGVhZGVyIC5tZC1zZWFyY2hfX292ZXJsYXkge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoNzUpO1xuICB9XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA2MGVtKSBhbmQgKG1heC13aWR0aDogNzYuMTg3NWVtKSB7XG4gIFtkYXRhLW1kLXRvZ2dsZT1zZWFyY2hdOmNoZWNrZWQgfiAubWQtaGVhZGVyIC5tZC1zZWFyY2hfX2lubmVyIHtcbiAgICB3aWR0aDogMjMuNHJlbTtcbiAgfVxuICAubWQtc2VhcmNoX19zY3JvbGx3cmFwIHtcbiAgICB3aWR0aDogMjMuNHJlbTtcbiAgfVxuICAubWQtc2VhcmNoLXJlc3VsdF9fdGVhc2VyIHtcbiAgICBtYXgtaGVpZ2h0OiAyLjVyZW07XG4gICAgLXdlYmtpdC1saW5lLWNsYW1wOiAzO1xuICB9XG59XG5AbWVkaWEgKC13ZWJraXQtbWF4LWRldmljZS1waXhlbC1yYXRpbzogMSksIChtYXgtcmVzb2x1dGlvbjogMWRwcHgpIHtcbiAgLm1kLXNlYXJjaF9fc2Nyb2xsd3JhcCB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVaKDApO1xuICB9XG59IiwiLy8vL1xuLy8vIENvcHlyaWdodCAoYykgMjAxNi0yMDIwIE1hcnRpbiBEb25hdGggPG1hcnRpbi5kb25hdGhAc3F1aWRmdW5rLmNvbT5cbi8vL1xuLy8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLFxuLy8vIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb25cbi8vLyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSxcbi8vLyBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGVcbi8vLyBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy8vXG4vLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vL1xuLy8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTExcbi8vLyBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HXG4vLy8gRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUlxuLy8vIERFQUxJTkdTXG4vLy8vXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJ1bGVzOiBjb2xvcnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuOnJvb3Qge1xuXG4gIC8vIERlZmF1bHQgY29sb3Igc2hhZGVzXG4gIC0tbWQtZGVmYXVsdC1mZy1jb2xvcjogICAgICAgICAgICAgICBoc2xhKDAsIDAlLCAwJSwgMC44Nyk7XG4gIC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHQ6ICAgICAgICBoc2xhKDAsIDAlLCAwJSwgMC41NCk7XG4gIC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlcjogICAgICBoc2xhKDAsIDAlLCAwJSwgMC4yNik7XG4gIC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlc3Q6ICAgICBoc2xhKDAsIDAlLCAwJSwgMC4wNyk7XG4gIC0tbWQtZGVmYXVsdC1iZy1jb2xvcjogICAgICAgICAgICAgICBoc2xhKDAsIDAlLCAxMDAlLCAxKTtcbiAgLS1tZC1kZWZhdWx0LWJnLWNvbG9yLS1saWdodDogICAgICAgIGhzbGEoMCwgMCUsIDEwMCUsIDAuNyk7XG4gIC0tbWQtZGVmYXVsdC1iZy1jb2xvci0tbGlnaHRlcjogICAgICBoc2xhKDAsIDAlLCAxMDAlLCAwLjMpO1xuICAtLW1kLWRlZmF1bHQtYmctY29sb3ItLWxpZ2h0ZXN0OiAgICAgaHNsYSgwLCAwJSwgMTAwJSwgMC4xMik7XG5cbiAgLy8gUHJpbWFyeSBjb2xvciBzaGFkZXNcbiAgLS1tZC1wcmltYXJ5LWZnLWNvbG9yOiAgICAgICAgICAgICAgIGhzbGEoI3toZXgyaHNsKCRjbHItaW5kaWdvLTUwMCl9LCAxKTtcbiAgLS1tZC1wcmltYXJ5LWZnLWNvbG9yLS1saWdodDogICAgICAgIGhzbGEoI3toZXgyaHNsKCRjbHItaW5kaWdvLTMwMCl9LCAxKTtcbiAgLS1tZC1wcmltYXJ5LWZnLWNvbG9yLS1kYXJrOiAgICAgICAgIGhzbGEoI3toZXgyaHNsKCRjbHItaW5kaWdvLTcwMCl9LCAxKTtcbiAgLS1tZC1wcmltYXJ5LWJnLWNvbG9yOiAgICAgICAgICAgICAgIHZhcigtLW1kLWRlZmF1bHQtYmctY29sb3IpO1xuICAtLW1kLXByaW1hcnktYmctY29sb3ItLWxpZ2h0OiAgICAgICAgdmFyKC0tbWQtZGVmYXVsdC1iZy1jb2xvci0tbGlnaHQpO1xuXG4gIC8vIEFjY2VudCBjb2xvciBzaGFkZXNcbiAgLS1tZC1hY2NlbnQtZmctY29sb3I6ICAgICAgICAgICAgICAgIGhzbGEoI3toZXgyaHNsKCRjbHItaW5kaWdvLWEyMDApfSwgMSk7XG4gIC0tbWQtYWNjZW50LWZnLWNvbG9yLS10cmFuc3BhcmVudDogICBoc2xhKCN7aGV4MmhzbCgkY2xyLWluZGlnby1hMjAwKX0sIDAuMSk7XG4gIC0tbWQtYWNjZW50LWJnLWNvbG9yOiAgICAgICAgICAgICAgICB2YXIoLS1tZC1kZWZhdWx0LWJnLWNvbG9yKTtcbiAgLS1tZC1hY2NlbnQtYmctY29sb3ItLWxpZ2h0OiAgICAgICAgIHZhcigtLW1kLWRlZmF1bHQtYmctY29sb3ItLWxpZ2h0KTtcblxuICAvLyBDb2RlIGJsb2NrIGNvbG9yIHNoYWRlc1xuICAtLW1kLWNvZGUtYmctY29sb3I6ICAgICAgICAgICAgICAgICAgaHNsYSgwLCAwJSwgOTIuNSUsIDAuNSk7XG4gIC0tbWQtY29kZS1mZy1jb2xvcjogICAgICAgICAgICAgICAgICBoc2xhKDIwMCwgMTglLCAyNiUsIDEpO1xufVxuIiwiLy8vL1xuLy8vIENvcHlyaWdodCAoYykgMjAxNi0yMDIwIE1hcnRpbiBEb25hdGggPG1hcnRpbi5kb25hdGhAc3F1aWRmdW5rLmNvbT5cbi8vL1xuLy8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLFxuLy8vIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb25cbi8vLyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSxcbi8vLyBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGVcbi8vLyBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy8vXG4vLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vL1xuLy8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTExcbi8vLyBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HXG4vLy8gRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUlxuLy8vIERFQUxJTkdTXG4vLy8vXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJ1bGVzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIEljb25cbi5tZC1pY29uIHtcblxuICAvLyBTVkcgZGVmYXVsdHNcbiAgc3ZnIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICB3aWR0aDogcHgycmVtKDI0cHgpO1xuICAgIGhlaWdodDogcHgycmVtKDI0cHgpO1xuICAgIG1hcmdpbjogMCBhdXRvO1xuICAgIGZpbGw6IGN1cnJlbnRDb2xvcjtcbiAgfVxufVxuIiwiLy8vL1xuLy8vIENvcHlyaWdodCAoYykgMjAxNi0yMDIwIE1hcnRpbiBEb25hdGggPG1hcnRpbi5kb25hdGhAc3F1aWRmdW5rLmNvbT5cbi8vL1xuLy8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLFxuLy8vIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb25cbi8vLyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSxcbi8vLyBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGVcbi8vLyBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy8vXG4vLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vL1xuLy8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTExcbi8vLyBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HXG4vLy8gRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUlxuLy8vIERFQUxJTkdTXG4vLy8vXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJ1bGVzOiBmb250IGRlZmluaXRpb25zXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIEVuYWJsZSBmb250LXNtb290aGluZyBpbiBXZWJraXQgYW5kIEZGXG5ib2R5IHtcbiAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XG4gIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7XG59XG5cbi8vIERlZmF1bHQgZm9udHNcbmJvZHksXG5pbnB1dCB7XG4gIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yKTtcbiAgZm9udC1mZWF0dXJlLXNldHRpbmdzOiBcImtlcm5cIiwgXCJsaWdhXCI7XG4gIGZvbnQtZmFtaWx5OiBcIkhlbHZldGljYSBOZXVlXCIsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7XG59XG5cbi8vIFByb3BvcnRpb25hbGx5IHNwYWNlZCBmb250c1xuY29kZSxcbnByZSxcbmtiZCB7XG4gIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yKTtcbiAgZm9udC1mZWF0dXJlLXNldHRpbmdzOiBcImtlcm5cIjtcbiAgZm9udC1mYW1pbHk6IFwiQ291cmllciBOZXdcIiwgQ291cmllciwgbW9ub3NwYWNlO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBSdWxlczogdHlwZXNldHRlZCBjb250ZW50XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIENvbnRlbnQgdGhhdCBpcyB0eXBlc2V0IC0gaWYgcG9zc2libGUsIGFsbCBtYXJnaW5zLCBwYWRkaW5ncyBhbmQgZm9udCBzaXplc1xuLy8gc2hvdWxkIGJlIHNldCBpbiBlbXMsIHNvIG5lc3RlZCBibG9ja3MgKGUuZy4gQWRtb25pdGlvbikgcmVuZGVyIGNvcnJlY3RseSxcbi8vIGV4Y2VwdCBoZWFkbGluZXMgdGhhdCBzaG91bGQgb25seSBhcHBlYXIgb24gdGhlIHRvcCBsZXZlbCBhbmQgbmVlZCB0byBoYXZlXG4vLyBjb25zaXN0ZW50IHNwYWNpbmcgZHVlIHRvIGxheW91dCBjb25zdHJhaW50cy5cbi5tZC10eXBlc2V0IHtcbiAgZm9udC1zaXplOiBtcygwKTtcbiAgbGluZS1oZWlnaHQ6IDEuNjtcblxuICAvLyBDb2xvcnMgc2hvdWxkIGJlIGtlcHQgd2hlbiBwcmludGluZ1xuICAtd2Via2l0LXByaW50LWNvbG9yLWFkanVzdDogZXhhY3Q7IC8vIHN0eWxlbGludC1kaXNhYmxlLWxpbmVcblxuICAvLyBEZWZhdWx0IHNwYWNpbmdcbiAgcCxcbiAgdWwsXG4gIG9sLFxuICBibG9ja3F1b3RlIHtcbiAgICBtYXJnaW46IDFlbSAwO1xuICB9XG5cbiAgLy8gMXN0IGxldmVsIGhlYWRsaW5lXG4gIGgxIHtcbiAgICBtYXJnaW46IDAgMCBweDJyZW0oNDBweCk7XG4gICAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0KTtcbiAgICBmb250LXNpemU6IG1zKDMpO1xuICAgIGZvbnQtd2VpZ2h0OiAzMDA7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuMztcbiAgfVxuXG4gIC8vIDJuZCBsZXZlbCBoZWFkbGluZVxuICBoMiB7XG4gICAgbWFyZ2luOiBweDJyZW0oNDBweCkgMCBweDJyZW0oMTZweCk7XG4gICAgZm9udC1zaXplOiBtcygyKTtcbiAgICBmb250LXdlaWdodDogMzAwO1xuICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMWVtO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjQ7XG4gIH1cblxuICAvLyAzcmQgbGV2ZWwgaGVhZGxpbmVcbiAgaDMge1xuICAgIG1hcmdpbjogcHgycmVtKDMycHgpIDAgcHgycmVtKDE2cHgpO1xuICAgIGZvbnQtc2l6ZTogbXMoMSk7XG4gICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTtcbiAgICBsaW5lLWhlaWdodDogMS41O1xuICB9XG5cbiAgLy8gM3JkIGxldmVsIGhlYWRsaW5lIGZvbGxvd2luZyBhbiAybmQgbGV2ZWwgaGVhZGxpbmVcbiAgaDIgKyBoMyB7XG4gICAgbWFyZ2luLXRvcDogcHgycmVtKDE2cHgpO1xuICB9XG5cbiAgLy8gNHRoIGxldmVsIGhlYWRsaW5lXG4gIGg0IHtcbiAgICBtYXJnaW46IHB4MnJlbSgxNnB4KSAwO1xuICAgIGZvbnQtc2l6ZTogbXMoMCk7XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTtcbiAgfVxuXG4gIC8vIDV0aCBhbmQgNnRoIGxldmVsIGhlYWRsaW5lXG4gIGg1LFxuICBoNiB7XG4gICAgbWFyZ2luOiBweDJyZW0oMTZweCkgMDtcbiAgICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHQpO1xuICAgIGZvbnQtc2l6ZTogbXMoLTEpO1xuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07XG4gIH1cblxuICAvLyBPdmVycmlkZXMgZm9yIDV0aCBsZXZlbCBoZWFkbGluZVxuICBoNSB7XG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgfVxuXG4gIC8vIEhvcml6b250YWwgc2VwYXJhdG9yc1xuICBociB7XG4gICAgbWFyZ2luOiAxLjVlbSAwO1xuICAgIGJvcmRlci1ib3R0b206IHB4MnJlbSgxcHgpIGRvdHRlZCB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodGVyKTtcbiAgfVxuXG4gIC8vIExpbmtzXG4gIGEge1xuICAgIGNvbG9yOiB2YXIoLS1tZC1wcmltYXJ5LWZnLWNvbG9yKTtcbiAgICB3b3JkLWJyZWFrOiBicmVhay13b3JkO1xuXG4gICAgLy8gQWxzbyBlbmFibGUgY29sb3IgdHJhbnNpdGlvbiBvbiBwc2V1ZG8gZWxlbWVudHNcbiAgICAmLFxuICAgICY6OmJlZm9yZSB7XG4gICAgICB0cmFuc2l0aW9uOiBjb2xvciAxMjVtcztcbiAgICB9XG5cbiAgICAvLyBGb2N1c2VkIG9yIGhvdmVyIGxpbmtzXG4gICAgJjpmb2N1cyxcbiAgICAmOmhvdmVyIHtcbiAgICAgIGNvbG9yOiB2YXIoLS1tZC1hY2NlbnQtZmctY29sb3IpO1xuICAgIH1cblxuICAgIC8vIEFkZCBVUkxzIGZvciBwcmludFxuICAgIEBtZWRpYSBwcmludCB7XG5cbiAgICAgIC8vIFNob3cgbGluayBVUkxcbiAgICAgICY6OmFmdGVyIHtcbiAgICAgICAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0KTtcbiAgICAgICAgY29udGVudDogXCIgW1wiIGF0dHIoaHJlZikgXCJdXCI7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gQ29kZSBibG9ja3NcbiAgY29kZSxcbiAgcHJlLFxuICBrYmQge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW1kLWNvZGUtYmctY29sb3IpO1xuICAgIGNvbG9yOiB2YXIoLS1tZC1jb2RlLWZnLWNvbG9yKTtcbiAgICBmb250LXNpemU6IDg1JTtcbiAgICBkaXJlY3Rpb246IGx0cjtcblxuICAgIC8vIFdyYXAgdGV4dCBhbmQgaGlkZSBzY29sbGJhcnNcbiAgICBAbWVkaWEgcHJpbnQge1xuICAgICAgd2hpdGUtc3BhY2U6IHByZS13cmFwO1xuICAgIH1cbiAgfVxuXG4gIC8vIElubGluZSBjb2RlIGJsb2NrcywgY29ycmVjdCByZWxhdGl2ZSBlbXMgZm9yIHNtYWxsZXIgZm9udCBzaXplXG4gIGNvZGUge1xuICAgICRmOiAxIC8gMC44NTtcblxuICAgIG1hcmdpbjogMCAwLjI1ZW0gKiAkZjtcbiAgICBwYWRkaW5nOiAwLjA2MjVlbSAqICRmIDA7XG4gICAgYm9yZGVyLXJhZGl1czogcHgycmVtKDJweCk7XG4gICAgYm94LXNoYWRvdzpcbiAgICAgICswLjI1ZW0gKiAkZiAwIDAgdmFyKC0tbWQtY29kZS1iZy1jb2xvciksXG4gICAgICAtMC4yNWVtICogJGYgMCAwIHZhcigtLW1kLWNvZGUtYmctY29sb3IpO1xuICAgIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7XG4gICAgYm94LWRlY29yYXRpb24tYnJlYWs6IGNsb25lO1xuICB9XG5cbiAgLy8gRGlzYWJsZSBjb250YWluaW5nIGJsb2NrIGluc2lkZSBoZWFkbGluZXNcbiAgaDEgY29kZSxcbiAgaDIgY29kZSxcbiAgaDMgY29kZSxcbiAgaDQgY29kZSxcbiAgaDUgY29kZSxcbiAgaDYgY29kZSB7XG4gICAgbWFyZ2luOiAwO1xuICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgIGJveC1zaGFkb3c6IG5vbmU7XG4gIH1cblxuICAvLyBSZXNldCBjb2RlIGlmIGl0J3MgaW5zaWRlIGEgbGlua1xuICBhID4gY29kZSB7XG4gICAgbWFyZ2luOiBpbmhlcml0O1xuICAgIHBhZGRpbmc6IGluaGVyaXQ7XG4gICAgYm9yZGVyLXJhZGl1czogaW5pdGlhbDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBpbmhlcml0O1xuICAgIGNvbG9yOiBpbmhlcml0O1xuICAgIGJveC1zaGFkb3c6IG5vbmU7XG4gIH1cblxuICAvLyBVbmZvcm1hdHRlZCBjb2RlIGJsb2Nrc1xuICBwcmUge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBtYXJnaW46IDFlbSAwO1xuICAgIGJvcmRlci1yYWRpdXM6IHB4MnJlbSgycHgpO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjQ7XG4gICAgLy8gSGFjazogcmVkdWNlIGppdHRlclxuICAgIGJhY2tmYWNlLXZpc2liaWxpdHk6IGhpZGRlbjtcbiAgICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7XG5cbiAgICAvLyBBY3R1YWwgY29udGFpbmVyIHdpdGggY29kZSwgb3ZlcmZsb3dpbmdcbiAgICA+IGNvZGUge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICBtYXJnaW46IDA7XG4gICAgICBwYWRkaW5nOiBweDJyZW0oMTAuNXB4KSBweDJyZW0oMTJweCk7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICAgIGZvbnQtc2l6ZTogaW5oZXJpdDtcbiAgICAgIGJveC1zaGFkb3c6IG5vbmU7XG4gICAgICBib3gtZGVjb3JhdGlvbi1icmVhazogc2xpY2U7XG4gICAgICBvdmVyZmxvdzogYXV0bztcbiAgICAgIHdvcmQtYnJlYWs6IG5vcm1hbDtcblxuICAgICAgLy8gT3ZlcnJpZGUgbmF0aXZlIHNjcm9sbGJhciBzdHlsZXNcbiAgICAgICY6Oi13ZWJraXQtc2Nyb2xsYmFyIHtcbiAgICAgICAgd2lkdGg6IHB4MnJlbSg0cHgpO1xuICAgICAgICBoZWlnaHQ6IHB4MnJlbSg0cHgpO1xuICAgICAgfVxuXG4gICAgICAvLyBTY3JvbGxiYXIgdGh1bWJcbiAgICAgICY6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlcik7XG5cbiAgICAgICAgLy8gSG92ZXJlZCBzY3JvbGxiYXIgdGh1bWJcbiAgICAgICAgJjpob3ZlciB7XG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtYWNjZW50LWZnLWNvbG9yKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFttb2JpbGUgLV06IFN0cmV0Y2ggdG8gd2hvbGUgd2lkdGhcbiAgQGluY2x1ZGUgYnJlYWstdG8tZGV2aWNlKG1vYmlsZSkge1xuXG4gICAgLy8gU3RyZXRjaCB0b3AtbGV2ZWwgY29udGFpbmVyc1xuICAgID4gcHJlIHtcbiAgICAgIG1hcmdpbjogMWVtIHB4MnJlbSgtMTZweCk7XG4gICAgICBib3JkZXItcmFkaXVzOiAwO1xuXG4gICAgICAvLyBBY3R1YWwgY29udGFpbmVyIHdpdGggY29kZSwgb3ZlcmZsb3dpbmdcbiAgICAgID4gY29kZSB7XG4gICAgICAgIHBhZGRpbmc6IHB4MnJlbSgxMC41cHgpIHB4MnJlbSgxNnB4KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBLZXlzdHJva2VzXG4gIGtiZCB7XG4gICAgJGY6IDEgLyAwLjg1O1xuXG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHBhZGRpbmc6IDAgMC41ZW0gKiAkZjtcbiAgICBib3JkZXItcmFkaXVzOiBweDJyZW0oMnB4KTtcbiAgICBmb250LXNpemU6IDAuNzVlbTtcbiAgICBsaW5lLWhlaWdodDogMS41O1xuICAgIGJveC1zaGFkb3c6XG4gICAgICAwIHB4MnJlbSgycHgpIDAgcHgycmVtKDFweCkgdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlciksXG4gICAgICAwIHB4MnJlbSgycHgpIDAgICAgICAgICAgICAgdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlciksXG4gICAgICBpbnNldCAwIHB4MnJlbSgtMnB4KSBweDJyZW0oNHB4KSB2YXIoLS1tZC1kZWZhdWx0LWJnLWNvbG9yKTtcbiAgICB3b3JkLWJyZWFrOiBicmVhay13b3JkO1xuICAgIHZlcnRpY2FsLWFsaWduOiB0ZXh0LXRvcDtcbiAgfVxuXG4gIC8vIFRleHQgaGlnaGxpZ2h0aW5nIG1hcmtlclxuICBtYXJrIHtcbiAgICBtYXJnaW46IDAgMC4yNWVtO1xuICAgIHBhZGRpbmc6IDAuMDYyNWVtIDA7XG4gICAgYm9yZGVyLXJhZGl1czogcHgycmVtKDJweCk7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnRpemUoJGNsci15ZWxsb3ctNTAwLCAwLjUpO1xuICAgIGJveC1zaGFkb3c6XG4gICAgICArMC4yNWVtIDAgMCB0cmFuc3BhcmVudGl6ZSgkY2xyLXllbGxvdy01MDAsIDAuNSksXG4gICAgICAtMC4yNWVtIDAgMCB0cmFuc3BhcmVudGl6ZSgkY2xyLXllbGxvdy01MDAsIDAuNSk7XG4gICAgd29yZC1icmVhazogYnJlYWstd29yZDtcbiAgICBib3gtZGVjb3JhdGlvbi1icmVhazogY2xvbmU7XG4gIH1cblxuICAvLyBBYmJyZXZpYXRpb25zXG4gIGFiYnIge1xuICAgIGJvcmRlci1ib3R0b206IHB4MnJlbSgxcHgpIGRvdHRlZCB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodCk7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgIGN1cnNvcjogaGVscDtcbiAgfVxuXG4gIC8vIFNtYWxsIHRleHRcbiAgc21hbGwge1xuICAgIG9wYWNpdHk6IDAuNzU7XG4gIH1cblxuICAvLyBTdXBlcnNjcmlwdCBhbmQgc3Vic2NyaXB0XG4gIHN1cCxcbiAgc3ViIHtcbiAgICBtYXJnaW4tbGVmdDogMC4wNjI1ZW0gKiAxIC8gMC44O1xuXG4gICAgLy8gQWRqdXN0IGZvciByaWdodC10by1sZWZ0IGxhbmd1YWdlc1xuICAgIFtkaXI9XCJydGxcIl0gJiB7XG4gICAgICBtYXJnaW4tcmlnaHQ6IDAuMDYyNWVtICogMSAvIDAuODtcbiAgICAgIG1hcmdpbi1sZWZ0OiBpbml0aWFsO1xuICAgIH1cbiAgfVxuXG4gIC8vIEJsb2NrcXVvdGVzLCBwb3NzaWJseSBuZXN0ZWRcbiAgYmxvY2txdW90ZSB7XG4gICAgcGFkZGluZy1sZWZ0OiBweDJyZW0oMTJweCk7XG4gICAgYm9yZGVyLWxlZnQ6IHB4MnJlbSg0cHgpIHNvbGlkIHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXIpO1xuICAgIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodCk7XG5cbiAgICAvLyBBZGp1c3QgZm9yIHJpZ2h0LXRvLWxlZnQgbGFuZ3VhZ2VzXG4gICAgW2Rpcj1cInJ0bFwiXSAmIHtcbiAgICAgIHBhZGRpbmctcmlnaHQ6IHB4MnJlbSgxMnB4KTtcbiAgICAgIHBhZGRpbmctbGVmdDogaW5pdGlhbDtcbiAgICAgIGJvcmRlci1yaWdodDogcHgycmVtKDRweCkgc29saWQgdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlcik7XG4gICAgICBib3JkZXItbGVmdDogaW5pdGlhbDtcbiAgICB9XG4gIH1cblxuICAvLyBVbm9yZGVyZWQgbGlzdHNcbiAgdWwge1xuICAgIGxpc3Qtc3R5bGUtdHlwZTogZGlzYztcbiAgfVxuXG4gIC8vIFVub3JkZXJlZCBhbmQgb3JkZXJlZCBsaXN0c1xuICB1bCxcbiAgb2wge1xuICAgIG1hcmdpbi1sZWZ0OiAwLjYyNWVtO1xuICAgIHBhZGRpbmc6IDA7XG5cbiAgICAvLyBBZGp1c3QgZm9yIHJpZ2h0LXRvLWxlZnQgbGFuZ3VhZ2VzXG4gICAgW2Rpcj1cInJ0bFwiXSAmIHtcbiAgICAgIG1hcmdpbi1yaWdodDogMC42MjVlbTtcbiAgICAgIG1hcmdpbi1sZWZ0OiBpbml0aWFsO1xuICAgIH1cblxuICAgIC8vIE5lc3RlZCBvcmRlcmVkIGxpc3RzXG4gICAgb2wge1xuICAgICAgbGlzdC1zdHlsZS10eXBlOiBsb3dlci1hbHBoYTtcblxuICAgICAgLy8gVHJpcGx5IG5lc3RlZCBvcmRlcmVkIGxpc3RcbiAgICAgIG9sIHtcbiAgICAgICAgbGlzdC1zdHlsZS10eXBlOiBsb3dlci1yb21hbjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBMaXN0IGVsZW1lbnRzXG4gICAgbGkge1xuICAgICAgbWFyZ2luLWJvdHRvbTogMC41ZW07XG4gICAgICBtYXJnaW4tbGVmdDogMS4yNWVtO1xuXG4gICAgICAvLyBBZGp1c3QgZm9yIHJpZ2h0LXRvLWxlZnQgbGFuZ3VhZ2VzXG4gICAgICBbZGlyPVwicnRsXCJdICYge1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IDEuMjVlbTtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IGluaXRpYWw7XG4gICAgICB9XG5cbiAgICAgIC8vIERlY3JlYXNlIHZlcnRpY2FsIHNwYWNpbmdcbiAgICAgIHAsXG4gICAgICBibG9ja3F1b3RlIHtcbiAgICAgICAgbWFyZ2luOiAwLjVlbSAwO1xuICAgICAgfVxuXG4gICAgICAvLyBSZW1vdmUgbWFyZ2luIG9uIGxhc3QgZWxlbWVudFxuICAgICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICAgIH1cblxuICAgICAgLy8gTmVzdGVkIGxpc3RzXG4gICAgICB1bCxcbiAgICAgIG9sIHtcbiAgICAgICAgbWFyZ2luOiAwLjVlbSAwIDAuNWVtIDAuNjI1ZW07XG5cbiAgICAgICAgLy8gQWRqdXN0IGZvciByaWdodC10by1sZWZ0IGxhbmd1YWdlc1xuICAgICAgICBbZGlyPVwicnRsXCJdICYge1xuICAgICAgICAgIG1hcmdpbi1yaWdodDogMC42MjVlbTtcbiAgICAgICAgICBtYXJnaW4tbGVmdDogaW5pdGlhbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIERlZmluaXRpb24gbGlzdHNcbiAgZGQge1xuICAgIG1hcmdpbjogMWVtIDAgMWVtIDEuODc1ZW07XG5cbiAgICAvLyBBZGp1c3QgZm9yIHJpZ2h0LXRvLWxlZnQgbGFuZ3VhZ2VzXG4gICAgW2Rpcj1cInJ0bFwiXSAmIHtcbiAgICAgIG1hcmdpbi1yaWdodDogMS44NzVlbTtcbiAgICAgIG1hcmdpbi1sZWZ0OiBpbml0aWFsO1xuICAgIH1cbiAgfVxuXG4gIC8vIExpbWl0IHdpZHRoIHRvIGNvbnRhaW5lclxuICBpZnJhbWUsXG4gIGltZyxcbiAgc3ZnIHtcbiAgICBtYXgtd2lkdGg6IDEwMCU7XG4gIH1cblxuICAvLyBEYXRhIHRhYmxlc1xuICB0YWJsZTpub3QoW2NsYXNzXSkge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgYm9yZGVyLXJhZGl1czogcHgycmVtKDJweCk7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tbWQtZGVmYXVsdC1iZy1jb2xvcik7XG4gICAgZm9udC1zaXplOiBtcygtMSk7XG4gICAgYm94LXNoYWRvdzpcbiAgICAgIDAgcHgycmVtKDRweCkgcHgycmVtKDEwcHgpIGhzbGEoMCwgMCUsIDAlLCAwLjA1KSxcbiAgICAgIDAgMCAgICAgICAgICAgcHgycmVtKDFweCkgIGhzbGEoMCwgMCUsIDAlLCAwLjEpO1xuICAgIG92ZXJmbG93OiBhdXRvO1xuICAgIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDtcblxuICAgIC8vIER1ZSB0byBtYXJnaW4gY29sbGFwc2UgYmVjYXVzZSBvZiB0aGUgbmVjZXNzYXJ5IGlubGluZS1ibG9jayBoYWNrLCB3ZVxuICAgIC8vIGNhbm5vdCBpbmNyZWFzZSB0aGUgYm90dG9tIG1hcmdpbiBvbiB0aGUgdGFibGUsIHNvIHdlIGp1c3QgaW5jcmVhc2UgdGhlXG4gICAgLy8gdG9wIG1hcmdpbiBvbiB0aGUgZm9sbG93aW5nIGVsZW1lbnRcbiAgICAmICsgKiB7XG4gICAgICBtYXJnaW4tdG9wOiAxLjVlbTtcbiAgICB9XG5cbiAgICAvLyBUYWJsZSBoZWFkaW5ncyBhbmQgY2VsbHNcbiAgICB0aDpub3QoW2FsaWduXSksXG4gICAgdGQ6bm90KFthbGlnbl0pIHtcbiAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG5cbiAgICAgIC8vIEFkanVzdCBmb3IgcmlnaHQtdG8tbGVmdCBsYW5ndWFnZXNcbiAgICAgIFtkaXI9XCJydGxcIl0gJiB7XG4gICAgICAgIHRleHQtYWxpZ246IHJpZ2h0O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRhYmxlIGhlYWRpbmdzXG4gICAgdGgge1xuICAgICAgbWluLXdpZHRoOiBweDJyZW0oMTAwcHgpO1xuICAgICAgcGFkZGluZzogcHgycmVtKDEycHgpIHB4MnJlbSgxNnB4KTtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0KTtcbiAgICAgIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWJnLWNvbG9yKTtcbiAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7XG4gICAgfVxuXG4gICAgLy8gVGFibGUgY2VsbHNcbiAgICB0ZCB7XG4gICAgICBwYWRkaW5nOiBweDJyZW0oMTJweCkgcHgycmVtKDE2cHgpO1xuICAgICAgYm9yZGVyLXRvcDogcHgycmVtKDFweCkgc29saWQgdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlc3QpO1xuICAgICAgdmVydGljYWwtYWxpZ246IHRvcDtcbiAgICB9XG5cbiAgICAvLyBUYWJsZSByb3dzXG4gICAgdHIge1xuICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAxMjVtcztcblxuICAgICAgLy8gQWRkIGJhY2tncm91bmQgb24gaG92ZXJcbiAgICAgICY6aG92ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMDM1KTtcbiAgICAgICAgYm94LXNoYWRvdzogMCBweDJyZW0oMXB4KSAgMCB2YXIoLS1tZC1kZWZhdWx0LWJnLWNvbG9yKSBpbnNldDtcbiAgICAgIH1cblxuICAgICAgLy8gUmVtb3ZlIHRvcCBib3JkZXIgb24gZmlyc3Qgcm93XG4gICAgICAmOmZpcnN0LWNoaWxkIHRkIHtcbiAgICAgICAgYm9yZGVyLXRvcDogMDtcbiAgICAgIH1cbiAgICB9XG5cblxuICAgIC8vIERvIG5vdCB3cmFwIGxpbmtzIGluIHRhYmxlc1xuICAgIGEge1xuICAgICAgd29yZC1icmVhazogbm9ybWFsO1xuICAgIH1cbiAgfVxuXG4gIC8vIFdyYXBwZXIgZm9yIHNjcm9sbGluZyBvbiBvdmVyZmxvd1xuICAmX19zY3JvbGx3cmFwIHtcbiAgICBtYXJnaW46IDFlbSBweDJyZW0oLTE2cHgpO1xuICAgIG92ZXJmbG93LXg6IGF1dG87XG4gICAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoO1xuICB9XG5cbiAgLy8gRGF0YSB0YWJsZSB3cmFwcGVyLCBpbiBjYXNlIEphdmFTY3JpcHQgaXMgYXZhaWxhYmxlXG4gIC5tZC10eXBlc2V0X190YWJsZSB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIG1hcmdpbi1ib3R0b206IDAuNWVtO1xuICAgIHBhZGRpbmc6IDAgcHgycmVtKDE2cHgpO1xuXG4gICAgLy8gRGF0YSB0YWJsZXNcbiAgICB0YWJsZSB7XG4gICAgICBkaXNwbGF5OiB0YWJsZTtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgbWFyZ2luOiAwO1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB9XG4gIH1cbn1cbiIsIi8vLy9cbi8vLyBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyMCBNYXJ0aW4gRG9uYXRoIDxtYXJ0aW4uZG9uYXRoQHNxdWlkZnVuay5jb20+XG4vLy9cbi8vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSxcbi8vLyB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uXG4vLy8gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsXG4vLy8gYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlXG4vLy8gU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vL1xuLy8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLy8gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vLy9cbi8vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLy8gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTi1JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMXG4vLy8gVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lOR1xuLy8vIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVJcbi8vLyBERUFMSU5HU1xuLy8vL1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBWYXJpYWJsZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gQWN0aXZlICh0b2dnbGVkKSBkcmF3ZXJcbiRtZC10b2dnbGVfX2RyYXdlci0tY2hlY2tlZDpcbiAgXCJbZGF0YS1tZC10b2dnbGU9XFxcImRyYXdlclxcXCJdOmNoZWNrZWQgflwiO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBSdWxlczogYmFzZSBncmlkIGFuZCBjb250YWluZXJzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIFN0cmV0Y2ggY29udGFpbmVyIHRvIHZpZXdwb3J0IGFuZCBzZXQgYmFzZSBmb250LXNpemVmb3Igc2ltcGxlIGNhbGN1bGF0aW9uc1xuLy8gYmFzZWQgb24gcmVsYXRpdmUgZW1zIChyZW1zKVxuaHRtbCB7XG4gIGhlaWdodDogMTAwJTtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1iZy1jb2xvcik7XG4gIC8vIEhhY2s6IG5vcm1hbGx5LCB3ZSB3b3VsZCBzZXQgdGhlIGJhc2UgZm9udC1zaXplIHRvIDYyLjUlLCBzbyB3ZSBjYW4gYmFzZVxuICAvLyBhbGwgY2FsY3VsYXRpb25zIG9uIDEwcHgsIGJ1dCBDaHJvbWl1bSBhbmQgQ2hyb21lIGRlZmluZSBhIG1pbmltYWwgZm9udFxuICAvLyBzaXplIG9mIDEyIGlmIHRoZSBzeXN0ZW0gbGFuZ3VhZ2UgaXMgc2V0IHRvIENoaW5lc2UuIEZvciB0aGlzIHJlYXNvbiB3ZVxuICAvLyBqdXN0IGRvdWJsZSB0aGUgZm9udC1zaXplLCBzZXQgaXQgdG8gMjBweCB3aGljaCBzZWVtcyB0byBkbyB0aGUgdHJpY2suXG4gIC8vXG4gIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vc3F1aWRmdW5rL21rZG9jcy1tYXRlcmlhbC9pc3N1ZXMvOTExXG4gIGZvbnQtc2l6ZTogMTI1JTtcbiAgLy8gSGFjazogc29tZSBicm93c2VycyBvbiBzb21lIG9wZXJhdGluZyBzeXN0ZW1zIGRvbid0IGFjY291bnQgZm9yIHNjcm9sbFxuICAvLyBiYXJzIHdoZW4gZmlyaW5nIG1lZGlhIHF1ZXJpZXMsIHNvIHdlIG5lZWQgdG8gZG8gdGhpcyBmb3Igc2FmZXR5LiBUaGlzXG4gIC8vIGN1cnJlbnRseSBpbXBhY3RzIHRoZSB0YWJsZSBvZiBjb250ZW50cyBjb21wb25lbnQgYmV0d2VlbiAxMjIwIGFuZCAxMjM0cHhcbiAgLy8gYW5kIGlzIHRvIGN1cnJlbnQga25vd2xlZGdlIG5vdCBmaXhhYmxlLlxuICBvdmVyZmxvdy14OiBoaWRkZW47XG5cbiAgLy8gW3NjcmVlbiBtZWRpdW0gK106IFNldCBiYXNlIGZvbnQtc2l6ZSB0byAxMXB4XG4gIEBpbmNsdWRlIGJyZWFrLWZyb20tZGV2aWNlKHNjcmVlbiBtZWRpdW0pIHtcbiAgICBmb250LXNpemU6IDEzNy41MCU7XG4gIH1cblxuICAvLyBbc2NyZWVuIGxhcmdlICtdOiBTZXQgYmFzZSBmb250LXNpemUgdG8gMTJweFxuICBAaW5jbHVkZSBicmVhay1mcm9tLWRldmljZShzY3JlZW4gbGFyZ2UpIHtcbiAgICBmb250LXNpemU6IDE1MCU7XG4gIH1cbn1cblxuLy8gU3RyZXRjaCBib2R5IHRvIGNvbnRhaW5lciBhbmQgbGVhdmUgcm9vbSBmb3IgZm9vdGVyXG5ib2R5IHtcbiAgZGlzcGxheTogZmxleDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICB3aWR0aDogMTAwJTtcbiAgbWluLWhlaWdodDogMTAwJTtcbiAgLy8gSGFjazogcmVzZXQgZm9udC1zaXplIHRvIDEwcHgsIHNvIHRoZSBzcGFjaW5nIGZvciBhbGwgaW5saW5lIGVsZW1lbnRzIGlzXG4gIC8vIGNvcnJlY3QgYWdhaW4uIE90aGVyd2lzZSB0aGUgc3BhY2luZyB3b3VsZCBiZSBiYXNlZCBvbiAyMHB4LlxuICBmb250LXNpemU6IDAuNXJlbTsgLy8gc3R5bGVsaW50LWRpc2FibGUtbGluZSB1bml0LXdoaXRlbGlzdFxuXG4gIC8vIFt0YWJsZXQgcG9ydHJhaXQgLV06IExvY2sgYm9keSB0byBkaXNhYmxlIHNjcm9sbCBidWJibGluZ1xuICBAaW5jbHVkZSBicmVhay10by1kZXZpY2UodGFibGV0IHBvcnRyYWl0KSB7XG5cbiAgICAvLyBMb2NrIGJvZHkgdG8gdmlld3BvcnQgaGVpZ2h0IChlLmcuIGluIHNlYXJjaCBtb2RlKVxuICAgICZbZGF0YS1tZC1zdGF0ZT1cImxvY2tcIl0ge1xuICAgICAgcG9zaXRpb246IGZpeGVkO1xuICAgIH1cbiAgfVxufVxuXG4vLyBIb3Jpem9udGFsIHNlcGFyYXRvcnNcbmhyIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGhlaWdodDogcHgycmVtKDFweCk7XG4gIHBhZGRpbmc6IDA7XG4gIGJvcmRlcjogMDtcbn1cblxuLy8gVGVtcGxhdGUtd2lkZSBncmlkXG4ubWQtZ3JpZCB7XG4gIG1heC13aWR0aDogcHgycmVtKDEyMjBweCk7XG4gIG1hcmdpbi1yaWdodDogYXV0bztcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XG59XG5cbi8vIENvbnRlbnQgd3JhcHBlclxuLm1kLWNvbnRhaW5lciB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGZsZXgtZ3JvdzogMTtcbn1cblxuLy8gVGhlIG1haW4gY29udGVudCBzaG91bGQgc3RyZXRjaCB0byBtYXhpbXVtIGhlaWdodCBpbiB0aGUgdGFibGVcbi5tZC1tYWluIHtcbiAgZmxleC1ncm93OiAxO1xuXG4gIC8vIEluY3JlYXNlIHRvcCBzcGFjaW5nIG9mIGNvbnRlbnQgYXJlYSB0byBnaXZlIHR5cG9ncmFwaHkgbW9yZSByb29tXG4gICZfX2lubmVyIHtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgcGFkZGluZy10b3A6IHB4MnJlbSgyNHB4ICsgNnB4KTtcbiAgICAvLyBIYWNrOiBpbmR1Y2UgbWFyZ2luLWNvbGxhcHNlLCBiZWNhdXNlIG90aGVyd2lzZSB0aGUgc2lkZWJhciBoZWlnaHQgaXNcbiAgICAvLyBub3QgY2FsY3VsYXRlZCBjb3JyZWN0bHkgYW5kIHRoZSBvdmVyZmxvdyBwcm9wZXJ0eSBvbiB0aGlzIGVsZW1lbnQgbXVzdFxuICAgIC8vIGJlIGxlZnQgaW4gaW5pdGlhbCBzdGF0ZSBmb3IgdGFyZ2V0dGVkIGxpbmsgb2Zmc2V0cyB0byB3b3JrIHByb3Blcmx5XG4gICAgcGFkZGluZy1ib3R0b206IHB4MnJlbSgxcHgpO1xuICB9XG59XG5cbi8vIEFwcGx5IGVsbGlwc2lzIGluIGNhc2Ugb2Ygb3ZlcmZsb3dpbmcgdGV4dFxuLm1kLWVsbGlwc2lzIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBSdWxlczogbmF2aWdhdGlvbmFsIGVsZW1lbnRzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIFRvZ2dsZSBjaGVja2JveFxuLm1kLXRvZ2dsZSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8vIE92ZXJsYXkgYmVsb3cgZXhwYW5kZWQgZHJhd2VyXG4ubWQtb3ZlcmxheSB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdG9wOiAwO1xuICB3aWR0aDogMDtcbiAgaGVpZ2h0OiAwO1xuICB0cmFuc2l0aW9uOlxuICAgIHdpZHRoICAgICAwbXMgMjUwbXMsXG4gICAgaGVpZ2h0ICAgIDBtcyAyNTBtcyxcbiAgICBvcGFjaXR5IDI1MG1zO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodCk7XG4gIG9wYWNpdHk6IDA7XG4gIHotaW5kZXg6IDM7XG5cbiAgLy8gW3RhYmxldCAtXTogVHJpZ2dlciBvdmVybGF5XG4gIEBpbmNsdWRlIGJyZWFrLXRvLWRldmljZSh0YWJsZXQpIHtcblxuICAgIC8vIEV4cGFuZGVkIGRyYXdlclxuICAgICN7JG1kLXRvZ2dsZV9fZHJhd2VyLS1jaGVja2VkfSAmIHtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgdHJhbnNpdGlvbjpcbiAgICAgICAgd2lkdGggICAgIDBtcyxcbiAgICAgICAgaGVpZ2h0ICAgIDBtcyxcbiAgICAgICAgb3BhY2l0eSAyNTBtcztcbiAgICAgIG9wYWNpdHk6IDE7XG4gICAgfVxuICB9XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJ1bGVzOiBza2lwIGxpbmtcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gU2tpcCBsaW5rXG4ubWQtc2tpcCB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgbWFyZ2luOiBweDJyZW0oMTBweCk7XG4gIHBhZGRpbmc6IHB4MnJlbSg2cHgpIHB4MnJlbSgxMHB4KTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKHB4MnJlbSg4cHgpKTtcbiAgYm9yZGVyLXJhZGl1czogcHgycmVtKDJweCk7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3IpO1xuICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1iZy1jb2xvcik7XG4gIGZvbnQtc2l6ZTogbXMoLTEpO1xuICBvcGFjaXR5OiAwO1xuXG4gIC8vIFNob3cgc2tpcCBsaW5rIG9uIGZvY3VzXG4gICY6Zm9jdXMge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTtcbiAgICB0cmFuc2l0aW9uOlxuICAgICAgdHJhbnNmb3JtIDI1MG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSksXG4gICAgICBvcGFjaXR5ICAgMTc1bXMgNzVtcztcbiAgICBvcGFjaXR5OiAxO1xuICAgIHotaW5kZXg6IDEwO1xuICB9XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJ1bGVzOiBwcmludCBzdHlsZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gQWRkIG1hcmdpbnMgdG8gcGFnZVxuQHBhZ2Uge1xuICBtYXJnaW46IDI1bW07XG59XG4iLCIvLy8vXG4vLy8gQ29weXJpZ2h0IChjKSAyMDE2LTIwMjAgTWFydGluIERvbmF0aCA8bWFydGluLmRvbmF0aEBzcXVpZGZ1bmsuY29tPlxuLy8vXG4vLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksXG4vLy8gdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvblxuLy8vIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLFxuLy8vIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZVxuLy8vIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vLy9cbi8vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy8vXG4vLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT04tSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTFxuLy8vIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkdcbi8vLyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSXG4vLy8gREVBTElOR1Ncbi8vLy9cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUnVsZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gQW5ub3VuY2VtZW50IGJhclxuLm1kLWFubm91bmNlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvcik7XG5cbiAgLy8gQWN0dWFsIGNvbnRlbnRcbiAgJl9faW5uZXIge1xuICAgIG1pbi1oZWlnaHQ6IHB4MnJlbSg0OHB4KTtcbiAgICBwYWRkaW5nOiAwIHB4MnJlbSgxNnB4KTtcbiAgICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1iZy1jb2xvcik7XG4gICAgZm9udC1zaXplOiBweDJyZW0oMTRweCk7XG4gICAgbGluZS1oZWlnaHQ6IHB4MnJlbSg0OHB4KTtcbiAgfVxufVxuIiwiLy8vL1xuLy8vIENvcHlyaWdodCAoYykgMjAxNi0yMDIwIE1hcnRpbiBEb25hdGggPG1hcnRpbi5kb25hdGhAc3F1aWRmdW5rLmNvbT5cbi8vL1xuLy8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLFxuLy8vIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb25cbi8vLyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSxcbi8vLyBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGVcbi8vLyBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy8vXG4vLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vL1xuLy8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTExcbi8vLyBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HXG4vLy8gRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUlxuLy8vIERFQUxJTkdTXG4vLy8vXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJ1bGVzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIENvcHkgdG8gY2xpcGJvYXJkXG4ubWQtY2xpcGJvYXJkIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IHB4MnJlbSg4cHgpO1xuICByaWdodDogcHgycmVtKDhweCk7XG4gIHdpZHRoOiBweDJyZW0oMjRweCk7XG4gIGhlaWdodDogcHgycmVtKDI0cHgpO1xuICB0cmFuc2l0aW9uOiBjb2xvciAyNTBtcztcbiAgYm9yZGVyLXJhZGl1czogcHgycmVtKDJweCk7XG4gIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodGVzdCk7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgei1pbmRleDogMTtcbiAgLy8gSGFjazogcmVkdWNlIGppdHRlclxuICBiYWNrZmFjZS12aXNpYmlsaXR5OiBoaWRkZW47XG5cbiAgLy8gSGlkZSBmb3IgcHJpbnRcbiAgQG1lZGlhIHByaW50IHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG5cbiAgLy8gU2xpZ2h0bHkgc21hbGxlciBpY29uXG4gIHN2ZyB7XG4gICAgd2lkdGg6IHB4MnJlbSgxOHB4KTtcbiAgICBoZWlnaHQ6IHB4MnJlbSgxOHB4KTtcbiAgfVxuXG4gIC8vIFNob3cgb24gY29udGFpbmVyIGhvdmVyXG4gIHByZTpob3ZlciAmIHtcbiAgICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHQpO1xuICB9XG5cbiAgLy8gRm9jdXNlZCBvciBob3ZlcmVkIGljb25cbiAgcHJlICY6Zm9jdXMsXG4gIHByZSAmOmhvdmVyIHtcbiAgICBjb2xvcjogdmFyKC0tbWQtYWNjZW50LWZnLWNvbG9yKTtcbiAgfVxufVxuIiwiLy8vL1xuLy8vIENvcHlyaWdodCAoYykgMjAxNi0yMDIwIE1hcnRpbiBEb25hdGggPG1hcnRpbi5kb25hdGhAc3F1aWRmdW5rLmNvbT5cbi8vL1xuLy8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLFxuLy8vIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb25cbi8vLyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSxcbi8vLyBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGVcbi8vLyBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy8vXG4vLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vL1xuLy8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTExcbi8vLyBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HXG4vLy8gRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUlxuLy8vIERFQUxJTkdTXG4vLy8vXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJ1bGVzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIENvbnRlbnQgY29udGFpbmVyXG4ubWQtY29udGVudCB7XG5cbiAgLy8gW3RhYmxldCBsYW5kc2NhcGUgK106IEFkZCBzcGFjZSBmb3IgdGFibGUgb2YgY29udGVudHNcbiAgQGluY2x1ZGUgYnJlYWstZnJvbS1kZXZpY2UodGFibGV0IGxhbmRzY2FwZSkge1xuICAgIG1hcmdpbi1yaWdodDogcHgycmVtKDI0MnB4KTtcblxuICAgIC8vIEFkanVzdCBmb3IgcmlnaHQtdG8tbGVmdCBsYW5ndWFnZXNcbiAgICBbZGlyPVwicnRsXCJdICYge1xuICAgICAgbWFyZ2luLXJpZ2h0OiBpbml0aWFsO1xuICAgICAgbWFyZ2luLWxlZnQ6IHB4MnJlbSgyNDJweCk7XG4gICAgfVxuICB9XG5cbiAgLy8gW3NjcmVlbiArXTogQWRkIHNwYWNlIGZvciB0YWJsZSBvZiBjb250ZW50c1xuICBAaW5jbHVkZSBicmVhay1mcm9tLWRldmljZShzY3JlZW4pIHtcbiAgICBtYXJnaW4tbGVmdDogcHgycmVtKDI0MnB4KTtcblxuICAgIC8vIEFkanVzdCBmb3IgcmlnaHQtdG8tbGVmdCBsYW5ndWFnZXNcbiAgICBbZGlyPVwicnRsXCJdICYge1xuICAgICAgbWFyZ2luLXJpZ2h0OiBweDJyZW0oMjQycHgpO1xuICAgIH1cbiAgfVxuXG4gIC8vIERlZmluZSBzcGFjaW5nXG4gICZfX2lubmVyIHtcbiAgICBtYXJnaW46IDAgcHgycmVtKDE2cHgpIHB4MnJlbSgyNHB4KTtcbiAgICBwYWRkaW5nLXRvcDogcHgycmVtKDEycHgpO1xuXG4gICAgLy8gW3NjcmVlbiArXTogSW5jcmVhc2UgaG9yaXpvbnRhbCBzcGFjaW5nXG4gICAgQGluY2x1ZGUgYnJlYWstZnJvbS1kZXZpY2Uoc2NyZWVuKSB7XG4gICAgICBtYXJnaW4tcmlnaHQ6IHB4MnJlbSgyNHB4KTtcbiAgICAgIG1hcmdpbi1sZWZ0OiBweDJyZW0oMjRweCk7XG4gICAgfVxuXG4gICAgLy8gSGFjazogYWRkIHBzZXVkbyBlbGVtZW50IGZvciBzcGFjaW5nLCBhcyB0aGUgb3ZlcmZsb3cgb2YgdGhlIGNvbnRlbnRcbiAgICAvLyBjb250YWluZXIgbWF5IG5vdCBiZSBoaWRkZW4gZHVlIHRvIGFuIGltbWluZW50IG9mZnNldCBlcnJvciBvbiB0YXJnZXRzXG4gICAgJjo6YmVmb3JlIHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgaGVpZ2h0OiBweDJyZW0oOHB4KTtcbiAgICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgfVxuXG4gICAgLy8gSGFjazogcmVtb3ZlIGJvdHRvbSBzcGFjaW5nIG9mIGxhc3QgZWxlbWVudCwgZHVlIHRvIG1hcmdpbiBjb2xsYXBzZVxuICAgID4gOmxhc3QtY2hpbGQge1xuICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICB9XG4gIH1cblxuICAvLyBCdXR0b24gbmV4dCB0byB0aGUgdGl0bGVcbiAgJl9fYnV0dG9uIHtcbiAgICBtYXJnaW46IHB4MnJlbSg4cHgpIDA7XG4gICAgbWFyZ2luLWxlZnQ6IHB4MnJlbSg4cHgpO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgZmxvYXQ6IHJpZ2h0O1xuXG4gICAgLy8gQWRqdXN0IGZvciByaWdodC10by1sZWZ0IGxhbmd1YWdlc1xuICAgIFtkaXI9XCJydGxcIl0gJiB7XG4gICAgICBtYXJnaW4tcmlnaHQ6IHB4MnJlbSg4cHgpO1xuICAgICAgbWFyZ2luLWxlZnQ6IGluaXRpYWw7XG4gICAgICBmbG9hdDogbGVmdDtcblxuICAgICAgLy8gRmxpcCBpY29uIHZlcnRpY2FsbHlcbiAgICAgIHN2ZyB7XG4gICAgICAgIHRyYW5zZm9ybTogc2NhbGVYKC0xKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBPdmVycmlkZSBkZWZhdWx0IGxpbmsgY29sb3IgZm9yIGljb25zXG4gICAgLm1kLXR5cGVzZXQgJiB7XG4gICAgICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlcik7XG4gICAgfVxuXG4gICAgLy8gQWxpZ24gdGV4dCB3aXRoIGljb25cbiAgICBzdmcge1xuICAgICAgZGlzcGxheTogaW5saW5lO1xuICAgICAgdmVydGljYWwtYWxpZ246IHRvcDtcbiAgICB9XG5cbiAgICAvLyBIaWRlIGZvciBwcmludFxuICAgIEBtZWRpYSBwcmludCB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cbiAgfVxufVxuIiwiLy8vL1xuLy8vIENvcHlyaWdodCAoYykgMjAxNi0yMDIwIE1hcnRpbiBEb25hdGggPG1hcnRpbi5kb25hdGhAc3F1aWRmdW5rLmNvbT5cbi8vL1xuLy8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLFxuLy8vIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb25cbi8vLyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSxcbi8vLyBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGVcbi8vLyBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy8vXG4vLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vL1xuLy8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTExcbi8vLyBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HXG4vLy8gRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUlxuLy8vIERFQUxJTkdTXG4vLy8vXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJ1bGVzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIERpYWxvZyByZW5kZXJlZCBhcyBzbmFja2JhclxuLm1kLWRpYWxvZyB7XG4gIEBpbmNsdWRlIHotZGVwdGgoMik7XG5cbiAgZGlzcGxheTogYmxvY2s7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgcmlnaHQ6IHB4MnJlbSgxNnB4KTtcbiAgYm90dG9tOiBweDJyZW0oMTZweCk7XG4gIGxlZnQ6IGluaXRpYWw7XG4gIG1pbi13aWR0aDogcHgycmVtKDIyMnB4KTtcbiAgcGFkZGluZzogcHgycmVtKDhweCkgcHgycmVtKDEycHgpO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMTAwJSk7XG4gIHRyYW5zaXRpb246XG4gICAgdHJhbnNmb3JtIDBtcyAgIDQwMG1zLFxuICAgIG9wYWNpdHkgICA0MDBtcztcbiAgYm9yZGVyOiBub25lO1xuICBib3JkZXItcmFkaXVzOiBweDJyZW0oMnB4KTtcbiAgYmFja2dyb3VuZDogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvcik7XG4gIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWJnLWNvbG9yKTtcbiAgZm9udC1zaXplOiBweDJyZW0oMTRweCk7XG4gIG9wYWNpdHk6IDA7XG4gIHotaW5kZXg6IDI7XG5cbiAgLy8gQWRqdXN0IGZvciByaWdodC10by1sZWZ0IGxhbmd1YWdlc1xuICBbZGlyPVwicnRsXCJdICYge1xuICAgIHJpZ2h0OiBpbml0aWFsO1xuICAgIGxlZnQ6IHB4MnJlbSgxNnB4KTtcbiAgfVxuXG4gIC8vIFNob3cgb3BlbiBkaWFsb2dcbiAgJltkYXRhLW1kLXN0YXRlPVwib3BlblwiXSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApO1xuICAgIHRyYW5zaXRpb246XG4gICAgICB0cmFuc2Zvcm0gNDAwbXMgY3ViaWMtYmV6aWVyKDAuMDc1LCAwLjg1LCAwLjE3NSwgMSksXG4gICAgICBvcGFjaXR5ICAgNDAwbXM7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxuXG4gIC8vIEhpZGUgZm9yIHByaW50XG4gIEBtZWRpYSBwcmludCB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuIiwiLy9cbi8vIE5hbWU6ICAgICAgICAgICBNYXRlcmlhbCBTaGFkb3dzXG4vLyBEZXNjcmlwdGlvbjogICAgTWl4aW5zIGZvciBNYXRlcmlhbCBEZXNpZ24gU2hhZG93cy5cbi8vIFZlcnNpb246ICAgICAgICAzLjAuMVxuLy9cbi8vIEF1dGhvcjogICAgICAgICBEZW5pcyBNYWxpbm9jaGtpblxuLy8gR2l0OiAgICAgICAgICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9tcm1sbmMvbWF0ZXJpYWwtc2hhZG93c1xuLy9cbi8vIHR3aXR0ZXI6ICAgICAgICBAbXJtbG5jXG4vL1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblxuLy8gTWl4aW5zXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuQG1peGluIHotZGVwdGgtdHJhbnNpdGlvbigpIHtcbiAgdHJhbnNpdGlvbjogYm94LXNoYWRvdyAuMjhzIGN1YmljLWJlemllciguNCwgMCwgLjIsIDEpO1xufVxuXG5AbWl4aW4gei1kZXB0aC1mb2N1cygpIHtcbiAgYm94LXNoYWRvdzogMCAwIDhweCByZ2JhKDAsIDAsIDAsIC4xOCksIDAgOHB4IDE2cHggcmdiYSgwLCAwLCAwLCAuMzYpO1xufVxuXG5AbWl4aW4gei1kZXB0aC0yZHAoKSB7XG4gIGJveC1zaGFkb3c6IDAgMnB4IDJweCAwIHJnYmEoMCwgMCwgMCwgLjE0KSxcbiAgICAgICAgICAgICAgMCAxcHggNXB4IDAgcmdiYSgwLCAwLCAwLCAuMTIpLFxuICAgICAgICAgICAgICAwIDNweCAxcHggLTJweCByZ2JhKDAsIDAsIDAsIC4yKTtcbn1cblxuQG1peGluIHotZGVwdGgtM2RwKCkge1xuICBib3gtc2hhZG93OiAwIDNweCA0cHggMCByZ2JhKDAsIDAsIDAsIC4xNCksXG4gICAgICAgICAgICAgIDAgMXB4IDhweCAwIHJnYmEoMCwgMCwgMCwgLjEyKSxcbiAgICAgICAgICAgICAgMCAzcHggM3B4IC0ycHggcmdiYSgwLCAwLCAwLCAuNCk7XG59XG5cbkBtaXhpbiB6LWRlcHRoLTRkcCgpIHtcbiAgYm94LXNoYWRvdzogMCA0cHggNXB4IDAgcmdiYSgwLCAwLCAwLCAuMTQpLFxuICAgICAgICAgICAgICAwIDFweCAxMHB4IDAgcmdiYSgwLCAwLCAwLCAuMTIpLFxuICAgICAgICAgICAgICAwIDJweCA0cHggLTFweCByZ2JhKDAsIDAsIDAsIC40KTtcbn1cblxuQG1peGluIHotZGVwdGgtNmRwKCkge1xuICBib3gtc2hhZG93OiAwIDZweCAxMHB4IDAgcmdiYSgwLCAwLCAwLCAuMTQpLFxuICAgICAgICAgICAgICAwIDFweCAxOHB4IDAgcmdiYSgwLCAwLCAwLCAuMTIpLFxuICAgICAgICAgICAgICAwIDNweCA1cHggLTFweCByZ2JhKDAsIDAsIDAsIC40KTtcbn1cblxuQG1peGluIHotZGVwdGgtOGRwKCkge1xuICBib3gtc2hhZG93OiAwIDhweCAxMHB4IDFweCByZ2JhKDAsIDAsIDAsIC4xNCksXG4gICAgICAgICAgICAgIDAgM3B4IDE0cHggMnB4IHJnYmEoMCwgMCwgMCwgLjEyKSxcbiAgICAgICAgICAgICAgMCA1cHggNXB4IC0zcHggcmdiYSgwLCAwLCAwLCAuNCk7XG59XG5cbkBtaXhpbiB6LWRlcHRoLTE2ZHAoKSB7XG4gIGJveC1zaGFkb3c6IDAgMTZweCAyNHB4IDJweCByZ2JhKDAsIDAsIDAsIC4xNCksXG4gICAgICAgICAgICAgIDAgIDZweCAzMHB4IDVweCByZ2JhKDAsIDAsIDAsIC4xMiksXG4gICAgICAgICAgICAgIDAgIDhweCAxMHB4IC01cHggcmdiYSgwLCAwLCAwLCAuNCk7XG59XG5cbkBtaXhpbiB6LWRlcHRoLTI0ZHAoKSB7XG4gIGJveC1zaGFkb3c6IDAgIDlweCA0NnB4ICA4cHggcmdiYSgwLCAwLCAwLCAuMTQpLFxuICAgICAgICAgICAgICAwIDI0cHggMzhweCAgM3B4IHJnYmEoMCwgMCwgMCwgLjEyKSxcbiAgICAgICAgICAgICAgMCAxMXB4IDE1cHggLTdweCByZ2JhKDAsIDAsIDAsIC40KTtcbn1cblxuQG1peGluIHotZGVwdGgoJGRwOiAyKSB7XG4gIEBpZiAkZHAgPT0gMiB7XG4gICAgQGluY2x1ZGUgei1kZXB0aC0yZHAoKTtcbiAgfSBAZWxzZSBpZiAkZHAgPT0gMyB7XG4gICAgQGluY2x1ZGUgei1kZXB0aC0zZHAoKTtcbiAgfSBAZWxzZSBpZiAkZHAgPT0gNCB7XG4gICAgQGluY2x1ZGUgei1kZXB0aC00ZHAoKTtcbiAgfSBAZWxzZSBpZiAkZHAgPT0gNiB7XG4gICAgQGluY2x1ZGUgei1kZXB0aC02ZHAoKTtcbiAgfSBAZWxzZSBpZiAkZHAgPT0gOCB7XG4gICAgQGluY2x1ZGUgei1kZXB0aC04ZHAoKTtcbiAgfSBAZWxzZSBpZiAkZHAgPT0gMTYge1xuICAgIEBpbmNsdWRlIHotZGVwdGgtMTZkcCgpO1xuICB9IEBlbHNlIGlmICRkcCA9PSAyNCB7XG4gICAgQGluY2x1ZGUgei1kZXB0aC0yNGRwKCk7XG4gIH1cbn1cblxuXG4vLyBDbGFzcyBnZW5lcmF0b3Jcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5AbWl4aW4gei1kZXB0aC1jbGFzc2VzKCR0cmFuc2l0aW9uOiBmYWxzZSwgJGZvY3VzOiBmYWxzZSkge1xuICBAaWYgJHRyYW5zaXRpb24gPT0gdHJ1ZSB7XG4gICAgJi10cmFuc2l0aW9uIHtcbiAgICAgIEBpbmNsdWRlIHotZGVwdGgtdHJhbnNpdGlvbigpO1xuICAgIH1cbiAgfVxuXG4gIEBpZiAkZm9jdXMgPT0gdHJ1ZSB7XG4gICAgJi1mb2N1cyB7XG4gICAgICBAaW5jbHVkZSB6LWRlcHRoLWZvY3VzKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gVGhlIGF2YWlsYWJsZSB2YWx1ZXMgZm9yIHRoZSBzaGFkb3cgZGVwdGhcbiAgQGVhY2ggJGRlcHRoIGluIDIsIDMsIDQsIDYsIDgsIDE2LCAyNCB7XG4gICAgJi0jeyRkZXB0aH1kcCB7XG4gICAgICBAaW5jbHVkZSB6LWRlcHRoKCRkZXB0aCk7XG4gICAgfVxuICB9XG59XG4iLCIvLy8vXG4vLy8gQ29weXJpZ2h0IChjKSAyMDE2LTIwMjAgTWFydGluIERvbmF0aCA8bWFydGluLmRvbmF0aEBzcXVpZGZ1bmsuY29tPlxuLy8vXG4vLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksXG4vLy8gdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvblxuLy8vIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLFxuLy8vIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZVxuLy8vIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vLy9cbi8vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy8vXG4vLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT04tSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTFxuLy8vIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkdcbi8vLyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSXG4vLy8gREVBTElOR1Ncbi8vLy9cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUnVsZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gQXBwbGljYXRpb24gaGVhZGVyIChzdGF5cyBhbHdheXMgb24gdG9wKVxuLm1kLWhlYWRlciB7XG4gIHBvc2l0aW9uOiBzdGlja3k7XG4gIHRvcDogMDtcbiAgcmlnaHQ6IDA7XG4gIGxlZnQ6IDA7XG4gIGhlaWdodDogcHgycmVtKDQ4cHgpO1xuICB0cmFuc2l0aW9uOlxuICAgIGJhY2tncm91bmQtY29sb3IgMjUwbXMsXG4gICAgY29sb3IgMjUwbXM7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW1kLXByaW1hcnktZmctY29sb3IpO1xuICBjb2xvcjogdmFyKC0tbWQtcHJpbWFyeS1iZy1jb2xvcik7XG4gIC8vIEhhY2s6IHJlZHVjZSBqaXR0ZXIgYnkgYWRkaW5nIGEgdHJhbnNwYXJlbnQgYm94IHNoYWRvdyBvZiB0aGUgc2FtZSBzaXplXG4gIC8vIHNvIHRoZSBzaXplIG9mIHRoZSBsYXllciBkb2Vzbid0IGNoYW5nZSBkdXJpbmcgYW5pbWF0aW9uXG4gIGJveC1zaGFkb3c6XG4gICAgMCAwICAgICAgICAgICBweDJyZW0oNHB4KSByZ2JhKDAsIDAsIDAsIDApLFxuICAgIDAgcHgycmVtKDRweCkgcHgycmVtKDhweCkgcmdiYSgwLCAwLCAwLCAwKTtcbiAgei1pbmRleDogMjtcblxuICAvLyBBbHdheXMgaGlkZSBzaGFkb3csIGluIGNhc2UgSmF2YVNjcmlwdCBpcyBub3QgYXZhaWxhYmxlXG4gIC5uby1qcyAmIHtcbiAgICB0cmFuc2l0aW9uOiBub25lO1xuICAgIGJveC1zaGFkb3c6IG5vbmU7XG4gIH1cblxuICAvLyBTaG93IGFuZCBhbmltYXRlIHNoYWRvd1xuICAmW2RhdGEtbWQtc3RhdGU9XCJzaGFkb3dcIl0ge1xuICAgIHRyYW5zaXRpb246XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yIDI1MG1zLFxuICAgICAgY29sb3IgICAgICAgICAgICAyNTBtcyxcbiAgICAgIGJveC1zaGFkb3cgICAgICAgMjUwbXM7XG4gICAgYm94LXNoYWRvdzpcbiAgICAgIDAgMCAgICAgICAgICAgcHgycmVtKDRweCkgcmdiYSgwLCAwLCAwLCAwLjEpLFxuICAgICAgMCBweDJyZW0oNHB4KSBweDJyZW0oOHB4KSByZ2JhKDAsIDAsIDAsIDAuMik7XG4gIH1cblxuICAvLyBIaWRlIGZvciBwcmludFxuICBAbWVkaWEgcHJpbnQge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cblxuLy8gTmF2aWdhdGlvbiB3aXRoaW4gaGVhZGVyXG4ubWQtaGVhZGVyLW5hdiB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIHBhZGRpbmc6IDAgcHgycmVtKDRweCk7XG5cbiAgLy8gSWNvbiBidXR0b25zXG4gICZfX2J1dHRvbiB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIG1hcmdpbjogcHgycmVtKDRweCk7XG4gICAgcGFkZGluZzogcHgycmVtKDhweCk7XG4gICAgdHJhbnNpdGlvbjogb3BhY2l0eSAyNTBtcztcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgei1pbmRleDogMTtcblxuICAgIC8vIEFkanVzdCBmb3IgcmlnaHQtdG8tbGVmdCBsYW5ndWFnZXNcbiAgICBbZGlyPVwicnRsXCJdICYge1xuXG4gICAgICAvLyBGbGlwIGljb24gdmVydGljYWxseVxuICAgICAgc3ZnIHtcbiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZVgoLTEpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEZvY3VzZWQgb3IgaG92ZXJlZCBpY29uXG4gICAgJjpmb2N1cyxcbiAgICAmOmhvdmVyIHtcbiAgICAgIG9wYWNpdHk6IDAuNztcbiAgICB9XG5cbiAgICAvLyBMb2dvXG4gICAgJi5tZC1sb2dvIHtcbiAgICAgIG1hcmdpbjogcHgycmVtKDRweCk7XG4gICAgICBwYWRkaW5nOiBweDJyZW0oOHB4KTtcblxuICAgICAgLy8gSW1hZ2Ugb3IgaWNvblxuICAgICAgaW1nLFxuICAgICAgc3ZnIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIHdpZHRoOiBweDJyZW0oMjRweCk7XG4gICAgICAgIGhlaWdodDogcHgycmVtKDI0cHgpO1xuICAgICAgICBmaWxsOiBjdXJyZW50Q29sb3I7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSGlkZSBzZWFyY2ggaWNvbiwgaWYgSmF2YVNjcmlwdCBpcyBub3QgYXZhaWxhYmxlLlxuICAgIC5uby1qcyAmW2Zvcj1cIl9fc2VhcmNoXCJdIHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxuXG4gICAgLy8gW3RhYmxldCBsYW5kc2NhcGUgK106IEhpZGUgdGhlIHNlYXJjaCBidXR0b25cbiAgICBAaW5jbHVkZSBicmVhay1mcm9tLWRldmljZSh0YWJsZXQgbGFuZHNjYXBlKSB7XG5cbiAgICAgIC8vIFNlYXJjaCBidXR0b25cbiAgICAgICZbZm9yPVwiX19zZWFyY2hcIl0ge1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFt0YWJsZXQgLV06IEhpZGUgdGhlIGxvZ29cbiAgICBAaW5jbHVkZSBicmVhay10by1kZXZpY2UodGFibGV0KSB7XG5cbiAgICAgIC8vIExvZ29cbiAgICAgICYubWQtbG9nbyB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gW3NjcmVlbiArXTogSGlkZSB0aGUgbWVudSBidXR0b25cbiAgICBAaW5jbHVkZSBicmVhay1mcm9tLWRldmljZShzY3JlZW4pIHtcblxuICAgICAgLy8gTWVudSBidXR0b25cbiAgICAgICZbZm9yPVwiX19kcmF3ZXJcIl0ge1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEhlYWRlciB0b3BpY3NcbiAgJl9fdG9waWMge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBwYWRkaW5nOiAwIHB4MnJlbSgyMHB4KTtcbiAgICB0cmFuc2l0aW9uOlxuICAgICAgdHJhbnNmb3JtIDQwMG1zIGN1YmljLWJlemllcigwLjEsIDAuNywgMC4xLCAxKSxcbiAgICAgIG9wYWNpdHkgICAxNTBtcztcbiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgLy8gSGFjazogcmVkdWNlIGppdHRlclxuICAgIGJhY2tmYWNlLXZpc2liaWxpdHk6IGhpZGRlbjtcblxuICAgIC8vIFBhZ2UgdGl0bGVcbiAgICAmICsgJiB7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgocHgycmVtKDI1cHgpKTtcbiAgICAgIHRyYW5zaXRpb246XG4gICAgICAgIHRyYW5zZm9ybSA0MDBtcyBjdWJpYy1iZXppZXIoMSwgMC43LCAwLjEsIDAuMSksXG4gICAgICAgIG9wYWNpdHkgICAxNTBtcztcbiAgICAgIG9wYWNpdHk6IDA7XG4gICAgICB6LWluZGV4OiAtMTtcbiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuXG4gICAgICAvLyBBZGp1c3QgZm9yIHJpZ2h0LXRvLWxlZnQgbGFuZ3VhZ2VzXG4gICAgICBbZGlyPVwicnRsXCJdICYge1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgocHgycmVtKC0yNXB4KSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSW5kdWNlIGVsbGlwc2lzLCBpZiBubyBKYXZhU2NyaXB0IGlzIGF2YWlsYWJsZVxuICAgIC5uby1qcyAmIHtcbiAgICAgIHBvc2l0aW9uOiBpbml0aWFsO1xuICAgIH1cblxuICAgIC8vIEhpZGUgcGFnZSB0aXRsZSBhcyBpdCBpcyBpbnZpc2libGUgYW55d2F5IGFuZCB3aWxsIG92ZXJmbG93IHRoZSBoZWFkZXJcbiAgICAubm8tanMgJiArICYge1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG4gIH1cblxuICAvLyBIZWFkZXIgdGl0bGUgLSBzZXQgbGluZSBoZWlnaHQgdG8gbWF0Y2ggaWNvbiBmb3IgY29ycmVjdCBhbGlnbm1lbnRcbiAgJl9fdGl0bGUge1xuICAgIGZsZXgtZ3JvdzogMTtcbiAgICBmb250LXNpemU6IHB4MnJlbSgxOHB4KTtcbiAgICBsaW5lLWhlaWdodDogcHgycmVtKDQ4cHgpO1xuXG4gICAgLy8gU2hvdyBwYWdlIHRpdGxlXG4gICAgJltkYXRhLW1kLXN0YXRlPVwiYWN0aXZlXCJdIC5tZC1oZWFkZXItbmF2X190b3BpYyB7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgocHgycmVtKC0yNXB4KSk7XG4gICAgICB0cmFuc2l0aW9uOlxuICAgICAgICB0cmFuc2Zvcm0gNDAwbXMgY3ViaWMtYmV6aWVyKDEsIDAuNywgMC4xLCAwLjEpLFxuICAgICAgICBvcGFjaXR5ICAgMTUwbXM7XG4gICAgICBvcGFjaXR5OiAwO1xuICAgICAgei1pbmRleDogLTE7XG4gICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcblxuICAgICAgLy8gQWRqdXN0IGZvciByaWdodC10by1sZWZ0IGxhbmd1YWdlc1xuICAgICAgW2Rpcj1cInJ0bFwiXSAmIHtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKHB4MnJlbSgyNXB4KSk7XG4gICAgICB9XG5cbiAgICAgIC8vIFBhZ2UgdGl0bGVcbiAgICAgICYgKyAubWQtaGVhZGVyLW5hdl9fdG9waWMge1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCk7XG4gICAgICAgIHRyYW5zaXRpb246XG4gICAgICAgICAgdHJhbnNmb3JtIDQwMG1zIGN1YmljLWJlemllcigwLjEsIDAuNywgMC4xLCAxKSxcbiAgICAgICAgICBvcGFjaXR5ICAgMTUwbXM7XG4gICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICAgIHotaW5kZXg6IDA7XG4gICAgICAgIHBvaW50ZXItZXZlbnRzOiBpbml0aWFsO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFBhdGNoIGVsbGlwc2lzXG4gICAgPiAubWQtaGVhZGVyLW5hdl9fZWxsaXBzaXMge1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgfVxuICB9XG5cbiAgLy8gUmVwb3NpdG9yeSBjb250YWluaW5nIHNvdXJjZVxuICAmX19zb3VyY2Uge1xuICAgIGRpc3BsYXk6IG5vbmU7XG5cbiAgICAvLyBbdGFibGV0IGxhbmRzY2FwZSArXTogU2hvdyB0aGUgcmVwb3Npc3RvcnkgZnJvbSB0YWJsZXRcbiAgICBAaW5jbHVkZSBicmVhay1mcm9tLWRldmljZSh0YWJsZXQgbGFuZHNjYXBlKSB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIHdpZHRoOiBweDJyZW0oMjM0cHgpO1xuICAgICAgbWF4LXdpZHRoOiBweDJyZW0oMjM0cHgpO1xuICAgICAgbWFyZ2luLWxlZnQ6IHB4MnJlbSgyMHB4KTtcblxuICAgICAgLy8gQWRqdXN0IGZvciByaWdodC10by1sZWZ0IGxhbmd1YWdlc1xuICAgICAgW2Rpcj1cInJ0bFwiXSAmIHtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiBweDJyZW0oMjBweCk7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiBpbml0aWFsO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFtzY3JlZW4gK106IEluY3JlYXNlIHNwYWNpbmcgb2Ygc2VhcmNoIGJhclxuICAgIEBpbmNsdWRlIGJyZWFrLWZyb20tZGV2aWNlKHNjcmVlbikge1xuICAgICAgbWFyZ2luLWxlZnQ6IHB4MnJlbSgyOHB4KTtcblxuICAgICAgLy8gQWRqdXN0IGZvciByaWdodC10by1sZWZ0IGxhbmd1YWdlc1xuICAgICAgW2Rpcj1cInJ0bFwiXSAmIHtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiBweDJyZW0oMjhweCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCIvLy8vXG4vLy8gQ29weXJpZ2h0IChjKSAyMDE2LTIwMjAgTWFydGluIERvbmF0aCA8bWFydGluLmRvbmF0aEBzcXVpZGZ1bmsuY29tPlxuLy8vXG4vLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksXG4vLy8gdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvblxuLy8vIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLFxuLy8vIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZVxuLy8vIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vLy9cbi8vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy8vXG4vLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT04tSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTFxuLy8vIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkdcbi8vLyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSXG4vLy8gREVBTElOR1Ncbi8vLy9cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUnVsZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gSGVybyB0ZWFzZXJcbi5tZC1oZXJvIHtcbiAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAyNTBtcztcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtcHJpbWFyeS1mZy1jb2xvcik7XG4gIGNvbG9yOiB2YXIoLS1tZC1wcmltYXJ5LWJnLWNvbG9yKTtcbiAgZm9udC1zaXplOiBtcygxKTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcblxuICAvLyBJbm5lciB3cmFwcGVyXG4gICZfX2lubmVyIHtcbiAgICBtYXJnaW4tdG9wOiBweDJyZW0oMjBweCk7XG4gICAgcGFkZGluZzogcHgycmVtKDE2cHgpIHB4MnJlbSgxNnB4KSBweDJyZW0oOHB4KTtcbiAgICB0cmFuc2l0aW9uOlxuICAgICAgdHJhbnNmb3JtIDQwMG1zIGN1YmljLWJlemllcigwLjEsIDAuNywgMC4xLCAxKSxcbiAgICAgIG9wYWNpdHkgICAyNTBtcztcbiAgICB0cmFuc2l0aW9uLWRlbGF5OiAxMDBtcztcblxuICAgIC8vIFt0YWJsZXQgLV06IENvbXBlbnNhdGUgZm9yIG1pc3NpbmcgdGFic1xuICAgIEBpbmNsdWRlIGJyZWFrLXRvLWRldmljZSh0YWJsZXQpIHtcbiAgICAgIG1hcmdpbi10b3A6IHB4MnJlbSg0OHB4KTtcbiAgICAgIG1hcmdpbi1ib3R0b206IHB4MnJlbSgyNHB4KTtcbiAgICB9XG5cbiAgICAvLyBGYWRlLW91dCB0YWJzIGJhY2tncm91bmQgdXBvbiBzY3JvbGxpbmdcbiAgICBbZGF0YS1tZC1zdGF0ZT1cImhpZGRlblwiXSAmIHtcbiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKHB4MnJlbSgxMi41cHgpKTtcbiAgICAgIHRyYW5zaXRpb246XG4gICAgICAgIHRyYW5zZm9ybSAgIDBtcyA0MDBtcyxcbiAgICAgICAgb3BhY2l0eSAgIDEwMG1zICAgMG1zO1xuICAgICAgb3BhY2l0eTogMDtcbiAgICB9XG5cbiAgICAvLyBBZGp1c3QgYm90dG9tIHNwYWNpbmcgaWYgdGhlcmUgYXJlIG5vIHRhYnNcbiAgICAubWQtaGVyby0tZXhwYW5kICYge1xuICAgICAgbWFyZ2luLWJvdHRvbTogcHgycmVtKDI0cHgpO1xuICAgIH1cbiAgfVxufVxuIiwiLy8vL1xuLy8vIENvcHlyaWdodCAoYykgMjAxNi0yMDIwIE1hcnRpbiBEb25hdGggPG1hcnRpbi5kb25hdGhAc3F1aWRmdW5rLmNvbT5cbi8vL1xuLy8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLFxuLy8vIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb25cbi8vLyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSxcbi8vLyBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGVcbi8vLyBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy8vXG4vLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vL1xuLy8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTExcbi8vLyBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HXG4vLy8gRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUlxuLy8vIERFQUxJTkdTXG4vLy8vXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJ1bGVzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIEFwcGxpY2F0aW9uIGZvb3RlclxuLm1kLWZvb3RlciB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3IpO1xuICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1iZy1jb2xvcik7XG5cbiAgLy8gSGlkZSBmb3IgcHJpbnRcbiAgQG1lZGlhIHByaW50IHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG5cbi8vIE5hdmlnYXRpb24gd2l0aGluIGZvb3RlclxuLm1kLWZvb3Rlci1uYXYge1xuXG4gIC8vIFNldCBzcGFjaW5nXG4gICZfX2lubmVyIHtcbiAgICBwYWRkaW5nOiBweDJyZW0oNHB4KTtcbiAgICBvdmVyZmxvdzogYXV0bztcbiAgfVxuXG4gIC8vIExpbmtzIHRvIHByZXZpb3VzIGFuZCBuZXh0IHBhZ2VcbiAgJl9fbGluayB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBwYWRkaW5nLXRvcDogcHgycmVtKDI4cHgpO1xuICAgIHBhZGRpbmctYm90dG9tOiBweDJyZW0oOHB4KTtcbiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDI1MG1zO1xuXG4gICAgLy8gW3RhYmxldCArXTogU2V0IHByb3BvcnRpb25hbCB3aWR0aFxuICAgIEBpbmNsdWRlIGJyZWFrLWZyb20tZGV2aWNlKHRhYmxldCkge1xuICAgICAgd2lkdGg6IDUwJTtcbiAgICB9XG5cbiAgICAvLyBGb2N1c2VkIG9yIGhvdmVyZWQgbGlua3NcbiAgICAmOmZvY3VzLFxuICAgICY6aG92ZXIge1xuICAgICAgb3BhY2l0eTogMC43O1xuICAgIH1cblxuICAgIC8vIExpbmsgdG8gcHJldmlvdXMgcGFnZVxuICAgICYtLXByZXYge1xuICAgICAgd2lkdGg6IDI1JTtcbiAgICAgIGZsb2F0OiBsZWZ0O1xuXG4gICAgICAvLyBBZGp1c3QgZm9yIHJpZ2h0LXRvLWxlZnQgbGFuZ3VhZ2VzXG4gICAgICBbZGlyPVwicnRsXCJdICYge1xuICAgICAgICBmbG9hdDogcmlnaHQ7XG5cbiAgICAgICAgLy8gRmxpcCBpY29uIHZlcnRpY2FsbHlcbiAgICAgICAgc3ZnIHtcbiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlWCgtMSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVGl0bGVcbiAgICAgIC5tZC1mb290ZXItbmF2X190aXRsZSB7XG5cbiAgICAgICAgLy8gW21vYmlsZSAtXTogSGlkZSB0aXRsZSBmb3IgcHJldmlvdXMgcGFnZVxuICAgICAgICBAaW5jbHVkZSBicmVhay10by1kZXZpY2UobW9iaWxlKSB7XG4gICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIExpbmsgdG8gbmV4dCBwYWdlXG4gICAgJi0tbmV4dCB7XG4gICAgICB3aWR0aDogNzUlO1xuICAgICAgZmxvYXQ6IHJpZ2h0O1xuICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7XG5cbiAgICAgIC8vIEFkanVzdCBmb3IgcmlnaHQtdG8tbGVmdCBsYW5ndWFnZXNcbiAgICAgIFtkaXI9XCJydGxcIl0gJiB7XG4gICAgICAgIGZsb2F0OiBsZWZ0O1xuICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuXG4gICAgICAgIC8vIEZsaXAgaWNvbiB2ZXJ0aWNhbGx5XG4gICAgICAgIHN2ZyB7XG4gICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZVgoLTEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gTGluayB0aXRsZSAtIHNldCBsaW5lIGhlaWdodCB0byBtYXRjaCBpY29uIGZvciBjb3JyZWN0IGFsaWdubWVudFxuICAmX190aXRsZSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGZsZXgtZ3JvdzogMTtcbiAgICBtYXgtd2lkdGg6IGNhbGMoMTAwJSAtICN7cHgycmVtKDQ4cHgpfSk7XG4gICAgcGFkZGluZzogMCBweDJyZW0oMjBweCk7XG4gICAgZm9udC1zaXplOiBweDJyZW0oMThweCk7XG4gICAgbGluZS1oZWlnaHQ6IHB4MnJlbSg0OHB4KTtcbiAgfVxuXG4gIC8vIExpbmsgYnV0dG9uXG4gICZfX2J1dHRvbiB7XG4gICAgbWFyZ2luOiBweDJyZW0oNHB4KTtcbiAgICBwYWRkaW5nOiBweDJyZW0oOHB4KTtcbiAgfVxuXG4gIC8vIExpbmsgZGlyZWN0aW9uXG4gICZfX2RpcmVjdGlvbiB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHJpZ2h0OiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgbWFyZ2luLXRvcDogcHgycmVtKC0yMHB4KTtcbiAgICBwYWRkaW5nOiAwIHB4MnJlbSgyMHB4KTtcbiAgICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1iZy1jb2xvci0tbGlnaHQpO1xuICAgIGZvbnQtc2l6ZTogbXMoLTEpO1xuICB9XG59XG5cbi8vIE5vbi1uYXZpZ2F0aW9uYWwgaW5mb3JtYXRpb25cbi5tZC1mb290ZXItbWV0YSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXIpO1xuXG4gIC8vIFNldCBzcGFjaW5nXG4gICZfX2lubmVyIHtcbiAgICBwYWRkaW5nOiBweDJyZW0oNHB4KTtcbiAgICBvdmVyZmxvdzogYXV0bztcbiAgfVxuXG4gIC8vIFVzZSBhIGRlY2VudCBjb2xvciBmb3Igbm9uLWhvdmVyZWQgbGlua3MgYW5kIGVuc3VyZSBzcGVjaWZpY2l0eVxuICBodG1sICYubWQtdHlwZXNldCBhIHtcbiAgICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1iZy1jb2xvci0tbGlnaHQpO1xuXG4gICAgLy8gRm9jdXNlZCBvciBob3ZlcmVkIGxpbmtcbiAgICAmOmZvY3VzLFxuICAgICY6aG92ZXIge1xuICAgICAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtYmctY29sb3IpO1xuICAgIH1cbiAgfVxufVxuXG4vLyBDb3B5cmlnaHQgYW5kIHRoZW1lIGluZm9ybWF0aW9uXG4ubWQtZm9vdGVyLWNvcHlyaWdodCB7XG4gIG1hcmdpbjogMCBweDJyZW0oMTJweCk7XG4gIHBhZGRpbmc6IHB4MnJlbSg4cHgpIDA7XG4gIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWJnLWNvbG9yLS1saWdodGVyKTtcbiAgZm9udC1zaXplOiBtcygtMSk7XG5cbiAgLy8gW3RhYmxldCBwb3J0cmFpdCArXTogU2hvdyBuZXh0IHRvIHNvY2lhbCBtZWRpYSBsaW5rc1xuICBAaW5jbHVkZSBicmVhay1mcm9tLWRldmljZSh0YWJsZXQgcG9ydHJhaXQpIHtcbiAgICBtYXgtd2lkdGg6IDc1JTtcbiAgICBmbG9hdDogbGVmdDtcblxuICAgIC8vIEFkanVzdCBmb3IgcmlnaHQtdG8tbGVmdCBsYW5ndWFnZXNcbiAgICBbZGlyPVwicnRsXCJdICYge1xuICAgICAgZmxvYXQ6IHJpZ2h0O1xuICAgIH1cbiAgfVxuXG4gIC8vIEhpZ2hsaWdodCBjb3B5cmlnaHQgaW5mb3JtYXRpb25cbiAgJl9faGlnaGxpZ2h0IHtcbiAgICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1iZy1jb2xvci0tbGlnaHQpO1xuICB9XG59XG5cbi8vIFNvY2lhbCBtZWRpYSBsaW5rc1xuLm1kLWZvb3Rlci1zb2NpYWwge1xuICBtYXJnaW46IDAgcHgycmVtKDhweCk7XG4gIHBhZGRpbmc6IHB4MnJlbSg0cHgpIDAgcHgycmVtKDEycHgpO1xuXG4gIC8vIFt0YWJsZXQgcG9ydHJhaXQgK106IFNob3cgbmV4dCB0byBjb3B5cmlnaHQgaW5mb3JtYXRpb25cbiAgQGluY2x1ZGUgYnJlYWstZnJvbS1kZXZpY2UodGFibGV0IHBvcnRyYWl0KSB7XG4gICAgcGFkZGluZzogcHgycmVtKDEycHgpIDA7XG4gICAgZmxvYXQ6IHJpZ2h0O1xuXG4gICAgLy8gQWRqdXN0IGZvciByaWdodC10by1sZWZ0IGxhbmd1YWdlc1xuICAgIFtkaXI9XCJydGxcIl0gJiB7XG4gICAgICBmbG9hdDogbGVmdDtcbiAgICB9XG4gIH1cblxuICAvLyBMaW5rIHdpdGggaWNvblxuICAmX19saW5rIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgd2lkdGg6IHB4MnJlbSgzMnB4KTtcbiAgICBoZWlnaHQ6IHB4MnJlbSgzMnB4KTtcbiAgICB0cmFuc2l0aW9uOiBjb2xvciAyNTBtcztcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG5cbiAgICAvLyBBZGp1c3QgbGluZS1oZWlnaHQgdG8gbWF0Y2ggaGVpZ2h0IGZvciBjb3JyZWN0IGFsaWdubWVudFxuICAgICY6OmJlZm9yZSB7XG4gICAgICBsaW5lLWhlaWdodDogMS45O1xuICAgIH1cblxuICAgIC8vIFNvY2lhbCBpY29uXG4gICAgc3ZnIHtcbiAgICAgIHdpZHRoOiBweDJyZW0oMTZweCk7XG4gICAgICB2ZXJ0aWNhbC1hbGlnbjogLTI1JTtcbiAgICAgIGZpbGw6IGN1cnJlbnRDb2xvcjtcbiAgICB9XG4gIH1cbn1cbiIsIi8vLy9cbi8vLyBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyMCBNYXJ0aW4gRG9uYXRoIDxtYXJ0aW4uZG9uYXRoQHNxdWlkZnVuay5jb20+XG4vLy9cbi8vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSxcbi8vLyB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uXG4vLy8gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsXG4vLy8gYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlXG4vLy8gU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vL1xuLy8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLy8gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vLy9cbi8vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLy8gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTi1JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMXG4vLy8gVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lOR1xuLy8vIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVJcbi8vLyBERUFMSU5HU1xuLy8vL1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBSdWxlc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vLyBOYXZpZ2F0aW9uIGNvbnRhaW5lclxuLm1kLW5hdiB7XG4gIGZvbnQtc2l6ZTogcHgycmVtKDE0cHgpO1xuICBsaW5lLWhlaWdodDogMS4zO1xuXG4gIC8vIExpc3QgdGl0bGVcbiAgJl9fdGl0bGUge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHBhZGRpbmc6IDAgcHgycmVtKDEycHgpO1xuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcblxuICAgIC8vIEhpZGUgYnV0dG9ucyBieSBkZWZhdWx0XG4gICAgLm1kLW5hdl9fYnV0dG9uIHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7XG5cbiAgICAgIC8vIFN0cmV0Y2ggaW1hZ2VzXG4gICAgICBpbWcge1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgaGVpZ2h0OiBhdXRvO1xuICAgICAgfVxuXG4gICAgICAvLyBMb2dvXG4gICAgICAmLm1kLWxvZ28ge1xuXG4gICAgICAgIC8vIEltYWdlIG9yIGljb25cbiAgICAgICAgaW1nLFxuICAgICAgICBzdmcge1xuICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgIHdpZHRoOiBweDJyZW0oNDhweCk7XG4gICAgICAgICAgaGVpZ2h0OiBweDJyZW0oNDhweCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJY29uXG4gICAgICAgIHN2ZyB7XG4gICAgICAgICAgZmlsbDogY3VycmVudENvbG9yO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gTGlzdCBvZiBpdGVtc1xuICAmX19saXN0IHtcbiAgICBtYXJnaW46IDA7XG4gICAgcGFkZGluZzogMDtcbiAgICBsaXN0LXN0eWxlOiBub25lO1xuICB9XG5cbiAgLy8gTGlzdCBpdGVtXG4gICZfX2l0ZW0ge1xuICAgIHBhZGRpbmc6IDAgcHgycmVtKDEycHgpO1xuXG4gICAgLy8gQWRkIGJvdHRvbSBzcGFjaW5nIHRvIGxhc3QgaXRlbVxuICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICBwYWRkaW5nLWJvdHRvbTogcHgycmVtKDEycHgpO1xuICAgIH1cblxuICAgIC8vIDJuZCsgbGV2ZWwgaXRlbXNcbiAgICAmICYge1xuICAgICAgcGFkZGluZy1yaWdodDogMDtcblxuICAgICAgLy8gQWRqdXN0IGZvciByaWdodC10by1sZWZ0IGxhbmd1YWdlc1xuICAgICAgW2Rpcj1cInJ0bFwiXSAmIHtcbiAgICAgICAgcGFkZGluZy1yaWdodDogcHgycmVtKDEycHgpO1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgICB9XG5cbiAgICAgIC8vIFJlbW92ZSBib3R0b20gc3BhY2luZyBmb3IgbmVzdGVkIGl0ZW1zXG4gICAgICAmOmxhc3QtY2hpbGQge1xuICAgICAgICBwYWRkaW5nLWJvdHRvbTogMDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBMaW5rIGluc2lkZSBpdGVtXG4gICZfX2xpbmsge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIG1hcmdpbi10b3A6IDAuNjI1ZW07XG4gICAgdHJhbnNpdGlvbjogY29sb3IgMTI1bXM7XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgc2Nyb2xsLXNuYXAtYWxpZ246IHN0YXJ0O1xuXG4gICAgLy8gSGlkZSBsaW5rIHRvIHRhYmxlIG9mIGNvbnRlbnRzIGJ5IGRlZmF1bHQgLSB0aGlzIHdpbGwgb25seSBtYXRjaCB0aGVcbiAgICAvLyB0YWJsZSBvZiBjb250ZW50cyBpbnNpZGUgdGhlIGRyYXdlciBiZWxvdyBhbmQgaW5jbHVkaW5nIHRhYmxldCBwb3J0cmFpdFxuICAgIGh0bWwgJltmb3I9XCJfX3RvY1wiXSB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuXG4gICAgICAvLyBIaWRlIHRhYmxlIG9mIGNvbnRlbnRzIGJ5IGRlZmF1bHRcbiAgICAgICYgfiAubWQtbmF2IHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBCbHVycmVkIGxpbmtcbiAgICAmW2RhdGEtbWQtc3RhdGU9XCJibHVyXCJdIHtcbiAgICAgIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodCk7XG4gICAgfVxuXG4gICAgLy8gQWN0aXZlIGxpbmtcbiAgICAubWQtbmF2X19pdGVtICYtLWFjdGl2ZSB7XG4gICAgICBjb2xvcjogdmFyKC0tbWQtcHJpbWFyeS1mZy1jb2xvcik7XG4gICAgfVxuXG4gICAgLy8gUmVzZXQgYWN0aXZlIGNvbG9yIGZvciBuZXN0ZWQgbGlzdCB0aXRsZXNcbiAgICAubWQtbmF2X19pdGVtLS1uZXN0ZWQgPiAmIHtcbiAgICAgIGNvbG9yOiBpbmhlcml0O1xuICAgIH1cblxuICAgIC8vIEZvY3VzZWQgb3IgaG92ZXJlZCBsaW5rXG4gICAgJjpmb2N1cyxcbiAgICAmOmhvdmVyIHtcbiAgICAgIGNvbG9yOiB2YXIoLS1tZC1hY2NlbnQtZmctY29sb3IpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFJlcG9zaXRvcnkgY29udGFpbmluZyBzb3VyY2VcbiAgJl9fc291cmNlIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG5cbiAgLy8gW3RhYmxldCAtXTogTGF5ZXJlZCBuYXZpZ2F0aW9uXG4gIEBpbmNsdWRlIGJyZWFrLXRvLWRldmljZSh0YWJsZXQpIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWJnLWNvbG9yKTtcblxuICAgIC8vIFN0cmV0Y2ggcHJpbWFyeSBuYXZpZ2F0aW9uIHRvIGRyYXdlclxuICAgICYtLXByaW1hcnksXG4gICAgJi0tcHJpbWFyeSAubWQtbmF2IHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6IDA7XG4gICAgICByaWdodDogMDtcbiAgICAgIGxlZnQ6IDA7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgei1pbmRleDogMTtcbiAgICB9XG5cbiAgICAvLyBBZGp1c3Qgc3R5bGVzIGZvciBwcmltYXJ5IG5hdmlnYXRpb25cbiAgICAmLS1wcmltYXJ5IHtcblxuICAgICAgLy8gTGlzdCB0aXRsZSBhbmQgaXRlbVxuICAgICAgLm1kLW5hdl9fdGl0bGUsXG4gICAgICAubWQtbmF2X19pdGVtIHtcbiAgICAgICAgZm9udC1zaXplOiBweDJyZW0oMTZweCk7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjU7XG4gICAgICB9XG5cbiAgICAgIC8vIExpc3QgdGl0bGVcbiAgICAgIC5tZC1uYXZfX3RpdGxlIHtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICBoZWlnaHQ6IHB4MnJlbSgxMTJweCk7XG4gICAgICAgIHBhZGRpbmc6IHB4MnJlbSg2MHB4KSBweDJyZW0oMTZweCkgcHgycmVtKDRweCk7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXN0KTtcbiAgICAgICAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0KTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICAgICAgbGluZS1oZWlnaHQ6IHB4MnJlbSg0OHB4KTtcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuXG4gICAgICAgIC8vIEljb25cbiAgICAgICAgLm1kLW5hdl9faWNvbiB7XG4gICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgIHRvcDogcHgycmVtKDhweCk7XG4gICAgICAgICAgbGVmdDogcHgycmVtKDhweCk7XG4gICAgICAgICAgd2lkdGg6IHB4MnJlbSgyNHB4KTtcbiAgICAgICAgICBoZWlnaHQ6IHB4MnJlbSgyNHB4KTtcbiAgICAgICAgICBtYXJnaW46IHB4MnJlbSg0cHgpO1xuXG4gICAgICAgICAgLy8gQWRqdXN0IGZvciByaWdodC10by1sZWZ0IGxhbmd1YWdlc1xuICAgICAgICAgIFtkaXI9XCJydGxcIl0gJiB7XG4gICAgICAgICAgICByaWdodDogcHgycmVtKDhweCk7XG4gICAgICAgICAgICBsZWZ0OiBpbml0aWFsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE1haW4gbGlzdHNcbiAgICAgICAgfiAubWQtbmF2X19saXN0IHtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWJnLWNvbG9yKTtcbiAgICAgICAgICBib3gtc2hhZG93OlxuICAgICAgICAgICAgaW5zZXQgMCBweDJyZW0oMXB4KSAwIHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXN0KTtcbiAgICAgICAgICBvdmVyZmxvdy15OiBhdXRvO1xuICAgICAgICAgIC8vIEhhY2s6IHJlZHVjZSBqaXR0ZXJcbiAgICAgICAgICBiYWNrZmFjZS12aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgICAgICAgc2Nyb2xsLXNuYXAtdHlwZTogeSBtYW5kYXRvcnk7XG5cbiAgICAgICAgICAvLyBSZW1vdmUgYm9yZGVyIGZvciBmaXJzdCBsaXN0IGl0ZW1cbiAgICAgICAgICA+IC5tZC1uYXZfX2l0ZW06Zmlyc3QtY2hpbGQge1xuICAgICAgICAgICAgYm9yZGVyLXRvcDogMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTaXRlIHRpdGxlIGluIG1haW4gbmF2aWdhdGlvblxuICAgICAgICAmW2Zvcj1cIl9fZHJhd2VyXCJdIHtcbiAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtcHJpbWFyeS1mZy1jb2xvcik7XG4gICAgICAgICAgY29sb3I6IHZhcigtLW1kLXByaW1hcnktYmctY29sb3IpO1xuXG4gICAgICAgICAgLy8gU2l0ZSBsb2dvXG4gICAgICAgICAgLm1kLW5hdl9fYnV0dG9uIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgdG9wOiBweDJyZW0oNHB4KTtcbiAgICAgICAgICAgIGxlZnQ6IHB4MnJlbSg0cHgpO1xuICAgICAgICAgICAgbWFyZ2luOiBweDJyZW0oNHB4KTtcbiAgICAgICAgICAgIHBhZGRpbmc6IHB4MnJlbSg4cHgpO1xuICAgICAgICAgICAgZm9udC1zaXplOiBweDJyZW0oNDhweCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEFkanVzdCBmb3IgcmlnaHQtdG8tbGVmdCBsYW5ndWFnZXNcbiAgICAgIGh0bWwgW2Rpcj1cInJ0bFwiXSAmIC5tZC1uYXZfX3RpdGxlIHtcblxuICAgICAgICAvLyBTaXRlIHRpdGxlIGluIG1haW4gbmF2aWdhdGlvblxuICAgICAgICAmW2Zvcj1cIl9fZHJhd2VyXCJdIC5tZC1uYXZfX2J1dHRvbiB7XG4gICAgICAgICAgcmlnaHQ6IHB4MnJlbSg0cHgpO1xuICAgICAgICAgIGxlZnQ6IGluaXRpYWw7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gTGlzdCBvZiBpdGVtc1xuICAgICAgLm1kLW5hdl9fbGlzdCB7XG4gICAgICAgIGZsZXg6IDE7XG4gICAgICB9XG5cbiAgICAgIC8vIExpc3QgaXRlbVxuICAgICAgLm1kLW5hdl9faXRlbSB7XG4gICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICAgIGJvcmRlci10b3A6IHB4MnJlbSgxcHgpIHNvbGlkIHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXN0KTtcblxuICAgICAgICAvLyBBZGp1c3QgZm9yIHJpZ2h0LXRvLWxlZnQgbGFuZ3VhZ2VzXG4gICAgICAgIFtkaXI9XCJydGxcIl0gJiB7XG4gICAgICAgICAgcGFkZGluZzogMDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEluY3JlYXNlIHNwYWNpbmcgdG8gYWNjb3VudCBmb3IgaWNvblxuICAgICAgICAmLS1uZXN0ZWQgPiAubWQtbmF2X19saW5rIHtcbiAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiBweDJyZW0oNDhweCk7XG5cbiAgICAgICAgICAvLyBBZGp1c3QgZm9yIHJpZ2h0LXRvLWxlZnQgbGFuZ3VhZ2VzXG4gICAgICAgICAgW2Rpcj1cInJ0bFwiXSAmIHtcbiAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IHB4MnJlbSgxNnB4KTtcbiAgICAgICAgICAgIHBhZGRpbmctbGVmdDogcHgycmVtKDQ4cHgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEFjdGl2ZSBwYXJlbnQgaXRlbVxuICAgICAgICAmLS1hY3RpdmUgPiAubWQtbmF2X19saW5rIHtcbiAgICAgICAgICBjb2xvcjogdmFyKC0tbWQtcHJpbWFyeS1mZy1jb2xvcik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gTGluayBpbnNpZGUgaXRlbVxuICAgICAgLm1kLW5hdl9fbGluayB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgbWFyZ2luLXRvcDogMDtcbiAgICAgICAgcGFkZGluZzogcHgycmVtKDEycHgpIHB4MnJlbSgxNnB4KTtcblxuICAgICAgICAvLyBJY29uXG4gICAgICAgIC5tZC1uYXZfX2ljb24ge1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICB0b3A6IDUwJTtcbiAgICAgICAgICByaWdodDogcHgycmVtKDEycHgpO1xuICAgICAgICAgIG1hcmdpbi10b3A6IHB4MnJlbSgtMTJweCk7XG4gICAgICAgICAgY29sb3I6IGluaGVyaXQ7XG4gICAgICAgICAgZm9udC1zaXplOiBweDJyZW0oMjRweCk7XG5cbiAgICAgICAgICAvLyBBZGp1c3QgZm9yIHJpZ2h0LXRvLWxlZnQgbGFuZ3VhZ2VzXG4gICAgICAgICAgW2Rpcj1cInJ0bFwiXSAmIHtcbiAgICAgICAgICAgIHJpZ2h0OiBpbml0aWFsO1xuICAgICAgICAgICAgbGVmdDogcHgycmVtKDEycHgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBJY29uXG4gICAgICAubWQtbmF2X19pY29uIHtcblxuICAgICAgICAvLyBBZGp1c3QgZm9yIHJpZ2h0LXRvLWxlZnQgbGFuZ3VhZ2VzXG4gICAgICAgIFtkaXI9XCJydGxcIl0gJiB7XG5cbiAgICAgICAgICAvLyBGbGlwIGljb24gdmVydGljYWxseVxuICAgICAgICAgIHN2ZyB7XG4gICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKC0xKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVGFibGUgb2YgY29udGVudHMgaW5zaWRlIG5hdmlnYXRpb25cbiAgICAgIC5tZC1uYXYtLXNlY29uZGFyeSB7XG5cbiAgICAgICAgLy8gU2V0IGxpbmtzIHRvIHN0YXRpYyB0byBhdm9pZCB1bm5lY2Vzc2FyeSBsYXllcmluZ1xuICAgICAgICAubWQtbmF2X19saW5rIHtcbiAgICAgICAgICBwb3NpdGlvbjogc3RhdGljO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2V0IG5lc3RlZCBuYXZpZ2F0aW9uIGZvciB0YWJsZSBvZiBjb250ZW50cyB0byBzdGF0aWNcbiAgICAgICAgLm1kLW5hdiB7XG4gICAgICAgICAgcG9zaXRpb246IHN0YXRpYztcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcblxuICAgICAgICAgIC8vIDNyZCBsZXZlbCBsaW5rXG4gICAgICAgICAgLm1kLW5hdl9fbGluayB7XG4gICAgICAgICAgICBwYWRkaW5nLWxlZnQ6IHB4MnJlbSgyOHB4KTtcblxuICAgICAgICAgICAgLy8gQWRqdXN0IGZvciByaWdodC10by1sZWZ0IGxhbmd1YWdlc1xuICAgICAgICAgICAgW2Rpcj1cInJ0bFwiXSAmIHtcbiAgICAgICAgICAgICAgcGFkZGluZy1yaWdodDogcHgycmVtKDI4cHgpO1xuICAgICAgICAgICAgICBwYWRkaW5nLWxlZnQ6IGluaXRpYWw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gNHRoIGxldmVsIGxpbmtcbiAgICAgICAgICAubWQtbmF2IC5tZC1uYXZfX2xpbmsge1xuICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiBweDJyZW0oNDBweCk7XG5cbiAgICAgICAgICAgIC8vIEFkanVzdCBmb3IgcmlnaHQtdG8tbGVmdCBsYW5ndWFnZXNcbiAgICAgICAgICAgIFtkaXI9XCJydGxcIl0gJiB7XG4gICAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IHB4MnJlbSg0MHB4KTtcbiAgICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiBpbml0aWFsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIDV0aCBsZXZlbCBsaW5rXG4gICAgICAgICAgLm1kLW5hdiAubWQtbmF2IC5tZC1uYXZfX2xpbmsge1xuICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiBweDJyZW0oNTJweCk7XG5cbiAgICAgICAgICAgIC8vIEFkanVzdCBmb3IgcmlnaHQtdG8tbGVmdCBsYW5ndWFnZXNcbiAgICAgICAgICAgIFtkaXI9XCJydGxcIl0gJiB7XG4gICAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IHB4MnJlbSg1MnB4KTtcbiAgICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiBpbml0aWFsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIDZ0aCBsZXZlbCBsaW5rXG4gICAgICAgICAgLm1kLW5hdiAubWQtbmF2IC5tZC1uYXYgLm1kLW5hdl9fbGluayB7XG4gICAgICAgICAgICBwYWRkaW5nLWxlZnQ6IHB4MnJlbSg2NHB4KTtcblxuICAgICAgICAgICAgLy8gQWRqdXN0IGZvciByaWdodC10by1sZWZ0IGxhbmd1YWdlc1xuICAgICAgICAgICAgW2Rpcj1cInJ0bFwiXSAmIHtcbiAgICAgICAgICAgICAgcGFkZGluZy1yaWdodDogcHgycmVtKDY0cHgpO1xuICAgICAgICAgICAgICBwYWRkaW5nLWxlZnQ6IGluaXRpYWw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSGlkZSBuZXN0ZWQgbmF2aWdhdGlvbiBieSBkZWZhdWx0XG4gICAgLm1kLW5hdl9fdG9nZ2xlIH4gJiB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDEwMCUpO1xuICAgICAgdHJhbnNpdGlvbjpcbiAgICAgICAgdHJhbnNmb3JtIDI1MG1zIGN1YmljLWJlemllcigwLjgsIDAsIDAuNiwgMSksXG4gICAgICAgIG9wYWNpdHkgICAxMjVtcyA1MG1zO1xuICAgICAgb3BhY2l0eTogMDtcblxuICAgICAgLy8gQWRqdXN0IGZvciByaWdodC10by1sZWZ0IGxhbmd1YWdlc1xuICAgICAgW2Rpcj1cInJ0bFwiXSAmIHtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0xMDAlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBFeHBhbmQgbmVzdGVkIG5hdmlnYXRpb24sIGlmIHRvZ2dsZSBpcyBjaGVja2VkXG4gICAgLm1kLW5hdl9fdG9nZ2xlOmNoZWNrZWQgfiAmIHtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKTtcbiAgICAgIHRyYW5zaXRpb246XG4gICAgICAgIHRyYW5zZm9ybSAyNTBtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpLFxuICAgICAgICBvcGFjaXR5ICAgMTI1bXMgMTI1bXM7XG4gICAgICBvcGFjaXR5OiAxO1xuICAgIH1cbiAgfVxuXG4gIC8vIFt0YWJsZXQgcG9ydHJhaXQgLV06IFNob3cgdGFibGUgb2YgY29udGVudHMgaW4gZHJhd2VyXG4gIEBpbmNsdWRlIGJyZWFrLXRvLWRldmljZSh0YWJsZXQgcG9ydHJhaXQpIHtcblxuICAgIC8vIFNob3cgbGluayB0byB0YWJsZSBvZiBjb250ZW50cyAtIGhpZ2hlciBzcGVjaWZpY2l0eSBpcyBuZWNlc3NhcnkgdG9cbiAgICAvLyBkaXNwbGF5IHRoZSB0YWJsZSBvZiBjb250ZW50cyBpbnNpZGUgdGhlIGRyYXdlclxuICAgIGh0bWwgJl9fbGlua1tmb3I9XCJfX3RvY1wiXSB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIHBhZGRpbmctcmlnaHQ6IHB4MnJlbSg0OHB4KTtcblxuICAgICAgLy8gSGlkZSBsaW5rIHRvIGN1cnJlbnQgaXRlbVxuICAgICAgKyAubWQtbmF2X19saW5rIHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgIH1cblxuICAgICAgLy8gU2hvdyB0YWJsZSBvZiBjb250ZW50c1xuICAgICAgJiB+IC5tZC1uYXYge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFkanVzdCBmb3IgcmlnaHQtdG8tbGVmdCBsYW5ndWFnZXNcbiAgICBodG1sIFtkaXI9XCJydGxcIl0gJl9fbGluayB7XG4gICAgICBwYWRkaW5nLXJpZ2h0OiBweDJyZW0oMTZweCk7XG4gICAgICBwYWRkaW5nLWxlZnQ6IHB4MnJlbSg0OHB4KTtcbiAgICB9XG5cbiAgICAvLyBSZXBvc2l0b3J5IGNvbnRhaW5pbmcgc291cmNlXG4gICAgJl9fc291cmNlIHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgcGFkZGluZzogMCBweDJyZW0oNHB4KTtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW1kLXByaW1hcnktZmctY29sb3ItLWRhcmspO1xuICAgICAgY29sb3I6IHZhcigtLW1kLXByaW1hcnktYmctY29sb3IpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFt0YWJsZXQgbGFuZHNjYXBlICtdOiBUcmVlLWxpa2UgbmF2aWdhdGlvblxuICBAaW5jbHVkZSBicmVhay1mcm9tLWRldmljZSh0YWJsZXQgbGFuZHNjYXBlKSB7XG5cbiAgICAvLyBMaXN0IHRpdGxlXG4gICAgJi0tc2Vjb25kYXJ5IC5tZC1uYXZfX3RpdGxlIHtcblxuICAgICAgLy8gU25hcCB0byB0YWJsZSBvZiBjb250ZW50cyB0aXRsZVxuICAgICAgJltmb3I9XCJfX3RvY1wiXSB7XG4gICAgICAgIHNjcm9sbC1zbmFwLWFsaWduOiBzdGFydDtcbiAgICAgIH1cblxuICAgICAgLy8gSGlkZSBpY29uXG4gICAgICAubWQtbmF2X19pY29uIHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBbc2NyZWVuICtdOiBUcmVlLWxpa2UgbmF2aWdhdGlvblxuICBAaW5jbHVkZSBicmVhay1mcm9tLWRldmljZShzY3JlZW4pIHtcbiAgICB0cmFuc2l0aW9uOiBtYXgtaGVpZ2h0IDI1MG1zIGN1YmljLWJlemllcigwLjg2LCAwLCAwLjA3LCAxKTtcblxuICAgIC8vIExpc3QgdGl0bGVcbiAgICAmLS1wcmltYXJ5IC5tZC1uYXZfX3RpdGxlIHtcblxuICAgICAgLy8gU25hcCB0byBzaXRlIHRpdGxlXG4gICAgICAmW2Zvcj1cIl9fZHJhd2VyXCJdIHtcbiAgICAgICAgc2Nyb2xsLXNuYXAtYWxpZ246IHN0YXJ0O1xuICAgICAgfVxuXG4gICAgICAvLyBIaWRlIGljb25cbiAgICAgIC5tZC1uYXZfX2ljb24ge1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEhpZGUgbmVzdGVkIG5hdmlnYXRpb24gYnkgZGVmYXVsdFxuICAgIC5tZC1uYXZfX3RvZ2dsZSB+ICYge1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG5cbiAgICAvLyBTaG93IG5lc3RlZCBuYXZpZ2F0aW9uLCBpZiB0b2dnbGUgaXMgY2hlY2tlZFxuICAgIC5tZC1uYXZfX3RvZ2dsZTpjaGVja2VkIH4gJiB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICB9XG5cbiAgICAvLyBIaWRlIHRpdGxlcyBmb3IgbmVzdGVkIG5hdmlnYXRpb25cbiAgICAmX19pdGVtLS1uZXN0ZWQgPiAubWQtbmF2ID4gJl9fdGl0bGUge1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG5cbiAgICAvLyBJY29uXG4gICAgJl9faWNvbiB7XG4gICAgICBoZWlnaHQ6IHB4MnJlbSgxOHB4KTtcbiAgICAgIGZsb2F0OiByaWdodDtcbiAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAyNTBtcztcblxuICAgICAgLy8gSW5saW5lIGljb24gYW5kIGFkanVzdCB0byBtYXRjaCBmb250IHNpemVcbiAgICAgIHN2ZyB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgd2lkdGg6IHB4MnJlbSgxOHB4KTtcbiAgICAgICAgaGVpZ2h0OiBweDJyZW0oMThweCk7XG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiBweDJyZW0oLTJweCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFJvdGF0ZSBpY29uIGZvciBleHBhbmRlZCBsaXN0c1xuICAgICAgLm1kLW5hdl9faXRlbS0tbmVzdGVkIC5tZC1uYXZfX3RvZ2dsZTpjaGVja2VkIH4gLm1kLW5hdl9fbGluayAmIHtcbiAgICAgICAgdHJhbnNmb3JtOiByb3RhdGVaKDkwZGVnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIi8vLy9cbi8vLyBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyMCBNYXJ0aW4gRG9uYXRoIDxtYXJ0aW4uZG9uYXRoQHNxdWlkZnVuay5jb20+XG4vLy9cbi8vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSxcbi8vLyB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uXG4vLy8gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsXG4vLy8gYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlXG4vLy8gU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vL1xuLy8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLy8gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vLy9cbi8vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLy8gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTi1JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMXG4vLy8gVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lOR1xuLy8vIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVJcbi8vLyBERUFMSU5HU1xuLy8vL1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBWYXJpYWJsZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gQWN0aXZlICh0b2dnbGVkKSBzZWFyY2hcbiRtZC10b2dnbGVfX3NlYXJjaC0tY2hlY2tlZDpcbiAgXCJbZGF0YS1tZC10b2dnbGU9XFxcInNlYXJjaFxcXCJdOmNoZWNrZWQgfiAubWQtaGVhZGVyXCI7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJ1bGVzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIFNlYXJjaCBjb250YWluZXJcbi5tZC1zZWFyY2gge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgLy8gSGlkZSBzZWFyY2gsIGlmIEphdmFTY3JpcHQgaXMgbm90IGF2YWlsYWJsZS5cbiAgLm5vLWpzICYge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cblxuICAvLyBbdGFibGV0IGxhbmRzY2FwZSArXTogSGVhZGVyLWVtYmVkZGVkIHNlYXJjaFxuICBAaW5jbHVkZSBicmVhay1mcm9tLWRldmljZSh0YWJsZXQgbGFuZHNjYXBlKSB7XG4gICAgcGFkZGluZzogcHgycmVtKDRweCkgMDtcbiAgfVxuXG4gIC8vIFNlYXJjaCBtb2RhbCBvdmVybGF5XG4gICZfX292ZXJsYXkge1xuICAgIG9wYWNpdHk6IDA7XG4gICAgei1pbmRleDogMTtcblxuICAgIC8vIFt0YWJsZXQgcG9ydHJhaXQgLV06IEZ1bGwtc2NyZWVuIHNlYXJjaCBiYXJcbiAgICBAaW5jbHVkZSBicmVhay10by1kZXZpY2UodGFibGV0IHBvcnRyYWl0KSB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6IHB4MnJlbSg0cHgpO1xuICAgICAgbGVmdDogcHgycmVtKC00NHB4KTtcbiAgICAgIHdpZHRoOiBweDJyZW0oNDBweCk7XG4gICAgICBoZWlnaHQ6IHB4MnJlbSg0MHB4KTtcbiAgICAgIHRyYW5zZm9ybS1vcmlnaW46IGNlbnRlcjtcbiAgICAgIHRyYW5zaXRpb246XG4gICAgICAgIHRyYW5zZm9ybSAzMDBtcyAxMDBtcyxcbiAgICAgICAgb3BhY2l0eSAgIDIwMG1zIDIwMG1zO1xuICAgICAgYm9yZGVyLXJhZGl1czogcHgycmVtKDIwcHgpO1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1iZy1jb2xvcik7XG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG5cbiAgICAgIC8vIEFkanVzdCBmb3IgcmlnaHQtdG8tbGVmdCBsYW5ndWFnZXNcbiAgICAgIFtkaXI9XCJydGxcIl0gJiB7XG4gICAgICAgIHJpZ2h0OiBweDJyZW0oLTQ0cHgpO1xuICAgICAgICBsZWZ0OiBpbml0aWFsO1xuICAgICAgfVxuXG4gICAgICAvLyBFeHBhbmRlZCBvdmVybGF5XG4gICAgICAjeyRtZC10b2dnbGVfX3NlYXJjaC0tY2hlY2tlZH0gJiB7XG4gICAgICAgIHRyYW5zaXRpb246XG4gICAgICAgICAgdHJhbnNmb3JtIDQwMG1zLFxuICAgICAgICAgIG9wYWNpdHkgICAxMDBtcztcbiAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTZXQgc2NhbGUgZmFjdG9yc1xuICAgICN7JG1kLXRvZ2dsZV9fc2VhcmNoLS1jaGVja2VkfSAmIHtcblxuICAgICAgLy8gW21vYmlsZSBwb3J0cmFpdCAtXTogU2NhbGUgdXAgNDUgdGltZXNcbiAgICAgIEBpbmNsdWRlIGJyZWFrLXRvLWRldmljZShtb2JpbGUgcG9ydHJhaXQpIHtcbiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSg0NSk7XG4gICAgICB9XG5cbiAgICAgIC8vIFttb2JpbGUgbGFuZHNjYXBlXTogU2NhbGUgdXAgNjAgdGltZXNcbiAgICAgIEBpbmNsdWRlIGJyZWFrLWF0LWRldmljZShtb2JpbGUgbGFuZHNjYXBlKSB7XG4gICAgICAgIHRyYW5zZm9ybTogc2NhbGUoNjApO1xuICAgICAgfVxuXG4gICAgICAvLyBbdGFibGV0IHBvcnRyYWl0XTogU2NhbGUgdXAgNzUgdGltZXNcbiAgICAgIEBpbmNsdWRlIGJyZWFrLWF0LWRldmljZSh0YWJsZXQgcG9ydHJhaXQpIHtcbiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSg3NSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gW3RhYmxldCBsYW5kc2NhcGUgK106IE92ZXJsYXkgZm9yIGJldHRlciBmb2N1cyBvbiBzZWFyY2hcbiAgICBAaW5jbHVkZSBicmVhay1mcm9tLWRldmljZSh0YWJsZXQgbGFuZHNjYXBlKSB7XG4gICAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgICB0b3A6IDA7XG4gICAgICBsZWZ0OiAwO1xuICAgICAgd2lkdGg6IDA7XG4gICAgICBoZWlnaHQ6IDA7XG4gICAgICB0cmFuc2l0aW9uOlxuICAgICAgICB3aWR0aCAgICAgMG1zIDI1MG1zLFxuICAgICAgICBoZWlnaHQgICAgMG1zIDI1MG1zLFxuICAgICAgICBvcGFjaXR5IDI1MG1zO1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHQpO1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuXG4gICAgICAvLyBBZGp1c3QgZm9yIHJpZ2h0LXRvLWxlZnQgbGFuZ3VhZ2VzXG4gICAgICBbZGlyPVwicnRsXCJdICYge1xuICAgICAgICByaWdodDogMDtcbiAgICAgICAgbGVmdDogaW5pdGlhbDtcbiAgICAgIH1cblxuICAgICAgLy8gRXhwYW5kZWQgb3ZlcmxheVxuICAgICAgI3skbWQtdG9nZ2xlX19zZWFyY2gtLWNoZWNrZWR9ICYge1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICB0cmFuc2l0aW9uOlxuICAgICAgICAgIHdpZHRoICAgICAwbXMsXG4gICAgICAgICAgaGVpZ2h0ICAgIDBtcyxcbiAgICAgICAgICBvcGFjaXR5IDI1MG1zO1xuICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFNlYXJjaCBtb2RhbCB3cmFwcGVyXG4gICZfX2lubmVyIHtcbiAgICAvLyBIYWNrOiByZWR1Y2Ugaml0dGVyXG4gICAgYmFja2ZhY2UtdmlzaWJpbGl0eTogaGlkZGVuO1xuXG4gICAgLy8gW3RhYmxldCBwb3J0cmFpdCAtXTogUHV0IHNlYXJjaCBtb2RhbCBvZmYtY2FudmFzIGJ5IGRlZmF1bHRcbiAgICBAaW5jbHVkZSBicmVhay10by1kZXZpY2UodGFibGV0IHBvcnRyYWl0KSB7XG4gICAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgICB0b3A6IDA7XG4gICAgICBsZWZ0OiAxMDAlO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoNSUpO1xuICAgICAgdHJhbnNpdGlvbjpcbiAgICAgICAgcmlnaHQgICAgICAgMG1zIDMwMG1zLFxuICAgICAgICBsZWZ0ICAgICAgICAwbXMgMzAwbXMsXG4gICAgICAgIHRyYW5zZm9ybSAxNTBtcyAxNTBtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpLFxuICAgICAgICBvcGFjaXR5ICAgMTUwbXMgMTUwbXM7XG4gICAgICBvcGFjaXR5OiAwO1xuICAgICAgei1pbmRleDogMjtcblxuICAgICAgLy8gQWN0aXZlIHNlYXJjaCBtb2RhbFxuICAgICAgI3skbWQtdG9nZ2xlX19zZWFyY2gtLWNoZWNrZWR9ICYge1xuICAgICAgICBsZWZ0OiAwO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCk7XG4gICAgICAgIHRyYW5zaXRpb246XG4gICAgICAgICAgcmlnaHQgICAgICAgMG1zICAgMG1zLFxuICAgICAgICAgIGxlZnQgICAgICAgIDBtcyAgIDBtcyxcbiAgICAgICAgICB0cmFuc2Zvcm0gMTUwbXMgMTUwbXMgY3ViaWMtYmV6aWVyKDAuMSwgMC43LCAwLjEsIDEpLFxuICAgICAgICAgIG9wYWNpdHkgICAxNTBtcyAxNTBtcztcbiAgICAgICAgb3BhY2l0eTogMTtcblxuICAgICAgICAvLyBBZGp1c3QgZm9yIHJpZ2h0LXRvLWxlZnQgbGFuZ3VhZ2VzXG4gICAgICAgIFtkaXI9XCJydGxcIl0gJiB7XG4gICAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgICAgbGVmdDogaW5pdGlhbDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBBZGp1c3QgZm9yIHJpZ2h0LXRvLWxlZnQgbGFuZ3VhZ2VzXG4gICAgICBodG1sIFtkaXI9XCJydGxcIl0gJiB7XG4gICAgICAgIHJpZ2h0OiAxMDAlO1xuICAgICAgICBsZWZ0OiBpbml0aWFsO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBbdGFibGV0IGxhbmRzY2FwZSArXTogSGVhZGVyLWVtYmVkZGVkIHNlYXJjaFxuICAgIEBpbmNsdWRlIGJyZWFrLWZyb20tZGV2aWNlKHRhYmxldCBsYW5kc2NhcGUpIHtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIHdpZHRoOiBweDJyZW0oMjM0cHgpO1xuICAgICAgcGFkZGluZzogcHgycmVtKDJweCkgMDtcbiAgICAgIGZsb2F0OiByaWdodDtcbiAgICAgIHRyYW5zaXRpb246IHdpZHRoIDI1MG1zIGN1YmljLWJlemllcigwLjEsIDAuNywgMC4xLCAxKTtcblxuICAgICAgLy8gQWRqdXN0IGZvciByaWdodC10by1sZWZ0IGxhbmd1YWdlc1xuICAgICAgW2Rpcj1cInJ0bFwiXSAmIHtcbiAgICAgICAgZmxvYXQ6IGxlZnQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2V0IG1heGltdW0gd2lkdGhcbiAgICAjeyRtZC10b2dnbGVfX3NlYXJjaC0tY2hlY2tlZH0gJiB7XG5cbiAgICAgIC8vIFt0YWJsZXQgbGFuZHNjYXBlXTogRG8gbm90IG92ZXJsYXkgdGl0bGVcbiAgICAgIEBpbmNsdWRlIGJyZWFrLWF0LWRldmljZSh0YWJsZXQgbGFuZHNjYXBlKSB7XG4gICAgICAgIHdpZHRoOiBweDJyZW0oNDY4cHgpO1xuICAgICAgfVxuXG4gICAgICAvLyBbc2NyZWVuICtdOiBNYXRjaCBjb250ZW50IHdpZHRoXG4gICAgICBAaW5jbHVkZSBicmVhay1mcm9tLWRldmljZShzY3JlZW4pIHtcbiAgICAgICAgd2lkdGg6IHB4MnJlbSg2ODhweCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gU2VhcmNoIGZvcm1cbiAgJl9fZm9ybSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gICAgLy8gW3RhYmxldCBsYW5kc2NhcGUgK106IEhlYWRlci1lbWJlZGRlZCBzZWFyY2hcbiAgICBAaW5jbHVkZSBicmVhay1mcm9tLWRldmljZSh0YWJsZXQgbGFuZHNjYXBlKSB7XG4gICAgICBib3JkZXItcmFkaXVzOiBweDJyZW0oMnB4KTtcbiAgICB9XG4gIH1cblxuICAvLyBTZWFyY2ggaW5wdXRcbiAgJl9faW5wdXQge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBwYWRkaW5nOiAwIHB4MnJlbSg0NHB4KSAwIHB4MnJlbSg3MnB4KTtcbiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgICB6LWluZGV4OiAyO1xuXG4gICAgLy8gQWRqdXN0IGZvciByaWdodC10by1sZWZ0IGxhbmd1YWdlc1xuICAgIFtkaXI9XCJydGxcIl0gJiB7XG4gICAgICBwYWRkaW5nOiAwIHB4MnJlbSg3MnB4KSAwIHB4MnJlbSg0NHB4KTtcbiAgICB9XG5cbiAgICAvLyBUcmFuc2l0aW9uIG9uIHBsYWNlaG9sZGVyXG4gICAgJjo6cGxhY2Vob2xkZXIge1xuICAgICAgdHJhbnNpdGlvbjogY29sb3IgMjUwbXM7XG4gICAgfVxuXG4gICAgLy8gUGxhY2Vob2xkZXIgYW5kIGljb24gY29sb3IgaW4gYWN0aXZlIHN0YXRlXG4gICAgfiAubWQtc2VhcmNoX19pY29uLFxuICAgICY6OnBsYWNlaG9sZGVyIHtcbiAgICAgIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodCk7XG4gICAgfVxuXG4gICAgLy8gUmVtb3ZlIHRoZSBcInhcIiByZW5kZXJlZCBieSBJbnRlcm5ldCBFeHBsb3JlclxuICAgICY6Oi1tcy1jbGVhciB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cblxuICAgIC8vIFt0YWJsZXQgcG9ydHJhaXQgLV06IEZ1bGwtc2NyZWVuIHNlYXJjaCBiYXJcbiAgICBAaW5jbHVkZSBicmVhay10by1kZXZpY2UodGFibGV0IHBvcnRyYWl0KSB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGhlaWdodDogcHgycmVtKDQ4cHgpO1xuICAgICAgZm9udC1zaXplOiBweDJyZW0oMThweCk7XG4gICAgfVxuXG4gICAgLy8gW3RhYmxldCBsYW5kc2NhcGUgK106IEhlYWRlci1lbWJlZGRlZCBzZWFyY2hcbiAgICBAaW5jbHVkZSBicmVhay1mcm9tLWRldmljZSh0YWJsZXQgbGFuZHNjYXBlKSB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGhlaWdodDogcHgycmVtKDM2cHgpO1xuICAgICAgcGFkZGluZy1sZWZ0OiBweDJyZW0oNDRweCk7XG4gICAgICB0cmFuc2l0aW9uOlxuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yIDI1MG1zLFxuICAgICAgICBjb2xvciAgICAgICAgICAgIDI1MG1zO1xuICAgICAgYm9yZGVyLXJhZGl1czogcHgycmVtKDJweCk7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodGVyKTtcbiAgICAgIGNvbG9yOiBpbmhlcml0O1xuICAgICAgZm9udC1zaXplOiBtcygwKTtcblxuICAgICAgLy8gQWRqdXN0IGZvciByaWdodC10by1sZWZ0IGxhbmd1YWdlc1xuICAgICAgW2Rpcj1cInJ0bFwiXSAmIHtcbiAgICAgICAgcGFkZGluZy1yaWdodDogcHgycmVtKDQ0cHgpO1xuICAgICAgfVxuXG4gICAgICAvLyBJY29uIGNvbG9yXG4gICAgICArIC5tZC1zZWFyY2hfX2ljb24ge1xuICAgICAgICBjb2xvcjogdmFyKC0tbWQtcHJpbWFyeS1iZy1jb2xvcik7XG4gICAgICB9XG5cbiAgICAgIC8vIFBsYWNlaG9sZGVyIGNvbG9yXG4gICAgICAmOjpwbGFjZWhvbGRlciB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1tZC1wcmltYXJ5LWJnLWNvbG9yLS1saWdodCk7XG4gICAgICB9XG5cbiAgICAgIC8vIEhvdmVyZWQgc2VhcmNoIGZpZWxkXG4gICAgICAmOmhvdmVyIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1iZy1jb2xvci0tbGlnaHRlc3QpO1xuICAgICAgfVxuXG4gICAgICAvLyBTZXQgbGlnaHQgYmFja2dyb3VuZCBvbiBhY3RpdmUgc2VhcmNoIGZpZWxkXG4gICAgICAjeyRtZC10b2dnbGVfX3NlYXJjaC0tY2hlY2tlZH0gJiB7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IHB4MnJlbSgycHgpIHB4MnJlbSgycHgpIDAgMDtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1iZy1jb2xvcik7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yKTtcbiAgICAgICAgdGV4dC1vdmVyZmxvdzogY2xpcDtcblxuICAgICAgICAvLyBJY29uIGFuZCBwbGFjZWhvbGRlciBjb2xvciBpbiBhY3RpdmUgc3RhdGVcbiAgICAgICAgKyAubWQtc2VhcmNoX19pY29uLFxuICAgICAgICAmOjpwbGFjZWhvbGRlciB7XG4gICAgICAgICAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEljb25cbiAgJl9faWNvbiB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHdpZHRoOiBweDJyZW0oMjRweCk7XG4gICAgaGVpZ2h0OiBweDJyZW0oMjRweCk7XG4gICAgdHJhbnNpdGlvbjpcbiAgICAgIGNvbG9yICAgMjUwbXMsXG4gICAgICBvcGFjaXR5IDI1MG1zO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICB6LWluZGV4OiAyO1xuXG4gICAgLy8gSG92ZXJlZCBpY29uXG4gICAgJjpob3ZlciB7XG4gICAgICBvcGFjaXR5OiAwLjc7XG4gICAgfVxuXG4gICAgLy8gU2VhcmNoIGljb25cbiAgICAmW2Zvcj1cIl9fc2VhcmNoXCJdIHtcbiAgICAgIHRvcDogcHgycmVtKDZweCk7XG4gICAgICBsZWZ0OiBweDJyZW0oMTBweCk7XG5cbiAgICAgIC8vIEFkanVzdCBmb3IgcmlnaHQtdG8tbGVmdCBsYW5ndWFnZXNcbiAgICAgIFtkaXI9XCJydGxcIl0gJiB7XG4gICAgICAgIHJpZ2h0OiBweDJyZW0oMTBweCk7XG4gICAgICAgIGxlZnQ6IGluaXRpYWw7XG5cbiAgICAgICAgLy8gRmxpcCBpY29uIHZlcnRpY2FsbHlcbiAgICAgICAgc3ZnIHtcbiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlWCgtMSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gW3RhYmxldCBwb3J0cmFpdCAtXTogRnVsbC1zY3JlZW4gc2VhcmNoIGJhclxuICAgICAgQGluY2x1ZGUgYnJlYWstdG8tZGV2aWNlKHRhYmxldCBwb3J0cmFpdCkge1xuICAgICAgICB0b3A6IHB4MnJlbSgxMnB4KTtcbiAgICAgICAgbGVmdDogcHgycmVtKDE2cHgpO1xuXG4gICAgICAgIC8vIEFkanVzdCBmb3IgcmlnaHQtdG8tbGVmdCBsYW5ndWFnZXNcbiAgICAgICAgW2Rpcj1cInJ0bFwiXSAmIHtcbiAgICAgICAgICByaWdodDogcHgycmVtKDE2cHgpO1xuICAgICAgICAgIGxlZnQ6IGluaXRpYWw7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBIaWRlIHRoZSBtYWduaWZ5aW5nIGdsYXNzICgxc3QgaWNvbilcbiAgICAgICAgc3ZnOmZpcnN0LWNoaWxkIHtcbiAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFt0YWJsZXQgbGFuZHNjYXBlICtdOiBIZWFkZXItZW1iZWRkZWQgc2VhcmNoXG4gICAgICBAaW5jbHVkZSBicmVhay1mcm9tLWRldmljZSh0YWJsZXQgbGFuZHNjYXBlKSB7XG5cbiAgICAgICAgLy8gSGlkZSB0aGUgYXJyb3cgKDJuZCBpY29uKVxuICAgICAgICBzdmc6bGFzdC1jaGlsZCB7XG4gICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJlc2V0IGJ1dHRvblxuICAgICZbdHlwZT1cInJlc2V0XCJdIHtcbiAgICAgIHRvcDogcHgycmVtKDZweCk7XG4gICAgICByaWdodDogcHgycmVtKDEwcHgpO1xuICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLjc1KTtcbiAgICAgIHRyYW5zaXRpb246XG4gICAgICAgIHRyYW5zZm9ybSAxNTBtcyBjdWJpYy1iZXppZXIoMC4xLCAwLjcsIDAuMSwgMSksXG4gICAgICAgIG9wYWNpdHkgICAxNTBtcztcbiAgICAgIG9wYWNpdHk6IDA7XG4gICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcblxuICAgICAgLy8gQWRqdXN0IGZvciByaWdodC10by1sZWZ0IGxhbmd1YWdlc1xuICAgICAgW2Rpcj1cInJ0bFwiXSAmIHtcbiAgICAgICAgcmlnaHQ6IGluaXRpYWw7XG4gICAgICAgIGxlZnQ6IHB4MnJlbSgxMHB4KTtcbiAgICAgIH1cblxuICAgICAgLy8gW3RhYmxldCBwb3J0cmFpdCAtXTogRnVsbC1zY3JlZW4gc2VhcmNoIGJhclxuICAgICAgQGluY2x1ZGUgYnJlYWstdG8tZGV2aWNlKHRhYmxldCBwb3J0cmFpdCkge1xuICAgICAgICB0b3A6IHB4MnJlbSgxMnB4KTtcbiAgICAgICAgcmlnaHQ6IHB4MnJlbSgxNnB4KTtcblxuICAgICAgICAvLyBBZGp1c3QgZm9yIHJpZ2h0LXRvLWxlZnQgbGFuZ3VhZ2VzXG4gICAgICAgIFtkaXI9XCJydGxcIl0gJiB7XG4gICAgICAgICAgcmlnaHQ6IGluaXRpYWw7XG4gICAgICAgICAgbGVmdDogcHgycmVtKDE2cHgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFNob3cgcmVzZXQgYnV0dG9uIGlmIHNlYXJjaCBpcyBhY3RpdmUgYW5kIGlucHV0IG5vbi1lbXB0eVxuICAgICAgI3skbWQtdG9nZ2xlX19zZWFyY2gtLWNoZWNrZWR9IC5tZC1zZWFyY2hfX2lucHV0OnZhbGlkIH4gJiB7XG4gICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICAgIHBvaW50ZXItZXZlbnRzOiBpbml0aWFsO1xuXG4gICAgICAgIC8vIEhvdmVyZWQgaWNvblxuICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICBvcGFjaXR5OiAwLjc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBTZWFyY2ggb3V0cHV0IGNvbnRhaW5lclxuICAmX19vdXRwdXQge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBib3JkZXItcmFkaXVzOiAwIDAgcHgycmVtKDJweCkgcHgycmVtKDJweCk7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB6LWluZGV4OiAxO1xuXG4gICAgLy8gW3RhYmxldCBwb3J0cmFpdCAtXTogRnVsbC1zY3JlZW4gc2VhcmNoIGJhclxuICAgIEBpbmNsdWRlIGJyZWFrLXRvLWRldmljZSh0YWJsZXQgcG9ydHJhaXQpIHtcbiAgICAgIHRvcDogcHgycmVtKDQ4cHgpO1xuICAgICAgYm90dG9tOiAwO1xuICAgIH1cblxuICAgIC8vIFt0YWJsZXQgbGFuZHNjYXBlICtdOiBIZWFkZXItZW1iZWRkZWQgc2VhcmNoXG4gICAgQGluY2x1ZGUgYnJlYWstZnJvbS1kZXZpY2UodGFibGV0IGxhbmRzY2FwZSkge1xuICAgICAgdG9wOiBweDJyZW0oMzhweCk7XG4gICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDQwMG1zO1xuICAgICAgb3BhY2l0eTogMDtcblxuICAgICAgLy8gU2hvdyBzZWFyY2ggb3V0cHV0IGluIGFjdGl2ZSBzdGF0ZVxuICAgICAgI3skbWQtdG9nZ2xlX19zZWFyY2gtLWNoZWNrZWR9ICYge1xuICAgICAgICBAaW5jbHVkZSB6LWRlcHRoKDYpO1xuXG4gICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gV3JhcHBlciBmb3Igc2Nyb2xsaW5nIG9uIG92ZXJmbG93XG4gICZfX3Njcm9sbHdyYXAge1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWJnLWNvbG9yKTtcbiAgICBib3gtc2hhZG93OiBpbnNldCAwIHB4MnJlbSgxcHgpIDAgdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlc3QpO1xuICAgIG92ZXJmbG93LXk6IGF1dG87XG4gICAgLy8gSGFjazogcmVkdWNlIGppdHRlclxuICAgIGJhY2tmYWNlLXZpc2liaWxpdHk6IGhpZGRlbjtcbiAgICBzY3JvbGwtc25hcC10eXBlOiB5IG1hbmRhdG9yeTtcbiAgICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7XG5cbiAgICAvLyBNaXRpZ2lhdGUgZXhjZXNzaXZlIHJlcGFpbnRzIG9uIG5vbi1yZXRpbmEgZGV2aWNlc1xuICAgIEBtZWRpYSAobWF4LXJlc29sdXRpb246IDFkcHB4KSB7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVooMCk7XG4gICAgfVxuXG4gICAgLy8gW3RhYmxldCBsYW5kc2NhcGVdOiBTZXQgYWJzb2x1dGUgd2lkdGggdG8gb21pdCB1bm5lY2Vzc2FyeSByZWZsb3dcbiAgICBAaW5jbHVkZSBicmVhay1hdC1kZXZpY2UodGFibGV0IGxhbmRzY2FwZSkge1xuICAgICAgd2lkdGg6IHB4MnJlbSg0NjhweCk7XG4gICAgfVxuXG4gICAgLy8gW3NjcmVlbiArXTogU2V0IGFic29sdXRlIHdpZHRoIHRvIG9taXQgdW5uZWNlc3NhcnkgcmVmbG93XG4gICAgQGluY2x1ZGUgYnJlYWstZnJvbS1kZXZpY2Uoc2NyZWVuKSB7XG4gICAgICB3aWR0aDogcHgycmVtKDY4OHB4KTtcbiAgICB9XG5cbiAgICAvLyBbdGFibGV0IGxhbmRzY2FwZSArXTogTGltaXQgaGVpZ2h0IHRvIHZpZXdwb3J0XG4gICAgQGluY2x1ZGUgYnJlYWstZnJvbS1kZXZpY2UodGFibGV0IGxhbmRzY2FwZSkge1xuICAgICAgbWF4LWhlaWdodDogMDtcblxuICAgICAgLy8gRXhwYW5kIGluIGFjdGl2ZSBzdGF0ZVxuICAgICAgI3skbWQtdG9nZ2xlX19zZWFyY2gtLWNoZWNrZWR9ICYge1xuICAgICAgICBtYXgtaGVpZ2h0OiA3NXZoO1xuICAgICAgfVxuXG4gICAgICAvLyBPdmVycmlkZSBuYXRpdmUgc2Nyb2xsYmFyIHN0eWxlc1xuICAgICAgJjo6LXdlYmtpdC1zY3JvbGxiYXIge1xuICAgICAgICB3aWR0aDogcHgycmVtKDRweCk7XG4gICAgICAgIGhlaWdodDogcHgycmVtKDRweCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFNjcm9sbGJhciB0aHVtYlxuICAgICAgJjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodGVyKTtcblxuICAgICAgICAvLyBIb3ZlcmVkIHNjcm9sbGJhciB0aHVtYlxuICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1hY2NlbnQtZmctY29sb3IpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vIFNlYXJjaCByZXN1bHRcbi5tZC1zZWFyY2gtcmVzdWx0IHtcbiAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3IpO1xuICB3b3JkLWJyZWFrOiBicmVhay13b3JkO1xuXG4gIC8vIFNlYXJjaCBtZXRhZGF0YVxuICAmX19tZXRhIHtcbiAgICBwYWRkaW5nOiAwIHB4MnJlbSgxNnB4KTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodGVzdCk7XG4gICAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0KTtcbiAgICBmb250LXNpemU6IG1zKC0xKTtcbiAgICBsaW5lLWhlaWdodDogcHgycmVtKDM2cHgpO1xuICAgIHNjcm9sbC1zbmFwLWFsaWduOiBzdGFydDtcblxuICAgIC8vIFt0YWJsZXQgbGFuZHNjYXBlICtdOiBJbmNyZWFzZSBsZWZ0IGluZGVudFxuICAgIEBpbmNsdWRlIGJyZWFrLWZyb20tZGV2aWNlKHRhYmxldCBsYW5kc2NhcGUpIHtcbiAgICAgIHBhZGRpbmctbGVmdDogcHgycmVtKDQ0cHgpO1xuXG4gICAgICAvLyBBZGp1c3QgZm9yIHJpZ2h0LXRvLWxlZnQgbGFuZ3VhZ2VzXG4gICAgICBbZGlyPVwicnRsXCJdICYge1xuICAgICAgICBwYWRkaW5nLXJpZ2h0OiBweDJyZW0oNDRweCk7XG4gICAgICAgIHBhZGRpbmctbGVmdDogaW5pdGlhbDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBMaXN0IG9mIGl0ZW1zXG4gICZfX2xpc3Qge1xuICAgIG1hcmdpbjogMDtcbiAgICBwYWRkaW5nOiAwO1xuICAgIGJvcmRlci10b3A6IHB4MnJlbSgxcHgpIHNvbGlkIHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXN0KTtcbiAgICBsaXN0LXN0eWxlOiBub25lO1xuICB9XG5cbiAgLy8gTGlzdCBpdGVtXG4gICZfX2l0ZW0ge1xuICAgIGJveC1zaGFkb3c6IDAgcHgycmVtKC0xcHgpIDAgdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlc3QpO1xuICB9XG5cbiAgLy8gTGluayBpbnNpZGUgaXRlbVxuICAmX19saW5rIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDI1MG1zO1xuICAgIG91dGxpbmU6IDA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICBzY3JvbGwtc25hcC1hbGlnbjogc3RhcnQ7XG5cbiAgICAvLyBGb2N1c2VkIG9yIGhvdmVyZWQgbGlua1xuICAgICY6Zm9jdXMsXG4gICAgJjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1hY2NlbnQtZmctY29sb3ItLXRyYW5zcGFyZW50KTtcblxuICAgICAgLy8gU2xpZ2h0bHkgdHJhbnNwYXJlbnQgaWNvblxuICAgICAgLm1kLXNlYXJjaC1yZXN1bHRfX2FydGljbGU6OmJlZm9yZSB7XG4gICAgICAgIG9wYWNpdHk6IDAuNztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBZGQgYSBsaXR0bGUgc3BhY2luZyBvbiB0aGUgdGVhc2VyIG9mIHRoZSBsYXN0IGxpbmtcbiAgICAmOmxhc3QtY2hpbGQgLm1kLXNlYXJjaC1yZXN1bHRfX3RlYXNlciB7XG4gICAgICBtYXJnaW4tYm90dG9tOiBweDJyZW0oMTJweCk7XG4gICAgfVxuICB9XG5cbiAgLy8gQXJ0aWNsZSAtIGRvY3VtZW50IG9yIHNlY3Rpb25cbiAgJl9fYXJ0aWNsZSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHBhZGRpbmc6IDAgcHgycmVtKDE2cHgpO1xuICAgIG92ZXJmbG93OiBhdXRvO1xuXG4gICAgLy8gW3RhYmxldCBsYW5kc2NhcGUgK106IEluY3JlYXNlIGxlZnQgaW5kZW50XG4gICAgQGluY2x1ZGUgYnJlYWstZnJvbS1kZXZpY2UodGFibGV0IGxhbmRzY2FwZSkge1xuICAgICAgcGFkZGluZy1sZWZ0OiBweDJyZW0oNDRweCk7XG5cbiAgICAgIC8vIEFkanVzdCBmb3IgcmlnaHQtdG8tbGVmdCBsYW5ndWFnZXNcbiAgICAgIFtkaXI9XCJydGxcIl0gJiB7XG4gICAgICAgIHBhZGRpbmctcmlnaHQ6IHB4MnJlbSg0NHB4KTtcbiAgICAgICAgcGFkZGluZy1sZWZ0OiBweDJyZW0oMTZweCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRG9jdW1lbnRcbiAgICAmLS1kb2N1bWVudCB7XG5cbiAgICAgIC8vIFRpdGxlXG4gICAgICAubWQtc2VhcmNoLXJlc3VsdF9fdGl0bGUge1xuICAgICAgICBtYXJnaW46IHB4MnJlbSgxMXB4KSAwO1xuICAgICAgICBmb250LXNpemU6IG1zKDApO1xuICAgICAgICBmb250LXdlaWdodDogNDAwO1xuICAgICAgICBsaW5lLWhlaWdodDogMS40O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEljb25cbiAgJl9faWNvbiB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGxlZnQ6IDA7XG4gICAgbWFyZ2luOiBweDJyZW0oMnB4KTtcbiAgICBwYWRkaW5nOiBweDJyZW0oOHB4KTtcbiAgICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHQpO1xuXG4gICAgLy8gQWRqdXN0IGZvciByaWdodC10by1sZWZ0IGxhbmd1YWdlc1xuICAgIFtkaXI9XCJydGxcIl0gJiB7XG4gICAgICByaWdodDogMDtcbiAgICAgIGxlZnQ6IGluaXRpYWw7XG5cbiAgICAgIC8vIEZsaXAgaWNvbiB2ZXJ0aWNhbGx5XG4gICAgICBzdmcge1xuICAgICAgICB0cmFuc2Zvcm06IHNjYWxlWCgtMSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gW3RhYmxldCBwb3J0cmFpdCAtXTogSGlkZSBwYWdlIGljb25cbiAgICBAaW5jbHVkZSBicmVhay10by1kZXZpY2UodGFibGV0IHBvcnRyYWl0KSB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cbiAgfVxuXG4gIC8vIFRpdGxlXG4gICZfX3RpdGxlIHtcbiAgICBtYXJnaW46IDAuNWVtIDA7XG4gICAgZm9udC1zaXplOiBtcygtMSk7XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICBsaW5lLWhlaWdodDogMS40O1xuICB9XG5cbiAgLy8gc3R5bGVsaW50LWRpc2FibGUgdmFsdWUtbm8tdmVuZG9yLXByZWZpeCwgcHJvcGVydHktbm8tdmVuZG9yLXByZWZpeFxuXG4gIC8vIFRlYXNlclxuICAmX190ZWFzZXIge1xuICAgIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICAgIG1heC1oZWlnaHQ6IHB4MnJlbSgzM3B4KTtcbiAgICBtYXJnaW46IDAuNWVtIDA7XG4gICAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0KTtcbiAgICBmb250LXNpemU6IG1zKC0xKTtcbiAgICBsaW5lLWhlaWdodDogMS40O1xuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbiAgICAtd2Via2l0LWxpbmUtY2xhbXA6IDI7XG5cbiAgICAvLyBbbW9iaWxlIC1dOiBJbmNyZWFzZSBudW1iZXIgb2YgbGluZXNcbiAgICBAaW5jbHVkZSBicmVhay10by1kZXZpY2UobW9iaWxlKSB7XG4gICAgICBtYXgtaGVpZ2h0OiBweDJyZW0oNTBweCk7XG4gICAgICAtd2Via2l0LWxpbmUtY2xhbXA6IDM7XG4gICAgfVxuXG4gICAgLy8gW3RhYmxldCBsYW5kc2NhcGVdOiBJbmNyZWFzZSBudW1iZXIgb2YgbGluZXNcbiAgICBAaW5jbHVkZSBicmVhay1hdC1kZXZpY2UodGFibGV0IGxhbmRzY2FwZSkge1xuICAgICAgbWF4LWhlaWdodDogcHgycmVtKDUwcHgpO1xuICAgICAgLXdlYmtpdC1saW5lLWNsYW1wOiAzO1xuICAgIH1cbiAgfVxuXG4gIC8vIHN0eWxlbGludC1lbmFibGUgdmFsdWUtbm8tdmVuZG9yLXByZWZpeCwgcHJvcGVydHktbm8tdmVuZG9yLXByZWZpeFxuXG4gIC8vIFNlYXJjaCB0ZXJtIGhpZ2hsaWdodGluZ1xuICBlbSB7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4gIH1cbn1cbiIsIi8vLy9cbi8vLyBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyMCBNYXJ0aW4gRG9uYXRoIDxtYXJ0aW4uZG9uYXRoQHNxdWlkZnVuay5jb20+XG4vLy9cbi8vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSxcbi8vLyB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uXG4vLy8gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsXG4vLy8gYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlXG4vLy8gU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vL1xuLy8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLy8gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vLy9cbi8vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLy8gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTi1JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMXG4vLy8gVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lOR1xuLy8vIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVJcbi8vLyBERUFMSU5HU1xuLy8vL1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBWYXJpYWJsZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gQWN0aXZlICh0b2dnbGVkKSBkcmF3ZXJcbiRtZC10b2dnbGVfX2RyYXdlci0tY2hlY2tlZDpcbiAgXCJbZGF0YS1tZC10b2dnbGU9XFxcImRyYXdlclxcXCJdOmNoZWNrZWQgfiAubWQtY29udGFpbmVyXCI7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJ1bGVzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIFNpZGViYXIgY29udGFpbmVyXG4ubWQtc2lkZWJhciB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgd2lkdGg6IHB4MnJlbSgyNDJweCk7XG4gIHBhZGRpbmc6IHB4MnJlbSgyNHB4KSAwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuXG4gIC8vIEhpZGUgZm9yIHByaW50XG4gIEBtZWRpYSBwcmludCB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxuXG4gIC8vIExvY2sgc2lkZWJhciB0byBjb250YWluZXIgaGVpZ2h0IChhY2NvdW50IGZvciBmaXhlZCBoZWFkZXIpXG4gICZbZGF0YS1tZC1zdGF0ZT1cImxvY2tcIl0ge1xuICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICB0b3A6IHB4MnJlbSg0OHB4KTtcbiAgfVxuXG4gIC8vIFt0YWJsZXQgLV06IENvbnZlcnQgbmF2aWdhdGlvbiB0byBkcmF3ZXJcbiAgQGluY2x1ZGUgYnJlYWstdG8tZGV2aWNlKHRhYmxldCkge1xuXG4gICAgLy8gUmVuZGVyIHByaW1hcnkgc2lkZWJhciBhcyBhIHNsaWRlb3V0IGNvbnRhaW5lclxuICAgICYtLXByaW1hcnkge1xuICAgICAgcG9zaXRpb246IGZpeGVkO1xuICAgICAgdG9wOiAwO1xuICAgICAgbGVmdDogcHgycmVtKC0yNDJweCk7XG4gICAgICB3aWR0aDogcHgycmVtKDI0MnB4KTtcbiAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKTtcbiAgICAgIHRyYW5zaXRpb246XG4gICAgICAgIHRyYW5zZm9ybSAgMjUwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSxcbiAgICAgICAgYm94LXNoYWRvdyAyNTBtcztcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtYmctY29sb3IpO1xuICAgICAgei1pbmRleDogMztcblxuICAgICAgLy8gQWRqdXN0IGZvciByaWdodC10by1sZWZ0IGxhbmd1YWdlc1xuICAgICAgW2Rpcj1cInJ0bFwiXSAmIHtcbiAgICAgICAgcmlnaHQ6IHB4MnJlbSgtMjQycHgpO1xuICAgICAgICBsZWZ0OiBpbml0aWFsO1xuICAgICAgfVxuXG4gICAgICAvLyBFeHBhbmRlZCBkcmF3ZXJcbiAgICAgICN7JG1kLXRvZ2dsZV9fZHJhd2VyLS1jaGVja2VkfSAmIHtcbiAgICAgICAgQGluY2x1ZGUgei1kZXB0aCg4KTtcblxuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgocHgycmVtKDI0MnB4KSk7XG5cbiAgICAgICAgLy8gQWRqdXN0IGZvciByaWdodC10by1sZWZ0IGxhbmd1YWdlc1xuICAgICAgICBbZGlyPVwicnRsXCJdICYge1xuICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWChweDJyZW0oLTI0MnB4KSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gSGlkZSBvdmVyZmxvdyBmb3IgbmVzdGVkIG5hdmlnYXRpb25cbiAgICAgIC5tZC1zaWRlYmFyX19zY3JvbGx3cmFwIHtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBTZWNvbmRhcnkgc2lkZWJhciB3aXRoIHRhYmxlIG9mIGNvbnRlbnRzXG4gICYtLXNlY29uZGFyeSB7XG4gICAgZGlzcGxheTogbm9uZTtcblxuICAgIC8vIFt0YWJsZXQgbGFuZHNjYXBlICtdOiBTaG93IHRhYmxlIG9mIGNvbnRlbnRzIG5leHQgdG8gYm9keSBjb3B5XG4gICAgQGluY2x1ZGUgYnJlYWstZnJvbS1kZXZpY2UodGFibGV0IGxhbmRzY2FwZSkge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICBtYXJnaW4tbGVmdDogY2FsYygxMDAlIC0gI3tweDJyZW0oMjQycHgpfSk7XG5cbiAgICAgIC8vIEFkanVzdCBmb3IgcmlnaHQtdG8tbGVmdCBsYW5ndWFnZXNcbiAgICAgIFtkaXI9XCJydGxcIl0gJiB7XG4gICAgICAgIG1hcmdpbi1yaWdodDogY2FsYygxMDAlIC0gI3tweDJyZW0oMjQycHgpfSk7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiBpbml0aWFsO1xuICAgICAgfVxuXG4gICAgICAvLyBFbnN1cmUgc21vb3RoIHNjcm9sbGluZyBvbiBpT1NcbiAgICAgIC5tZC1zaWRlYmFyX19zY3JvbGx3cmFwIHtcbiAgICAgICAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFtzY3JlZW4gK106IExpbWl0IHRvIGdyaWRcbiAgICBAaW5jbHVkZSBicmVhay1mcm9tLWRldmljZShzY3JlZW4pIHtcbiAgICAgIG1hcmdpbi1sZWZ0OiBweDJyZW0oKDEyMjAgLSAyNDIpICogMXB4KTtcblxuICAgICAgLy8gQWRqdXN0IGZvciByaWdodC10by1sZWZ0IGxhbmd1YWdlc1xuICAgICAgW2Rpcj1cInJ0bFwiXSAmIHtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiBweDJyZW0oKDEyMjAgLSAyNDIpICogMXB4KTtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IGluaXRpYWw7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gV3JhcHBlciBmb3Igc2Nyb2xsaW5nIG9uIG92ZXJmbG93XG4gICZfX3Njcm9sbHdyYXAge1xuICAgIG1heC1oZWlnaHQ6IDEwMCU7XG4gICAgbWFyZ2luOiAwIHB4MnJlbSg0cHgpO1xuICAgIG92ZXJmbG93LXk6IGF1dG87XG4gICAgLy8gSGFjazogcmVkdWNlIGppdHRlclxuICAgIGJhY2tmYWNlLXZpc2liaWxpdHk6IGhpZGRlbjtcbiAgICBzY3JvbGwtc25hcC10eXBlOiB5IG1hbmRhdG9yeTtcblxuICAgIC8vIFt0YWJsZXQgLV06IEFkanVzdCBtYXJnaW5zXG4gICAgQGluY2x1ZGUgYnJlYWstdG8tZGV2aWNlKHRhYmxldCkge1xuXG4gICAgICAvLyBTdHJldGNoIHNjcm9sbHdyYXAgZm9yIHByaW1hcnkgc2lkZWJhclxuICAgICAgLm1kLXNpZGViYXItLXByaW1hcnkgJiB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgdG9wOiAwO1xuICAgICAgICByaWdodDogMDtcbiAgICAgICAgYm90dG9tOiAwO1xuICAgICAgICBsZWZ0OiAwO1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgIHNjcm9sbC1zbmFwLXR5cGU6IG5vbmU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gT3ZlcnJpZGUgbmF0aXZlIHNjcm9sbGJhciBzdHlsZXNcbiAgICAmOjotd2Via2l0LXNjcm9sbGJhciB7XG4gICAgICB3aWR0aDogcHgycmVtKDRweCk7XG4gICAgICBoZWlnaHQ6IHB4MnJlbSg0cHgpO1xuICAgIH1cblxuICAgIC8vIFNjcm9sbGJhciB0aHVtYlxuICAgICY6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXIpO1xuXG4gICAgICAvLyBIb3ZlcmVkIHNjcm9sbGJhciB0aHVtYlxuICAgICAgJjpob3ZlciB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW1kLWFjY2VudC1mZy1jb2xvcik7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCIvLy8vXG4vLy8gQ29weXJpZ2h0IChjKSAyMDE2LTIwMjAgTWFydGluIERvbmF0aCA8bWFydGluLmRvbmF0aEBzcXVpZGZ1bmsuY29tPlxuLy8vXG4vLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksXG4vLy8gdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvblxuLy8vIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLFxuLy8vIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZVxuLy8vIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vLy9cbi8vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy8vXG4vLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT04tSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTFxuLy8vIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkdcbi8vLyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSXG4vLy8gREVBTElOR1Ncbi8vLy9cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gS2V5ZnJhbWVzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIFNob3cgc291cmNlIGZhY3RzXG5Aa2V5ZnJhbWVzIG1kLXNvdXJjZV9fZmFjdHMtLWRvbmUge1xuICAwJSB7XG4gICAgaGVpZ2h0OiAwO1xuICB9XG5cbiAgMTAwJSB7XG4gICAgaGVpZ2h0OiBweDJyZW0oMTNweCk7XG4gIH1cbn1cblxuLy8gU2hvdyBzb3VyY2UgZmFjdFxuQGtleWZyYW1lcyBtZC1zb3VyY2VfX2ZhY3QtLWRvbmUge1xuICAwJSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwMCUpO1xuICAgIG9wYWNpdHk6IDA7XG4gIH1cblxuICA1MCUge1xuICAgIG9wYWNpdHk6IDA7XG4gIH1cblxuICAxMDAlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCUpO1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUnVsZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gU291cmNlIGNvbnRhaW5lclxuLm1kLXNvdXJjZSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB0cmFuc2l0aW9uOiBvcGFjaXR5IDI1MG1zO1xuICBmb250LXNpemU6IHB4MnJlbSgxM3B4KTtcbiAgbGluZS1oZWlnaHQ6IDEuMjU7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIC8vIEhhY2s6IHJlZHVjZSBqaXR0ZXJcbiAgYmFja2ZhY2UtdmlzaWJpbGl0eTogaGlkZGVuO1xuXG4gIC8vIEFkanVzdCBmb3IgcmlnaHQtdG8tbGVmdCBsYW5ndWFnZXNcbiAgW2Rpcj1cInJ0bFwiXSAmIHtcbiAgICBwYWRkaW5nLXJpZ2h0OiBpbml0aWFsO1xuICAgIHBhZGRpbmctbGVmdDogcHgycmVtKDEycHgpO1xuICB9XG5cbiAgLy8gSG92ZXJlZCBzb3VyY2UgY29udGFpbmVyXG4gICY6aG92ZXIge1xuICAgIG9wYWNpdHk6IDAuNztcbiAgfVxuXG4gIC8vIFJlcG9zaXRvcnkgcGxhdGZvcm0gaWNvblxuICAmX19pY29uIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgd2lkdGg6IHB4MnJlbSg0OHB4KTtcbiAgICBoZWlnaHQ6IHB4MnJlbSg0OHB4KTtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuXG4gICAgLy8gQWxpZ24gd2l0aCBtYXJnaW4gb25seSAoYXMgb3Bwb3NlZCB0byBub3JtYWwgYnV0dG9uIGFsaWdubWVudClcbiAgICBzdmcge1xuICAgICAgbWFyZ2luLXRvcDogcHgycmVtKDEycHgpO1xuICAgICAgbWFyZ2luLWxlZnQ6IHB4MnJlbSgxMnB4KTtcblxuICAgICAgLy8gQWRqdXN0IGZvciByaWdodC10by1sZWZ0IGxhbmd1YWdlc1xuICAgICAgW2Rpcj1cInJ0bFwiXSAmIHtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiBweDJyZW0oMTJweCk7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiBpbml0aWFsO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENvcnJlY3QgYWxpZ25tZW50LCBpZiBpY29uIGlzIHByZXNlbnRcbiAgICArIC5tZC1zb3VyY2VfX3JlcG9zaXRvcnkge1xuICAgICAgbWFyZ2luLWxlZnQ6IHB4MnJlbSgtNDBweCk7XG4gICAgICBwYWRkaW5nLWxlZnQ6IHB4MnJlbSg0MHB4KTtcblxuICAgICAgLy8gQWRqdXN0IGZvciByaWdodC10by1sZWZ0IGxhbmd1YWdlc1xuICAgICAgW2Rpcj1cInJ0bFwiXSAmIHtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiBweDJyZW0oLTQwcHgpO1xuICAgICAgICBtYXJnaW4tbGVmdDogaW5pdGlhbDtcbiAgICAgICAgcGFkZGluZy1yaWdodDogcHgycmVtKDQwcHgpO1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IGluaXRpYWw7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gUmVwb3NpdG9yeSBuYW1lXG4gICZfX3JlcG9zaXRvcnkge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBtYXgtd2lkdGg6IGNhbGMoMTAwJSAtICN7cHgycmVtKDI0cHgpfSk7XG4gICAgbWFyZ2luLWxlZnQ6IHB4MnJlbSgxMnB4KTtcbiAgICBmb250LXdlaWdodDogNzAwO1xuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgfVxuXG4gIC8vIFNvdXJjZSBmYWN0cyAoc3RhdGlzdGljcyBldGMuKVxuICAmX19mYWN0cyB7XG4gICAgbWFyZ2luOiAwO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgZm9udC1zaXplOiBweDJyZW0oMTFweCk7XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gICAgb3BhY2l0eTogMC43NTtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuXG4gICAgLy8gU2hvdyBhZnRlciB0aGUgZGF0YSB3YXMgbG9hZGVkXG4gICAgW2RhdGEtbWQtc3RhdGU9XCJkb25lXCJdICYge1xuICAgICAgYW5pbWF0aW9uOiBtZC1zb3VyY2VfX2ZhY3RzLS1kb25lIDI1MG1zIGVhc2UtaW47XG4gICAgfVxuICB9XG5cbiAgLy8gRmFjdFxuICAmX19mYWN0IHtcbiAgICBmbG9hdDogbGVmdDtcblxuICAgIC8vIEFkanVzdCBmb3IgcmlnaHQtdG8tbGVmdCBsYW5ndWFnZXNcbiAgICBbZGlyPVwicnRsXCJdICYge1xuICAgICAgZmxvYXQ6IHJpZ2h0O1xuICAgIH1cblxuICAgIC8vIFNob3cgYWZ0ZXIgdGhlIGRhdGEgd2FzIGxvYWRlZFxuICAgIFtkYXRhLW1kLXN0YXRlPVwiZG9uZVwiXSAmIHtcbiAgICAgIGFuaW1hdGlvbjogbWQtc291cmNlX19mYWN0LS1kb25lIDQwMG1zIGVhc2Utb3V0O1xuICAgIH1cblxuICAgIC8vIE1pZGRsZSBkb3QgYmVmb3JlIGZhY3RcbiAgICAmOjpiZWZvcmUge1xuICAgICAgbWFyZ2luOiAwIHB4MnJlbSgycHgpO1xuICAgICAgY29udGVudDogXCJcXDAwQjdcIjtcbiAgICB9XG5cbiAgICAvLyBSZW1vdmUgbWlkZGxlIGRvdCBvbiBmaXJzdCBmYWN0XG4gICAgJjpmaXJzdC1jaGlsZDo6YmVmb3JlIHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxuICB9XG59XG4iLCIvLy8vXG4vLy8gQ29weXJpZ2h0IChjKSAyMDE2LTIwMjAgTWFydGluIERvbmF0aCA8bWFydGluLmRvbmF0aEBzcXVpZGZ1bmsuY29tPlxuLy8vXG4vLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksXG4vLy8gdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvblxuLy8vIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLFxuLy8vIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZVxuLy8vIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vLy9cbi8vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy8vXG4vLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT04tSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTFxuLy8vIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkdcbi8vLyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSXG4vLy8gREVBTElOR1Ncbi8vLy9cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUnVsZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gVGFicyB3aXRoIG91dGxpbmVcbi5tZC10YWJzIHtcbiAgd2lkdGg6IDEwMCU7XG4gIHRyYW5zaXRpb246IGJhY2tncm91bmQgMjUwbXM7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW1kLXByaW1hcnktZmctY29sb3IpO1xuICBjb2xvcjogdmFyKC0tbWQtcHJpbWFyeS1iZy1jb2xvcik7XG4gIG92ZXJmbG93OiBhdXRvO1xuXG4gIC8vIE9taXQgdHJhbnNpdGlvbnMsIGluIGNhc2UgSmF2YVNjcmlwdCBpcyBub3QgYXZhaWxhYmxlXG4gIC5uby1qcyAmIHtcbiAgICB0cmFuc2l0aW9uOiBub25lO1xuICB9XG5cbiAgLy8gW3RhYmxldCAtXTogSGlkZSB0YWJzIGZvciB0YWJsZXQgYW5kIGJlbG93LCBhcyB0aGV5IGRvbid0IG1ha2UgYW55IHNlbnNlXG4gIEBpbmNsdWRlIGJyZWFrLXRvLWRldmljZSh0YWJsZXQpIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG5cbiAgLy8gSGlkZSBmb3IgcHJpbnRcbiAgQG1lZGlhIHByaW50IHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG5cbiAgLy8gTGlzdCBvZiBpdGVtc1xuICAmX19saXN0IHtcbiAgICBtYXJnaW46IDA7XG4gICAgbWFyZ2luLWxlZnQ6IHB4MnJlbSg0cHgpO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuXG4gICAgLy8gQWRqdXN0IGZvciByaWdodC10by1sZWZ0IGxhbmd1YWdlc1xuICAgIFtkaXI9XCJydGxcIl0gJiB7XG4gICAgICBtYXJnaW4tcmlnaHQ6IHB4MnJlbSg0cHgpO1xuICAgICAgbWFyZ2luLWxlZnQ6IGluaXRpYWw7XG4gICAgfVxuICB9XG5cbiAgLy8gTGlzdCBpdGVtXG4gICZfX2l0ZW0ge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBoZWlnaHQ6IHB4MnJlbSg0OHB4KTtcbiAgICBwYWRkaW5nLXJpZ2h0OiBweDJyZW0oMTJweCk7XG4gICAgcGFkZGluZy1sZWZ0OiBweDJyZW0oMTJweCk7XG4gIH1cblxuICAvLyBMaW5rIGluc2lkZSBpdGVtIC0gY291bGQgYmUgZGVmaW5lZCBhcyBibG9jayBlbGVtZW50cyBhbmQgYWxpZ25lZCB2aWFcbiAgLy8gbGluZSBoZWlnaHQsIGJ1dCB0aGlzIHdvdWxkIGltcGx5IG1vcmUgcmVwYWludHMgd2hlbiBzY3JvbGxpbmdcbiAgJl9fbGluayB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgbWFyZ2luLXRvcDogcHgycmVtKDE2cHgpO1xuICAgIHRyYW5zaXRpb246XG4gICAgICB0cmFuc2Zvcm0gNDAwbXMgY3ViaWMtYmV6aWVyKDAuMSwgMC43LCAwLjEsIDEpLFxuICAgICAgb3BhY2l0eSAgIDI1MG1zO1xuICAgIGZvbnQtc2l6ZTogcHgycmVtKDE0cHgpO1xuICAgIG9wYWNpdHk6IDAuNztcblxuICAgIC8vIE9taXQgdHJhbnNpdGlvbnMsIGluIGNhc2UgSmF2YVNjcmlwdCBpcyBub3QgYXZhaWxhYmxlXG4gICAgLm5vLWpzICYge1xuICAgICAgdHJhbnNpdGlvbjogbm9uZTtcbiAgICB9XG5cbiAgICAvLyBBY3RpdmUgb3IgaG92ZXJlZCBsaW5rXG4gICAgJi0tYWN0aXZlLFxuICAgICY6aG92ZXIge1xuICAgICAgY29sb3I6IGluaGVyaXQ7XG4gICAgICBvcGFjaXR5OiAxO1xuICAgIH1cblxuICAgIC8vIERlbGF5IHRyYW5zaXRpb25zIGJ5IGEgc21hbGwgYW1vdW50XG4gICAgQGZvciAkaSBmcm9tIDIgdGhyb3VnaCAxNiB7XG4gICAgICAubWQtdGFic19faXRlbTpudGgtY2hpbGQoI3skaX0pICYge1xuICAgICAgICB0cmFuc2l0aW9uLWRlbGF5OiAyMG1zICogKCRpIC0gMSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gRmFkZS1vdXQgdGFicyBiYWNrZ3JvdW5kIHVwb24gc2Nyb2xsaW5nXG4gICZbZGF0YS1tZC1zdGF0ZT1cImhpZGRlblwiXSB7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG5cbiAgICAvLyBIaWRlIHRhYnMgdXBvbiBzY3JvbGxpbmcgLSBkaXNhYmxlIHRyYW5zaXRpb24gdG8gbWluaW1pemVzIHJlcGFpbnRzXG4gICAgLy8gd2hpbGUgc2Nyb2xsaW5nIGRvd24sIHdoaWxlIHNjcm9sbGluZyB1cCBzZWVtcyB0byBiZSBva2F5XG4gICAgLm1kLXRhYnNfX2xpbmsge1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDUwJSk7XG4gICAgICB0cmFuc2l0aW9uOlxuICAgICAgICBjb2xvciAgICAgMjUwbXMsXG4gICAgICAgIHRyYW5zZm9ybSAgIDBtcyA0MDBtcyxcbiAgICAgICAgb3BhY2l0eSAgIDEwMG1zO1xuICAgICAgb3BhY2l0eTogMDtcbiAgICB9XG4gIH1cblxuICAvLyBbc2NyZWVuICtdOiBBZGp1c3QgbWFpbiBuYXZpZ2F0aW9uIHN0eWxlc1xuICBAaW5jbHVkZSBicmVhay1mcm9tLWRldmljZShzY3JlZW4pIHtcblxuICAgIC8vIEhpZGUgMXN0IGxldmVsIG5lc3RlZCBpdGVtcywgYXMgdGhleSBhcmUgbGlzdGVkIGluIHRoZSB0YWJzXG4gICAgfiAubWQtbWFpbiAubWQtbmF2LS1wcmltYXJ5ID4gLm1kLW5hdl9fbGlzdCA+IC5tZC1uYXZfX2l0ZW0tLW5lc3RlZCB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cblxuICAgIC8vIEFjdGl2ZSB0YWJcbiAgICAmLS1hY3RpdmUgfiAubWQtbWFpbiB7XG5cbiAgICAgIC8vIEFkanVzdCAxc3QgbGV2ZWwgc3R5bGVzXG4gICAgICAubWQtbmF2LS1wcmltYXJ5IHtcblxuICAgICAgICAvLyBTaG93IHRpdGxlIGFuZCByZW1vdmUgc3BhY2luZ1xuICAgICAgICAubWQtbmF2X190aXRsZSB7XG4gICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgcGFkZGluZzogMCBweDJyZW0oMTJweCk7XG4gICAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICAgICAgc2Nyb2xsLXNuYXAtYWxpZ246IHN0YXJ0O1xuXG4gICAgICAgICAgLy8gSGlkZSBzaXRlIHRpdGxlXG4gICAgICAgICAgJltmb3I9XCJfX2RyYXdlclwiXSB7XG4gICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEhpZGUgMXN0IGxldmVsIGl0ZW1zXG4gICAgICAgID4gLm1kLW5hdl9fbGlzdCA+IC5tZC1uYXZfX2l0ZW0ge1xuICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG5cbiAgICAgICAgICAvLyBTaG93IDFzdCBsZXZlbCBhY3RpdmUgbmVzdGVkIGl0ZW1zXG4gICAgICAgICAgJi0tYWN0aXZlIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgICAgcGFkZGluZzogMDtcblxuICAgICAgICAgICAgLy8gSGlkZSBuZXN0ZWQgbGlua3NcbiAgICAgICAgICAgID4gLm1kLW5hdl9fbGluayB7XG4gICAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEFsd2F5cyBleHBhbmQgbmVzdGVkIG5hdmlnYXRpb24gb24gMm5kIGxldmVsXG4gICAgICAubWQtbmF2W2RhdGEtbWQtbGV2ZWw9XCIxXCJdIHtcblxuICAgICAgICAvLyBSZW1vdmUgc3BhY2luZyBvbiAybmQgbGV2ZWwgaXRlbXNcbiAgICAgICAgPiAubWQtbmF2X19saXN0ID4gLm1kLW5hdl9faXRlbSB7XG4gICAgICAgICAgcGFkZGluZzogMCBweDJyZW0oMTJweCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBIaWRlIHRpdGxlcyBmcm9tIDJuZCBsZXZlbCBvblxuICAgICAgICAubWQtbmF2IC5tZC1uYXZfX3RpdGxlIHtcbiAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCIvLy8vXG4vLy8gQ29weXJpZ2h0IChjKSAyMDE2LTIwMjAgTWFydGluIERvbmF0aCA8bWFydGluLmRvbmF0aEBzcXVpZGZ1bmsuY29tPlxuLy8vXG4vLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksXG4vLy8gdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvblxuLy8vIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLFxuLy8vIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZVxuLy8vIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vLy9cbi8vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy8vXG4vLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT04tSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTFxuLy8vIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkdcbi8vLyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSXG4vLy8gREVBTElOR1Ncbi8vLy9cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUnVsZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gU2NvcGVkIGluIHR5cGVzZXR0ZWQgY29udGVudCB0byBtYXRjaCBzcGVjaWZpY2l0eSBvZiByZWd1bGFyIGNvbnRlbnRcbi5tZC10eXBlc2V0IHtcblxuICAvLyBBZG1vbml0aW9uXG4gIC5hZG1vbml0aW9uIHtcbiAgICBtYXJnaW46IDEuNTYyNWVtIDA7XG4gICAgcGFkZGluZzogMCBweDJyZW0oMTJweCk7XG4gICAgYm9yZGVyLWxlZnQ6IHB4MnJlbSg0cHgpIHNvbGlkICRjbHItYmx1ZS1hMjAwO1xuICAgIGJvcmRlci1yYWRpdXM6IHB4MnJlbSgycHgpO1xuICAgIGZvbnQtc2l6ZTogbXMoLTEpO1xuICAgIGJveC1zaGFkb3c6XG4gICAgICAwIHB4MnJlbSg0cHgpIHB4MnJlbSgxMHB4KSBoc2xhKDAsIDAlLCAwJSwgMC4wNSksXG4gICAgICAwIDAgICAgICAgICAgIHB4MnJlbSgxcHgpICBoc2xhKDAsIDAlLCAwJSwgMC4xKTtcbiAgICBvdmVyZmxvdzogYXV0bztcblxuICAgIC8vIEFkanVzdCBmb3IgcmlnaHQtdG8tbGVmdCBsYW5ndWFnZXNcbiAgICBbZGlyPVwicnRsXCJdICYge1xuICAgICAgYm9yZGVyLXJpZ2h0OiBweDJyZW0oNHB4KSBzb2xpZCAkY2xyLWJsdWUtYTIwMDtcbiAgICAgIGJvcmRlci1sZWZ0OiBub25lO1xuICAgIH1cblxuICAgIC8vIEFkanVzdCBzcGFjaW5nIG9uIGxhc3QgZWxlbWVudFxuICAgIGh0bWwgJiA+IDpsYXN0LWNoaWxkIHtcbiAgICAgIG1hcmdpbi1ib3R0b206IHB4MnJlbSgxMnB4KTtcbiAgICB9XG5cbiAgICAvLyBBZGp1c3QgbWFyZ2luIGZvciBuZXN0ZWQgYWRtb25pdGlvbiBibG9ja3NcbiAgICAuYWRtb25pdGlvbiB7XG4gICAgICBtYXJnaW46IDFlbSAwO1xuICAgIH1cblxuICAgIC8vIEJ1aWxkIHJlcHJlc2VudGF0aW9uYWwgY2xhc3Nlc1xuICAgIEBlYWNoICRuYW1lcywgJGFwcGVhcmFuY2UgaW4gKFxuICAgICAgYWJzdHJhY3Qgc3VtbWFyeSB0bGRyOiAkY2xyLWxpZ2h0LWJsdWUtYTQwMCBcInRleHQtc3ViamVjdFwiLFxuICAgICAgaW5mbyB0b2RvOiAkY2xyLWN5YW4tYTcwMCBcImluZm9ybWF0aW9uXCIsXG4gICAgICB0aXAgaGludCBpbXBvcnRhbnQ6ICRjbHItdGVhbC1hNzAwIFwiZmlyZVwiLFxuICAgICAgc3VjY2VzcyBjaGVjayBkb25lOiAkY2xyLWdyZWVuLWE3MDAgXCJjaGVjay1jaXJjbGVcIixcbiAgICAgIHF1ZXN0aW9uIGhlbHAgZmFxOiAkY2xyLWxpZ2h0LWdyZWVuLWE3MDAgXCJoZWxwLWNpcmNsZVwiLFxuICAgICAgd2FybmluZyBjYXV0aW9uIGF0dGVudGlvbjogJGNsci1vcmFuZ2UtYTQwMCBcImFsZXJ0XCIsXG4gICAgICBmYWlsdXJlIGZhaWwgbWlzc2luZzogJGNsci1yZWQtYTIwMCBcImNsb3NlLWNpcmNsZVwiLFxuICAgICAgZGFuZ2VyIGVycm9yOiAkY2xyLXJlZC1hNDAwIFwiZmxhc2gtY2lyY2xlXCIsXG4gICAgICBidWc6ICRjbHItcGluay1hNDAwIFwiYnVnXCIsXG4gICAgICBleGFtcGxlOiAkY2xyLWRlZXAtcHVycGxlLWE0MDAgXCJmb3JtYXQtbGlzdC1udW1iZXJlZFwiLFxuICAgICAgcXVvdGUgY2l0ZTogJGNsci1ncmV5IFwiZm9ybWF0LXF1b3RlLWNsb3NlXCJcbiAgICApIHtcbiAgICAgICR0aW50OiBudGgoJGFwcGVhcmFuY2UsIDEpO1xuICAgICAgJGljb246IG50aCgkYXBwZWFyYW5jZSwgMik7XG5cbiAgICAgIC8vIERlZmluZSBiYXNlIGNsYXNzXG4gICAgICAmJSN7bnRoKCRuYW1lcywgMSl9LFxuICAgICAgJi4je250aCgkbmFtZXMsIDEpfSB7XG4gICAgICAgIGJvcmRlci1sZWZ0LWNvbG9yOiAkdGludDtcblxuICAgICAgICAvLyBUaXRsZVxuICAgICAgICA+IDpmaXJzdC1jaGlsZCB7XG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnRpemUoJHRpbnQsIDAuOSk7XG5cbiAgICAgICAgICAvLyBJY29uXG4gICAgICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR0aW50O1xuICAgICAgICAgICAgbWFzay1pbWFnZTogdXJsKFwie3sgI3skaWNvbn0gfX1cIik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIERlZmluZSBzeW5vbnltcyBmb3IgYmFzZSBjbGFzc1xuICAgICAgQGlmIGxlbmd0aCgkbmFtZXMpID4gMSB7XG4gICAgICAgIEBmb3IgJG4gZnJvbSAyIHRocm91Z2ggbGVuZ3RoKCRuYW1lcykge1xuICAgICAgICAgICYuI3tudGgoJG5hbWVzLCAkbil9IHtcbiAgICAgICAgICAgIEBleHRlbmQgJSN7bnRoKCRuYW1lcywgMSl9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEFkbW9uaXRpb24gdGl0bGVcbiAgLmFkbW9uaXRpb24tdGl0bGUge1xuICAgIG1hcmdpbjogMCBweDJyZW0oLTEycHgpO1xuICAgIHBhZGRpbmc6IHB4MnJlbSg4cHgpIHB4MnJlbSgxMnB4KSBweDJyZW0oOHB4KSBweDJyZW0oNDBweCk7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnRpemUoJGNsci1ibHVlLWEyMDAsIDAuOSk7XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcblxuICAgIC8vIEFkanVzdCBmb3IgcmlnaHQtdG8tbGVmdCBsYW5ndWFnZXNcbiAgICBbZGlyPVwicnRsXCJdICYge1xuICAgICAgcGFkZGluZzogcHgycmVtKDhweCkgcHgycmVtKDQwcHgpIHB4MnJlbSg4cHgpIHB4MnJlbSgxMnB4KTtcbiAgICB9XG5cbiAgICAvLyBSZXNldCBzcGFjaW5nLCBpZiB0aXRsZSBpcyB0aGUgb25seSBlbGVtZW50XG4gICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgfVxuXG4gICAgLy8gSWNvblxuICAgICY6OmJlZm9yZSB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB3aWR0aDogcHgycmVtKDIwcHgpO1xuICAgICAgaGVpZ2h0OiBweDJyZW0oMjBweCk7XG4gICAgICBtYXJnaW4tbGVmdDogcHgycmVtKC0yOHB4KTtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICRjbHItYmx1ZS1hMjAwO1xuICAgICAgbWFzay1pbWFnZTogdXJsKFwie3sgcGVuY2lsIH19XCIpO1xuICAgICAgY29udGVudDogXCJcIjtcblxuICAgICAgLy8gQWRqdXN0IGZvciByaWdodC10by1sZWZ0IGxhbmd1YWdlc1xuICAgICAgW2Rpcj1cInJ0bFwiXSAmIHtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiBweDJyZW0oLTI4cHgpO1xuICAgICAgICBtYXJnaW4tbGVmdDogaW5pdGlhbDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIi8vLy9cbi8vLyBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyMCBNYXJ0aW4gRG9uYXRoIDxtYXJ0aW4uZG9uYXRoQHNxdWlkZnVuay5jb20+XG4vLy9cbi8vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSxcbi8vLyB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uXG4vLy8gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsXG4vLy8gYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlXG4vLy8gU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vL1xuLy8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLy8gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vLy9cbi8vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLy8gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTi1JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMXG4vLy8gVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lOR1xuLy8vIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVJcbi8vLyBERUFMSU5HU1xuLy8vL1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBWYXJpYWJsZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gT3BlcmF0b3JzXG4kY29kZWhpbGl0ZS1vcGVyYXRvcjogaW5oZXJpdDtcbiRjb2RlaGlsaXRlLW9wZXJhdG9yLXdvcmQ6IGluaGVyaXQ7XG5cbi8vIEdlbmVyaWNzXG4kY29kZWhpbGl0ZS1nZW5lcmljLWVtcGg6ICMwMDAwMDA7XG4kY29kZWhpbGl0ZS1nZW5lcmljLWVycm9yOiAjQUEwMDAwO1xuJGNvZGVoaWxpdGUtZ2VuZXJpYy1oZWFkaW5nOiAjOTk5OTk5O1xuJGNvZGVoaWxpdGUtZ2VuZXJpYy1vdXRwdXQ6ICM4ODg4ODg7XG4kY29kZWhpbGl0ZS1nZW5lcmljLXByb21wdDogIzU1NTU1NTtcbiRjb2RlaGlsaXRlLWdlbmVyaWMtc3Ryb25nOiBpbmhlcml0O1xuJGNvZGVoaWxpdGUtZ2VuZXJpYy1zdWJoZWFkaW5nOiAjQUFBQUFBO1xuJGNvZGVoaWxpdGUtZ2VuZXJpYy10cmFjZWJhY2s6ICNBQTAwMDA7XG5cbi8vIERpZmZzXG4kY29kZWhpbGl0ZS1kaWZmLWRlbGV0ZWQ6ICNGRkREREQ7XG4kY29kZWhpbGl0ZS1kaWZmLWluc2VydGVkOiAjRERGRkREO1xuXG4vLyBLZXl3b3Jkc1xuJGNvZGVoaWxpdGUta2V5d29yZDogIzNCNzhFNztcbiRjb2RlaGlsaXRlLWtleXdvcmQtY29uc3RhbnQ6ICNBNzFENUQ7XG4kY29kZWhpbGl0ZS1rZXl3b3JkLWRlY2xhcmF0aW9uOiAjM0I3OEU3O1xuJGNvZGVoaWxpdGUta2V5d29yZC1uYW1lc3BhY2U6ICMzQjc4RTc7XG4kY29kZWhpbGl0ZS1rZXl3b3JkLXBzZXVkbzogI0E3MUQ1RDtcbiRjb2RlaGlsaXRlLWtleXdvcmQtcmVzZXJ2ZWQ6ICMzRTYxQTI7XG4kY29kZWhpbGl0ZS1rZXl3b3JkLXR5cGU6ICMzRTYxQTI7XG5cbi8vIENvbW1lbnRzXG4kY29kZWhpbGl0ZS1jb21tZW50OiAjOTk5OTk5O1xuJGNvZGVoaWxpdGUtY29tbWVudC1tdWx0aWxpbmU6ICM5OTk5OTk7XG4kY29kZWhpbGl0ZS1jb21tZW50LXByZXByb2M6ICM2NjY2NjY7XG4kY29kZWhpbGl0ZS1jb21tZW50LXNpbmdsZTogIzk5OTk5OTtcbiRjb2RlaGlsaXRlLWNvbW1lbnQtc2hlYmFuZzogIzk5OTk5OTtcbiRjb2RlaGlsaXRlLWNvbW1lbnQtc3BlY2lhbDogIzk5OTk5OTtcblxuLy8gTmFtZXNcbiRjb2RlaGlsaXRlLW5hbWUtYXR0cmlidXRlOiAjQzIxODVCO1xuJGNvZGVoaWxpdGUtbmFtZS1idWlsdGluOiAjQzIxODVCO1xuJGNvZGVoaWxpdGUtbmFtZS1idWlsdGluLXBzZXVkbzogIzNFNjFBMjtcbiRjb2RlaGlsaXRlLW5hbWUtY2xhc3M6ICNDMjE4NUI7XG4kY29kZWhpbGl0ZS1uYW1lLWNvbnN0YW50OiAjM0U2MUEyO1xuJGNvZGVoaWxpdGUtbmFtZS1kZWNvcmF0b3I6ICM2NjY2NjY7XG4kY29kZWhpbGl0ZS1uYW1lLWVudGl0eTogIzY2NjY2NjtcbiRjb2RlaGlsaXRlLW5hbWUtZXhjZXB0aW9uOiAjQzIxODVCO1xuJGNvZGVoaWxpdGUtbmFtZS1mdW5jdGlvbjogI0MyMTg1QjtcbiRjb2RlaGlsaXRlLW5hbWUtbGFiZWw6ICMzQjUxNzk7XG4kY29kZWhpbGl0ZS1uYW1lLW5hbWVzcGFjZTogI0VDNDA3QTtcbiRjb2RlaGlsaXRlLW5hbWUtdGFnOiAjM0I3OEU3O1xuJGNvZGVoaWxpdGUtbmFtZS12YXJpYWJsZTogIzNFNjFBMjtcbiRjb2RlaGlsaXRlLW5hbWUtdmFyaWFibGUtY2xhc3M6ICMzRTYxQTI7XG4kY29kZWhpbGl0ZS1uYW1lLXZhcmlhYmxlLWluc3RhbmNlOiAjM0U2MUEyO1xuJGNvZGVoaWxpdGUtbmFtZS12YXJpYWJsZS1nbG9iYWw6ICMzRTYxQTI7XG4kY29kZWhpbGl0ZS1uYW1lLWV4dGVuc2lvbjogI0VDNDA3QTtcblxuLy8gTnVtYmVyc1xuJGNvZGVoaWxpdGUtbGl0ZXJhbC1udW1iZXI6ICNFNzRDM0M7XG4kY29kZWhpbGl0ZS1saXRlcmFsLW51bWJlci1mbG9hdDogI0U3NEMzQztcbiRjb2RlaGlsaXRlLWxpdGVyYWwtbnVtYmVyLWhleDogI0U3NEMzQztcbiRjb2RlaGlsaXRlLWxpdGVyYWwtbnVtYmVyLWludGVnZXI6ICNFNzRDM0M7XG4kY29kZWhpbGl0ZS1saXRlcmFsLW51bWJlci1pbnRlZ2VyLWxvbmc6ICNFNzRDM0M7XG4kY29kZWhpbGl0ZS1saXRlcmFsLW51bWJlci1vY3Q6ICNFNzRDM0M7XG5cbi8vIFN0cmluZ3NcbiRjb2RlaGlsaXRlLWxpdGVyYWwtc3RyaW5nOiAjMEQ5MDRGO1xuJGNvZGVoaWxpdGUtbGl0ZXJhbC1zdHJpbmctYmFja3RpY2tzOiAjMEQ5MDRGO1xuJGNvZGVoaWxpdGUtbGl0ZXJhbC1zdHJpbmctY2hhcjogIzBEOTA0RjtcbiRjb2RlaGlsaXRlLWxpdGVyYWwtc3RyaW5nLWRvYzogIzk5OTk5OTtcbiRjb2RlaGlsaXRlLWxpdGVyYWwtc3RyaW5nLWRvdWJsZTogIzBEOTA0RjtcbiRjb2RlaGlsaXRlLWxpdGVyYWwtc3RyaW5nLWVzY2FwZTogIzE4MzY5MTtcbiRjb2RlaGlsaXRlLWxpdGVyYWwtc3RyaW5nLWhlcmVkb2M6ICMxODM2OTE7XG4kY29kZWhpbGl0ZS1saXRlcmFsLXN0cmluZy1pbnRlcnBvbDogIzE4MzY5MTtcbiRjb2RlaGlsaXRlLWxpdGVyYWwtc3RyaW5nLW90aGVyOiAjMTgzNjkxO1xuJGNvZGVoaWxpdGUtbGl0ZXJhbC1zdHJpbmctcmVnZXg6ICMwMDk5MjY7XG4kY29kZWhpbGl0ZS1saXRlcmFsLXN0cmluZy1zaW5nbGU6ICMwRDkwNEY7XG4kY29kZWhpbGl0ZS1saXRlcmFsLXN0cmluZy1zeW1ib2w6ICMwRDkwNEY7XG5cbi8vIE1pc2NlbGxhbmVvdXNcbiRjb2RlaGlsaXRlLWVycm9yOiAjQTYxNzE3O1xuJGNvZGVoaWxpdGUtd2hpdGVzcGFjZTogdHJhbnNwYXJlbnQ7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJ1bGVzOiBzeW50YXggaGlnaGxpZ2h0aW5nXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIENvZGVoaWxpdGUgZXh0ZW5zaW9uXG4uY29kZWhpbGl0ZSB7XG5cbiAgLy8gT3BlcmF0b3JzXG4gIC5vICB7IGNvbG9yOiAkY29kZWhpbGl0ZS1vcGVyYXRvcjsgfVxuICAub3cgeyBjb2xvcjogJGNvZGVoaWxpdGUtb3BlcmF0b3Itd29yZDsgfVxuXG4gIC8vIEdlbmVyaWNzXG4gIC5nZSB7IGNvbG9yOiAkY29kZWhpbGl0ZS1nZW5lcmljLWVtcGg7IH1cbiAgLmdyIHsgY29sb3I6ICRjb2RlaGlsaXRlLWdlbmVyaWMtZXJyb3I7IH1cbiAgLmdoIHsgY29sb3I6ICRjb2RlaGlsaXRlLWdlbmVyaWMtaGVhZGluZzsgfVxuICAuZ28geyBjb2xvcjogJGNvZGVoaWxpdGUtZ2VuZXJpYy1vdXRwdXQ7IH1cbiAgLmdwIHsgY29sb3I6ICRjb2RlaGlsaXRlLWdlbmVyaWMtcHJvbXB0OyB9XG4gIC5ncyB7IGNvbG9yOiAkY29kZWhpbGl0ZS1nZW5lcmljLXN0cm9uZzsgfVxuICAuZ3UgeyBjb2xvcjogJGNvZGVoaWxpdGUtZ2VuZXJpYy1zdWJoZWFkaW5nOyB9XG4gIC5ndCB7IGNvbG9yOiAkY29kZWhpbGl0ZS1nZW5lcmljLXRyYWNlYmFjazsgfVxuXG4gIC8vIERpZmZzXG4gIC5nZCB7IGJhY2tncm91bmQtY29sb3I6ICRjb2RlaGlsaXRlLWRpZmYtZGVsZXRlZDsgfVxuICAuZ2kgeyBiYWNrZ3JvdW5kLWNvbG9yOiAkY29kZWhpbGl0ZS1kaWZmLWluc2VydGVkOyB9XG5cbiAgLy8gS2V5d29yZHNcbiAgLmsgIHsgY29sb3I6ICRjb2RlaGlsaXRlLWtleXdvcmQ7IH1cbiAgLmtjIHsgY29sb3I6ICRjb2RlaGlsaXRlLWtleXdvcmQtY29uc3RhbnQ7IH1cbiAgLmtkIHsgY29sb3I6ICRjb2RlaGlsaXRlLWtleXdvcmQtZGVjbGFyYXRpb247IH1cbiAgLmtuIHsgY29sb3I6ICRjb2RlaGlsaXRlLWtleXdvcmQtbmFtZXNwYWNlOyB9XG4gIC5rcCB7IGNvbG9yOiAkY29kZWhpbGl0ZS1rZXl3b3JkLXBzZXVkbzsgfVxuICAua3IgeyBjb2xvcjogJGNvZGVoaWxpdGUta2V5d29yZC1yZXNlcnZlZDsgfVxuICAua3QgeyBjb2xvcjogJGNvZGVoaWxpdGUta2V5d29yZC10eXBlOyB9XG5cbiAgLy8gQ29tbWVudHNcbiAgLmMgIHsgY29sb3I6ICRjb2RlaGlsaXRlLWNvbW1lbnQ7IH1cbiAgLmNtIHsgY29sb3I6ICRjb2RlaGlsaXRlLWNvbW1lbnQtbXVsdGlsaW5lOyB9XG4gIC5jcCB7IGNvbG9yOiAkY29kZWhpbGl0ZS1jb21tZW50LXByZXByb2M7IH1cbiAgLmMxIHsgY29sb3I6ICRjb2RlaGlsaXRlLWNvbW1lbnQtc2luZ2xlOyB9XG4gIC5jaCB7IGNvbG9yOiAkY29kZWhpbGl0ZS1jb21tZW50LXNoZWJhbmc7IH1cbiAgLmNzIHsgY29sb3I6ICRjb2RlaGlsaXRlLWNvbW1lbnQtc3BlY2lhbDsgfVxuXG4gIC8vIE5hbWVzXG4gIC5uYSB7IGNvbG9yOiAkY29kZWhpbGl0ZS1uYW1lLWF0dHJpYnV0ZTsgfVxuICAubmIgeyBjb2xvcjogJGNvZGVoaWxpdGUtbmFtZS1idWlsdGluOyB9XG4gIC5icCB7IGNvbG9yOiAkY29kZWhpbGl0ZS1uYW1lLWJ1aWx0aW4tcHNldWRvOyB9XG4gIC5uYyB7IGNvbG9yOiAkY29kZWhpbGl0ZS1uYW1lLWNsYXNzOyB9XG4gIC5ubyB7IGNvbG9yOiAkY29kZWhpbGl0ZS1uYW1lLWNvbnN0YW50OyB9XG4gIC5uZCB7IGNvbG9yOiAkY29kZWhpbGl0ZS1uYW1lLWVudGl0eTsgfVxuICAubmkgeyBjb2xvcjogJGNvZGVoaWxpdGUtbmFtZS1lbnRpdHk7IH1cbiAgLm5lIHsgY29sb3I6ICRjb2RlaGlsaXRlLW5hbWUtZXhjZXB0aW9uOyB9XG4gIC5uZiB7IGNvbG9yOiAkY29kZWhpbGl0ZS1uYW1lLWZ1bmN0aW9uOyB9XG4gIC5ubCB7IGNvbG9yOiAkY29kZWhpbGl0ZS1uYW1lLWxhYmVsOyB9XG4gIC5ubiB7IGNvbG9yOiAkY29kZWhpbGl0ZS1uYW1lLW5hbWVzcGFjZTsgfVxuICAubnQgeyBjb2xvcjogJGNvZGVoaWxpdGUtbmFtZS10YWc7IH1cbiAgLm52IHsgY29sb3I6ICRjb2RlaGlsaXRlLW5hbWUtdmFyaWFibGU7IH1cbiAgLnZjIHsgY29sb3I6ICRjb2RlaGlsaXRlLW5hbWUtdmFyaWFibGUtY2xhc3M7IH1cbiAgLnZnIHsgY29sb3I6ICRjb2RlaGlsaXRlLW5hbWUtdmFyaWFibGUtZ2xvYmFsOyB9XG4gIC52aSB7IGNvbG9yOiAkY29kZWhpbGl0ZS1uYW1lLXZhcmlhYmxlLWluc3RhbmNlOyB9XG4gIC5ueCB7IGNvbG9yOiAkY29kZWhpbGl0ZS1uYW1lLWV4dGVuc2lvbjsgfVxuXG4gIC8vIE51bWJlcnNcbiAgLm0gIHsgY29sb3I6ICRjb2RlaGlsaXRlLWxpdGVyYWwtbnVtYmVyOyB9XG4gIC5tZiB7IGNvbG9yOiAkY29kZWhpbGl0ZS1saXRlcmFsLW51bWJlci1mbG9hdDsgfVxuICAubWggeyBjb2xvcjogJGNvZGVoaWxpdGUtbGl0ZXJhbC1udW1iZXItaGV4OyB9XG4gIC5taSB7IGNvbG9yOiAkY29kZWhpbGl0ZS1saXRlcmFsLW51bWJlci1pbnRlZ2VyOyB9XG4gIC5pbCB7IGNvbG9yOiAkY29kZWhpbGl0ZS1saXRlcmFsLW51bWJlci1pbnRlZ2VyLWxvbmc7IH1cbiAgLm1vIHsgY29sb3I6ICRjb2RlaGlsaXRlLWxpdGVyYWwtbnVtYmVyLW9jdDsgfVxuXG4gIC8vIFN0cmluZ3NcbiAgLnMgIHsgY29sb3I6ICRjb2RlaGlsaXRlLWxpdGVyYWwtc3RyaW5nOyB9XG4gIC5zYiB7IGNvbG9yOiAkY29kZWhpbGl0ZS1saXRlcmFsLXN0cmluZy1iYWNrdGlja3M7IH1cbiAgLnNjIHsgY29sb3I6ICRjb2RlaGlsaXRlLWxpdGVyYWwtc3RyaW5nLWNoYXI7IH1cbiAgLnNkIHsgY29sb3I6ICRjb2RlaGlsaXRlLWxpdGVyYWwtc3RyaW5nLWRvYzsgfVxuICAuczIgeyBjb2xvcjogJGNvZGVoaWxpdGUtbGl0ZXJhbC1zdHJpbmctZG91YmxlOyB9XG4gIC5zZSB7IGNvbG9yOiAkY29kZWhpbGl0ZS1saXRlcmFsLXN0cmluZy1lc2NhcGU7IH1cbiAgLnNoIHsgY29sb3I6ICRjb2RlaGlsaXRlLWxpdGVyYWwtc3RyaW5nLWhlcmVkb2M7IH1cbiAgLnNpIHsgY29sb3I6ICRjb2RlaGlsaXRlLWxpdGVyYWwtc3RyaW5nLWludGVycG9sOyB9XG4gIC5zeCB7IGNvbG9yOiAkY29kZWhpbGl0ZS1saXRlcmFsLXN0cmluZy1vdGhlcjsgfVxuICAuc3IgeyBjb2xvcjogJGNvZGVoaWxpdGUtbGl0ZXJhbC1zdHJpbmctcmVnZXg7IH1cbiAgLnMxIHsgY29sb3I6ICRjb2RlaGlsaXRlLWxpdGVyYWwtc3RyaW5nLXNpbmdsZTsgfVxuICAuc3MgeyBjb2xvcjogJGNvZGVoaWxpdGUtbGl0ZXJhbC1zdHJpbmctc3ltYm9sOyB9XG5cbiAgLy8gTWlzY2VsbGFuZW91c1xuICAuZXJyIHsgY29sb3I6ICRjb2RlaGlsaXRlLWVycm9yOyB9XG4gIC53IHsgY29sb3I6ICRjb2RlaGlsaXRlLXdoaXRlc3BhY2U7IH1cblxuICAvLyBIaWdobGlnaHRlZCBsaW5lc1xuICAuaGxsIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBtYXJnaW46IDAgcHgycmVtKC0xMnB4KTtcbiAgICBwYWRkaW5nOiAwIHB4MnJlbSgxMnB4KTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudGl6ZSgkY2xyLXllbGxvdy01MDAsIDAuNSk7XG5cbiAgICAvLyBbbW9iaWxlIC1dOiBTdHJldGNoIHRvIHdob2xlIHdpZHRoXG4gICAgQGluY2x1ZGUgYnJlYWstdG8tZGV2aWNlKG1vYmlsZSkge1xuICAgICAgbWFyZ2luOiAwIHB4MnJlbSgtMTZweCk7XG4gICAgICBwYWRkaW5nOiAwIHB4MnJlbSgxNnB4KTtcbiAgICB9XG4gIH1cbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUnVsZXM6IGxheW91dFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vLyBCbG9jayB3aXRoIGxpbmUgbnVtYmVyc1xuLmNvZGVoaWxpdGV0YWJsZSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuXG4gIC8vIFNldCB0YWJsZSBlbGVtZW50cyB0byBibG9jayBsYXlvdXQsIGJlY2F1c2Ugb3RoZXJ3aXNlIHRoZSB3aG9sZSBmbGV4Ym94XG4gIC8vIGhhY2tpbmcgd29uJ3Qgd29yayBjb3JyZWN0bHlcbiAgdGJvZHksXG4gIHRkIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBwYWRkaW5nOiAwO1xuICB9XG5cbiAgLy8gV2UgbmVlZCB0byB1c2UgZmxleGJveCBsYXlvdXQsIGJlY2F1c2Ugb3RoZXJ3aXNlIGl0J3Mgbm90IHBvc3NpYmxlIHRvXG4gIC8vIG1ha2UgdGhlIGNvZGUgY29udGFpbmVyIHNjcm9sbCB3aGlsZSBrZWVwaW5nIHRoZSBsaW5lIG51bWJlcnMgc3RhdGljXG4gIHRyIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICB9XG5cbiAgLy8gVGhlIHByZSB0YWdzIGFyZSBuZXN0ZWQgaW5zaWRlIGEgdGFibGUsIHNvIHdlIG5lZWQgdG8gcmVtb3ZlIHRoZVxuICAvLyBtYXJnaW4gYmVjYXVzZSBpdCBjb2xsYXBzZXMgYmVsb3cgYWxsIHRoZSBvdmVyZmxvd3NcbiAgcHJlLFxuICAubGluZW5vZGl2IHtcbiAgICBtYXJnaW46IDA7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbiAgfVxuXG4gIC8vIEFkZCBzcGFjaW5nIHRvIGxpbmUgbnVtYmVyIGNvbnRhaW5lclxuICAubGluZW5vZGl2IHtcbiAgICBwYWRkaW5nOiBweDJyZW0oMTAuNXB4KSBweDJyZW0oMTJweCk7XG4gIH1cblxuICAvLyBEaXNhYmxlIHVzZXIgc2VsZWN0aW9uLCBzbyBjb2RlIGNhbiBiZSBlYXNpbHkgY29waWVkIHdpdGhvdXRcbiAgLy8gYWNjaWRlbnRhbGx5IGFsc28gY29weWluZyB0aGUgbGluZSBudW1iZXJzXG4gIC5saW5lbm9zIHtcbiAgICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlcik7XG4gICAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDAgcHgycmVtKDFweCkgdmFyKC0tbWQtY29kZS1iZy1jb2xvcik7XG4gICAgdXNlci1zZWxlY3Q6IG5vbmU7XG5cbiAgICAvLyBSZXNldCBzcGFjaW5nc1xuICAgIHByZSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICAgIGNvbG9yOiBpbmhlcml0O1xuICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7XG4gICAgfVxuICB9XG5cbiAgLy8gVGhlIHRhYmxlIGNlbGwgY29udGFpbmluZyB0aGUgY29kZSBjb250YWluZXIgd3JhcHBlciBhbmQgY29kZSBzaG91bGRcbiAgLy8gc3RyZXRjaCBob3Jpem9udGFsbHkgdG8gdGhlIHJlbWFpbmluZyBzcGFjZVxuICAuY29kZSB7XG4gICAgZmxleDogMTtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICB9XG59XG5cbi8vIFNjb3BlZCBpbiB0eXBlc2V0dGVkIGNvbnRlbnQgdG8gbWF0Y2ggc3BlY2lmaWNpdHkgb2YgcmVndWxhciBjb250ZW50XG4ubWQtdHlwZXNldCB7XG5cbiAgLy8gQmxvY2sgd2l0aCBsaW5lIG51bWJlcnNcbiAgPiAuY29kZWhpbGl0ZXRhYmxlIHtcbiAgICBtYXJnaW46IDFlbSAwO1xuICAgIGJvcmRlci1yYWRpdXM6IDAuMmVtO1xuICB9XG5cbiAgLy8gW21vYmlsZSAtXTogU3RyZXRjaCB0byB3aG9sZSB3aWR0aFxuICBAaW5jbHVkZSBicmVhay10by1kZXZpY2UobW9iaWxlKSB7XG5cbiAgICAvLyBGdWxsLXdpZHRoIGNvbnRhaW5lclxuICAgID4gLmNvZGVoaWxpdGUge1xuICAgICAgbWFyZ2luOiAxZW0gcHgycmVtKC0xNnB4KTtcblxuICAgICAgLy8gQWN0dWFsIGNvbnRhaW5lciB3aXRoIGNvZGUsIG92ZXJmbG93aW5nXG4gICAgICBjb2RlIHtcbiAgICAgICAgcGFkZGluZzogcHgycmVtKDEwLjVweCkgcHgycmVtKDE2cHgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEZ1bGwtd2lkdGggY29udGFpbmVyIG9uIHRvcC1sZXZlbFxuICAgID4gLmNvZGVoaWxpdGV0YWJsZSB7XG4gICAgICBtYXJnaW46IDFlbSBweDJyZW0oLTE2cHgpO1xuICAgICAgYm9yZGVyLXJhZGl1czogMDtcblxuICAgICAgLy8gSW5jcmVhc2Ugc3BhY2luZ1xuICAgICAgLmxpbmVub2RpdiB7XG4gICAgICAgIHBhZGRpbmc6IHB4MnJlbSgxMHB4KSBweDJyZW0oMTZweCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCIvLy8vXG4vLy8gQ29weXJpZ2h0IChjKSAyMDE2LTIwMjAgTWFydGluIERvbmF0aCA8bWFydGluLmRvbmF0aEBzcXVpZGZ1bmsuY29tPlxuLy8vXG4vLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksXG4vLy8gdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvblxuLy8vIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLFxuLy8vIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZVxuLy8vIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vLy9cbi8vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy8vXG4vLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT04tSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTFxuLy8vIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkdcbi8vLyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSXG4vLy8gREVBTElOR1Ncbi8vLy9cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUnVsZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gU2NvcGVkIGluIHR5cGVzZXR0ZWQgY29udGVudCB0byBtYXRjaCBzcGVjaWZpY2l0eSBvZiByZWd1bGFyIGNvbnRlbnRcbi5tZC10eXBlc2V0IHtcblxuICAvLyBBbGwgZm9vdG5vdGUgcmVmZXJlbmNlc1xuICBbaWRePVwiZm5yZWY6XCJdIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG5cbiAgICAvLyBUYXJnZXRlZCBhbmNob3JcbiAgICAmOnRhcmdldCB7XG4gICAgICBtYXJnaW4tdG9wOiAtMSAqIHB4MnJlbSg0OHB4ICsgMTJweCArIDE2cHgpO1xuICAgICAgcGFkZGluZy10b3A6IHB4MnJlbSg0OHB4ICsgMTJweCArIDE2cHgpO1xuICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgfVxuICB9XG5cbiAgLy8gQWxsIGZvb3Rub3RlIGJhY2sgcmVmZXJlbmNlc1xuICBbaWRePVwiZm46XCJdIHtcblxuICAgIC8vIEFkZCBzcGFjaW5nIHRvIGFuY2hvciBmb3Igb2Zmc2V0XG4gICAgJjo6YmVmb3JlIHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICBoZWlnaHQ6IDA7XG4gICAgICBjb250ZW50OiBcIlwiO1xuICAgIH1cblxuICAgIC8vIFRhcmdldGVkIGFuY2hvclxuICAgICY6dGFyZ2V0OjpiZWZvcmUge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICBtYXJnaW4tdG9wOiAtMSAqIHB4MnJlbSg0OHB4ICsgMTJweCArIDEwcHgpO1xuICAgICAgcGFkZGluZy10b3A6IHB4MnJlbSg0OHB4ICsgMTJweCArIDEwcHgpO1xuICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgfVxuICB9XG5cbiAgLy8gRm9vdG5vdGVzIGV4dGVuc2lvblxuICAuZm9vdG5vdGUge1xuICAgIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodCk7XG4gICAgZm9udC1zaXplOiBtcygtMSk7XG5cbiAgICAvLyBSZW1vdmUgYWRkaXRpb25hbCBzcGFjaW5nIG9uIGZvb3Rub3Rlc1xuICAgIG9sIHtcbiAgICAgIG1hcmdpbi1sZWZ0OiAwO1xuICAgIH1cblxuICAgIC8vIEZvb3Rub3RlXG4gICAgbGkge1xuICAgICAgdHJhbnNpdGlvbjogY29sb3IgMjUwbXM7XG5cbiAgICAgIC8vIERhcmtlbiBjb2xvciBmb3IgdGFyZ2V0ZWQgZm9vdG5vdGVcbiAgICAgICY6dGFyZ2V0IHtcbiAgICAgICAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3IpO1xuICAgICAgfVxuXG4gICAgICAvLyBSZW1vdmUgc3BhY2luZyBvbiBmaXJzdCBlbGVtZW50XG4gICAgICA6Zmlyc3QtY2hpbGQge1xuICAgICAgICBtYXJnaW4tdG9wOiAwO1xuICAgICAgfVxuXG4gICAgICAvLyBNYWtlIGJhY2sgcmVmZXJlbmNlcyB2aXNpYmxlIG9uIGhvdmVyXG4gICAgICAmOmhvdmVyICAuZm9vdG5vdGUtYmFja3JlZixcbiAgICAgICY6dGFyZ2V0IC5mb290bm90ZS1iYWNrcmVmIHtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApO1xuICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgfVxuXG4gICAgICAvLyBBY3RpdmUgb3IgdGFyZ2V0ZWQgYmFjayByZWZlcmVuY2VcbiAgICAgICY6aG92ZXIgIC5mb290bm90ZS1iYWNrcmVmOmhvdmVyLFxuICAgICAgJjp0YXJnZXQgLmZvb3Rub3RlLWJhY2tyZWYge1xuICAgICAgICBjb2xvcjogdmFyKC0tbWQtYWNjZW50LWZnLWNvbG9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBGb290bm90ZSByZWZlcmVuY2VcbiAgLmZvb3Rub3RlLXJlZiB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHBvaW50ZXItZXZlbnRzOiBpbml0aWFsO1xuXG4gICAgLy8gUmVuZGVyIGEgdGhpbiBsaW5lIGJlZm9yZSBmb290bm90ZVxuICAgICY6OmJlZm9yZSB7XG4gICAgICBkaXNwbGF5OiBpbmxpbmU7XG4gICAgICBtYXJnaW46IDAgMC4yZW07XG4gICAgICBib3JkZXItbGVmdDogcHgycmVtKDFweCkgc29saWQgdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlcik7XG4gICAgICBmb250LXNpemU6IDEuMjVlbTtcbiAgICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgICB2ZXJ0aWNhbC1hbGlnbjogcHgycmVtKC01cHgpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEZvb3Rub3RlIGJhY2sgcmVmZXJlbmNlXG4gIC5mb290bm90ZS1iYWNrcmVmIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKHB4MnJlbSg1cHgpKTtcbiAgICB0cmFuc2l0aW9uOlxuICAgICAgdHJhbnNmb3JtIDI1MG1zIDI1MG1zLFxuICAgICAgY29sb3IgICAgIDI1MG1zLFxuICAgICAgb3BhY2l0eSAgIDEyNW1zIDI1MG1zO1xuICAgIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodGVyKTtcbiAgICAvLyBIYWNrOiByZW1vdmUgVW5pY29kZSBhcnJvdyBmb3IgaWNvblxuICAgIGZvbnQtc2l6ZTogMDtcbiAgICBvcGFjaXR5OiAwO1xuICAgIHZlcnRpY2FsLWFsaWduOiB0ZXh0LWJvdHRvbTtcblxuICAgIC8vIEFkanVzdCBmb3IgcmlnaHQtdG8tbGVmdCBsYW5ndWFnZXNcbiAgICBbZGlyPVwicnRsXCJdICYge1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKHB4MnJlbSgtNXB4KSk7XG4gICAgfVxuXG4gICAgLy8gQmFjayByZWZlcmVuY2UgaWNvblxuICAgICY6OmJlZm9yZSB7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICB3aWR0aDogcHgycmVtKDE2cHgpO1xuICAgICAgaGVpZ2h0OiBweDJyZW0oMTZweCk7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBjdXJyZW50Q29sb3I7XG4gICAgICBtYXNrLWltYWdlOiB1cmwoXCJ7eyBrZXlib2FyZC1yZXR1cm4gfX1cIik7XG4gICAgICBjb250ZW50OiBcIlwiO1xuXG4gICAgICAvLyBBZGp1c3QgZm9yIHJpZ2h0LXRvLWxlZnQgbGFuZ3VhZ2VzXG4gICAgICBbZGlyPVwicnRsXCJdICYge1xuXG4gICAgICAgIC8vIEZsaXAgaWNvbiB2ZXJ0aWNhbGx5XG4gICAgICAgIHN2ZyB7XG4gICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZVgoLTEpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIi8vLy9cbi8vLyBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyMCBNYXJ0aW4gRG9uYXRoIDxtYXJ0aW4uZG9uYXRoQHNxdWlkZnVuay5jb20+XG4vLy9cbi8vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSxcbi8vLyB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uXG4vLy8gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsXG4vLy8gYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlXG4vLy8gU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vL1xuLy8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLy8gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vLy9cbi8vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLy8gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTi1JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMXG4vLy8gVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lOR1xuLy8vIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVJcbi8vLyBERUFMSU5HU1xuLy8vL1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBSdWxlc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vLyBTY29wZWQgaW4gdHlwZXNldHRlZCBjb250ZW50IHRvIG1hdGNoIHNwZWNpZmljaXR5IG9mIHJlZ3VsYXIgY29udGVudFxuLm1kLXR5cGVzZXQge1xuXG4gIC8vIFBlcm1hbGlua3MgZXh0ZW5zaW9uXG4gIC5oZWFkZXJsaW5rIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgbWFyZ2luLWxlZnQ6IHB4MnJlbSgxMHB4KTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCBweDJyZW0oNXB4KSk7XG4gICAgdHJhbnNpdGlvbjpcbiAgICAgIHRyYW5zZm9ybSAgMjUwbXMgMjUwbXMsXG4gICAgICBjb2xvciAgICAgIDI1MG1zLFxuICAgICAgb3BhY2l0eSAgICAxMjVtcyAyNTBtcyxcbiAgICAgIHZpc2liaWxpdHkgICAwbXMgNTAwbXM7XG4gICAgb3BhY2l0eTogMDtcbiAgICAvLyBIYWNrOiBJZiB3ZSBkb24ndCBzZXQgdmlzaWJpbGl0eSBoaWRkZW4sIHRoZSB0ZXh0IGNvbnRlbnQgb2YgdGhlIG5vZGVcbiAgICAvLyB3aWxsIGluY2x1ZGUgdGhlIGhlYWRlcmxpbmsgY2hhcmFjdGVyLCB3aGljaCBpcyB3aHkgR29vZ2xlIGluZGV4ZXMgdGhlbS5cbiAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG5cbiAgICAvLyBBZGp1c3QgZm9yIFJUTCBsYW5ndWFnZXNcbiAgICBbZGlyPVwicnRsXCJdICYge1xuICAgICAgbWFyZ2luLXJpZ2h0OiBweDJyZW0oMTBweCk7XG4gICAgICBtYXJnaW4tbGVmdDogaW5pdGlhbDtcbiAgICB9XG5cbiAgICAvLyBIaWdoZXIgc3BlY2lmaWNpdHkgZm9yIGNvbG9yIGR1ZSB0byBwYWxldHRlcyBpbnRlZ3JhdGlvblxuICAgIGh0bWwgYm9keSAmIHtcbiAgICAgIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodGVyKTtcbiAgICB9XG5cbiAgICAvLyBIaWRlIGZvciBwcmludFxuICAgIEBtZWRpYSBwcmludCB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cbiAgfVxuXG4gIC8vIE1ha2UgcGVybWFsaW5rIHZpc2libGUgb24gaG92ZXJcbiAgOmhvdmVyICAuaGVhZGVybGluayxcbiAgOnRhcmdldCAuaGVhZGVybGluayxcbiAgLmhlYWRlcmxpbms6Zm9jdXMge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIDApO1xuICAgIHRyYW5zaXRpb246XG4gICAgICB0cmFuc2Zvcm0gIDI1MG1zIDI1MG1zLFxuICAgICAgY29sb3IgICAgICAyNTBtcyxcbiAgICAgIG9wYWNpdHkgICAgMTI1bXMgMjUwbXMsXG4gICAgICB2aXNpYmlsaXR5ICAgMG1zO1xuICAgIG9wYWNpdHk6IDE7XG4gICAgdmlzaWJpbGl0eTogdmlzaWJsZTtcbiAgfVxuXG4gIC8vIEFjdGl2ZSBvciB0YXJnZXRlZCBwZXJtYWxpbmtcbiAgLmhlYWRlcmxpbms6Zm9jdXMsXG4gIC5oZWFkZXJsaW5rOmhvdmVyLFxuICA6dGFyZ2V0IC5oZWFkZXJsaW5rIHtcbiAgICBjb2xvcjogdmFyKC0tbWQtYWNjZW50LWZnLWNvbG9yKTtcbiAgfVxuXG4gIC8vIENvcnJlY3QgYW5jaG9yIG9mZnNldCBmb3IgbGluayBibHVycmluZ1xuICBAZWFjaCAkbGV2ZWwsICRkZWx0YSBpbiAoXG4gICAgaDEgaDIgaDM6IDhweCxcbiAgICBoNDogOXB4LFxuICAgIGg1IGg2OiAxMnB4LFxuICApIHtcbiAgICAlI3tudGgoJGxldmVsLCAxKX0ge1xuXG4gICAgICAvLyBVbi10YXJnZXRlZCBhbmNob3JcbiAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBtYXJnaW4tdG9wOiAtMSAqIHB4MnJlbSgkZGVsdGEpO1xuICAgICAgICBwYWRkaW5nLXRvcDogcHgycmVtKCRkZWx0YSk7XG4gICAgICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgICB9XG5cbiAgICAgIC8vIFRhcmdldGVkIGFuY2hvciAoNDhweCBmcm9tIGhlYWRlciwgMTJweCBmcm9tIHNpZGViYXIgb2Zmc2V0KVxuICAgICAgJjp0YXJnZXQ6OmJlZm9yZSB7XG4gICAgICAgIG1hcmdpbi10b3A6IC0xICogcHgycmVtKDQ4cHggKyAxMnB4ICsgJGRlbHRhKTtcbiAgICAgICAgcGFkZGluZy10b3A6IHB4MnJlbSg0OHB4ICsgMTJweCArICRkZWx0YSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRGVmaW5lIGxldmVsc1xuICAgIEBmb3IgJG4gZnJvbSAxIHRocm91Z2ggbGVuZ3RoKCRsZXZlbCkge1xuICAgICAgI3tudGgoJGxldmVsLCAkbil9W2lkXSB7XG4gICAgICAgIEBleHRlbmQgJSN7bnRoKCRsZXZlbCwgMSl9O1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiLy8vL1xuLy8vIENvcHlyaWdodCAoYykgMjAxNi0yMDIwIE1hcnRpbiBEb25hdGggPG1hcnRpbi5kb25hdGhAc3F1aWRmdW5rLmNvbT5cbi8vL1xuLy8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLFxuLy8vIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb25cbi8vLyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSxcbi8vLyBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGVcbi8vLyBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy8vXG4vLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vL1xuLy8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTExcbi8vLyBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HXG4vLy8gRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUlxuLy8vIERFQUxJTkdTXG4vLy8vXG5cbi8vIHN0eWxlbGludC1kaXNhYmxlIHNlbGVjdG9yLWNsYXNzLXBhdHRlcm5cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUnVsZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gU2NvcGVkIGluIHR5cGVzZXR0ZWQgY29udGVudCB0byBtYXRjaCBzcGVjaWZpY2l0eSBvZiByZWd1bGFyIGNvbnRlbnRcbi5tZC10eXBlc2V0IHtcblxuICAvLyBNYXRoSmF4IGludGVncmF0aW9uIC0gYWRkIHBhZGRpbmcgdG8gb21pdCB2ZXJ0aWNhbCBzY3JvbGxiYXJcbiAgLk1KWGMtZGlzcGxheSB7XG4gICAgbWFyZ2luOiAwLjc1ZW0gMDtcbiAgICBwYWRkaW5nOiAwLjc1ZW0gMDtcbiAgICBvdmVyZmxvdzogYXV0bztcbiAgICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7XG4gIH1cblxuICAvLyBTdHJldGNoIHRvcC1sZXZlbCBjb250YWluZXJzXG4gID4gcCA+IC5NSlhjLWRpc3BsYXkge1xuXG4gICAgLy8gW21vYmlsZSAtXTogU3RyZXRjaCB0byB3aG9sZSB3aWR0aFxuICAgIEBpbmNsdWRlIGJyZWFrLXRvLWRldmljZShtb2JpbGUpIHtcbiAgICAgIG1hcmdpbjogMC43NWVtIHB4MnJlbSgtMTZweCk7XG4gICAgICBwYWRkaW5nOiAwLjI1ZW0gcHgycmVtKDE2cHgpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFJlbW92ZSBvdXRsaW5lIG9uIHRhYiBpbmRleFxuICAuTWF0aEpheF9DSFRNTCB7XG4gICAgb3V0bGluZTogMDtcbiAgfVxufVxuIiwiLy8vL1xuLy8vIENvcHlyaWdodCAoYykgMjAxNi0yMDIwIE1hcnRpbiBEb25hdGggPG1hcnRpbi5kb25hdGhAc3F1aWRmdW5rLmNvbT5cbi8vL1xuLy8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLFxuLy8vIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb25cbi8vLyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSxcbi8vLyBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGVcbi8vLyBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy8vXG4vLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vL1xuLy8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTExcbi8vLyBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HXG4vLy8gRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUlxuLy8vIERFQUxJTkdTXG4vLy8vXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJ1bGVzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIFNjb3BlZCBpbiB0eXBlc2V0dGVkIGNvbnRlbnQgdG8gbWF0Y2ggc3BlY2lmaWNpdHkgb2YgcmVndWxhciBjb250ZW50XG4ubWQtdHlwZXNldCB7XG5cbiAgLy8gRGVsZXRpb25zLCBhZGRpdGlvbnMgYW5kIGNvbW1lbnRzXG4gIGRlbC5jcml0aWMsXG4gIGlucy5jcml0aWMsXG4gIC5jcml0aWMuY29tbWVudCB7XG4gICAgbWFyZ2luOiAwIDAuMjVlbTtcbiAgICBwYWRkaW5nOiAwLjA2MjVlbSAwO1xuICAgIGJvcmRlci1yYWRpdXM6IHB4MnJlbSgycHgpO1xuICAgIGJveC1kZWNvcmF0aW9uLWJyZWFrOiBjbG9uZTtcbiAgfVxuXG4gIC8vIERlbGV0aW9uXG4gIGRlbC5jcml0aWMge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRjb2RlaGlsaXRlLWRpZmYtZGVsZXRlZDtcbiAgICBib3gtc2hhZG93OlxuICAgICAgKzAuMjVlbSAwIDAgJGNvZGVoaWxpdGUtZGlmZi1kZWxldGVkLFxuICAgICAgLTAuMjVlbSAwIDAgJGNvZGVoaWxpdGUtZGlmZi1kZWxldGVkO1xuICB9XG5cbiAgLy8gQWRkaXRpb25cbiAgaW5zLmNyaXRpYyB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGNvZGVoaWxpdGUtZGlmZi1pbnNlcnRlZDtcbiAgICBib3gtc2hhZG93OlxuICAgICAgKzAuMjVlbSAwIDAgJGNvZGVoaWxpdGUtZGlmZi1pbnNlcnRlZCxcbiAgICAgIC0wLjI1ZW0gMCAwICRjb2RlaGlsaXRlLWRpZmYtaW5zZXJ0ZWQ7XG4gIH1cblxuICAvLyBDb21tZW50XG4gIC5jcml0aWMuY29tbWVudCB7XG4gICAgY29sb3I6ICRjb2RlaGlsaXRlLWNvbW1lbnQ7XG5cbiAgICAvLyBDb21tZW50IG9wZW5pbmcgbWFya1xuICAgICY6OmJlZm9yZSB7XG4gICAgICBjb250ZW50OiBcIi8qIFwiO1xuICAgIH1cblxuICAgIC8vIENvbW1lbnQgY2xvc2luZyBtYXJrXG4gICAgJjo6YWZ0ZXIge1xuICAgICAgY29udGVudDogXCIgKi9cIjtcbiAgICB9XG4gIH1cblxuICAvLyBCbG9ja1xuICAuY3JpdGljLmJsb2NrIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBtYXJnaW46IDFlbSAwO1xuICAgIHBhZGRpbmctcmlnaHQ6IHB4MnJlbSgxNnB4KTtcbiAgICBwYWRkaW5nLWxlZnQ6IHB4MnJlbSgxNnB4KTtcbiAgICBib3gtc2hhZG93OiBub25lO1xuXG4gICAgLy8gRGVjcmVhc2Ugc3BhY2luZyBvbiBmaXJzdCBlbGVtZW50XG4gICAgOmZpcnN0LWNoaWxkIHtcbiAgICAgIG1hcmdpbi10b3A6IDAuNWVtO1xuICAgIH1cblxuICAgIC8vIERlY3JlYXNlIHNwYWNpbmcgb24gbGFzdCBlbGVtZW50XG4gICAgOmxhc3QtY2hpbGQge1xuICAgICAgbWFyZ2luLWJvdHRvbTogMC41ZW07XG4gICAgfVxuICB9XG59XG4iLCIvLy8vXG4vLy8gQ29weXJpZ2h0IChjKSAyMDE2LTIwMjAgTWFydGluIERvbmF0aCA8bWFydGluLmRvbmF0aEBzcXVpZGZ1bmsuY29tPlxuLy8vXG4vLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksXG4vLy8gdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvblxuLy8vIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLFxuLy8vIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZVxuLy8vIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vLy9cbi8vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy8vXG4vLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT04tSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTFxuLy8vIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkdcbi8vLyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSXG4vLy8gREVBTElOR1Ncbi8vLy9cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUnVsZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gU2NvcGVkIGluIHR5cGVzZXR0ZWQgY29udGVudCB0byBtYXRjaCBzcGVjaWZpY2l0eSBvZiByZWd1bGFyIGNvbnRlbnRcbi5tZC10eXBlc2V0IHtcblxuICAvLyBEZXRhaWxzIGV4dGVuc2lvblxuICBkZXRhaWxzIHtcbiAgICBAZXh0ZW5kIC5hZG1vbml0aW9uO1xuXG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgcGFkZGluZy10b3A6IDA7XG5cbiAgICAvLyBSb3RhdGUgdGl0bGUgaWNvblxuICAgICZbb3Blbl0gPiBzdW1tYXJ5OjphZnRlciB7XG4gICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpO1xuICAgIH1cblxuICAgIC8vIFJlbW92ZSBib3R0b20gc3BhY2luZ1xuICAgICY6bm90KFtvcGVuXSkge1xuICAgICAgcGFkZGluZy1ib3R0b206IDA7XG5cbiAgICAgIC8vIFJlbW92ZSBib3R0b20gYm9yZGVyIGlmIGJsb2NrIGlzIGNsb3NlZFxuICAgICAgPiBzdW1tYXJ5IHtcbiAgICAgICAgYm9yZGVyLWJvdHRvbTogbm9uZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBJbmNyZWFzZSBzcGFjaW5nIHRvIHRoZSByaWdodCAtIHNjb3BlZCBoZXJlIGZvciBoaWdoZXIgc3BlY2lmaWNpdHlcbiAgICBzdW1tYXJ5IHtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIHBhZGRpbmctcmlnaHQ6IHB4MnJlbSg0MHB4KTtcblxuICAgICAgLy8gQWRqdXN0IGZvciByaWdodC10by1sZWZ0IGxhbmd1YWdlc1xuICAgICAgW2Rpcj1cInJ0bFwiXSAmIHtcbiAgICAgICAgcGFkZGluZy1sZWZ0OiBweDJyZW0oNDBweCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gVGl0bGVcbiAgc3VtbWFyeSB7XG4gICAgQGV4dGVuZCAuYWRtb25pdGlvbi10aXRsZTtcblxuICAgIC8vIEhhY2s6IHNldCB0byBibG9jaywgc28gRmlyZWZveCBkb2Vzbid0IHJlbmRlciBtYXJrZXJcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBvdXRsaW5lOiBub25lO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcblxuICAgIC8vIFJlbW92ZSBkZWZhdWx0IGRldGFpbHMgbWFya2VyXG4gICAgJjo6LXdlYmtpdC1kZXRhaWxzLW1hcmtlciB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cblxuICAgIC8vIEljb25cbiAgICAmOjphZnRlciB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICByaWdodDogcHgycmVtKDEycHgpO1xuICAgICAgd2lkdGg6IHB4MnJlbSgyMHB4KTtcbiAgICAgIGhlaWdodDogcHgycmVtKDIwcHgpO1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlcik7XG4gICAgICBtYXNrLWltYWdlOiB1cmwoXCJ7eyBjaGV2cm9uLWRvd24gfX1cIik7XG4gICAgICBjb250ZW50OiBcIlwiO1xuXG4gICAgICAvLyBBZGp1c3QgZm9yIHJpZ2h0LXRvLWxlZnQgbGFuZ3VhZ2VzXG4gICAgICBbZGlyPVwicnRsXCJdICYge1xuICAgICAgICByaWdodDogaW5pdGlhbDtcbiAgICAgICAgbGVmdDogcHgycmVtKDEycHgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiLy8vL1xuLy8vIENvcHlyaWdodCAoYykgMjAxNi0yMDIwIE1hcnRpbiBEb25hdGggPG1hcnRpbi5kb25hdGhAc3F1aWRmdW5rLmNvbT5cbi8vL1xuLy8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLFxuLy8vIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb25cbi8vLyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSxcbi8vLyBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGVcbi8vLyBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy8vXG4vLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vL1xuLy8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTExcbi8vLyBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HXG4vLy8gRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUlxuLy8vIERFQUxJTkdTXG4vLy8vXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJ1bGVzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIFNjb3BlZCBpbiB0eXBlc2V0dGVkIGNvbnRlbnQgdG8gbWF0Y2ggc3BlY2lmaWNpdHkgb2YgcmVndWxhciBjb250ZW50XG4ubWQtdHlwZXNldCB7XG5cbiAgLy8gQ29ycmVjdCBhbGlnbm1lbnQgb2YgZW1vamlzXG4gIC5lbW9qaW9uZSxcbiAgLnR3ZW1vamksXG4gIC5nZW1vamkge1xuICAgIHdpZHRoOiBweDJyZW0oMjBweCk7XG4gICAgdmVydGljYWwtYWxpZ246IHRleHQtdG9wO1xuICB9XG59XG4iLCIvLy8vXG4vLy8gQ29weXJpZ2h0IChjKSAyMDE2LTIwMjAgTWFydGluIERvbmF0aCA8bWFydGluLmRvbmF0aEBzcXVpZGZ1bmsuY29tPlxuLy8vXG4vLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksXG4vLy8gdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvblxuLy8vIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLFxuLy8vIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZVxuLy8vIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vLy9cbi8vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy8vXG4vLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT04tSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTFxuLy8vIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkdcbi8vLyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSXG4vLy8gREVBTElOR1Ncbi8vLy9cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUnVsZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gV2hlbiBweW1kb3dueC5zdXBlcmZlbmNlcyBpcyBlbmFibGVkIGJ1dCBjb2RlaGlsaXRlIGlzIGRpc2FibGVkLFxuLy8gcHltZG93bnguaGlnaGxpZ2h0IHdpbGwgYmUgdXNlZC4gV2hlbiB0aGlzIGhhcHBlbnMsIHRoZSBvdXRlciBjb250YWluZXJcbi8vIGFuZCB0YWJsZXMgZ2V0IHRoaXMgY2xhc3MgbmFtZXMgYnkgZGVmYXVsdFxuLmhpZ2hsaWdodCB7XG4gIEBleHRlbmQgLmNvZGVoaWxpdGU7XG5cbiAgLy8gSW5saW5lIGxpbmUgbnVtYmVyc1xuICBbZGF0YS1saW5lbm9zXSB7XG4gICAgJjo6YmVmb3JlIHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIHBvc2l0aW9uOiBzdGlja3k7XG4gICAgICBsZWZ0OiBweDJyZW0oLTEycHgpO1xuICAgICAgbWFyZ2luLXJpZ2h0OiBweDJyZW0oMTJweCk7XG4gICAgICBtYXJnaW4tbGVmdDogcHgycmVtKC0xMnB4KTtcbiAgICAgIHBhZGRpbmctbGVmdDogcHgycmVtKDEycHgpO1xuICAgICAgYm9yZGVyLXJpZ2h0OiBweDJyZW0oMXB4KSBzb2xpZCB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodGVzdCk7XG4gICAgICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlcik7XG4gICAgICBjb250ZW50OiBhdHRyKGRhdGEtbGluZW5vcyk7XG4gICAgICB1c2VyLXNlbGVjdDogbm9uZTtcblxuICAgICAgLy8gW21vYmlsZSAtXTogU3RyZXRjaCB0byB3aG9sZSB3aWR0aFxuICAgICAgQGluY2x1ZGUgYnJlYWstdG8tZGV2aWNlKG1vYmlsZSkge1xuICAgICAgICBsZWZ0OiBweDJyZW0oLTMycHgpO1xuICAgICAgICBtYXJnaW4tbGVmdDogcHgycmVtKC0zMnB4KTtcbiAgICAgICAgcGFkZGluZy1sZWZ0OiBweDJyZW0oMzJweCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vIFNhbWUgYXMgYWJvdmUsIGJ1dCBmb3IgY29kZSBibG9ja3Mgd2l0aCBsaW5lIG51bWJlcnMgZW5hYmxlZFxuLmhpZ2hsaWdodHRhYmxlIHtcbiAgQGV4dGVuZCAuY29kZWhpbGl0ZXRhYmxlO1xufVxuIiwiLy8vL1xuLy8vIENvcHlyaWdodCAoYykgMjAxNi0yMDIwIE1hcnRpbiBEb25hdGggPG1hcnRpbi5kb25hdGhAc3F1aWRmdW5rLmNvbT5cbi8vL1xuLy8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLFxuLy8vIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb25cbi8vLyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSxcbi8vLyBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGVcbi8vLyBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy8vXG4vLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vL1xuLy8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTExcbi8vLyBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HXG4vLy8gRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUlxuLy8vIERFQUxJTkdTXG4vLy8vXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJ1bGVzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIFNjb3BlZCBpbiB0eXBlc2V0dGVkIGNvbnRlbnQgdG8gbWF0Y2ggc3BlY2lmaWNpdHkgb2YgcmVndWxhciBjb250ZW50XG4ubWQtdHlwZXNldCB7XG5cbiAgLy8gUXVhbGlmaWVkIGNsYXNzIHNlbGVjdG9yIHRvIGRpc3Rpbmd1aXNoIGlubGluZSBjb2RlIGZyb20gY29kZSBibG9ja3NcbiAgY29kZS5jb2RlaGlsaXRlIHtcbiAgICAkY29ycmVjdDogMSAvIDAuODU7XG5cbiAgICBtYXJnaW46IDAgMC4yNWVtICogJGNvcnJlY3Q7XG4gICAgcGFkZGluZzogMC4wNjI1ZW0gKiAkY29ycmVjdCAwO1xuICB9XG59XG4iLCIvLy8vXG4vLy8gQ29weXJpZ2h0IChjKSAyMDE2LTIwMjAgTWFydGluIERvbmF0aCA8bWFydGluLmRvbmF0aEBzcXVpZGZ1bmsuY29tPlxuLy8vXG4vLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksXG4vLy8gdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvblxuLy8vIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLFxuLy8vIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZVxuLy8vIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vLy9cbi8vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy8vXG4vLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT04tSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTFxuLy8vIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkdcbi8vLyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSXG4vLy8gREVBTElOR1Ncbi8vLy9cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUnVsZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gU2NvcGVkIGluIHR5cGVzZXR0ZWQgY29udGVudCB0byBtYXRjaCBzcGVjaWZpY2l0eSBvZiByZWd1bGFyIGNvbnRlbnRcbi5tZC10eXBlc2V0IHtcblxuICAvLyBUYWJiZWQgY29kZSBibG9jayBjb250ZW50XG4gIC50YWJiZWQtY29udGVudCB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgICBvcmRlcjogOTk7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtY29kZS1iZy1jb2xvcik7XG5cbiAgICAvLyBBY3R1YWwgY29udGVudFxuICAgIHByZSB7XG4gICAgICBtYXJnaW46IDA7XG4gICAgICBib3JkZXItcmFkaXVzOiAwXG4gICAgfVxuICB9XG5cbiAgLy8gVGFiYmVkIGNvZGUgYmxvY2sgY29udGFpbmVyXG4gIC50YWJiZWQtc2V0IHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgbWFyZ2luOiAxZW0gMDtcbiAgICBib3JkZXI6IHB4MnJlbSgxcHgpIHNvbGlkIHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXN0KTtcbiAgICBib3JkZXItcmFkaXVzOiBweDJyZW0oMnB4KTtcblxuICAgIC8vIEhpZGUgcmFkaW8gYnV0dG9uc1xuICAgID4gaW5wdXQge1xuICAgICAgZGlzcGxheTogbm9uZTtcblxuICAgICAgLy8gQWN0aXZlIHRhYiBsYWJlbFxuICAgICAgJjpjaGVja2VkICsgbGFiZWwge1xuICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLW1kLWFjY2VudC1mZy1jb2xvcik7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1tZC1hY2NlbnQtZmctY29sb3IpO1xuXG4gICAgICAgIC8vIFNob3cgY29kZSB0YWIgY29udGVudFxuICAgICAgICAmICsgLnRhYmJlZC1jb250ZW50IHtcbiAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICBwYWRkaW5nOiAwIHB4MnJlbSgxMnB4KTtcblxuICAgICAgICAgIC8vIEFkanVzdCBzcGFjaW5nIG9uIGxhc3QgZWxlbWVudFxuICAgICAgICAgID4gOmxhc3QtY2hpbGQge1xuICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogcHgycmVtKDEycHgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIEVtdWxhdGUgb3JpZ2luYWwgcHltZG93bnguc3VwZXJmZW5jZXMgYmVoYXZpb3IgYW5kIHN0cmV0Y2ggdG8gZnVsbFxuICAgICAgICAgIC8vIHdpZHRoIGFuZCBoZWlnaHQgd2hlbiBhIGNvZGUgYmxvY2sgaXMgdGhlIG9ubHkgY2hpbGQgb2YgYSB0YWJcbiAgICAgICAgICA+IHtcbiAgICAgICAgICAgIHByZSxcbiAgICAgICAgICAgIC5oaWdobGlnaHQsXG4gICAgICAgICAgICAuaGlnaGxpZ2h0dGFibGUsXG4gICAgICAgICAgICAuY29kZWhpbGl0ZSxcbiAgICAgICAgICAgIC5jb2RlaGlsaXRldGFibGUge1xuICAgICAgICAgICAgICAmOm9ubHktY2hpbGQge1xuICAgICAgICAgICAgICAgIG1hcmdpbjogMCBweDJyZW0oLTEycHgpO1xuXG4gICAgICAgICAgICAgICAgLy8gUmVtb3ZlIGRvdWJsZSBiYWNrZ3JvdW5kXG4gICAgICAgICAgICAgICAgcHJlIHtcbiAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRhYiBsYWJlbFxuICAgID4gbGFiZWwge1xuICAgICAgd2lkdGg6IGF1dG87XG4gICAgICBwYWRkaW5nOiBweDJyZW0oMTJweCk7XG4gICAgICBwYWRkaW5nLWJvdHRvbTogcHgycmVtKDEwcHgpO1xuICAgICAgdHJhbnNpdGlvbjpcbiAgICAgICAgY29sb3IgMTI1bXMsXG4gICAgICAgIGJvcmRlciAyNTBtcztcbiAgICAgIGJvcmRlci1ib3R0b206IHB4MnJlbSgycHgpIHNvbGlkIHRyYW5zcGFyZW50O1xuICAgICAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0KTtcbiAgICAgIGZvbnQtc2l6ZTogbXMoLTEpO1xuICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcblxuICAgICAgLy8gSG92ZXJlZCB0YWIgbGFiZWxcbiAgICAgIGh0bWwgJjpob3ZlciB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1tZC1hY2NlbnQtZmctY29sb3IpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEZ1bGwtd2lkdGggY29udGFpbmVyIG9uIHRvcC1sZXZlbFxuICA+IC50YWJiZWQtc2V0IHtcblxuICAgIC8vIFttb2JpbGUgLV06IFN0cmV0Y2ggdG8gd2hvbGUgd2lkdGhcbiAgICBAaW5jbHVkZSBicmVhay10by1kZXZpY2UobW9iaWxlKSB7XG4gICAgICBtYXJnaW46IDFlbSBweDJyZW0oLTE2cHgpO1xuICAgICAgYm9yZGVyOiAwO1xuICAgICAgYm9yZGVyLXRvcDogcHgycmVtKDFweCkgc29saWQgdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlc3QpO1xuICAgICAgYm9yZGVyLXJhZGl1czogMDtcblxuICAgICAgLy8gQWN0dWFsIGNvbnRhaW5lciB3aXRoIGNvZGUsIG92ZXJmbG93aW5nXG4gICAgICBjb2RlIHtcbiAgICAgICAgcGFkZGluZzogcHgycmVtKDEwLjVweCkgcHgycmVtKDE2cHgpO1xuICAgICAgfVxuXG4gICAgICAvLyBGaXJzdCB0YWIgbGFiZWxcbiAgICAgIGlucHV0OmZpcnN0LWNoaWxkICsgbGFiZWwge1xuICAgICAgICBtYXJnaW4tbGVmdDogcHgycmVtKDRweCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCIvLy8vXG4vLy8gQ29weXJpZ2h0IChjKSAyMDE2LTIwMjAgTWFydGluIERvbmF0aCA8bWFydGluLmRvbmF0aEBzcXVpZGZ1bmsuY29tPlxuLy8vXG4vLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksXG4vLy8gdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvblxuLy8vIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLFxuLy8vIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZVxuLy8vIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vLy9cbi8vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy8vXG4vLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT04tSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTFxuLy8vIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkdcbi8vLyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSXG4vLy8gREVBTElOR1Ncbi8vLy9cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUnVsZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gU2NvcGVkIGluIHR5cGVzZXR0ZWQgY29udGVudCB0byBtYXRjaCBzcGVjaWZpY2l0eSBvZiByZWd1bGFyIGNvbnRlbnRcbi5tZC10eXBlc2V0IHtcblxuICAvLyBSZW1vdmUgbGlzdCBpY29uIG9uIHRhc2sgaXRlbXNcbiAgLnRhc2stbGlzdC1pdGVtIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xuXG4gICAgLy8gTWFrZSBjaGVja2JveCBpdGVtcyBhbGlnbiB3aXRoIG5vcm1hbCBsaXN0IGl0ZW1zLCBidXQgcG9zaXRpb25cbiAgICAvLyBldmVyeXRoaW5nIGluIGVtcyBmb3IgY29ycmVjdCBsYXlvdXQgYXQgc21hbGxlciBmb250IHNpemVzXG4gICAgW3R5cGU9XCJjaGVja2JveFwiXSB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6IDAuNDVlbTtcbiAgICAgIGxlZnQ6IC0yZW07XG5cbiAgICAgIC8vIEFkanVzdCBmb3IgcmlnaHQtdG8tbGVmdCBsYW5ndWFnZXNcbiAgICAgIFtkaXI9XCJydGxcIl0gJiB7XG4gICAgICAgIHJpZ2h0OiAtMmVtO1xuICAgICAgICBsZWZ0OiBpbml0aWFsO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFdyYXBwZXIgZm9yIGxpc3QgY29udHJvbHMsIGluIGNhc2UgY3VzdG9tIGNoZWNrYm94ZXMgYXJlIGVuYWJsZWRcbiAgLnRhc2stbGlzdC1jb250cm9sIHtcblxuICAgIC8vIENoZWNrYm94IGljb24gaW4gdW5jaGVja2VkIHN0YXRlXG4gICAgLnRhc2stbGlzdC1pbmRpY2F0b3I6OmJlZm9yZSB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6IDAuMTVlbTtcbiAgICAgIGxlZnQ6IHB4MmVtKC0yNHB4KTtcbiAgICAgIHdpZHRoOiBweDJlbSgyMHB4KTtcbiAgICAgIGhlaWdodDogcHgyZW0oMjBweCk7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodGVzdCk7XG4gICAgICBtYXNrLWltYWdlOiB1cmwoXCJ7eyBjaGVja2JveC1ibGFuay1jaXJjbGUgfX1cIik7XG4gICAgICBjb250ZW50OiBcIlwiO1xuXG4gICAgICAvLyBBZGp1c3QgZm9yIHJpZ2h0LXRvLWxlZnQgbGFuZ3VhZ2VzXG4gICAgICBbZGlyPVwicnRsXCJdICYge1xuICAgICAgICByaWdodDogcHgyZW0oLTI0cHgpO1xuICAgICAgICBsZWZ0OiBpbml0aWFsO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENoZWNrYm94IGljb24gaW4gY2hlY2tlZCBzdGF0ZVxuICAgIFt0eXBlPVwiY2hlY2tib3hcIl06Y2hlY2tlZCArIC50YXNrLWxpc3QtaW5kaWNhdG9yOjpiZWZvcmUge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGNsci1ncmVlbi1hNDAwO1xuICAgICAgbWFzay1pbWFnZTogdXJsKFwie3sgY2hlY2stY2lyY2xlIH19XCIpO1xuICAgIH1cblxuICAgIC8vIEhpZGUgb3JpZ2luYWwgY2hlY2tib3ggYmVoaW5kIGljb25cbiAgICBbdHlwZT1cImNoZWNrYm94XCJdIHtcbiAgICAgIG9wYWNpdHk6IDA7XG4gICAgICB6LWluZGV4OiAtMTtcbiAgICB9XG4gIH1cbn1cbiIsIi8vLy9cbi8vLyBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyMCBNYXJ0aW4gRG9uYXRoIDxtYXJ0aW4uZG9uYXRoQHNxdWlkZnVuay5jb20+XG4vLy9cbi8vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSxcbi8vLyB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uXG4vLy8gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsXG4vLy8gYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlXG4vLy8gU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vL1xuLy8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLy8gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vLy9cbi8vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLy8gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTi1JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMXG4vLy8gVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lOR1xuLy8vIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVJcbi8vLyBERUFMSU5HU1xuLy8vL1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBWYXJpYWJsZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8vXG4vLy8gRGV2aWNlLXNwZWNpZmljIGJyZWFrcG9pbnRzXG4vLy9cbi8vLyBAZXhhbXBsZVxuLy8vICAgJGJyZWFrLWRldmljZXM6IChcbi8vLyAgICAgbW9iaWxlOiAoXG4vLy8gICAgICAgcG9ydHJhaXQ6ICAyMjBweCAgNDc5cHgsXG4vLy8gICAgICAgbGFuZHNjYXBlOiA0ODBweCAgNzE5cHhcbi8vLyAgICAgKSxcbi8vLyAgICAgdGFibGV0OiAoXG4vLy8gICAgICAgcG9ydHJhaXQ6ICA3MjBweCAgOTU5cHgsXG4vLy8gICAgICAgbGFuZHNjYXBlOiA5NjBweCAgMTIxOXB4XG4vLy8gICAgICksXG4vLy8gICAgIHNjcmVlbjogKFxuLy8vICAgICAgIHNtYWxsOiAgICAgMTIyMHB4IDE1OTlweCxcbi8vLyAgICAgICBtZWRpdW06ICAgIDE2MDBweCAxOTk5cHgsXG4vLy8gICAgICAgbGFyZ2U6ICAgICAyMDAwcHhcbi8vLyAgICAgKVxuLy8vICAgKTtcbi8vL1xuJGJyZWFrLWRldmljZXM6ICgpICFkZWZhdWx0O1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBIZWxwZXJzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vL1xuLy8vIENob29zZSBtaW5pbXVtIGFuZCBtYXhpbXVtIGRldmljZSB3aWR0aHNcbi8vL1xuQGZ1bmN0aW9uIGJyZWFrLXNlbGVjdC1taW4tbWF4KCRkZXZpY2VzKSB7XG4gICRtaW46IDEwMDAwMDA7XG4gICRtYXg6IDA7XG4gIEBlYWNoICRrZXksICR2YWx1ZSBpbiAkZGV2aWNlcyB7XG4gICAgQHdoaWxlIHR5cGUtb2YoJHZhbHVlKSA9PSBtYXAge1xuICAgICAgJHZhbHVlOiBicmVhay1zZWxlY3QtbWluLW1heCgkdmFsdWUpO1xuICAgIH1cbiAgICBAaWYgdHlwZS1vZigkdmFsdWUpID09IGxpc3Qge1xuICAgICAgQGVhY2ggJG51bWJlciBpbiAkdmFsdWUge1xuICAgICAgICBAaWYgdHlwZS1vZigkbnVtYmVyKSA9PSBudW1iZXIge1xuICAgICAgICAgICRtaW46IG1pbigkbnVtYmVyLCAkbWluKTtcbiAgICAgICAgICBAaWYgJG1heCAhPSBudWxsIHtcbiAgICAgICAgICAgICRtYXg6IG1heCgkbnVtYmVyLCAkbWF4KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgIEBlcnJvciBcIkludmFsaWQgbnVtYmVyOiAjeyRudW1iZXJ9XCI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IEBlbHNlIGlmIHR5cGUtb2YoJHZhbHVlKSA9PSBudW1iZXIge1xuICAgICAgJG1pbjogbWluKCR2YWx1ZSwgJG1pbik7XG4gICAgICAkbWF4OiBudWxsO1xuICAgIH0gQGVsc2Uge1xuICAgICAgQGVycm9yIFwiSW52YWxpZCB2YWx1ZTogI3skdmFsdWV9XCI7XG4gICAgfVxuICB9XG4gIEByZXR1cm4gJG1pbiwgJG1heDtcbn1cblxuLy8vXG4vLy8gU2VsZWN0IG1pbmltdW0gYW5kIG1heGltdW0gd2lkdGhzIGZvciBhIGRldmljZSBicmVha3BvaW50XG4vLy9cbkBmdW5jdGlvbiBicmVhay1zZWxlY3QtZGV2aWNlKCRkZXZpY2UpIHtcbiAgJGN1cnJlbnQ6ICRicmVhay1kZXZpY2VzO1xuICBAZm9yICRuIGZyb20gMSB0aHJvdWdoIGxlbmd0aCgkZGV2aWNlKSB7XG4gICAgQGlmIHR5cGUtb2YoJGN1cnJlbnQpID09IG1hcCB7XG4gICAgICAkY3VycmVudDogbWFwLWdldCgkY3VycmVudCwgbnRoKCRkZXZpY2UsICRuKSk7XG4gICAgfSBAZWxzZSB7XG4gICAgICBAZXJyb3IgXCJJbnZhbGlkIGRldmljZSBtYXA6ICN7JGRldmljZXN9XCI7XG4gICAgfVxuICB9XG4gIEBpZiB0eXBlLW9mKCRjdXJyZW50KSA9PSBsaXN0IG9yIHR5cGUtb2YoJGN1cnJlbnQpID09IG51bWJlciB7XG4gICAgJGN1cnJlbnQ6IChkZWZhdWx0OiAkY3VycmVudCk7XG4gIH1cbiAgQHJldHVybiBicmVhay1zZWxlY3QtbWluLW1heCgkY3VycmVudCk7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIE1peGluc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vLy9cbi8vLyBBIG1pbmltdW0tbWF4aW11bSBtZWRpYSBxdWVyeSBicmVha3BvaW50XG4vLy9cbkBtaXhpbiBicmVhay1hdCgkYnJlYWtwb2ludCkge1xuICBAaWYgdHlwZS1vZigkYnJlYWtwb2ludCkgPT0gbnVtYmVyIHtcbiAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAkYnJlYWtwb2ludCkge1xuICAgICAgQGNvbnRlbnQ7XG4gICAgfVxuICB9IEBlbHNlIGlmIHR5cGUtb2YoJGJyZWFrcG9pbnQpID09IGxpc3Qge1xuICAgICRtaW46IG50aCgkYnJlYWtwb2ludCwgMSk7XG4gICAgJG1heDogbnRoKCRicmVha3BvaW50LCAyKTtcbiAgICBAaWYgdHlwZS1vZigkbWluKSA9PSBudW1iZXIgYW5kIHR5cGUtb2YoJG1heCkgPT0gbnVtYmVyIHtcbiAgICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6ICRtaW4pIGFuZCAobWF4LXdpZHRoOiAkbWF4KSB7XG4gICAgICAgIEBjb250ZW50O1xuICAgICAgfVxuICAgIH0gQGVsc2Uge1xuICAgICAgQGVycm9yIFwiSW52YWxpZCBicmVha3BvaW50OiAjeyRicmVha3BvaW50fVwiO1xuICAgIH1cbiAgfSBAZWxzZSB7XG4gICAgQGVycm9yIFwiSW52YWxpZCBicmVha3BvaW50OiAjeyRicmVha3BvaW50fVwiO1xuICB9XG59XG5cbi8vL1xuLy8vIEFuIG9yaWVudGF0aW9uIG1lZGlhIHF1ZXJ5IGJyZWFrcG9pbnRcbi8vL1xuQG1peGluIGJyZWFrLWF0LW9yaWVudGF0aW9uKCRicmVha3BvaW50KSB7XG4gIEBpZiB0eXBlLW9mKCRicmVha3BvaW50KSA9PSBzdHJpbmcge1xuICAgIEBtZWRpYSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogJGJyZWFrcG9pbnQpIHtcbiAgICAgIEBjb250ZW50O1xuICAgIH1cbiAgfSBAZWxzZSB7XG4gICAgQGVycm9yIFwiSW52YWxpZCBicmVha3BvaW50OiAjeyRicmVha3BvaW50fVwiO1xuICB9XG59XG5cbi8vL1xuLy8vIEEgbWF4aW11bS1hc3BlY3QtcmF0aW8gbWVkaWEgcXVlcnkgYnJlYWtwb2ludFxuLy8vXG5AbWl4aW4gYnJlYWstYXQtcmF0aW8oJGJyZWFrcG9pbnQpIHtcbiAgQGlmIHR5cGUtb2YoJGJyZWFrcG9pbnQpID09IG51bWJlciB7XG4gICAgQG1lZGlhIHNjcmVlbiBhbmQgKG1heC1hc3BlY3QtcmF0aW86ICRicmVha3BvaW50KSB7XG4gICAgICBAY29udGVudDtcbiAgICB9XG4gIH0gQGVsc2Uge1xuICAgIEBlcnJvciBcIkludmFsaWQgYnJlYWtwb2ludDogI3skYnJlYWtwb2ludH1cIjtcbiAgfVxufVxuXG4vLy9cbi8vLyBBIG1pbmltdW0tbWF4aW11bSBtZWRpYSBxdWVyeSBkZXZpY2UgYnJlYWtwb2ludFxuLy8vXG5AbWl4aW4gYnJlYWstYXQtZGV2aWNlKCRkZXZpY2UpIHtcbiAgQGlmIHR5cGUtb2YoJGRldmljZSkgPT0gc3RyaW5nIHtcbiAgICAkZGV2aWNlOiAkZGV2aWNlLDtcbiAgfVxuICBAaWYgdHlwZS1vZigkZGV2aWNlKSA9PSBsaXN0IHtcbiAgICAkYnJlYWtwb2ludDogYnJlYWstc2VsZWN0LWRldmljZSgkZGV2aWNlKTtcbiAgICBAaWYgbnRoKCRicmVha3BvaW50LCAyKSAhPSBudWxsIHtcbiAgICAgICRtaW46IG50aCgkYnJlYWtwb2ludCwgMSk7XG4gICAgICAkbWF4OiBudGgoJGJyZWFrcG9pbnQsIDIpO1xuICAgICAgQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogJG1pbikgYW5kIChtYXgtd2lkdGg6ICRtYXgpIHtcbiAgICAgICAgQGNvbnRlbnQ7XG4gICAgICB9XG4gICAgfSBAZWxzZSB7XG4gICAgICBAZXJyb3IgXCJJbnZhbGlkIGRldmljZTogI3skZGV2aWNlfVwiO1xuICAgIH1cbiAgfSBAZWxzZSB7XG4gICAgQGVycm9yIFwiSW52YWxpZCBkZXZpY2U6ICN7JGRldmljZX1cIjtcbiAgfVxufVxuXG4vLy9cbi8vLyBBIG1pbmltdW0gbWVkaWEgcXVlcnkgZGV2aWNlIGJyZWFrcG9pbnRcbi8vL1xuQG1peGluIGJyZWFrLWZyb20tZGV2aWNlKCRkZXZpY2UpIHtcbiAgQGlmIHR5cGUtb2YoJGRldmljZSkgPT0gc3RyaW5nIHtcbiAgICAkZGV2aWNlOiAkZGV2aWNlLDtcbiAgfVxuICBAaWYgdHlwZS1vZigkZGV2aWNlKSA9PSBsaXN0IHtcbiAgICAkYnJlYWtwb2ludDogYnJlYWstc2VsZWN0LWRldmljZSgkZGV2aWNlKTtcbiAgICAkbWluOiBudGgoJGJyZWFrcG9pbnQsIDEpO1xuICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6ICRtaW4pIHtcbiAgICAgIEBjb250ZW50O1xuICAgIH1cbiAgfSBAZWxzZSB7XG4gICAgQGVycm9yIFwiSW52YWxpZCBkZXZpY2U6ICN7JGRldmljZX1cIjtcbiAgfVxufVxuXG4vLy9cbi8vLyBBIG1heGltdW0gbWVkaWEgcXVlcnkgZGV2aWNlIGJyZWFrcG9pbnRcbi8vL1xuQG1peGluIGJyZWFrLXRvLWRldmljZSgkZGV2aWNlKSB7XG4gIEBpZiB0eXBlLW9mKCRkZXZpY2UpID09IHN0cmluZyB7XG4gICAgJGRldmljZTogJGRldmljZSw7XG4gIH1cbiAgQGlmIHR5cGUtb2YoJGRldmljZSkgPT0gbGlzdCB7XG4gICAgJGJyZWFrcG9pbnQ6IGJyZWFrLXNlbGVjdC1kZXZpY2UoJGRldmljZSk7XG4gICAgJG1heDogbnRoKCRicmVha3BvaW50LCAyKTtcbiAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAkbWF4KSB7XG4gICAgICBAY29udGVudDtcbiAgICB9XG4gIH0gQGVsc2Uge1xuICAgIEBlcnJvciBcIkludmFsaWQgZGV2aWNlOiAjeyRkZXZpY2V9XCI7XG4gIH1cbn1cbiJdfQ== */ \ No newline at end of file diff --git a/material/base.html b/material/base.html index 6d9ea04d7..366e28342 100644 --- a/material/base.html +++ b/material/base.html @@ -2,7 +2,6 @@ This file was automatically generated - do not edit -#} {% import "partials/language.html" as lang with context %} -{% set feature = config.theme.feature %} {% set palette = config.theme.palette %} {% set font = config.theme.font %} @@ -43,7 +42,7 @@ {% endif %} {% endblock %} {% block styles %} - + {% if palette.primary or palette.accent %} {% endif %} @@ -79,18 +78,20 @@ {% endblock %} {% block extrahead %}{% endblock %} + {% set direction = config.theme.direction | default(lang.t('direction')) %} {% if palette.primary or palette.accent %} {% set primary = palette.primary | replace(" ", "-") | lower %} {% set accent = palette.accent | replace(" ", "-") | lower %} - + {% else %} - + {% endif %} {% if page.toc | first is defined %} - + {% set skip = page.toc | first %} + {{ lang.t('skip.link.title') }} {% endif %} @@ -111,7 +112,7 @@ {% endif %} {% endblock %} {% block tabs %} - {% if feature.tabs %} + {% if "tabs" in config.theme.features %} {% include "partials/tabs.html" %} {% endif %} {% endblock %} @@ -147,40 +148,19 @@ {% endif %} {% block source %} {% if page and page.meta and page.meta.source %} - {% set repo = config.repo_url %} - {% if repo | last == "/" %} - {% set repo = repo[:-1] %} - {% endif %} - {% set path = page.meta.path | default([""]) %} - {% set file = page.meta.source %} - {% set repo_icon = config.extra.repo_icon | default( - "fontawesome/brands/git-alt" - ) %} - - {{ lang.t("meta.source") }} - {% include ".icons/" ~ repo_icon ~ ".svg" %} - + {% include "partials/source-link.html" %} {% endif %} {% endblock %} {% if not "\x3ch1" in page.content %}

    {{ page.title | default(config.site_name, true)}}

    {% endif %} {{ page.content }} - {% if page and page.meta and ( - page.meta.git_revision_date_localized or - page.meta.revision_date - ) %} - {% set label = lang.t("source.revision.date") %} -
    -
    - - {% if page.meta.git_revision_date_localized %} - {{ label }}: {{ page.meta.git_revision_date_localized }} - {% elif page.meta.revision_date %} - {{ label }}: {{ page.meta.revision_date }} - {% endif %} - -
    + {% if page and page.meta %} + {% if page.meta.git_revision_date_localized or + page.meta.revision_date + %} + {% include "partials/source-date.html" %} + {% endif %} {% endif %} {% endblock %} {% block disqus %} @@ -194,21 +174,23 @@ {% include "partials/footer.html" %} {% endblock %} + {% block config %} + + {% endblock %} {% block scripts %} - - + + {%- set translations = {} -%} {%- for key in [ "clipboard.copy", "clipboard.copied", - "search.language", - "search.pipeline.stopwords", - "search.pipeline.trimmer", + "search.config.lang", + "search.config.pipeline", + "search.config.separator", "search.result.placeholder", "search.result.none", "search.result.one", - "search.result.other", - "search.tokenizer" + "search.result.other" ] -%} {%- set _ = translations.update({ key: lang.t(key) }) -%} {%- endfor -%} @@ -216,15 +198,15 @@ {{ translations | tojson }} {% for path in config["extra_javascript"] %} diff --git a/material/mkdocs_theme.yml b/material/mkdocs_theme.yml index c6f894e06..df133a1cf 100644 --- a/material/mkdocs_theme.yml +++ b/material/mkdocs_theme.yml @@ -26,15 +26,7 @@ direction: # Feature flags for functionality that alters behavior significantly, and thus # may be a matter of taste -feature: - - # Another layer on top of the main navigation for larger screens in the form - # of tabs, especially useful for larger documentation projects - tabs: false - - # Instant loading will instruct the application to intercept all internal - # links, load and inject the HTML into the page and rebind all handlers - instant: false +features: [] # Sets the primary and accent color palettes as defined in the Material Design # documentation - possible values can be looked up in the getting started guide @@ -61,10 +53,10 @@ font: icon: # Shown if no logo is set - logo: .icons/material/book-open-variant + logo: material/library # Repository icon - repo: .icons/fontawesome/git-alt + repo: fontawesome/brands/git-alt # Favicon to be rendered favicon: assets/images/favicon.png diff --git a/material/partials/hero.html b/material/partials/hero.html index 3d6a2cc8f..2c244e18b 100644 --- a/material/partials/hero.html +++ b/material/partials/hero.html @@ -1,9 +1,8 @@ {#- This file was automatically generated - do not edit -#} -{% set feature = config.theme.feature %} {% set class = "md-hero" %} -{% if not feature.tabs %} +{% if "tabs" not in config.theme.features %} {% set class = "md-hero md-hero--expand" %} {% endif %}
    diff --git a/material/partials/language.html b/material/partials/language.html index b05ffd729..46188a6b2 100644 --- a/material/partials/language.html +++ b/material/partials/language.html @@ -3,6 +3,4 @@ -#} {% import "partials/language/" + config.theme.language + ".html" as lang %} {% import "partials/language/en.html" as fallback %} -{% macro t(key) %}{{ { - "direction": config.theme.direction -}[key] or lang.t(key) or fallback.t(key) }}{% endmacro %} +{% macro t(key) %}{{ lang.t(key) | default(fallback.t(key)) }}{% endmacro %} diff --git a/material/partials/language/af.html b/material/partials/language/af.html index 47b7b5f64..a625cd4b7 100644 --- a/material/partials/language/af.html +++ b/material/partials/language/af.html @@ -10,7 +10,7 @@ "footer.next": "Volgende", "meta.comments": "Kommentaar", "meta.source": "Bron", - "search.language": "nl", + "search.config.lang": "nl", "search.placeholder": "Soek", "search.result.placeholder": "Tik om te begin soek", "search.result.none": "Geen ooreenstemmende dokumente", diff --git a/material/partials/language/ar.html b/material/partials/language/ar.html index 23dc470fe..777c82dad 100644 --- a/material/partials/language/ar.html +++ b/material/partials/language/ar.html @@ -11,9 +11,7 @@ "footer.next": "التالية", "meta.comments": "التعليقات", "meta.source": "المصدر", - "search.language": "", - "search.pipeline.stopwords": false, - "search.pipeline.trimmer": false, + "search.config.pipeline": "", "search.placeholder": "بحث", "search.result.placeholder": "اكتب لبدء البحث", "search.result.none": "لا توجد نتائج", diff --git a/material/partials/language/ca.html b/material/partials/language/ca.html index e37e200b6..d0ed166e6 100644 --- a/material/partials/language/ca.html +++ b/material/partials/language/ca.html @@ -10,7 +10,6 @@ "footer.next": "Següent", "meta.comments": "Comentaris", "meta.source": "Codi font", - "search.language": "", "search.placeholder": "Cerca", "search.result.placeholder": "Escriu per a començar a cercar", "search.result.none": "Cap document coincideix", diff --git a/material/partials/language/cs.html b/material/partials/language/cs.html index 6bb60ea2d..013b40627 100644 --- a/material/partials/language/cs.html +++ b/material/partials/language/cs.html @@ -10,7 +10,7 @@ "footer.next": "Další", "meta.comments": "Komentáře", "meta.source": "Zdroj", - "search.language": "ro", + "search.config.lang": "ro", "search.placeholder": "Hledat", "search.result.placeholder": "Pište co se má vyhledat", "search.result.none": "Nenalezeny žádné dokumenty", diff --git a/material/partials/language/da.html b/material/partials/language/da.html index 3cd23fdd0..d98ff5530 100644 --- a/material/partials/language/da.html +++ b/material/partials/language/da.html @@ -10,7 +10,7 @@ "footer.next": "Næste", "meta.comments": "Kommentarer", "meta.source": "Kilde", - "search.language": "da", + "search.config.lang": "da", "search.placeholder": "Søg", "search.result.placeholder": "Indtast søgeord", "search.result.none": "Ingen resultater fundet", diff --git a/material/partials/language/de.html b/material/partials/language/de.html index 578ca6f51..9945738ba 100644 --- a/material/partials/language/de.html +++ b/material/partials/language/de.html @@ -10,7 +10,7 @@ "footer.next": "Weiter", "meta.comments": "Kommentare", "meta.source": "Quellcode", - "search.language": "de", + "search.config.lang": "de", "search.placeholder": "Suche", "search.result.placeholder": "Suchbegriff eingeben", "search.result.none": "Keine Suchergebnisse", diff --git a/material/partials/language/en.html b/material/partials/language/en.html index d20c4c81f..e3509ab43 100644 --- a/material/partials/language/en.html +++ b/material/partials/language/en.html @@ -11,15 +11,14 @@ "footer.next": "Next", "meta.comments": "Comments", "meta.source": "Source", - "search.language": "en", - "search.pipeline.stopwords": true, - "search.pipeline.trimmer": true, + "search.config.lang": "en", + "search.config.pipeline": "trimmer, stopWordFilter", + "search.config.separator": "[\s\-]+", "search.placeholder": "Search", "search.result.placeholder": "Type to start searching", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", - "search.tokenizer": "[\s\-]+", "skip.link.title": "Skip to content", "source.link.title": "Go to repository", "source.revision.date": "Last update", diff --git a/material/partials/language/es.html b/material/partials/language/es.html index 85df0d100..3361a514f 100644 --- a/material/partials/language/es.html +++ b/material/partials/language/es.html @@ -10,7 +10,7 @@ "footer.next": "Siguiente", "meta.comments": "Comentarios", "meta.source": "Fuente", - "search.language": "es", + "search.config.lang": "es", "search.placeholder": "Búsqueda", "search.result.placeholder": "Teclee para comenzar búsqueda", "search.result.none": "No se encontraron documentos", diff --git a/material/partials/language/et.html b/material/partials/language/et.html index 47812703b..47a1b218d 100644 --- a/material/partials/language/et.html +++ b/material/partials/language/et.html @@ -10,9 +10,7 @@ "footer.next": "Järgmine", "meta.comments": "Kommentaarid", "meta.source": "Lähtekood", - "search.language": "", - "search.pipeline.stopwords": false, - "search.pipeline.trimmer": false, + "search.config.pipeline": "", "search.placeholder": "Otsi", "search.result.placeholder": "Otsimiseks kirjuta siia", "search.result.none": "Otsingule ei leitud ühtegi vastet", diff --git a/material/partials/language/fa.html b/material/partials/language/fa.html index 6e4735f0e..d5e988c2b 100644 --- a/material/partials/language/fa.html +++ b/material/partials/language/fa.html @@ -11,9 +11,7 @@ "footer.next": "بعدی", "meta.comments": "نظرات", "meta.source": "منبع", - "search.language": "", - "search.pipeline.stopwords": false, - "search.pipeline.trimmer": false, + "search.config.pipeline": "", "search.placeholder": "جستجو", "search.result.placeholder": "برای شروع جستجو تایپ کنید", "search.result.none": "سندی یافت نشد", diff --git a/material/partials/language/fi.html b/material/partials/language/fi.html index 4e8e5773a..b2b93e223 100644 --- a/material/partials/language/fi.html +++ b/material/partials/language/fi.html @@ -10,7 +10,7 @@ "footer.next": "Seuraava", "meta.comments": "Kommentit", "meta.source": "Lähdekodi", - "search.language": "fi", + "search.config.lang": "fi", "search.placeholder": "Hae", "search.result.placeholder": "Kirjoita aloittaaksesi haun", "search.result.none": "Ei täsmääviä dokumentteja", diff --git a/material/partials/language/fr.html b/material/partials/language/fr.html index 346a1746f..221cad969 100644 --- a/material/partials/language/fr.html +++ b/material/partials/language/fr.html @@ -10,12 +10,13 @@ "footer.next": "Suivant", "meta.comments": "Commentaires", "meta.source": "Source", - "search.language": "fr", + "search.config.lang": "fr", "search.placeholder": "Rechercher", "search.result.placeholder": "Taper pour démarrer la recherche", "search.result.none": "Aucun document trouvé", "search.result.one": "1 document trouvé", "search.result.other": "# documents trouvés", + "skip.link.title": "Aller au contenu", "source.link.title": "Aller au dépôt", "source.revision.date": "Dernière mise à jour", "toc.title": "Table des matières" diff --git a/material/partials/language/gl.html b/material/partials/language/gl.html index d0df01366..2c3c0d6a4 100644 --- a/material/partials/language/gl.html +++ b/material/partials/language/gl.html @@ -10,7 +10,7 @@ "footer.next": "Seguinte", "meta.comments": "Comentarios", "meta.source": "Fonte", - "search.language": "es", + "search.config.lang": "es", "search.placeholder": "Busca", "search.result.placeholder": "Insira un termo", "search.result.none": "Sen resultados", diff --git a/material/partials/language/gr.html b/material/partials/language/gr.html index 9ccb459d6..26e49928e 100644 --- a/material/partials/language/gr.html +++ b/material/partials/language/gr.html @@ -10,9 +10,7 @@ "footer.next": "Προηγούμενη", "meta.comments": "Σχόλια", "meta.source": "Πηγή", - "search.language": "", - "search.pipeline.stopwords": false, - "search.pipeline.trimmer": false, + "search.config.pipeline": "", "search.placeholder": "Αναζήτηση", "search.result.placeholder": "Πληκτρολογήστε για να αρχίσει η αναζήτηση", "search.result.none": "Δε βρέθηκαν αντίστοιχα αρχεία", diff --git a/material/partials/language/he.html b/material/partials/language/he.html index 4ecf765a4..ed2d735b4 100644 --- a/material/partials/language/he.html +++ b/material/partials/language/he.html @@ -11,9 +11,7 @@ "footer.next": "הַבָּא", "meta.comments": "הערות", "meta.source": "מָקוֹר", - "search.language": "", - "search.pipeline.stopwords": false, - "search.pipeline.trimmer": false, + "search.config.pipeline": "", "search.placeholder": "לחפש", "search.result.placeholder": "הקלד כדי להתחיל לחפש", "search.result.none": "אין מסמכים תואמים", diff --git a/material/partials/language/hi.html b/material/partials/language/hi.html index a3eab6259..85377f8b1 100644 --- a/material/partials/language/hi.html +++ b/material/partials/language/hi.html @@ -10,9 +10,7 @@ "footer.next": "आगामी", "meta.comments": "टिप्पणियाँ", "meta.source": "स्रोत", - "search.language": "", - "search.pipeline.stopwords": false, - "search.pipeline.trimmer": false, + "search.config.pipeline": "", "search.placeholder": "खोज", "search.result.placeholder": "खोज शुरू करने के लिए टाइप करें", "search.result.none": "कोई मिलान डॉक्यूमेंट नहीं", diff --git a/material/partials/language/hr.html b/material/partials/language/hr.html index 7ad2b2ac3..a52aeff5f 100644 --- a/material/partials/language/hr.html +++ b/material/partials/language/hr.html @@ -10,9 +10,7 @@ "footer.next": "Sljedeće", "meta.comments": "Komentari", "meta.source": "Izvor", - "search.language": "", - "search.pipeline.stopwords": false, - "search.pipeline.trimmer": false, + "search.config.pipeline": "", "search.placeholder": "Pretraživanje", "search.result.placeholder": "Unesite pojam pretraživanja", "search.result.none": "Ništa nije pronađeno", diff --git a/material/partials/language/hu.html b/material/partials/language/hu.html index 14bff2ca9..c2230cabd 100644 --- a/material/partials/language/hu.html +++ b/material/partials/language/hu.html @@ -10,7 +10,7 @@ "footer.next": "Következő", "meta.comments": "Hozzászólások", "meta.source": "Forrás", - "search.language": "hu", + "search.config.lang": "hu", "search.placeholder": "Keresés", "search.result.placeholder": "Kereséshez írj ide valamit", "search.result.none": "Nincs találat", diff --git a/material/partials/language/id.html b/material/partials/language/id.html index 52bdcdc42..b846e5072 100644 --- a/material/partials/language/id.html +++ b/material/partials/language/id.html @@ -10,9 +10,7 @@ "footer.next": "Selanjutnya", "meta.comments": "Komentar", "meta.source": "Sumber", - "search.language": "", - "search.pipeline.stopwords": false, - "search.pipeline.trimmer": false, + "search.config.pipeline": "", "search.placeholder": "Cari", "search.result.placeholder": "Ketik untuk mulai pencarian", "search.result.none": "Tidak ada dokumen yang sesuai", diff --git a/material/partials/language/it.html b/material/partials/language/it.html index b91f58b03..3aa0730c5 100644 --- a/material/partials/language/it.html +++ b/material/partials/language/it.html @@ -10,7 +10,7 @@ "footer.next": "Prossimo", "meta.comments": "Commenti", "meta.source": "Sorgente", - "search.language": "it", + "search.config.lang": "it", "search.placeholder": "Cerca", "search.result.placeholder": "Scrivi per iniziare a cercare", "search.result.none": "Nessun documento trovato", diff --git a/material/partials/language/ja.html b/material/partials/language/ja.html index f280341e5..4df385c21 100644 --- a/material/partials/language/ja.html +++ b/material/partials/language/ja.html @@ -10,13 +10,13 @@ "footer.next": "次", "meta.comments": "コメント", "meta.source": "ソース", - "search.language": "ja", + "search.config.lang": "ja", + "search.config.separator": "[\s\- 、。,.]+", "search.placeholder": "検索", "search.result.placeholder": "検索キーワードを入力してください", "search.result.none": "何も見つかりませんでした", "search.result.one": "1件見つかりました", "search.result.other": "#件見つかりました", - "search.tokenizer": "[\s\- 、。,.]+", "source.link.title": "リポジトリへ", "source.revision.date": "最終更新日", "toc.title": "目次" diff --git a/material/partials/language/kr.html b/material/partials/language/kr.html index b1db067de..f1b863fd7 100644 --- a/material/partials/language/kr.html +++ b/material/partials/language/kr.html @@ -10,7 +10,7 @@ "footer.next": "다음", "meta.comments": "댓글", "meta.source": "출처", - "search.language": "ja", + "search.config.lang": "ja", "search.placeholder": "검색", "search.result.placeholder": "검색어를 입력하세요", "search.result.none": "검색어와 일치하는 문서가 없습니다", diff --git a/material/partials/language/nl.html b/material/partials/language/nl.html index 0b6254203..1f28d8f70 100644 --- a/material/partials/language/nl.html +++ b/material/partials/language/nl.html @@ -10,7 +10,7 @@ "footer.next": "Volgende", "meta.comments": "Reacties", "meta.source": "Bron", - "search.language": "nl", + "search.config.lang": "nl", "search.placeholder": "Zoeken", "search.result.placeholder": "Typ om te beginnen met zoeken", "search.result.none": "Geen overeenkomende documenten", diff --git a/material/partials/language/nn.html b/material/partials/language/nn.html index 5d8aeb752..a961724f8 100644 --- a/material/partials/language/nn.html +++ b/material/partials/language/nn.html @@ -10,7 +10,7 @@ "footer.next": "Neste", "meta.comments": "Kommentarar", "meta.source": "Kjelde", - "search.language": "no", + "search.config.lang": "no", "search.placeholder": "Søk", "search.result.placeholder": "Skriv søkeord", "search.result.none": "Ingen treff", diff --git a/material/partials/language/no.html b/material/partials/language/no.html index 612a23e1f..2a5ed6e8e 100644 --- a/material/partials/language/no.html +++ b/material/partials/language/no.html @@ -10,7 +10,7 @@ "footer.next": "Neste", "meta.comments": "Kommentarer", "meta.source": "Kilde", - "search.language": "no", + "search.config.lang": "no", "search.placeholder": "Søk", "search.result.placeholder": "Skriv søkeord", "search.result.none": "Ingen treff", diff --git a/material/partials/language/pl.html b/material/partials/language/pl.html index 603e2fcf0..a94e22b74 100644 --- a/material/partials/language/pl.html +++ b/material/partials/language/pl.html @@ -10,9 +10,7 @@ "footer.next": "Następna strona", "meta.comments": "Komentarze", "meta.source": "Kod źródłowy", - "search.language": "", - "search.pipeline.stopwords": false, - "search.pipeline.trimmer": false, + "search.config.pipeline": "", "search.placeholder": "Szukaj", "search.result.placeholder": "Zacznij pisać, aby szukać", "search.result.none": "Brak wyników wyszukiwania", diff --git a/material/partials/language/pt.html b/material/partials/language/pt.html index a2a3f0b27..061ac210c 100644 --- a/material/partials/language/pt.html +++ b/material/partials/language/pt.html @@ -10,7 +10,7 @@ "footer.next": "Próximo", "meta.comments": "Comentários", "meta.source": "Fonte", - "search.language": "pt", + "search.config.lang": "pt", "search.placeholder": "Buscar", "search.result.placeholder": "Digite para iniciar a busca", "search.result.none": "Nenhum resultado encontrado", diff --git a/material/partials/language/ro.html b/material/partials/language/ro.html index 8794aeb62..5891c7913 100644 --- a/material/partials/language/ro.html +++ b/material/partials/language/ro.html @@ -10,7 +10,7 @@ "footer.next": "Următor", "meta.comments": "Comentarii", "meta.source": "Sursă", - "search.language": "ro", + "search.config.lang": "ro", "search.placeholder": "Căutare", "search.result.placeholder": "Tastează pentru a începe căutarea", "search.result.none": "Nu a fost găsit niciun document", diff --git a/material/partials/language/ru.html b/material/partials/language/ru.html index b01cd24c2..84d204820 100644 --- a/material/partials/language/ru.html +++ b/material/partials/language/ru.html @@ -10,7 +10,7 @@ "footer.next": "Вперед", "meta.comments": "Комментарии", "meta.source": "Исходный код", - "search.language": "ru", + "search.config.lang": "ru", "search.placeholder": "Поиск", "search.result.placeholder": "Начните печатать для поиска", "search.result.none": "Совпадений не найдено", diff --git a/material/partials/language/sh.html b/material/partials/language/sh.html index 6ae034b27..f0972497c 100644 --- a/material/partials/language/sh.html +++ b/material/partials/language/sh.html @@ -10,7 +10,7 @@ "footer.next": "Sledeće", "meta.comments": "Komentari", "meta.source": "Izvor", - "search.language": "ro", + "search.config.lang": "ro", "search.placeholder": "Pretraga", "search.result.placeholder": "Unesite pojam pretrage", "search.result.none": "Ništa nije pronađeno", diff --git a/material/partials/language/si.html b/material/partials/language/si.html index 1f60954b5..aa258b9c0 100644 --- a/material/partials/language/si.html +++ b/material/partials/language/si.html @@ -10,7 +10,6 @@ "footer.next": "Naslednja stran", "meta.comments": "Komentarji", "meta.source": "Izvorna koda", - "search.language": "", "search.placeholder": "Išči", "search.result.placeholder": "Vpiši iskalni niz", "search.result.none": "Ni zadetkov", diff --git a/material/partials/language/sk.html b/material/partials/language/sk.html index 2aabc03ec..66bd7dcf4 100644 --- a/material/partials/language/sk.html +++ b/material/partials/language/sk.html @@ -10,7 +10,6 @@ "footer.next": "Ďalej", "meta.comments": "Komentáre", "meta.source": "Zdroj", - "search.language": "", "search.placeholder": "Hľadať", "search.result.placeholder": "Pre vyhľadávanie začni písať", "search.result.none": "Žiadne vyhovujúce dokumenty", diff --git a/material/partials/language/sr.html b/material/partials/language/sr.html index 9337cc6ea..695a08b73 100644 --- a/material/partials/language/sr.html +++ b/material/partials/language/sr.html @@ -10,9 +10,7 @@ "footer.next": "Следеће", "meta.comments": "Коментари", "meta.source": "Извор", - "search.language": "", - "search.pipeline.stopwords": false, - "search.pipeline.trimmer": false, + "search.config.pipeline": "", "search.placeholder": "Претрага", "search.result.placeholder": "Унесите појам претраге", "search.result.none": "Нису пронађени документи", diff --git a/material/partials/language/sv.html b/material/partials/language/sv.html index c4209da2d..872436663 100644 --- a/material/partials/language/sv.html +++ b/material/partials/language/sv.html @@ -10,7 +10,7 @@ "footer.next": "Nästa", "meta.comments": "Kommentarer", "meta.source": "Källa", - "search.language": "sv", + "search.config.lang": "sv", "search.placeholder": "Sök", "search.result.placeholder": "Skriv sökord", "search.result.none": "Inga sökresultat", diff --git a/material/partials/language/th.html b/material/partials/language/th.html index 64672318b..dacadfe86 100644 --- a/material/partials/language/th.html +++ b/material/partials/language/th.html @@ -10,13 +10,11 @@ "footer.next": "ต่อไป", "meta.comments": "ความคิดเห็น", "meta.source": "แหล่งที่มา", - "search.language": "th", "search.placeholder": "ค้นหา", "search.result.placeholder": "พิมพ์เพื่อเริ่มค้นหา", "search.result.none": "ไม่พบเอกสารที่ตรงกัน", "search.result.one": "พบเอกสารที่ตรงกัน", "search.result.other": "พบ # เอกสารที่ตรงกัน", - "search.tokenizer": "[\s\-]+", "skip.link.title": "ข้ามไปที่เนื้อหา", "source.link.title": "ไปที่ Repository", "toc.title": "สารบัญ" diff --git a/material/partials/language/tr.html b/material/partials/language/tr.html index c9c0ee166..b34f99d22 100644 --- a/material/partials/language/tr.html +++ b/material/partials/language/tr.html @@ -10,12 +10,13 @@ "footer.next": "Sonraki", "meta.comments": "Yorumlar", "meta.source": "Kaynak", - "search.language": "tr", + "search.config.lang": "tr", "search.placeholder": "Ara", "search.result.placeholder": "Aramaya başlamak için yazın", "search.result.none": "Eşleşen doküman bulunamadı", "search.result.one": "1 doküman bulundu", "search.result.other": "# doküman bulundu", + "skip.link.title": "Ana içeriğe geç", "source.link.title": "Depoya git", "source.revision.date": "Son Güncelleme", "toc.title": "İçindekiler" diff --git a/material/partials/language/uk.html b/material/partials/language/uk.html index 59ff2529e..39a17c5ef 100644 --- a/material/partials/language/uk.html +++ b/material/partials/language/uk.html @@ -10,7 +10,7 @@ "footer.next": "Вперед", "meta.comments": "Коментарі", "meta.source": "Вихідний код", - "search.language": "ru", + "search.config.lang": "ru", "search.placeholder": "Пошук", "search.result.placeholder": "Розпочніть писати для пошуку", "search.result.none": "Збігів не знайдено", diff --git a/material/partials/language/zh-Hant.html b/material/partials/language/zh-Hant.html index bb1ed942b..9bd7d2e23 100644 --- a/material/partials/language/zh-Hant.html +++ b/material/partials/language/zh-Hant.html @@ -10,13 +10,13 @@ "footer.next": "下一頁", "meta.comments": "評論", "meta.source": "來源", - "search.language": "ja", + "search.config.lang": "ja", + "search.config.separator": "[\,\。]+", "search.placeholder": "搜尋", "search.result.placeholder": "鍵入以開始檢索", "search.result.none": "沒有找到符合條件的結果", "search.result.one": "找到 1 个符合條件的結果", "search.result.other": "# 個符合條件的結果", - "search.tokenizer": "[\,\。]+", "skip.link.title": "跳轉至", "source.link.title": "前往 Github 倉庫", "source.revision.date": "最後更新", diff --git a/material/partials/language/zh-TW.html b/material/partials/language/zh-TW.html index ae7a2f24f..d5fbbd41d 100644 --- a/material/partials/language/zh-TW.html +++ b/material/partials/language/zh-TW.html @@ -10,13 +10,13 @@ "footer.next": "下一頁", "meta.comments": "留言", "meta.source": "來源", - "search.language": "ja", + "search.config.lang": "ja", + "search.config.separator": "[\,\。]+", "search.placeholder": "搜尋", "search.result.placeholder": "打字進行搜尋", "search.result.none": "沒有符合的項目", "search.result.one": "找到 1 個符合的項目", "search.result.other": "找到 # 個符合的項目", - "search.tokenizer": "[\,\。]+", "skip.link.title": "跳轉到", "source.link.title": "前往倉庫", "toc.title": "本頁目錄" diff --git a/material/partials/language/zh.html b/material/partials/language/zh.html index 6e3f81c01..94689a490 100644 --- a/material/partials/language/zh.html +++ b/material/partials/language/zh.html @@ -10,13 +10,13 @@ "footer.next": "下一页", "meta.comments": "评论", "meta.source": "来源", - "search.language": "ja", + "search.config.lang": "ja", + "search.config.separator": "[\,\。]+", "search.placeholder": "搜索", "search.result.placeholder": "键入以开始搜索", "search.result.none": "没有找到符合条件的结果", "search.result.one": "找到 1 个符合条件的结果", "search.result.other": "# 个符合条件的结果", - "search.tokenizer": "[\,\。]+", "skip.link.title": "跳转至", "source.link.title": "前往 Github 仓库", "source.revision.date": "最后更新", diff --git a/material/partials/nav.html b/material/partials/nav.html index 7910bd626..0735f58ea 100644 --- a/material/partials/nav.html +++ b/material/partials/nav.html @@ -4,10 +4,10 @@