/*! For license information please see 3848.e2a75b70.js.LICENSE.txt */
(self.webpackChunkdocs_v_2=self.webpackChunkdocs_v_2||[]).push([[3848],{77296:(e,t,r)=>{"use strict";r.d(t,{c:()=>ie});var n=r(52536),o=r(45072),i=r(11504),a=r(30800),l=r(87088),c=r(92920),s=r(83136),d=r(62988),u=r(63952),p=r(81568),f=r(31024);const h={animating:!1,autoplaying:null,currentDirection:0,currentLeft:null,currentSlide:0,direction:1,dragging:!1,edgeDragged:!1,initialized:!1,lazyLoadedList:[],listHeight:null,listWidth:null,scrolling:!1,slideCount:null,slideHeight:null,slideWidth:null,swipeLeft:null,swiped:!1,swiping:!1,touchObject:{startX:0,startY:0,curX:0,curY:0},trackStyle:{},trackWidth:0,targetSlide:0};var g=r(73336),v=r.n(g),b=r(89080),m=r.n(b);function w(e,t,r){return Math.max(t,Math.min(e,r))}var k=function(e){["onTouchStart","onTouchMove","onWheel"].includes(e._reactName)||e.preventDefault()},y=function(e){for(var t=[],r=S(e),n=x(e),o=r;o<n;o++)e.lazyLoadedList.indexOf(o)<0&&t.push(o);return t},S=function(e){return e.currentSlide-C(e)},x=function(e){return e.currentSlide+T(e)},C=function(e){return e.centerMode?Math.floor(e.slidesToShow/2)+(parseInt(e.centerPadding)>0?1:0):0},T=function(e){return e.centerMode?Math.floor((e.slidesToShow-1)/2)+1+(parseInt(e.centerPadding)>0?1:0):e.slidesToShow},L=function(e){return e&&e.offsetWidth||0},M=function(e){return e&&e.offsetHeight||0},E=function(e){var t,r,n,o,i=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return t=e.startX-e.curX,r=e.startY-e.curY,n=Math.atan2(r,t),(o=Math.round(180*n/Math.PI))<0&&(o=360-Math.abs(o)),o<=45&&o>=0||o<=360&&o>=315?"left":o>=135&&o<=225?"right":!0===i?o>=35&&o<=135?"up":"down":"vertical"},z=function(e){var t=!0;return e.infinite||(e.centerMode&&e.currentSlide>=e.slideCount-1||e.slideCount<=e.slidesToShow||e.currentSlide>=e.slideCount-e.slidesToShow)&&(t=!1),t},H=function(e,t){var r={};return t.forEach((function(t){return r[t]=e[t]})),r},W=function(e,t){var r=function(e){for(var t=e.infinite?2*e.slideCount:e.slideCount,r=e.infinite?-1*e.slidesToShow:0,n=e.infinite?-1*e.slidesToShow:0,o=[];r<t;)o.push(r),r=n+e.slidesToScroll,n+=Math.min(e.slidesToScroll,e.slidesToShow);return o}(e),n=0;if(t>r[r.length-1])t=r[r.length-1];else for(var o in r){if(t<r[o]){t=n;break}n=r[o]}return t},P=function(e){var t=e.centerMode?e.slideWidth*Math.floor(e.slidesToShow/2):0;if(e.swipeToSlide){var r,n=e.listRef,o=n.querySelectorAll&&n.querySelectorAll(".slick-slide")||[];if(Array.from(o).every((function(n){if(e.vertical){if(n.offsetTop+M(n)/2>-1*e.swipeLeft)return r=n,!1}else if(n.offsetLeft-t+L(n)/2>-1*e.swipeLeft)return r=n,!1;return!0})),!r)return 0;var i=!0===e.rtl?e.slideCount-e.currentSlide:e.currentSlide;return Math.abs(r.dataset.index-i)||1}return e.slidesToScroll},R=function(e,t){return t.reduce((function(t,r){return t&&e.hasOwnProperty(r)}),!0)?null:console.error("Keys Missing:",e)},A=function(e){var t,r;R(e,["left","variableWidth","slideCount","slidesToShow","slideWidth"]);var n=e.slideCount+2*e.slidesToShow;e.vertical?r=n*e.slideHeight:t=D(e)*e.slideWidth;var o={opacity:1,transition:"",WebkitTransition:""};if(e.useTransform){var i=e.vertical?"translate3d(0px, "+e.left+"px, 0px)":"translate3d("+e.left+"px, 0px, 0px)",l=e.vertical?"translate3d(0px, "+e.left+"px, 0px)":"translate3d("+e.left+"px, 0px, 0px)",c=e.vertical?"translateY("+e.left+"px)":"translateX("+e.left+"px)";o=(0,a.c)((0,a.c)({},o),{},{WebkitTransform:i,transform:l,msTransform:c})}else e.vertical?o.top=e.left:o.left=e.left;return e.fade&&(o={opacity:1}),t&&(o.width=t),r&&(o.height=r),window&&!window.addEventListener&&window.attachEvent&&(e.vertical?o.marginTop=e.left+"px":o.marginLeft=e.left+"px"),o},O=function(e){R(e,["left","variableWidth","slideCount","slidesToShow","slideWidth","speed","cssEase"]);var t=A(e);return e.useTransform?(t.WebkitTransition="-webkit-transform "+e.speed+"ms "+e.cssEase,t.transition="transform "+e.speed+"ms "+e.cssEase):e.vertical?t.transition="top "+e.speed+"ms "+e.cssEase:t.transition="left "+e.speed+"ms "+e.cssEase,t},I=function(e){if(e.unslick)return 0;R(e,["slideIndex","trackRef","infinite","centerMode","slideCount","slidesToShow","slidesToScroll","slideWidth","listWidth","variableWidth","slideHeight"]);var t,r,n=e.slideIndex,o=e.trackRef,i=e.infinite,a=e.centerMode,l=e.slideCount,c=e.slidesToShow,s=e.slidesToScroll,d=e.slideWidth,u=e.listWidth,p=e.variableWidth,f=e.slideHeight,h=e.fade,g=e.vertical;if(h||1===e.slideCount)return 0;var v=0;if(i?(v=-N(e),l%s!=0&&n+s>l&&(v=-(n>l?c-(n-l):l%s)),a&&(v+=parseInt(c/2))):(l%s!=0&&n+s>l&&(v=c-l%s),a&&(v=parseInt(c/2))),t=g?n*f*-1+v*f:n*d*-1+v*d,!0===p){var b,m=o&&o.node;if(b=n+N(e),t=(r=m&&m.childNodes[b])?-1*r.offsetLeft:0,!0===a){b=i?n+N(e):n,r=m&&m.children[b],t=0;for(var w=0;w<b;w++)t-=m&&m.children[w]&&m.children[w].offsetWidth;t-=parseInt(e.centerPadding),t+=r&&(u-r.offsetWidth)/2}}return t},N=function(e){return e.unslick||!e.infinite?0:e.variableWidth?e.slideCount:e.slidesToShow+(e.centerMode?1:0)},F=function(e){return e.unslick||!e.infinite?0:e.slideCount},D=function(e){return 1===e.slideCount?1:N(e)+e.slideCount+F(e)},Z=function(e){return e.targetSlide>e.currentSlide?e.targetSlide>e.currentSlide+_(e)?"left":"right":e.targetSlide<e.currentSlide-X(e)?"right":"left"},_=function(e){var t=e.slidesToShow,r=e.centerMode,n=e.rtl,o=e.centerPadding;if(r){var i=(t-1)/2+1;return parseInt(o)>0&&(i+=1),n&&t%2==0&&(i+=1),i}return n?0:t-1},X=function(e){var t=e.slidesToShow,r=e.centerMode,n=e.rtl,o=e.centerPadding;if(r){var i=(t-1)/2+1;return parseInt(o)>0&&(i+=1),n||t%2!=0||(i+=1),i}return n?t-1:0},G=function(){return!("undefined"==typeof window||!window.document||!window.document.createElement)},Y=function(e){var t,r,n,o,i;return n=(i=e.rtl?e.slideCount-1-e.index:e.index)<0||i>=e.slideCount,e.centerMode?(o=Math.floor(e.slidesToShow/2),r=(i-e.currentSlide)%e.slideCount==0,i>e.currentSlide-o-1&&i<=e.currentSlide+o&&(t=!0)):t=e.currentSlide<=i&&i<e.currentSlide+e.slidesToShow,{"slick-slide":!0,"slick-active":t,"slick-center":r,"slick-cloned":n,"slick-current":i===(e.targetSlide<0?e.targetSlide+e.slideCount:e.targetSlide>=e.slideCount?e.targetSlide-e.slideCount:e.targetSlide)}},j=function(e,t){return e.key+"-"+t},B=function(e){var t,r=[],n=[],o=[],l=i.Children.count(e.children),c=S(e),s=x(e);return i.Children.forEach(e.children,(function(d,u){var p,f={message:"children",index:u,slidesToScroll:e.slidesToScroll,currentSlide:e.currentSlide};p=!e.lazyLoad||e.lazyLoad&&e.lazyLoadedList.indexOf(u)>=0?d:i.createElement("div",null);var h=function(e){var t={};return void 0!==e.variableWidth&&!1!==e.variableWidth||(t.width=e.slideWidth),e.fade&&(t.position="relative",e.vertical?t.top=-e.index*parseInt(e.slideHeight):t.left=-e.index*parseInt(e.slideWidth),t.opacity=e.currentSlide===e.index?1:0,e.useCSS&&(t.transition="opacity "+e.speed+"ms "+e.cssEase+", visibility "+e.speed+"ms "+e.cssEase)),t}((0,a.c)((0,a.c)({},e),{},{index:u})),g=p.props.className||"",v=Y((0,a.c)((0,a.c)({},e),{},{index:u}));if(r.push(i.cloneElement(p,{key:"original"+j(p,u),"data-index":u,className:m()(v,g),tabIndex:"-1","aria-hidden":!v["slick-active"],style:(0,a.c)((0,a.c)({outline:"none"},p.props.style||{}),h),onClick:function(t){p.props&&p.props.onClick&&p.props.onClick(t),e.focusOnSelect&&e.focusOnSelect(f)}})),e.infinite&&!1===e.fade){var b=l-u;b<=N(e)&&l!==e.slidesToShow&&((t=-b)>=c&&(p=d),v=Y((0,a.c)((0,a.c)({},e),{},{index:t})),n.push(i.cloneElement(p,{key:"precloned"+j(p,t),"data-index":t,tabIndex:"-1",className:m()(v,g),"aria-hidden":!v["slick-active"],style:(0,a.c)((0,a.c)({},p.props.style||{}),h),onClick:function(t){p.props&&p.props.onClick&&p.props.onClick(t),e.focusOnSelect&&e.focusOnSelect(f)}}))),l!==e.slidesToShow&&((t=l+u)<s&&(p=d),v=Y((0,a.c)((0,a.c)({},e),{},{index:t})),o.push(i.cloneElement(p,{key:"postcloned"+j(p,t),"data-index":t,tabIndex:"-1",className:m()(v,g),"aria-hidden":!v["slick-active"],style:(0,a.c)((0,a.c)({},p.props.style||{}),h),onClick:function(t){p.props&&p.props.onClick&&p.props.onClick(t),e.focusOnSelect&&e.focusOnSelect(f)}})))}})),e.rtl?n.concat(r,o).reverse():n.concat(r,o)},q=function(e){(0,d.c)(r,e);var t=(0,u.c)(r);function r(){var e;(0,l.c)(this,r);for(var o=arguments.length,i=new Array(o),a=0;a<o;a++)i[a]=arguments[a];return e=t.call.apply(t,[this].concat(i)),(0,n.c)((0,s.c)(e),"node",null),(0,n.c)((0,s.c)(e),"handleRef",(function(t){e.node=t})),e}return(0,c.c)(r,[{key:"render",value:function(){var e=B(this.props),t=this.props,r={onMouseEnter:t.onMouseEnter,onMouseOver:t.onMouseOver,onMouseLeave:t.onMouseLeave};return i.createElement("div",(0,o.c)({ref:this.handleRef,className:"slick-track",style:this.props.trackStyle},r),e)}}]),r}(i.PureComponent),U=function(e){(0,d.c)(r,e);var t=(0,u.c)(r);function r(){return(0,l.c)(this,r),t.apply(this,arguments)}return(0,c.c)(r,[{key:"clickHandler",value:function(e,t){t.preventDefault(),this.props.clickHandler(e)}},{key:"render",value:function(){for(var e,t=this.props,r=t.onMouseEnter,n=t.onMouseOver,o=t.onMouseLeave,l=t.infinite,c=t.slidesToScroll,s=t.slidesToShow,d=t.slideCount,u=t.currentSlide,p=(e={slideCount:d,slidesToScroll:c,slidesToShow:s,infinite:l}).infinite?Math.ceil(e.slideCount/e.slidesToScroll):Math.ceil((e.slideCount-e.slidesToShow)/e.slidesToScroll)+1,f={onMouseEnter:r,onMouseOver:n,onMouseLeave:o},h=[],g=0;g<p;g++){var v=(g+1)*c-1,b=l?v:w(v,0,d-1),k=b-(c-1),y=l?k:w(k,0,d-1),S=m()({"slick-active":l?u>=y&&u<=b:u===y}),x={message:"dots",index:g,slidesToScroll:c,currentSlide:u},C=this.clickHandler.bind(this,x);h=h.concat(i.createElement("li",{key:g,className:S},i.cloneElement(this.props.customPaging(g),{onClick:C})))}return i.cloneElement(this.props.appendDots(h),(0,a.c)({className:this.props.dotsClass},f))}}]),r}(i.PureComponent),V=function(e){(0,d.c)(r,e);var t=(0,u.c)(r);function r(){return(0,l.c)(this,r),t.apply(this,arguments)}return(0,c.c)(r,[{key:"clickHandler",value:function(e,t){t&&t.preventDefault(),this.props.clickHandler(e,t)}},{key:"render",value:function(){var e={"slick-arrow":!0,"slick-prev":!0},t=this.clickHandler.bind(this,{message:"previous"});!this.props.infinite&&(0===this.props.currentSlide||this.props.slideCount<=this.props.slidesToShow)&&(e["slick-disabled"]=!0,t=null);var r={key:"0","data-role":"none",className:m()(e),style:{display:"block"},onClick:t},n={currentSlide:this.props.currentSlide,slideCount:this.props.slideCount};return this.props.prevArrow?i.cloneElement(this.props.prevArrow,(0,a.c)((0,a.c)({},r),n)):i.createElement("button",(0,o.c)({key:"0",type:"button"},r)," ","Previous")}}]),r}(i.PureComponent),$=function(e){(0,d.c)(r,e);var t=(0,u.c)(r);function r(){return(0,l.c)(this,r),t.apply(this,arguments)}return(0,c.c)(r,[{key:"clickHandler",value:function(e,t){t&&t.preventDefault(),this.props.clickHandler(e,t)}},{key:"render",value:function(){var e={"slick-arrow":!0,"slick-next":!0},t=this.clickHandler.bind(this,{message:"next"});z(this.props)||(e["slick-disabled"]=!0,t=null);var r={key:"1","data-role":"none",className:m()(e),style:{display:"block"},onClick:t},n={currentSlide:this.props.currentSlide,slideCount:this.props.slideCount};return this.props.nextArrow?i.cloneElement(this.props.nextArrow,(0,a.c)((0,a.c)({},r),n)):i.createElement("button",(0,o.c)({key:"1",type:"button"},r)," ","Next")}}]),r}(i.PureComponent),K=r(36464),J=function(e){(0,d.c)(r,e);var t=(0,u.c)(r);function r(e){var c;(0,l.c)(this,r),c=t.call(this,e),(0,n.c)((0,s.c)(c),"listRefHandler",(function(e){return c.list=e})),(0,n.c)((0,s.c)(c),"trackRefHandler",(function(e){return c.track=e})),(0,n.c)((0,s.c)(c),"adaptHeight",(function(){if(c.props.adaptiveHeight&&c.list){var e=c.list.querySelector('[data-index="'.concat(c.state.currentSlide,'"]'));c.list.style.height=M(e)+"px"}})),(0,n.c)((0,s.c)(c),"componentDidMount",(function(){if(c.props.onInit&&c.props.onInit(),c.props.lazyLoad){var e=y((0,a.c)((0,a.c)({},c.props),c.state));e.length>0&&(c.setState((function(t){return{lazyLoadedList:t.lazyLoadedList.concat(e)}})),c.props.onLazyLoad&&c.props.onLazyLoad(e))}var t=(0,a.c)({listRef:c.list,trackRef:c.track},c.props);c.updateState(t,!0,(function(){c.adaptHeight(),c.props.autoplay&&c.autoPlay("playing")})),"progressive"===c.props.lazyLoad&&(c.lazyLoadTimer=setInterval(c.progressiveLazyLoad,1e3)),c.ro=new K.c((function(){c.state.animating?(c.onWindowResized(!1),c.callbackTimers.push(setTimeout((function(){return c.onWindowResized()}),c.props.speed))):c.onWindowResized()})),c.ro.observe(c.list),document.querySelectorAll&&Array.prototype.forEach.call(document.querySelectorAll(".slick-slide"),(function(e){e.onfocus=c.props.pauseOnFocus?c.onSlideFocus:null,e.onblur=c.props.pauseOnFocus?c.onSlideBlur:null})),window.addEventListener?window.addEventListener("resize",c.onWindowResized):window.attachEvent("onresize",c.onWindowResized)})),(0,n.c)((0,s.c)(c),"componentWillUnmount",(function(){c.animationEndCallback&&clearTimeout(c.animationEndCallback),c.lazyLoadTimer&&clearInterval(c.lazyLoadTimer),c.callbackTimers.length&&(c.callbackTimers.forEach((function(e){return clearTimeout(e)})),c.callbackTimers=[]),window.addEventListener?window.removeEventListener("resize",c.onWindowResized):window.detachEvent("onresize",c.onWindowResized),c.autoplayTimer&&clearInterval(c.autoplayTimer),c.ro.disconnect()})),(0,n.c)((0,s.c)(c),"componentDidUpdate",(function(e){if(c.checkImagesLoad(),c.props.onReInit&&c.props.onReInit(),c.props.lazyLoad){var t=y((0,a.c)((0,a.c)({},c.props),c.state));t.length>0&&(c.setState((function(e){return{lazyLoadedList:e.lazyLoadedList.concat(t)}})),c.props.onLazyLoad&&c.props.onLazyLoad(t))}c.adaptHeight();var r=(0,a.c)((0,a.c)({listRef:c.list,trackRef:c.track},c.props),c.state),n=c.didPropsChange(e);n&&c.updateState(r,n,(function(){c.state.currentSlide>=i.Children.count(c.props.children)&&c.changeSlide({message:"index",index:i.Children.count(c.props.children)-c.props.slidesToShow,currentSlide:c.state.currentSlide}),e.autoplay===c.props.autoplay&&e.autoplaySpeed===c.props.autoplaySpeed||(!e.autoplay&&c.props.autoplay?c.autoPlay("playing"):c.props.autoplay?c.autoPlay("update"):c.pause("paused"))}))})),(0,n.c)((0,s.c)(c),"onWindowResized",(function(e){c.debouncedResize&&c.debouncedResize.cancel(),c.debouncedResize=v()((function(){return c.resizeWindow(e)}),50),c.debouncedResize()})),(0,n.c)((0,s.c)(c),"resizeWindow",(function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];if(Boolean(c.track&&c.track.node)){var t=(0,a.c)((0,a.c)({listRef:c.list,trackRef:c.track},c.props),c.state);c.updateState(t,e,(function(){c.props.autoplay?c.autoPlay("update"):c.pause("paused")})),c.setState({animating:!1}),clearTimeout(c.animationEndCallback),delete c.animationEndCallback}})),(0,n.c)((0,s.c)(c),"updateState",(function(e,t,r){var n=function(e){var t,r=i.Children.count(e.children),n=e.listRef,o=Math.ceil(L(n)),l=e.trackRef&&e.trackRef.node,c=Math.ceil(L(l));if(e.vertical)t=o;else{var s=e.centerMode&&2*parseInt(e.centerPadding);"string"==typeof e.centerPadding&&"%"===e.centerPadding.slice(-1)&&(s*=o/100),t=Math.ceil((o-s)/e.slidesToShow)}var d=n&&M(n.querySelector('[data-index="0"]')),u=d*e.slidesToShow,p=void 0===e.currentSlide?e.initialSlide:e.currentSlide;e.rtl&&void 0===e.currentSlide&&(p=r-1-e.initialSlide);var f=e.lazyLoadedList||[],h=y((0,a.c)((0,a.c)({},e),{},{currentSlide:p,lazyLoadedList:f})),g={slideCount:r,slideWidth:t,listWidth:o,trackWidth:c,currentSlide:p,slideHeight:d,listHeight:u,lazyLoadedList:f=f.concat(h)};return null===e.autoplaying&&e.autoplay&&(g.autoplaying="playing"),g}(e);e=(0,a.c)((0,a.c)((0,a.c)({},e),n),{},{slideIndex:n.currentSlide});var o=I(e);e=(0,a.c)((0,a.c)({},e),{},{left:o});var l=A(e);(t||i.Children.count(c.props.children)!==i.Children.count(e.children))&&(n.trackStyle=l),c.setState(n,r)})),(0,n.c)((0,s.c)(c),"ssrInit",(function(){if(c.props.variableWidth){var e=0,t=0,r=[],n=N((0,a.c)((0,a.c)((0,a.c)({},c.props),c.state),{},{slideCount:c.props.children.length})),o=F((0,a.c)((0,a.c)((0,a.c)({},c.props),c.state),{},{slideCount:c.props.children.length}));c.props.children.forEach((function(t){r.push(t.props.style.width),e+=t.props.style.width}));for(var l=0;l<n;l++)t+=r[r.length-1-l],e+=r[r.length-1-l];for(var s=0;s<o;s++)e+=r[s];for(var d=0;d<c.state.currentSlide;d++)t+=r[d];var u={width:e+"px",left:-t+"px"};if(c.props.centerMode){var p="".concat(r[c.state.currentSlide],"px");u.left="calc(".concat(u.left," + (100% - ").concat(p,") / 2 ) ")}return{trackStyle:u}}var f=i.Children.count(c.props.children),h=(0,a.c)((0,a.c)((0,a.c)({},c.props),c.state),{},{slideCount:f}),g=N(h)+F(h)+f,v=100/c.props.slidesToShow*g,b=100/g,m=-b*(N(h)+c.state.currentSlide)*v/100;return c.props.centerMode&&(m+=(100-b*v/100)/2),{slideWidth:b+"%",trackStyle:{width:v+"%",left:m+"%"}}})),(0,n.c)((0,s.c)(c),"checkImagesLoad",(function(){var e=c.list&&c.list.querySelectorAll&&c.list.querySelectorAll(".slick-slide img")||[],t=e.length,r=0;Array.prototype.forEach.call(e,(function(e){var n=function(){return++r&&r>=t&&c.onWindowResized()};if(e.onclick){var o=e.onclick;e.onclick=function(){o(),e.parentNode.focus()}}else e.onclick=function(){return e.parentNode.focus()};e.onload||(c.props.lazyLoad?e.onload=function(){c.adaptHeight(),c.callbackTimers.push(setTimeout(c.onWindowResized,c.props.speed))}:(e.onload=n,e.onerror=function(){n(),c.props.onLazyLoadError&&c.props.onLazyLoadError()}))}))})),(0,n.c)((0,s.c)(c),"progressiveLazyLoad",(function(){for(var e=[],t=(0,a.c)((0,a.c)({},c.props),c.state),r=c.state.currentSlide;r<c.state.slideCount+F(t);r++)if(c.state.lazyLoadedList.indexOf(r)<0){e.push(r);break}for(var n=c.state.currentSlide-1;n>=-N(t);n--)if(c.state.lazyLoadedList.indexOf(n)<0){e.push(n);break}e.length>0?(c.setState((function(t){return{lazyLoadedList:t.lazyLoadedList.concat(e)}})),c.props.onLazyLoad&&c.props.onLazyLoad(e)):c.lazyLoadTimer&&(clearInterval(c.lazyLoadTimer),delete c.lazyLoadTimer)})),(0,n.c)((0,s.c)(c),"slideHandler",(function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=c.props,n=r.asNavFor,o=r.beforeChange,i=r.onLazyLoad,l=r.speed,s=r.afterChange,d=c.state.currentSlide,u=function(e){var t=e.waitForAnimate,r=e.animating,n=e.fade,o=e.infinite,i=e.index,l=e.slideCount,c=e.lazyLoad,s=e.currentSlide,d=e.centerMode,u=e.slidesToScroll,p=e.slidesToShow,f=e.useCSS,h=e.lazyLoadedList;if(t&&r)return{};var g,v,b,m=i,k={},S={},x=o?i:w(i,0,l-1);if(n){if(!o&&(i<0||i>=l))return{};i<0?m=i+l:i>=l&&(m=i-l),c&&h.indexOf(m)<0&&(h=h.concat(m)),k={animating:!0,currentSlide:m,lazyLoadedList:h,targetSlide:m},S={animating:!1,targetSlide:m}}else g=m,m<0?(g=m+l,o?l%u!=0&&(g=l-l%u):g=0):!z(e)&&m>s?m=g=s:d&&m>=l?(m=o?l:l-1,g=o?0:l-1):m>=l&&(g=m-l,o?l%u!=0&&(g=0):g=l-p),!o&&m+p>=l&&(g=l-p),v=I((0,a.c)((0,a.c)({},e),{},{slideIndex:m})),b=I((0,a.c)((0,a.c)({},e),{},{slideIndex:g})),o||(v===b&&(m=g),v=b),c&&(h=h.concat(y((0,a.c)((0,a.c)({},e),{},{currentSlide:m})))),f?(k={animating:!0,currentSlide:g,trackStyle:O((0,a.c)((0,a.c)({},e),{},{left:v})),lazyLoadedList:h,targetSlide:x},S={animating:!1,currentSlide:g,trackStyle:A((0,a.c)((0,a.c)({},e),{},{left:b})),swipeLeft:null,targetSlide:x}):k={currentSlide:g,trackStyle:A((0,a.c)((0,a.c)({},e),{},{left:b})),lazyLoadedList:h,targetSlide:x};return{state:k,nextState:S}}((0,a.c)((0,a.c)((0,a.c)({index:e},c.props),c.state),{},{trackRef:c.track,useCSS:c.props.useCSS&&!t})),p=u.state,h=u.nextState;if(p){o&&o(d,p.currentSlide);var g=p.lazyLoadedList.filter((function(e){return c.state.lazyLoadedList.indexOf(e)<0}));i&&g.length>0&&i(g),!c.props.waitForAnimate&&c.animationEndCallback&&(clearTimeout(c.animationEndCallback),s&&s(d),delete c.animationEndCallback),c.setState(p,(function(){n&&c.asNavForIndex!==e&&(c.asNavForIndex=e,n.innerSlider.slideHandler(e)),h&&(c.animationEndCallback=setTimeout((function(){var e=h.animating,t=(0,f.c)(h,["animating"]);c.setState(t,(function(){c.callbackTimers.push(setTimeout((function(){return c.setState({animating:e})}),10)),s&&s(p.currentSlide),delete c.animationEndCallback}))}),l))}))}})),(0,n.c)((0,s.c)(c),"changeSlide",(function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=function(e,t){var r,n,o,i,l=e.slidesToScroll,c=e.slidesToShow,s=e.slideCount,d=e.currentSlide,u=e.targetSlide,p=e.lazyLoad,f=e.infinite;if(r=s%l!=0?0:(s-d)%l,"previous"===t.message)i=d-(o=0===r?l:c-r),p&&!f&&(i=-1==(n=d-o)?s-1:n),f||(i=u-l);else if("next"===t.message)i=d+(o=0===r?l:r),p&&!f&&(i=(d+l)%s+r),f||(i=u+l);else if("dots"===t.message)i=t.index*t.slidesToScroll;else if("children"===t.message){if(i=t.index,f){var h=Z((0,a.c)((0,a.c)({},e),{},{targetSlide:i}));i>t.currentSlide&&"left"===h?i-=s:i<t.currentSlide&&"right"===h&&(i+=s)}}else"index"===t.message&&(i=Number(t.index));return i}((0,a.c)((0,a.c)({},c.props),c.state),e);if((0===r||r)&&(!0===t?c.slideHandler(r,t):c.slideHandler(r),c.props.autoplay&&c.autoPlay("update"),c.props.focusOnSelect)){var n=c.list.querySelectorAll(".slick-current");n[0]&&n[0].focus()}})),(0,n.c)((0,s.c)(c),"clickHandler",(function(e){!1===c.clickable&&(e.stopPropagation(),e.preventDefault()),c.clickable=!0})),(0,n.c)((0,s.c)(c),"keyHandler",(function(e){var t=function(e,t,r){return e.target.tagName.match("TEXTAREA|INPUT|SELECT")||!t?"":37===e.keyCode?r?"next":"previous":39===e.keyCode?r?"previous":"next":""}(e,c.props.accessibility,c.props.rtl);""!==t&&c.changeSlide({message:t})})),(0,n.c)((0,s.c)(c),"selectHandler",(function(e){c.changeSlide(e)})),(0,n.c)((0,s.c)(c),"disableBodyScroll",(function(){window.ontouchmove=function(e){(e=e||window.event).preventDefault&&e.preventDefault(),e.returnValue=!1}})),(0,n.c)((0,s.c)(c),"enableBodyScroll",(function(){window.ontouchmove=null})),(0,n.c)((0,s.c)(c),"swipeStart",(function(e){c.props.verticalSwiping&&c.disableBodyScroll();var t=function(e,t,r){return"IMG"===e.target.tagName&&k(e),!t||!r&&-1!==e.type.indexOf("mouse")?"":{dragging:!0,touchObject:{startX:e.touches?e.touches[0].pageX:e.clientX,startY:e.touches?e.touches[0].pageY:e.clientY,curX:e.touches?e.touches[0].pageX:e.clientX,curY:e.touches?e.touches[0].pageY:e.clientY}}}(e,c.props.swipe,c.props.draggable);""!==t&&c.setState(t)})),(0,n.c)((0,s.c)(c),"swipeMove",(function(e){var t=function(e,t){var r=t.scrolling,n=t.animating,o=t.vertical,i=t.swipeToSlide,l=t.verticalSwiping,c=t.rtl,s=t.currentSlide,d=t.edgeFriction,u=t.edgeDragged,p=t.onEdge,f=t.swiped,h=t.swiping,g=t.slideCount,v=t.slidesToScroll,b=t.infinite,m=t.touchObject,w=t.swipeEvent,y=t.listHeight,S=t.listWidth;if(!r){if(n)return k(e);o&&i&&l&&k(e);var x,C={},T=I(t);m.curX=e.touches?e.touches[0].pageX:e.clientX,m.curY=e.touches?e.touches[0].pageY:e.clientY,m.swipeLength=Math.round(Math.sqrt(Math.pow(m.curX-m.startX,2)));var L=Math.round(Math.sqrt(Math.pow(m.curY-m.startY,2)));if(!l&&!h&&L>10)return{scrolling:!0};l&&(m.swipeLength=L);var M=(c?-1:1)*(m.curX>m.startX?1:-1);l&&(M=m.curY>m.startY?1:-1);var H=Math.ceil(g/v),W=E(t.touchObject,l),P=m.swipeLength;return b||(0===s&&("right"===W||"down"===W)||s+1>=H&&("left"===W||"up"===W)||!z(t)&&("left"===W||"up"===W))&&(P=m.swipeLength*d,!1===u&&p&&(p(W),C.edgeDragged=!0)),!f&&w&&(w(W),C.swiped=!0),x=o?T+P*(y/S)*M:c?T-P*M:T+P*M,l&&(x=T+P*M),C=(0,a.c)((0,a.c)({},C),{},{touchObject:m,swipeLeft:x,trackStyle:A((0,a.c)((0,a.c)({},t),{},{left:x}))}),Math.abs(m.curX-m.startX)<.8*Math.abs(m.curY-m.startY)||m.swipeLength>10&&(C.swiping=!0,k(e)),C}}(e,(0,a.c)((0,a.c)((0,a.c)({},c.props),c.state),{},{trackRef:c.track,listRef:c.list,slideIndex:c.state.currentSlide}));t&&(t.swiping&&(c.clickable=!1),c.setState(t))})),(0,n.c)((0,s.c)(c),"swipeEnd",(function(e){var t=function(e,t){var r=t.dragging,n=t.swipe,o=t.touchObject,i=t.listWidth,l=t.touchThreshold,c=t.verticalSwiping,s=t.listHeight,d=t.swipeToSlide,u=t.scrolling,p=t.onSwipe,f=t.targetSlide,h=t.currentSlide,g=t.infinite;if(!r)return n&&k(e),{};var v=c?s/l:i/l,b=E(o,c),m={dragging:!1,edgeDragged:!1,scrolling:!1,swiping:!1,swiped:!1,swipeLeft:null,touchObject:{}};if(u)return m;if(!o.swipeLength)return m;if(o.swipeLength>v){var w,y;k(e),p&&p(b);var S=g?h:f;switch(b){case"left":case"up":y=S+P(t),w=d?W(t,y):y,m.currentDirection=0;break;case"right":case"down":y=S-P(t),w=d?W(t,y):y,m.currentDirection=1;break;default:w=S}m.triggerSlideHandler=w}else{var x=I(t);m.trackStyle=O((0,a.c)((0,a.c)({},t),{},{left:x}))}return m}(e,(0,a.c)((0,a.c)((0,a.c)({},c.props),c.state),{},{trackRef:c.track,listRef:c.list,slideIndex:c.state.currentSlide}));if(t){var r=t.triggerSlideHandler;delete t.triggerSlideHandler,c.setState(t),void 0!==r&&(c.slideHandler(r),c.props.verticalSwiping&&c.enableBodyScroll())}})),(0,n.c)((0,s.c)(c),"touchEnd",(function(e){c.swipeEnd(e),c.clickable=!0})),(0,n.c)((0,s.c)(c),"slickPrev",(function(){c.callbackTimers.push(setTimeout((function(){return c.changeSlide({message:"previous"})}),0))})),(0,n.c)((0,s.c)(c),"slickNext",(function(){c.callbackTimers.push(setTimeout((function(){return c.changeSlide({message:"next"})}),0))})),(0,n.c)((0,s.c)(c),"slickGoTo",(function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(e=Number(e),isNaN(e))return"";c.callbackTimers.push(setTimeout((function(){return c.changeSlide({message:"index",index:e,currentSlide:c.state.currentSlide},t)}),0))})),(0,n.c)((0,s.c)(c),"play",(function(){var e;if(c.props.rtl)e=c.state.currentSlide-c.props.slidesToScroll;else{if(!z((0,a.c)((0,a.c)({},c.props),c.state)))return!1;e=c.state.currentSlide+c.props.slidesToScroll}c.slideHandler(e)})),(0,n.c)((0,s.c)(c),"autoPlay",(function(e){c.autoplayTimer&&clearInterval(c.autoplayTimer);var t=c.state.autoplaying;if("update"===e){if("hovered"===t||"focused"===t||"paused"===t)return}else if("leave"===e){if("paused"===t||"focused"===t)return}else if("blur"===e&&("paused"===t||"hovered"===t))return;c.autoplayTimer=setInterval(c.play,c.props.autoplaySpeed+50),c.setState({autoplaying:"playing"})})),(0,n.c)((0,s.c)(c),"pause",(function(e){c.autoplayTimer&&(clearInterval(c.autoplayTimer),c.autoplayTimer=null);var t=c.state.autoplaying;"paused"===e?c.setState({autoplaying:"paused"}):"focused"===e?"hovered"!==t&&"playing"!==t||c.setState({autoplaying:"focused"}):"playing"===t&&c.setState({autoplaying:"hovered"})})),(0,n.c)((0,s.c)(c),"onDotsOver",(function(){return c.props.autoplay&&c.pause("hovered")})),(0,n.c)((0,s.c)(c),"onDotsLeave",(function(){return c.props.autoplay&&"hovered"===c.state.autoplaying&&c.autoPlay("leave")})),(0,n.c)((0,s.c)(c),"onTrackOver",(function(){return c.props.autoplay&&c.pause("hovered")})),(0,n.c)((0,s.c)(c),"onTrackLeave",(function(){return c.props.autoplay&&"hovered"===c.state.autoplaying&&c.autoPlay("leave")})),(0,n.c)((0,s.c)(c),"onSlideFocus",(function(){return c.props.autoplay&&c.pause("focused")})),(0,n.c)((0,s.c)(c),"onSlideBlur",(function(){return c.props.autoplay&&"focused"===c.state.autoplaying&&c.autoPlay("blur")})),(0,n.c)((0,s.c)(c),"render",(function(){var e,t,r,n=m()("slick-slider",c.props.className,{"slick-vertical":c.props.vertical,"slick-initialized":!0}),l=(0,a.c)((0,a.c)({},c.props),c.state),s=H(l,["fade","cssEase","speed","infinite","centerMode","focusOnSelect","currentSlide","lazyLoad","lazyLoadedList","rtl","slideWidth","slideHeight","listHeight","vertical","slidesToShow","slidesToScroll","slideCount","trackStyle","variableWidth","unslick","centerPadding","targetSlide","useCSS"]),d=c.props.pauseOnHover;if(s=(0,a.c)((0,a.c)({},s),{},{onMouseEnter:d?c.onTrackOver:null,onMouseLeave:d?c.onTrackLeave:null,onMouseOver:d?c.onTrackOver:null,focusOnSelect:c.props.focusOnSelect&&c.clickable?c.selectHandler:null}),!0===c.props.dots&&c.state.slideCount>=c.props.slidesToShow){var u=H(l,["dotsClass","slideCount","slidesToShow","currentSlide","slidesToScroll","clickHandler","children","customPaging","infinite","appendDots"]),p=c.props.pauseOnDotsHover;u=(0,a.c)((0,a.c)({},u),{},{clickHandler:c.changeSlide,onMouseEnter:p?c.onDotsLeave:null,onMouseOver:p?c.onDotsOver:null,onMouseLeave:p?c.onDotsLeave:null}),e=i.createElement(U,u)}var f=H(l,["infinite","centerMode","currentSlide","slideCount","slidesToShow","prevArrow","nextArrow"]);f.clickHandler=c.changeSlide,c.props.arrows&&(t=i.createElement(V,f),r=i.createElement($,f));var h=null;c.props.vertical&&(h={height:c.state.listHeight});var g=null;!1===c.props.vertical?!0===c.props.centerMode&&(g={padding:"0px "+c.props.centerPadding}):!0===c.props.centerMode&&(g={padding:c.props.centerPadding+" 0px"});var v=(0,a.c)((0,a.c)({},h),g),b=c.props.touchMove,w={className:"slick-list",style:v,onClick:c.clickHandler,onMouseDown:b?c.swipeStart:null,onMouseMove:c.state.dragging&&b?c.swipeMove:null,onMouseUp:b?c.swipeEnd:null,onMouseLeave:c.state.dragging&&b?c.swipeEnd:null,onTouchStart:b?c.swipeStart:null,onTouchMove:c.state.dragging&&b?c.swipeMove:null,onTouchEnd:b?c.touchEnd:null,onTouchCancel:c.state.dragging&&b?c.swipeEnd:null,onKeyDown:c.props.accessibility?c.keyHandler:null},k={className:n,dir:"ltr",style:c.props.style};return c.props.unslick&&(w={className:"slick-list"},k={className:n}),i.createElement("div",k,c.props.unslick?"":t,i.createElement("div",(0,o.c)({ref:c.listRefHandler},w),i.createElement(q,(0,o.c)({ref:c.trackRefHandler},s),c.props.children)),c.props.unslick?"":r,c.props.unslick?"":e)})),c.list=null,c.track=null,c.state=(0,a.c)((0,a.c)({},h),{},{currentSlide:c.props.initialSlide,slideCount:i.Children.count(c.props.children)}),c.callbackTimers=[],c.clickable=!0,c.debouncedResize=null;var d=c.ssrInit();return c.state=(0,a.c)((0,a.c)({},c.state),d),c}return(0,c.c)(r,[{key:"didPropsChange",value:function(e){for(var t=!1,r=0,n=Object.keys(this.props);r<n.length;r++){var o=n[r];if(!e.hasOwnProperty(o)){t=!0;break}if("object"!==(0,p.c)(e[o])&&"function"!=typeof e[o]&&e[o]!==this.props[o]){t=!0;break}}return t||i.Children.count(this.props.children)!==i.Children.count(e.children)}}]),r}(i.Component),Q=r(67820),ee=r.n(Q);const te={accessibility:!0,adaptiveHeight:!1,afterChange:null,appendDots:function(e){return i.createElement("ul",{style:{display:"block"}},e)},arrows:!0,autoplay:!1,autoplaySpeed:3e3,beforeChange:null,centerMode:!1,centerPadding:"50px",className:"",cssEase:"ease",customPaging:function(e){return i.createElement("button",null,e+1)},dots:!1,dotsClass:"slick-dots",draggable:!0,easing:"linear",edgeFriction:.35,fade:!1,focusOnSelect:!1,infinite:!0,initialSlide:0,lazyLoad:null,nextArrow:null,onEdge:null,onInit:null,onLazyLoadError:null,onReInit:null,pauseOnDotsHover:!1,pauseOnFocus:!1,pauseOnHover:!0,prevArrow:null,responsive:null,rows:1,rtl:!1,slide:"div",slidesPerRow:1,slidesToScroll:1,slidesToShow:1,speed:500,swipe:!0,swipeEvent:null,swipeToSlide:!1,touchMove:!0,touchThreshold:5,useCSS:!0,useTransform:!0,variableWidth:!1,vertical:!1,waitForAnimate:!0};const re=function(e){(0,d.c)(r,e);var t=(0,u.c)(r);function r(e){var o;return(0,l.c)(this,r),o=t.call(this,e),(0,n.c)((0,s.c)(o),"innerSliderRefHandler",(function(e){return o.innerSlider=e})),(0,n.c)((0,s.c)(o),"slickPrev",(function(){return o.innerSlider.slickPrev()})),(0,n.c)((0,s.c)(o),"slickNext",(function(){return o.innerSlider.slickNext()})),(0,n.c)((0,s.c)(o),"slickGoTo",(function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return o.innerSlider.slickGoTo(e,t)})),(0,n.c)((0,s.c)(o),"slickPause",(function(){return o.innerSlider.pause("paused")})),(0,n.c)((0,s.c)(o),"slickPlay",(function(){return o.innerSlider.autoPlay("play")})),o.state={breakpoint:null},o._responsiveMediaHandlers=[],o}return(0,c.c)(r,[{key:"media",value:function(e,t){var r=window.matchMedia(e),n=function(e){e.matches&&t()};r.addListener(n),n(r),this._responsiveMediaHandlers.push({mql:r,query:e,listener:n})}},{key:"componentDidMount",value:function(){var e=this;if(this.props.responsive){var t=this.props.responsive.map((function(e){return e.breakpoint}));t.sort((function(e,t){return e-t})),t.forEach((function(r,n){var o;o=0===n?ee()({minWidth:0,maxWidth:r}):ee()({minWidth:t[n-1]+1,maxWidth:r}),G()&&e.media(o,(function(){e.setState({breakpoint:r})}))}));var r=ee()({minWidth:t.slice(-1)[0]});G()&&this.media(r,(function(){e.setState({breakpoint:null})}))}}},{key:"componentWillUnmount",value:function(){this._responsiveMediaHandlers.forEach((function(e){e.mql.removeListener(e.listener)}))}},{key:"render",value:function(){var e,t,r=this;(e=this.state.breakpoint?"unslick"===(t=this.props.responsive.filter((function(e){return e.breakpoint===r.state.breakpoint})))[0].settings?"unslick":(0,a.c)((0,a.c)((0,a.c)({},te),this.props),t[0].settings):(0,a.c)((0,a.c)({},te),this.props)).centerMode&&(e.slidesToScroll,e.slidesToScroll=1),e.fade&&(e.slidesToShow,e.slidesToScroll,e.slidesToShow=1,e.slidesToScroll=1);var n=i.Children.toArray(this.props.children);n=n.filter((function(e){return"string"==typeof e?!!e.trim():!!e})),e.variableWidth&&(e.rows>1||e.slidesPerRow>1)&&(console.warn("variableWidth is not supported in case of rows > 1 or slidesPerRow > 1"),e.variableWidth=!1);for(var l=[],c=null,s=0;s<n.length;s+=e.rows*e.slidesPerRow){for(var d=[],u=s;u<s+e.rows*e.slidesPerRow;u+=e.slidesPerRow){for(var p=[],f=u;f<u+e.slidesPerRow&&(e.variableWidth&&n[f].props.style&&(c=n[f].props.style.width),!(f>=n.length));f+=1)p.push(i.cloneElement(n[f],{key:100*s+10*u+f,tabIndex:-1,style:{width:"".concat(100/e.slidesPerRow,"%"),display:"inline-block"}}));d.push(i.createElement("div",{key:10*s+u},p))}e.variableWidth?l.push(i.createElement("div",{key:s,style:{width:c}},d)):l.push(i.createElement("div",{key:s},d))}if("unslick"===e){var h="regular slider "+(this.props.className||"");return i.createElement("div",{className:h},n)}return l.length<=e.slidesToShow&&(e.unslick=!0),i.createElement(J,(0,o.c)({style:this.props.style,ref:this.innerSliderRefHandler},e),l)}}]),r}(i.Component);var ne=r(14756),oe=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(n=Object.getOwnPropertySymbols(e);o<n.length;o++)t.indexOf(n[o])<0&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(r[n[o]]=e[n[o]])}return r};const ie=i.forwardRef((function(e,t){var r,a=e.dots,l=void 0===a||a,c=e.arrows,s=void 0!==c&&c,d=e.draggable,u=void 0!==d&&d,p=e.dotPosition,f=void 0===p?"bottom":p,h=oe(e,["dots","arrows","draggable","dotPosition"]),g=i.useContext(ne.MT),v=g.getPrefixCls,b=g.direction,w=i.useRef(),k=function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];w.current.slickGoTo(e,t)};i.useImperativeHandle(t,(function(){return{goTo:k,autoPlay:w.current.innerSlider.autoPlay,innerSlider:w.current.innerSlider,prev:w.current.slickPrev,next:w.current.slickNext}}),[w.current]);var y=i.useRef(i.Children.count(h.children));i.useEffect((function(){y.current!==i.Children.count(h.children)&&(k(h.initialSlide||0,!1),y.current=i.Children.count(h.children))}),[h.children]);var S=(0,o.c)({},h);"fade"===S.effect&&(S.fade=!0);var x=v("carousel",S.prefixCls),C="slick-dots";S.vertical="left"===f||"right"===f;var T=!!l,L=m()(C,"".concat(C,"-").concat(f),"boolean"!=typeof l&&(null==l?void 0:l.className)),M=m()(x,(r={},(0,n.c)(r,"".concat(x,"-rtl"),"rtl"===b),(0,n.c)(r,"".concat(x,"-vertical"),S.vertical),r));return i.createElement("div",{className:M},i.createElement(re,(0,o.c)({ref:w},S,{dots:T,dotsClass:L,arrows:s,draggable:u})))}))},16060:(e,t,r)=>{"use strict";r.r(t),r.d(t,{render:()=>z});var n=window.document,o=window.Math,i=window.HTMLElement,a=window.XMLHttpRequest,l=function(e,t){for(var r=0,n=e.length;r<n;r++)t(e[r])},c=function(e){return function(t,r,n){var o=e.createElement(t);if(null!=r)for(var i in r){var a=r[i];null!=a&&(null!=o[i]?o[i]=a:o.setAttribute(i,a))}return null!=n&&l(n,(function(t){o.appendChild("string"==typeof t?e.createTextNode(t):t)})),o}},s=c(n),d=function(e,t){return{}.hasOwnProperty.call(e,t)},u=function(e){return(""+e).toLowerCase()},p="github.com",f="https://api."+p,h=a&&"prototype"in a&&"withCredentials"in a.prototype,g=h&&i&&"attachShadow"in i.prototype&&!("prototype"in i.prototype.attachShadow),v=function(e,t,r){e.addEventListener?e.addEventListener(t,r,!1):e.attachEvent("on"+t,r)},b=function(e,t,r){e.removeEventListener?e.removeEventListener(t,r,!1):e.detachEvent("on"+t,r)},m={light:".btn:focus-visible,.social-count:focus-visible{outline:2px solid #0969da;outline-offset:-2px}.btn{color:#24292f;background-color:#ebf0f4;border-color:#ccd1d5;border-color:rgba(31,35,40,.15);background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg'%3e%3clinearGradient id='o' x2='0' y2='1'%3e%3cstop stop-color='%23f6f8fa'/%3e%3cstop offset='90%25' stop-color='%23ebf0f4'/%3e%3c/linearGradient%3e%3crect width='100%25' height='100%25' fill='url(%23o)'/%3e%3c/svg%3e\");background-image:-moz-linear-gradient(top, #f6f8fa, #ebf0f4 90%);background-image:linear-gradient(180deg, #f6f8fa, #ebf0f4 90%);filter:progid:DXImageTransform.Microsoft.Gradient(startColorstr='#FFF6F8FA', endColorstr='#FFEAEFF3')}:root .btn{filter:none}.btn:hover,.btn:focus{background-color:#e9ebef;background-position:0 -0.5em;border-color:#cbcdd1;border-color:rgba(31,35,40,.15);background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg'%3e%3clinearGradient id='o' x2='0' y2='1'%3e%3cstop stop-color='%23f3f4f6'/%3e%3cstop offset='90%25' stop-color='%23e9ebef'/%3e%3c/linearGradient%3e%3crect width='100%25' height='100%25' fill='url(%23o)'/%3e%3c/svg%3e\");background-image:-moz-linear-gradient(top, #f3f4f6, #e9ebef 90%);background-image:linear-gradient(180deg, #f3f4f6, #e9ebef 90%);filter:progid:DXImageTransform.Microsoft.Gradient(startColorstr='#FFF3F4F6', endColorstr='#FFE8EAEE')}:root .btn:hover,:root .btn:focus{filter:none}.btn:active{background-color:#e5e9ed;border-color:#c7cbcf;border-color:rgba(31,35,40,.15);background-image:none;filter:none}.social-count{color:#24292f;background-color:#fff;border-color:#dddedf;border-color:rgba(31,35,40,.15)}.social-count:hover,.social-count:focus{color:#0969da}.octicon-heart{color:#bf3989}",light_high_contrast:".btn:focus-visible,.social-count:focus-visible{outline:2px solid #0349b4;outline-offset:-2px}.btn{color:#0e1116;background-color:#e7ecf0;border-color:#2f3237;border-color:rgba(1,4,9,.8);background-image:none;filter:none}.btn:hover,.btn:focus{background-color:#c4cdd5;background-position:0 -0.5em;border-color:#282c32;border-color:rgba(1,4,9,.8);background-image:none;filter:none}.btn:active{background-color:#d8dde1;border-color:#2c2f34;border-color:rgba(1,4,9,.8)}.social-count{color:#0e1116;background-color:#fff;border-color:#34363a;border-color:rgba(1,4,9,.8)}.social-count:hover,.social-count:focus{color:#0349b4}.octicon-heart{color:#971368}",dark:".btn:focus-visible,.social-count:focus-visible{outline:2px solid #2f81f7;outline-offset:-2px}.btn{color:#c9d1d9;background-color:#1a1e23;border-color:#2f3439;border-color:rgba(240,246,252,.1);background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg'%3e%3clinearGradient id='o' x2='0' y2='1'%3e%3cstop stop-color='%2321262d'/%3e%3cstop offset='90%25' stop-color='%231a1e23'/%3e%3c/linearGradient%3e%3crect width='100%25' height='100%25' fill='url(%23o)'/%3e%3c/svg%3e\");background-image:-moz-linear-gradient(top, #21262d, #1a1e23 90%);background-image:linear-gradient(180deg, #21262d, #1a1e23 90%);filter:progid:DXImageTransform.Microsoft.Gradient(startColorstr='#FF21262D', endColorstr='#FF191D22')}:root .btn{filter:none}.btn:hover,.btn:focus{background-color:#292e33;background-position:0 -0.5em;border-color:#8b949e;background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg'%3e%3clinearGradient id='o' x2='0' y2='1'%3e%3cstop stop-color='%2330363d'/%3e%3cstop offset='90%25' stop-color='%23292e33'/%3e%3c/linearGradient%3e%3crect width='100%25' height='100%25' fill='url(%23o)'/%3e%3c/svg%3e\");background-image:-moz-linear-gradient(top, #30363d, #292e33 90%);background-image:linear-gradient(180deg, #30363d, #292e33 90%);filter:progid:DXImageTransform.Microsoft.Gradient(startColorstr='#FF30363D', endColorstr='#FF282D32')}:root .btn:hover,:root .btn:focus{filter:none}.btn:active{background-color:#161719;border-color:#8b949e;background-image:none;filter:none}.social-count{color:#c9d1d9;background-color:#0d1117;border-color:#24282e;border-color:rgba(240,246,252,.1)}.social-count:hover,.social-count:focus{color:#2f81f7}.octicon-heart{color:#db61a2}",dark_dimmed:".btn:focus-visible,.social-count:focus-visible{outline:2px solid #539bf5;outline-offset:-2px}.btn{color:#adbac7;background-color:#30363d;border-color:#40464e;border-color:rgba(205,217,229,.1);background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg'%3e%3clinearGradient id='o' x2='0' y2='1'%3e%3cstop stop-color='%23373e47'/%3e%3cstop offset='90%25' stop-color='%2330363d'/%3e%3c/linearGradient%3e%3crect width='100%25' height='100%25' fill='url(%23o)'/%3e%3c/svg%3e\");background-image:-moz-linear-gradient(top, #373e47, #30363d 90%);background-image:linear-gradient(180deg, #373e47, #30363d 90%);filter:progid:DXImageTransform.Microsoft.Gradient(startColorstr='#FF373E47', endColorstr='#FF2F353C')}:root .btn{filter:none}.btn:hover,.btn:focus{background-color:#3c444d;background-position:0 -0.5em;border-color:#768390;background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg'%3e%3clinearGradient id='o' x2='0' y2='1'%3e%3cstop stop-color='%23444c56'/%3e%3cstop offset='90%25' stop-color='%233c444d'/%3e%3c/linearGradient%3e%3crect width='100%25' height='100%25' fill='url(%23o)'/%3e%3c/svg%3e\");background-image:-moz-linear-gradient(top, #444c56, #3c444d 90%);background-image:linear-gradient(180deg, #444c56, #3c444d 90%);filter:progid:DXImageTransform.Microsoft.Gradient(startColorstr='#FF444C56', endColorstr='#FF3B434C')}:root .btn:hover,:root .btn:focus{filter:none}.btn:active{background-color:#2e3031;border-color:#768390;background-image:none;filter:none}.social-count{color:#adbac7;background-color:#22272e;border-color:#333940;border-color:rgba(205,217,229,.1)}.social-count:hover,.social-count:focus{color:#539bf5}.octicon-heart{color:#c96198}",dark_high_contrast:".btn:focus-visible,.social-count:focus-visible{outline:2px solid #71b7ff;outline-offset:-2px}.btn{color:#f0f3f6;background-color:#272b33;border-color:#7a828e;background-image:none;filter:none}.btn:hover,.btn:focus{background-color:#4a515b;background-position:0 -0.5em;border-color:#bdc4cc;background-image:none;filter:none}.btn:active{background-color:#1d1d1f;border-color:#bdc4cc}.social-count{color:#f0f3f6;background-color:#0a0c10;border-color:#7a828e}.social-count:hover,.social-count:focus{color:#71b7ff}.octicon-heart{color:#ef6eb1}"},w=function(e,t){return"@media(prefers-color-scheme:"+e+"){"+m[d(m,t)?t:e]+"}"},k=function(e){if(null==e)return m.light;if(d(m,e))return m[e];var t=function(e,t,r,n){null==t&&(t="&"),null==r&&(r="="),null==n&&(n=window.decodeURIComponent);var o={};return l(e.split(t),(function(e){if(""!==e){var t=e.split(r);o[n(t[0])]=null!=t[1]?n(t.slice(1).join(r)):void 0}})),o}(e,";",":",(function(e){return e.replace(/^[ \t\n\f\r]+|[ \t\n\f\r]+$/g,"")}));return m[d(m,t["no-preference"])?t["no-preference"]:"light"]+w("light",t.light)+w("dark",t.dark)},y={"comment-discussion":{heights:{16:{width:16,path:'<path d="M1.75 1h8.5c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 10.25 10H7.061l-2.574 2.573A1.458 1.458 0 0 1 2 11.543V10h-.25A1.75 1.75 0 0 1 0 8.25v-5.5C0 1.784.784 1 1.75 1ZM1.5 2.75v5.5c0 .138.112.25.25.25h1a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h3.5a.25.25 0 0 0 .25-.25v-5.5a.25.25 0 0 0-.25-.25h-8.5a.25.25 0 0 0-.25.25Zm13 2a.25.25 0 0 0-.25-.25h-.5a.75.75 0 0 1 0-1.5h.5c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 14.25 12H14v1.543a1.458 1.458 0 0 1-2.487 1.03L9.22 12.28a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215l2.22 2.22v-2.19a.75.75 0 0 1 .75-.75h1a.25.25 0 0 0 .25-.25Z"></path>'}}},download:{heights:{16:{width:16,path:'<path d="M2.75 14A1.75 1.75 0 0 1 1 12.25v-2.5a.75.75 0 0 1 1.5 0v2.5c0 .138.112.25.25.25h10.5a.25.25 0 0 0 .25-.25v-2.5a.75.75 0 0 1 1.5 0v2.5A1.75 1.75 0 0 1 13.25 14Z"></path><path d="M7.25 7.689V2a.75.75 0 0 1 1.5 0v5.689l1.97-1.969a.749.749 0 1 1 1.06 1.06l-3.25 3.25a.749.749 0 0 1-1.06 0L4.22 6.78a.749.749 0 1 1 1.06-1.06l1.97 1.969Z"></path>'}}},eye:{heights:{16:{width:16,path:'<path d="M8 2c1.981 0 3.671.992 4.933 2.078 1.27 1.091 2.187 2.345 2.637 3.023a1.62 1.62 0 0 1 0 1.798c-.45.678-1.367 1.932-2.637 3.023C11.67 13.008 9.981 14 8 14c-1.981 0-3.671-.992-4.933-2.078C1.797 10.83.88 9.576.43 8.898a1.62 1.62 0 0 1 0-1.798c.45-.677 1.367-1.931 2.637-3.022C4.33 2.992 6.019 2 8 2ZM1.679 7.932a.12.12 0 0 0 0 .136c.411.622 1.241 1.75 2.366 2.717C5.176 11.758 6.527 12.5 8 12.5c1.473 0 2.825-.742 3.955-1.715 1.124-.967 1.954-2.096 2.366-2.717a.12.12 0 0 0 0-.136c-.412-.621-1.242-1.75-2.366-2.717C10.824 4.242 9.473 3.5 8 3.5c-1.473 0-2.825.742-3.955 1.715-1.124.967-1.954 2.096-2.366 2.717ZM8 10a2 2 0 1 1-.001-3.999A2 2 0 0 1 8 10Z"></path>'}}},heart:{heights:{16:{width:16,path:'<path d="m8 14.25.345.666a.75.75 0 0 1-.69 0l-.008-.004-.018-.01a7.152 7.152 0 0 1-.31-.17 22.055 22.055 0 0 1-3.434-2.414C2.045 10.731 0 8.35 0 5.5 0 2.836 2.086 1 4.25 1 5.797 1 7.153 1.802 8 3.02 8.847 1.802 10.203 1 11.75 1 13.914 1 16 2.836 16 5.5c0 2.85-2.045 5.231-3.885 6.818a22.066 22.066 0 0 1-3.744 2.584l-.018.01-.006.003h-.002ZM4.25 2.5c-1.336 0-2.75 1.164-2.75 3 0 2.15 1.58 4.144 3.365 5.682A20.58 20.58 0 0 0 8 13.393a20.58 20.58 0 0 0 3.135-2.211C12.92 9.644 14.5 7.65 14.5 5.5c0-1.836-1.414-3-2.75-3-1.373 0-2.609.986-3.029 2.456a.749.749 0 0 1-1.442 0C6.859 3.486 5.623 2.5 4.25 2.5Z"></path>'}}},"issue-opened":{heights:{16:{width:16,path:'<path d="M8 9.5a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path><path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Z"></path>'}}},"mark-github":{heights:{16:{width:16,path:'<path d="M8 0c4.42 0 8 3.58 8 8a8.013 8.013 0 0 1-5.45 7.59c-.4.08-.55-.17-.55-.38 0-.27.01-1.13.01-2.2 0-.75-.25-1.23-.54-1.48 1.78-.2 3.65-.88 3.65-3.95 0-.88-.31-1.59-.82-2.15.08-.2.36-1.02-.08-2.12 0 0-.67-.22-2.2.82-.64-.18-1.32-.27-2-.27-.68 0-1.36.09-2 .27-1.53-1.03-2.2-.82-2.2-.82-.44 1.1-.16 1.92-.08 2.12-.51.56-.82 1.28-.82 2.15 0 3.06 1.86 3.75 3.64 3.95-.23.2-.44.55-.51 1.07-.46.21-1.61.55-2.33-.66-.15-.24-.6-.83-1.23-.82-.67.01-.27.38.01.53.34.19.73.9.82 1.13.16.45.68 1.31 2.69.94 0 .67.01 1.3.01 1.49 0 .21-.15.45-.55.38A7.995 7.995 0 0 1 0 8c0-4.42 3.58-8 8-8Z"></path>'}}},package:{heights:{16:{width:16,path:'<path d="m8.878.392 5.25 3.045c.54.314.872.89.872 1.514v6.098a1.75 1.75 0 0 1-.872 1.514l-5.25 3.045a1.75 1.75 0 0 1-1.756 0l-5.25-3.045A1.75 1.75 0 0 1 1 11.049V4.951c0-.624.332-1.201.872-1.514L7.122.392a1.75 1.75 0 0 1 1.756 0ZM7.875 1.69l-4.63 2.685L8 7.133l4.755-2.758-4.63-2.685a.248.248 0 0 0-.25 0ZM2.5 5.677v5.372c0 .09.047.171.125.216l4.625 2.683V8.432Zm6.25 8.271 4.625-2.683a.25.25 0 0 0 .125-.216V5.677L8.75 8.432Z"></path>'}}},play:{heights:{16:{width:16,path:'<path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Zm4.879-2.773 4.264 2.559a.25.25 0 0 1 0 .428l-4.264 2.559A.25.25 0 0 1 6 10.559V5.442a.25.25 0 0 1 .379-.215Z"></path>'}}},"repo-forked":{heights:{16:{width:16,path:'<path d="M5 5.372v.878c0 .414.336.75.75.75h4.5a.75.75 0 0 0 .75-.75v-.878a2.25 2.25 0 1 1 1.5 0v.878a2.25 2.25 0 0 1-2.25 2.25h-1.5v2.128a2.251 2.251 0 1 1-1.5 0V8.5h-1.5A2.25 2.25 0 0 1 3.5 6.25v-.878a2.25 2.25 0 1 1 1.5 0ZM5 3.25a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Zm6.75.75a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Zm-3 8.75a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Z"></path>'}}},"repo-template":{heights:{16:{width:16,path:'<path d="M13.25 8a.75.75 0 0 1 .75.75v4.5a.75.75 0 0 1-.75.75h-2.5a.75.75 0 0 1 0-1.5h1.75v-2h-.75a.75.75 0 0 1 0-1.5h.75v-.25a.75.75 0 0 1 .75-.75ZM5 12.25a.25.25 0 0 1 .25-.25h3.5a.25.25 0 0 1 .25.25v3.25a.25.25 0 0 1-.4.2l-1.45-1.087a.249.249 0 0 0-.3 0L5.4 15.7a.25.25 0 0 1-.4-.2ZM2.75 8a.75.75 0 0 1 .75.75v.268c.083-.012.166-.018.25-.018h.5a.75.75 0 0 1 0 1.5h-.5a.25.25 0 0 0-.25.25v.75c0 .28.114.532.3.714a.75.75 0 1 1-1.05 1.072A2.495 2.495 0 0 1 2 11.5V8.75A.75.75 0 0 1 2.75 8ZM11 .75a.75.75 0 0 1 .75-.75h1.5a.75.75 0 0 1 .75.75v1.5a.75.75 0 0 1-1.5 0V1.5h-.75A.75.75 0 0 1 11 .75Zm-5 0A.75.75 0 0 1 6.75 0h2.5a.75.75 0 0 1 0 1.5h-2.5A.75.75 0 0 1 6 .75Zm0 9A.75.75 0 0 1 6.75 9h2.5a.75.75 0 0 1 0 1.5h-2.5A.75.75 0 0 1 6 9.75ZM4.992.662a.75.75 0 0 1-.636.848c-.436.063-.783.41-.846.846a.751.751 0 0 1-1.485-.212A2.501 2.501 0 0 1 4.144.025a.75.75 0 0 1 .848.637ZM2.75 4a.75.75 0 0 1 .75.75v1.5a.75.75 0 0 1-1.5 0v-1.5A.75.75 0 0 1 2.75 4Zm10.5 0a.75.75 0 0 1 .75.75v1.5a.75.75 0 0 1-1.5 0v-1.5a.75.75 0 0 1 .75-.75Z"></path>'}}},star:{heights:{16:{width:16,path:'<path d="M8 .25a.75.75 0 0 1 .673.418l1.882 3.815 4.21.612a.75.75 0 0 1 .416 1.279l-3.046 2.97.719 4.192a.751.751 0 0 1-1.088.791L8 12.347l-3.766 1.98a.75.75 0 0 1-1.088-.79l.72-4.194L.818 6.374a.75.75 0 0 1 .416-1.28l4.21-.611L7.327.668A.75.75 0 0 1 8 .25Zm0 2.445L6.615 5.5a.75.75 0 0 1-.564.41l-3.097.45 2.24 2.184a.75.75 0 0 1 .216.664l-.528 3.084 2.769-1.456a.75.75 0 0 1 .698 0l2.77 1.456-.53-3.084a.75.75 0 0 1 .216-.664l2.24-2.183-3.096-.45a.75.75 0 0 1-.564-.41L8 2.694Z"></path>'}}}},S=function(e,t){e=u(e).replace(/^octicon-/,""),d(y,e)||(e="mark-github");var r=t>=24&&24 in y[e].heights?24:16,n=y[e].heights[r];return'<svg viewBox="0 0 '+n.width+" "+r+'" width="'+t*n.width/r+'" height="'+t+'" class="octicon octicon-'+e+'" aria-hidden="true">'+n.path+"</svg>"},x={},C=function(e,t){var r=x[e]||(x[e]=[]);if(!(r.push(t)>1)){var n=function(e){var t;return function(){t||(t=1,e.apply(this,arguments))}}((function(){for(delete x[e];t=r.shift();)t.apply(null,arguments)}));if(h){var o=new a;v(o,"abort",n),v(o,"error",n),v(o,"load",(function(){var e;try{e=JSON.parse(this.responseText)}catch(t){return void n(t)}n(200!==this.status,e)})),o.open("GET",e),o.send()}else{var i=this||window;i._=function(e){i._=null,n(200!==e.meta.status,e.data)};var l=c(i.document)("script",{async:!0,src:e+(-1!==e.indexOf("?")?"&":"?")+"callback=_"}),s=function(){i._&&i._({meta:{}})};v(l,"load",s),v(l,"error",s),function(e,t,r){if(null!=e.readyState){var n="readystatechange",o=function(){if(t.test(e.readyState))return b(e,n,o),r.apply(this,arguments)};v(e,n,o)}}(l,/de|m/,s),i.document.getElementsByTagName("head")[0].appendChild(l)}}},T=function(e,t,r){var n=c(e.ownerDocument),o=e.appendChild(n("style",{type:"text/css"})),i="body{margin:0}a{text-decoration:none;outline:0}.widget{display:inline-block;overflow:hidden;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif;font-size:0;line-height:0;white-space:nowrap}.btn,.social-count{position:relative;display:inline-block;display:inline-flex;height:14px;padding:2px 5px;font-size:11px;font-weight:600;line-height:14px;vertical-align:bottom;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-repeat:repeat-x;background-position:-1px -1px;background-size:110% 110%;border:1px solid}.btn{border-radius:.25em}.btn:not(:last-child){border-radius:.25em 0 0 .25em}.social-count{border-left:0;border-radius:0 .25em .25em 0}.widget-lg .btn,.widget-lg .social-count{height:16px;padding:5px 10px;font-size:12px;line-height:16px}.octicon{display:inline-block;vertical-align:text-top;fill:currentColor;overflow:visible}"+k(t["data-color-scheme"]);o.styleSheet?o.styleSheet.cssText=i:o.appendChild(e.ownerDocument.createTextNode(i));var a="large"===u(t["data-size"]),l=n("a",{className:"btn",href:t.href,rel:"noopener",target:"_blank",title:t.title||void 0,"aria-label":t["aria-label"]||void 0,innerHTML:S(t["data-icon"],a?16:14)+"&nbsp;"},[n("span",{},[t["data-text"]||""])]),s=e.appendChild(n("div",{className:"widget"+(a?" widget-lg":"")},[l])),d=l.hostname.replace(/\.$/,"");if(("."+d).substring(d.length-10)!=="."+p)return l.removeAttribute("href"),void r(s);var h=(" /"+l.pathname).split(/\/+/);if(((d===p||d==="gist."+p)&&"archive"===h[3]||d===p&&"releases"===h[3]&&("download"===h[4]||"latest"===h[4]&&"download"===h[5])||d==="codeload."+p)&&(l.target="_top"),"true"===u(t["data-show-count"])&&d===p&&"marketplace"!==h[1]&&"sponsors"!==h[1]&&"orgs"!==h[1]&&"users"!==h[1]&&"-"!==h[1]){var g,v;if(!h[2]&&h[1])v="followers",g="?tab=followers";else if(!h[3]&&h[2])v="stargazers_count",g="/stargazers";else if(h[4]||"subscription"!==h[3])if(h[4]||"fork"!==h[3]){if("issues"!==h[3])return void r(s);v="open_issues_count",g="/issues"}else v="forks_count",g="/forks";else v="subscribers_count",g="/watchers";var b=h[2]?"/repos/"+h[1]+"/"+h[2]:"/users/"+h[1];C.call(this,f+b,(function(e,t){if(!e){var o=t[v];s.appendChild(n("a",{className:"social-count",href:t.html_url+g,rel:"noopener",target:"_blank","aria-label":o+" "+v.replace(/_count$/,"").replace("_"," ").slice(0,o<2?-1:void 0)+" on GitHub"},[(""+o).replace(/\B(?=(\d{3})+(?!\d))/g,",")]))}r(s)}))}else r(s)},L=window.devicePixelRatio||1,M=function(e){return(L>1?o.ceil(o.round(e*L)/L*2)/2:o.ceil(e))||0},E=function(e,t){e.style.width=t[0]+"px",e.style.height=t[1]+"px"},z=function(e,t){if(null!=e&&null!=t)if(e.getAttribute&&(e=function(e){var t={href:e.href,title:e.title,"aria-label":e.getAttribute("aria-label")};return l(["icon","color-scheme","text","size","show-count"],(function(r){var n="data-"+r;t[n]=e.getAttribute(n)})),null==t["data-text"]&&(t["data-text"]=e.textContent||e.innerText),t}(e)),g){var r=s("span");T(r.attachShadow({mode:"closed"}),e,(function(){t(r)}))}else{var i=s("iframe",{src:"javascript:0",title:e.title||void 0,allowtransparency:!0,scrolling:"no",frameBorder:0});E(i,[0,0]),i.style.border="none";var a=function(){var r,l=i.contentWindow;try{r=l.document.body}catch(c){return void n.body.appendChild(i.parentNode.removeChild(i))}b(i,"load",a),T.call(l,r,e,(function(r){var n=function(e){var t=e.offsetWidth,r=e.offsetHeight;if(e.getBoundingClientRect){var n=e.getBoundingClientRect();t=o.max(t,M(n.width)),r=o.max(r,M(n.height))}return[t,r]}(r);i.parentNode.removeChild(i),function(e,t,r){var n=function(){return b(e,t,n),r.apply(this,arguments)};v(e,t,n)}(i,"load",(function(){E(i,n)})),i.src="https://unpkg.com/github-buttons@2.27.0/dist/buttons.html#"+(i.name=function(e,t,r,n){null==t&&(t="&"),null==r&&(r="="),null==n&&(n=window.encodeURIComponent);var o=[];for(var i in e){var a=e[i];null!=a&&o.push(n(i)+r+n(a))}return o.join(t)}(e)),t(i)}))};v(i,"load",a),n.body.appendChild(i)}}},67820:(e,t,r)=>{var n=r(5776),o=function(e){var t="",r=Object.keys(e);return r.forEach((function(o,i){var a=e[o];(function(e){return/[height|width]$/.test(e)})(o=n(o))&&"number"==typeof a&&(a+="px"),t+=!0===a?o:!1===a?"not "+o:"("+o+": "+a+")",i<r.length-1&&(t+=" and ")})),t};e.exports=function(e){var t="";return"string"==typeof e?e:e instanceof Array?(e.forEach((function(r,n){t+=o(r),n<e.length-1&&(t+=", ")})),t):o(e)}},5776:e=>{e.exports=function(e){return e.replace(/[A-Z]/g,(function(e){return"-"+e.toLowerCase()})).toLowerCase()}},25388:(e,t,r)=>{"use strict";r.d(t,{c:()=>i});var n=r(11504);class o extends n.PureComponent{constructor(e){super(e),this.$=n.createRef(),this._=n.createRef()}render(){return n.createElement("span",{ref:this.$},n.createElement("a",{...this.props,ref:this._},this.props.children))}componentDidMount(){this.paint()}getSnapshotBeforeUpdate(){return this.reset(),null}componentDidUpdate(){this.paint()}componentWillUnmount(){this.reset()}paint(){const e=this.$.current.appendChild(document.createElement("span"));Promise.resolve().then(r.bind(r,16060)).then((({render:t})=>{null!=this._.current&&t(e.appendChild(this._.current),(function(t){try{e.parentNode.replaceChild(t,e)}catch(e){}}))}))}reset(){this.$.current.replaceChild(this._.current,this.$.current.lastChild)}}const i=o}}]);