(window.webpackJsonp=window.webpackJsonp||[]).push([[2],{"0pJf":function(t,e){t.exports={isExternalUrl:function(t){return new RegExp("^((https?:)?//)","i").test(t)}}},"0xIW":function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n("q1tI");e.default=function(t){r.useEffect(t,[])}},"6R+2":function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n("mrSG"),o=n("q1tI"),i=n("9+Sh"),a=r.__importDefault(n("eM9k"));e.default=function(){var t=a.default({x:i.isClient?window.pageXOffset:0,y:i.isClient?window.pageYOffset:0}),e=t[0],n=t[1];return o.useEffect((function(){var t=function(){n({x:window.pageXOffset,y:window.pageYOffset})};return window.addEventListener("scroll",t,{capture:!1,passive:!0}),function(){window.removeEventListener("scroll",t)}}),[]),e}},"8+s/":function(t,e,n){"use strict";function r(t){return t&&"object"==typeof t&&"default"in t?t.default:t}var o=n("q1tI"),i=r(o),a=r(n("Gytx"));function c(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}var u=!("undefined"==typeof window||!window.document||!window.document.createElement);t.exports=function(t,e,n){if("function"!=typeof t)throw new Error("Expected reducePropsToState to be a function.");if("function"!=typeof e)throw new Error("Expected handleStateChangeOnClient to be a function.");if(void 0!==n&&"function"!=typeof n)throw new Error("Expected mapStateOnServer to either be undefined or a function.");return function(r){if("function"!=typeof r)throw new Error("Expected WrappedComponent to be a React component.");var l,s=[];function f(){l=t(s.map((function(t){return t.props}))),d.canUseDOM?e(l):n&&(l=n(l))}var d=function(t){var e,n;function o(){return t.apply(this,arguments)||this}n=t,(e=o).prototype=Object.create(n.prototype),e.prototype.constructor=e,e.__proto__=n,o.peek=function(){return l},o.rewind=function(){if(o.canUseDOM)throw new Error("You may only call rewind() on the server. Call peek() to read the current state.");var t=l;return l=void 0,s=[],t};var c=o.prototype;return c.shouldComponentUpdate=function(t){return!a(t,this.props)},c.componentWillMount=function(){s.push(this),f()},c.componentDidUpdate=function(){f()},c.componentWillUnmount=function(){var t=s.indexOf(this);s.splice(t,1),f()},c.render=function(){return i.createElement(r,this.props)},o}(o.Component);return c(d,"displayName","SideEffect("+function(t){return t.displayName||t.name||"Component"}(r)+")"),c(d,"canUseDOM",u),d}}},"9+Sh":function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.isDeepEqual=e.off=e.on=e.isClient=void 0;var r=n("mrSG").__importDefault(n("nkPT"));e.isClient="object"==typeof window,e.on=function(t){for(var e=[],n=1;n<arguments.length;n++)e[n-1]=arguments[n];return t.addEventListener.apply(t,e)},e.off=function(t){for(var e=[],n=1;n<arguments.length;n++)e[n-1]=arguments[n];return t.removeEventListener.apply(t,e)},e.isDeepEqual=r.default},AArq:function(t,e,n){t.exports=n.p+"static/logo-f730a0b8e533f2d4da7bd901d2b7ab80.png"},Emr8:function(t,e){function n(t,e){return("/"+t+"/"+e).replace(/\/\/+/g,"/")}function r(t){return new RegExp("^((https?:)?//)","i").test(t)}t.exports={resolveLink:function(t,e){return r(t)?t:n(e,t)},normalizeBasePath:n,isExternalUrl:r}},Gytx:function(t,e){t.exports=function(t,e,n,r){var o=n?n.call(r,t,e):void 0;if(void 0!==o)return!!o;if(t===e)return!0;if("object"!=typeof t||!t||"object"!=typeof e||!e)return!1;var i=Object.keys(t),a=Object.keys(e);if(i.length!==a.length)return!1;for(var c=Object.prototype.hasOwnProperty.bind(e),u=0;u<i.length;u++){var l=i[u];if(!c(l))return!1;var s=t[l],f=e[l];if(!1===(o=n?n.call(r,s,f,l):void 0)||void 0===o&&s!==f)return!1}return!0}},Lnxd:function(t,e,n){"use strict";n.d(e,"a",(function(){return u}));var r=n("q1tI"),o={color:void 0,size:void 0,className:void 0,style:void 0,attr:void 0},i=r.createContext&&r.createContext(o),a=function(){return(a=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var o in e=arguments[n])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t}).apply(this,arguments)},c=function(t,e){var n={};for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&e.indexOf(r)<0&&(n[r]=t[r]);if(null!=t&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(t);o<r.length;o++)e.indexOf(r[o])<0&&(n[r[o]]=t[r[o]])}return n};function u(t){return function(e){return r.createElement(l,a({attr:a({},t.attr)},e),function t(e){return e&&e.map((function(e,n){return r.createElement(e.tag,a({key:n},e.attr),t(e.child))}))}(t.child))}}function l(t){var e=function(e){var n,o=t.size||e.size||"1em";e.className&&(n=e.className),t.className&&(n=(n?n+" ":"")+t.className);var i=t.attr,u=t.title,l=c(t,["attr","title"]);return r.createElement("svg",a({stroke:"currentColor",fill:"currentColor",strokeWidth:"0"},e.attr,i,l,{className:n,style:a({color:t.color||e.color},e.style,t.style),height:o,width:o,xmlns:"http://www.w3.org/2000/svg"}),u&&r.createElement("title",null,u),t.children)};return void 0!==i?r.createElement(i.Consumer,null,(function(t){return e(t)})):e(o)}},"T/ZZ":function(t,e,n){var r,o,i;i=function(){function t(t){var e=[];if(0===t.length)return"";if("string"!=typeof t[0])throw new TypeError("Url must be a string. Received "+t[0]);if(t[0].match(/^[^/:]+:\/*$/)&&t.length>1){var n=t.shift();t[0]=n+t[0]}t[0].match(/^file:\/\/\//)?t[0]=t[0].replace(/^([^/:]+):\/*/,"$1:///"):t[0]=t[0].replace(/^([^/:]+):\/*/,"$1://");for(var r=0;r<t.length;r++){var o=t[r];if("string"!=typeof o)throw new TypeError("Url must be a string. Received "+o);""!==o&&(r>0&&(o=o.replace(/^[\/]+/,"")),o=r<t.length-1?o.replace(/[\/]+$/,""):o.replace(/[\/]+$/,"/"),e.push(o))}var i=e.join("/"),a=(i=i.replace(/\/(\?|&|#[^!])/g,"$1")).split("?");return i=a.shift()+(a.length>0?"?":"")+a.join("&")}return function(){return t("object"==typeof arguments[0]?arguments[0]:[].slice.call(arguments))}},t.exports?t.exports=i():void 0===(o="function"==typeof(r=i)?r.call(e,n,e,t):r)||(t.exports=o)},TJpk:function(t,e,n){e.__esModule=!0,e.Helmet=void 0;var r=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t},o=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}(),i=f(n("q1tI")),a=f(n("17x9")),c=f(n("8+s/")),u=f(n("bmMU")),l=n("v1p5"),s=n("hFT/");function f(t){return t&&t.__esModule?t:{default:t}}function d(t,e){var n={};for(var r in t)e.indexOf(r)>=0||Object.prototype.hasOwnProperty.call(t,r)&&(n[r]=t[r]);return n}function p(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function m(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}var h,b,T,y=(0,c.default)(l.reducePropsToState,l.handleClientStateChange,l.mapStateOnServer)((function(){return null})),g=(h=y,T=b=function(t){function e(){return p(this,e),m(this,t.apply(this,arguments))}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(e,t),e.prototype.shouldComponentUpdate=function(t){return!(0,u.default)(this.props,t)},e.prototype.mapNestedChildrenToProps=function(t,e){if(!e)return null;switch(t.type){case s.TAG_NAMES.SCRIPT:case s.TAG_NAMES.NOSCRIPT:return{innerHTML:e};case s.TAG_NAMES.STYLE:return{cssText:e}}throw new Error("<"+t.type+" /> elements are self-closing and can not contain children. Refer to our API for more information.")},e.prototype.flattenArrayTypeChildren=function(t){var e,n=t.child,o=t.arrayTypeChildren,i=t.newChildProps,a=t.nestedChildren;return r({},o,((e={})[n.type]=[].concat(o[n.type]||[],[r({},i,this.mapNestedChildrenToProps(n,a))]),e))},e.prototype.mapObjectTypeChildren=function(t){var e,n,o=t.child,i=t.newProps,a=t.newChildProps,c=t.nestedChildren;switch(o.type){case s.TAG_NAMES.TITLE:return r({},i,((e={})[o.type]=c,e.titleAttributes=r({},a),e));case s.TAG_NAMES.BODY:return r({},i,{bodyAttributes:r({},a)});case s.TAG_NAMES.HTML:return r({},i,{htmlAttributes:r({},a)})}return r({},i,((n={})[o.type]=r({},a),n))},e.prototype.mapArrayTypeChildrenToProps=function(t,e){var n=r({},e);return Object.keys(t).forEach((function(e){var o;n=r({},n,((o={})[e]=t[e],o))})),n},e.prototype.warnOnInvalidChildren=function(t,e){return!0},e.prototype.mapChildrenToProps=function(t,e){var n=this,r={};return i.default.Children.forEach(t,(function(t){if(t&&t.props){var o=t.props,i=o.children,a=d(o,["children"]),c=(0,l.convertReactPropstoHtmlAttributes)(a);switch(n.warnOnInvalidChildren(t,i),t.type){case s.TAG_NAMES.LINK:case s.TAG_NAMES.META:case s.TAG_NAMES.NOSCRIPT:case s.TAG_NAMES.SCRIPT:case s.TAG_NAMES.STYLE:r=n.flattenArrayTypeChildren({child:t,arrayTypeChildren:r,newChildProps:c,nestedChildren:i});break;default:e=n.mapObjectTypeChildren({child:t,newProps:e,newChildProps:c,nestedChildren:i})}}})),e=this.mapArrayTypeChildrenToProps(r,e)},e.prototype.render=function(){var t=this.props,e=t.children,n=d(t,["children"]),o=r({},n);return e&&(o=this.mapChildrenToProps(e,o)),i.default.createElement(h,o)},o(e,null,[{key:"canUseDOM",set:function(t){h.canUseDOM=t}}]),e}(i.default.Component),b.propTypes={base:a.default.object,bodyAttributes:a.default.object,children:a.default.oneOfType([a.default.arrayOf(a.default.node),a.default.node]),defaultTitle:a.default.string,defer:a.default.bool,encodeSpecialCharacters:a.default.bool,htmlAttributes:a.default.object,link:a.default.arrayOf(a.default.object),meta:a.default.arrayOf(a.default.object),noscript:a.default.arrayOf(a.default.object),onChangeClientState:a.default.func,script:a.default.arrayOf(a.default.object),style:a.default.arrayOf(a.default.object),title:a.default.string,titleAttributes:a.default.object,titleTemplate:a.default.string},b.defaultProps={defer:!0,encodeSpecialCharacters:!0},b.peek=h.peek,b.rewind=function(){var t=h.rewind();return t||(t=(0,l.mapStateOnServer)({baseTag:[],bodyAttributes:{},encodeSpecialCharacters:!0,htmlAttributes:{},linkTags:[],metaTags:[],noscriptTags:[],scriptTags:[],styleTags:[],title:"",titleAttributes:{}})),t},T);g.renderStatic=g.rewind,e.Helmet=g,e.default=g},bmMU:function(t,e,n){"use strict";var r=Array.isArray,o=Object.keys,i=Object.prototype.hasOwnProperty,a="undefined"!=typeof Element;t.exports=function(t,e){try{return function t(e,n){if(e===n)return!0;if(e&&n&&"object"==typeof e&&"object"==typeof n){var c,u,l,s=r(e),f=r(n);if(s&&f){if((u=e.length)!=n.length)return!1;for(c=u;0!=c--;)if(!t(e[c],n[c]))return!1;return!0}if(s!=f)return!1;var d=e instanceof Date,p=n instanceof Date;if(d!=p)return!1;if(d&&p)return e.getTime()==n.getTime();var m=e instanceof RegExp,h=n instanceof RegExp;if(m!=h)return!1;if(m&&h)return e.toString()==n.toString();var b=o(e);if((u=b.length)!==o(n).length)return!1;for(c=u;0!=c--;)if(!i.call(n,b[c]))return!1;if(a&&e instanceof Element&&n instanceof Element)return e===n;for(c=u;0!=c--;)if(!("_owner"===(l=b[c])&&e.$$typeof||t(e[l],n[l])))return!1;return!0}return e!=e&&n!=n}(t,e)}catch(n){if(n.message&&n.message.match(/stack|recursion/i)||-2146828260===n.number)return console.warn("Warning: react-fast-compare does not handle circular references.",n.name,n.message),!1;throw n}}},dcqB:function(t,e,n){"use strict";n.d(e,"a",(function(){return l}));n("q1tI");var r=n("TJpk"),o=n.n(r),i=n("T/ZZ"),a=n.n(i),c=n("Wbzz"),u=n("qKvR");function l(t){var e=t.description,n=t.title,r=t.slug,i=t.image,l=t.children,s=Object(c.useStaticQuery)("2501019404").site.siteMetadata,f=s.siteTitle,d=s.siteTitleShort,p=s.siteUrl,m=s.defaultTitle,h=s.siteImage,b=s.siteDescription,T=s.siteLanguage,y=s.siteAuthor,g=s.siteIcon,E=n?n+" | "+f:m,v=a()(p,r),O=a()(p,i||h),A=e||b,w=[{"@context":"http://schema.org","@type":"WebSite",url:v,name:n,alternateName:d}];return Object(u.d)(o.a,{htmlAttributes:{lang:T},title:E},g&&Object(u.d)("link",{rel:"icon",href:g}),Object(u.d)("meta",{name:"description",content:A}),Object(u.d)("meta",{name:"image",content:O}),Object(u.d)("meta",{httpEquiv:"x-ua-compatible",content:"IE=edge,chrome=1"}),Object(u.d)("meta",{name:"MobileOptimized",content:"320"}),Object(u.d)("meta",{name:"HandheldFriendly",content:"True"}),Object(u.d)("meta",{name:"google",content:"notranslate"}),Object(u.d)("meta",{name:"referrer",content:"no-referrer-when-downgrade"}),Object(u.d)("meta",{property:"og:url",content:v}),Object(u.d)("meta",{property:"og:type",content:"website"}),Object(u.d)("meta",{property:"og:title",content:E}),Object(u.d)("meta",{property:"og:description",content:A}),Object(u.d)("meta",{property:"og:locale",content:T}),Object(u.d)("meta",{property:"og:site_name",content:f}),Object(u.d)("meta",{property:"og:image",content:O}),Object(u.d)("meta",{property:"og:image:secure_url",content:O}),Object(u.d)("meta",{property:"og:image:alt",content:"Banner"}),Object(u.d)("meta",{property:"og:image:type",content:"image/png"}),Object(u.d)("meta",{property:"og:image:width",content:"1200"}),Object(u.d)("meta",{property:"og:image:height",content:"630"}),Object(u.d)("meta",{name:"twitter:card",content:"summary_large_image"}),Object(u.d)("meta",{name:"twitter:title",content:E}),Object(u.d)("meta",{name:"twitter:site",content:y}),Object(u.d)("meta",{name:"twitter:creator",content:y}),Object(u.d)("meta",{name:"twitter:image",content:O}),Object(u.d)("meta",{name:"twitter:image:src",content:O}),Object(u.d)("meta",{name:"twitter:image:alt",content:"Banner"}),Object(u.d)("meta",{name:"twitter:image:width",content:"1200"}),Object(u.d)("meta",{name:"twitter:image:height",content:"630"}),Object(u.d)("script",{type:"application/ld+json"},JSON.stringify(w)),l)}l.defaultProps={title:"",description:"",slug:"",image:"",children:""}},eM9k:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n("mrSG"),o=n("q1tI"),i=r.__importDefault(n("n5OK"));e.default=function(t){var e=o.useRef(0),n=o.useState(t),r=n[0],a=n[1],c=o.useCallback((function(t){cancelAnimationFrame(e.current),e.current=requestAnimationFrame((function(){a(t)}))}),[]);return i.default((function(){cancelAnimationFrame(e.current)})),[r,c]}},"hFT/":function(t,e){e.__esModule=!0;e.ATTRIBUTE_NAMES={BODY:"bodyAttributes",HTML:"htmlAttributes",TITLE:"titleAttributes"};var n=e.TAG_NAMES={BASE:"base",BODY:"body",HEAD:"head",HTML:"html",LINK:"link",META:"meta",NOSCRIPT:"noscript",SCRIPT:"script",STYLE:"style",TITLE:"title"},r=(e.VALID_TAG_NAMES=Object.keys(n).map((function(t){return n[t]})),e.TAG_PROPERTIES={CHARSET:"charset",CSS_TEXT:"cssText",HREF:"href",HTTPEQUIV:"http-equiv",INNER_HTML:"innerHTML",ITEM_PROP:"itemprop",NAME:"name",PROPERTY:"property",REL:"rel",SRC:"src"},e.REACT_TAG_MAP={accesskey:"accessKey",charset:"charSet",class:"className",contenteditable:"contentEditable",contextmenu:"contextMenu","http-equiv":"httpEquiv",itemprop:"itemProp",tabindex:"tabIndex"});e.HELMET_PROPS={DEFAULT_TITLE:"defaultTitle",DEFER:"defer",ENCODE_SPECIAL_CHARACTERS:"encodeSpecialCharacters",ON_CHANGE_CLIENT_STATE:"onChangeClientState",TITLE_TEMPLATE:"titleTemplate"},e.HTML_TAG_MAP=Object.keys(r).reduce((function(t,e){return t[r[e]]=e,t}),{}),e.SELF_CLOSING_TAGS=[n.NOSCRIPT,n.SCRIPT,n.STYLE],e.HELMET_ATTRIBUTE="data-react-helmet"},mrSG:function(t,e,n){"use strict";n.r(e),n.d(e,"__extends",(function(){return o})),n.d(e,"__assign",(function(){return i})),n.d(e,"__rest",(function(){return a})),n.d(e,"__decorate",(function(){return c})),n.d(e,"__param",(function(){return u})),n.d(e,"__metadata",(function(){return l})),n.d(e,"__awaiter",(function(){return s})),n.d(e,"__generator",(function(){return f})),n.d(e,"__createBinding",(function(){return d})),n.d(e,"__exportStar",(function(){return p})),n.d(e,"__values",(function(){return m})),n.d(e,"__read",(function(){return h})),n.d(e,"__spread",(function(){return b})),n.d(e,"__spreadArrays",(function(){return T})),n.d(e,"__await",(function(){return y})),n.d(e,"__asyncGenerator",(function(){return g})),n.d(e,"__asyncDelegator",(function(){return E})),n.d(e,"__asyncValues",(function(){return v})),n.d(e,"__makeTemplateObject",(function(){return O})),n.d(e,"__importStar",(function(){return w})),n.d(e,"__importDefault",(function(){return _})),n.d(e,"__classPrivateFieldGet",(function(){return S})),n.d(e,"__classPrivateFieldSet",(function(){return j}));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)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])})(t,e)};function o(t,e){function n(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}var i=function(){return(i=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var o in e=arguments[n])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t}).apply(this,arguments)};function a(t,e){var n={};for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&e.indexOf(r)<0&&(n[r]=t[r]);if(null!=t&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(t);o<r.length;o++)e.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(t,r[o])&&(n[r[o]]=t[r[o]])}return n}function c(t,e,n,r){var o,i=arguments.length,a=i<3?e:null===r?r=Object.getOwnPropertyDescriptor(e,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)a=Reflect.decorate(t,e,n,r);else for(var c=t.length-1;c>=0;c--)(o=t[c])&&(a=(i<3?o(a):i>3?o(e,n,a):o(e,n))||a);return i>3&&a&&Object.defineProperty(e,n,a),a}function u(t,e){return function(n,r){e(n,r,t)}}function l(t,e){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(t,e)}function s(t,e,n,r){return new(n||(n=Promise))((function(o,i){function a(t){try{u(r.next(t))}catch(e){i(e)}}function c(t){try{u(r.throw(t))}catch(e){i(e)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(a,c)}u((r=r.apply(t,e||[])).next())}))}function f(t,e){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:c(0),throw:c(1),return:c(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function c(i){return function(c){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){a.label=i[1];break}if(6===i[0]&&a.label<o[1]){a.label=o[1],o=i;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(i);break}o[2]&&a.ops.pop(),a.trys.pop();continue}i=e.call(t,a)}catch(c){i=[6,c],r=0}finally{n=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,c])}}}var d=Object.create?function(t,e,n,r){void 0===r&&(r=n),Object.defineProperty(t,r,{enumerable:!0,get:function(){return e[n]}})}:function(t,e,n,r){void 0===r&&(r=n),t[r]=e[n]};function p(t,e){for(var n in t)"default"===n||Object.prototype.hasOwnProperty.call(e,n)||d(e,t,n)}function m(t){var e="function"==typeof Symbol&&Symbol.iterator,n=e&&t[e],r=0;if(n)return n.call(t);if(t&&"number"==typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")}function h(t,e){var n="function"==typeof Symbol&&t[Symbol.iterator];if(!n)return t;var r,o,i=n.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(r=i.next()).done;)a.push(r.value)}catch(c){o={error:c}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(o)throw o.error}}return a}function b(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(h(arguments[e]));return t}function T(){for(var t=0,e=0,n=arguments.length;e<n;e++)t+=arguments[e].length;var r=Array(t),o=0;for(e=0;e<n;e++)for(var i=arguments[e],a=0,c=i.length;a<c;a++,o++)r[o]=i[a];return r}function y(t){return this instanceof y?(this.v=t,this):new y(t)}function g(t,e,n){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var r,o=n.apply(t,e||[]),i=[];return r={},a("next"),a("throw"),a("return"),r[Symbol.asyncIterator]=function(){return this},r;function a(t){o[t]&&(r[t]=function(e){return new Promise((function(n,r){i.push([t,e,n,r])>1||c(t,e)}))})}function c(t,e){try{(n=o[t](e)).value instanceof y?Promise.resolve(n.value.v).then(u,l):s(i[0][2],n)}catch(r){s(i[0][3],r)}var n}function u(t){c("next",t)}function l(t){c("throw",t)}function s(t,e){t(e),i.shift(),i.length&&c(i[0][0],i[0][1])}}function E(t){var e,n;return e={},r("next"),r("throw",(function(t){throw t})),r("return"),e[Symbol.iterator]=function(){return this},e;function r(r,o){e[r]=t[r]?function(e){return(n=!n)?{value:y(t[r](e)),done:"return"===r}:o?o(e):e}:o}}function v(t){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var e,n=t[Symbol.asyncIterator];return n?n.call(t):(t=m(t),e={},r("next"),r("throw"),r("return"),e[Symbol.asyncIterator]=function(){return this},e);function r(n){e[n]=t[n]&&function(e){return new Promise((function(r,o){(function(t,e,n,r){Promise.resolve(r).then((function(e){t({value:e,done:n})}),e)})(r,o,(e=t[n](e)).done,e.value)}))}}}function O(t,e){return Object.defineProperty?Object.defineProperty(t,"raw",{value:e}):t.raw=e,t}var A=Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e};function w(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)"default"!==n&&Object.prototype.hasOwnProperty.call(t,n)&&d(e,t,n);return A(e,t),e}function _(t){return t&&t.__esModule?t:{default:t}}function S(t,e){if(!e.has(t))throw new TypeError("attempted to get private field on non-instance");return e.get(t)}function j(t,e,n){if(!e.has(t))throw new TypeError("attempted to set private field on non-instance");return e.set(t,n),n}},n5OK:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n("mrSG"),o=n("q1tI"),i=r.__importDefault(n("0xIW"));e.default=function(t){var e=o.useRef(t);e.current=t,i.default((function(){return function(){return e.current()}}))}},nkPT:function(t,e,n){"use strict";t.exports=function t(e,n){if(e===n)return!0;if(e&&n&&"object"==typeof e&&"object"==typeof n){if(e.constructor!==n.constructor)return!1;var r,o,i;if(Array.isArray(e)){if((r=e.length)!=n.length)return!1;for(o=r;0!=o--;)if(!t(e[o],n[o]))return!1;return!0}if(e.constructor===RegExp)return e.source===n.source&&e.flags===n.flags;if(e.valueOf!==Object.prototype.valueOf)return e.valueOf()===n.valueOf();if(e.toString!==Object.prototype.toString)return e.toString()===n.toString();if((r=(i=Object.keys(e)).length)!==Object.keys(n).length)return!1;for(o=r;0!=o--;)if(!Object.prototype.hasOwnProperty.call(n,i[o]))return!1;for(o=r;0!=o--;){var a=i[o];if(("_owner"!==a||!e.$$typeof)&&!t(e[a],n[a]))return!1}return!0}return e!=e&&n!=n}},pW3x:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n("mrSG"),o=n("q1tI"),i=r.__importDefault(n("eM9k")),a=n("9+Sh");e.default=function(t,e){void 0===t&&(t=1/0),void 0===e&&(e=1/0);var n=i.default({width:a.isClient?window.innerWidth:t,height:a.isClient?window.innerHeight:e}),r=n[0],c=n[1];return o.useEffect((function(){if(a.isClient){var t=function(){c({width:window.innerWidth,height:window.innerHeight})};return window.addEventListener("resize",t),function(){window.removeEventListener("resize",t)}}}),[]),r}},tnhK:function(t,e,n){"use strict";n.d(e,"a",(function(){return F}));var r=n("q1tI"),o=n.n(r),i=n("qKvR"),a=n("wLTh"),c=n("6R+2"),u=n.n(c),l=n("pW3x"),s=n.n(l),f=n("wTIg"),d=Object(f.a)("div",{target:"e10o0eax0"})({name:"15t48j3",styles:"position:sticky;top:0;order:2;padding-top:72px;max-height:calc(100vh - 72px);overflow-y:auto;width:100%;max-width:200px;@media (max-width:1200px){position:relative;top:auto;order:0;max-width:100%;margin-left:0;padding-top:0;}"}),p=Object(f.a)("div",{target:"e10o0eax1"})({name:"157u13d",styles:"h2{text-transform:uppercase;font-size:14px;font-weight:bold;letter-spacing:0.142em;margin-top:0rem;border:none;margin:0 0 16px 0;}nav ul{padding-left:0;margin-bottom:0;list-style:none;li{margin-bottom:12px;line-height:1.1;a{font-size:14px;font-weight:400;text-decoration:none;transition:all 0.2s;&:hover{text-decoration:underline;}}}}@media (max-width:1200px){margin:0 0 24px 0;padding-bottom:16px;border-bottom:1px solid rgba(120,117,122,0.2);}"});function m(t){var e=t.headings,n=t.disableTOC,o=t.contentRef,c=u()().y,l=Object(a.b)(),f=s()(),m=f.width,h=f.height,b=Object(r.useState)([]),T=b[0],y=b[1],g=m<=1200;Object(r.useEffect)((function(){if(!g||n){var t,e=null===(t=o.current)||void 0===t?void 0:t.querySelectorAll("h2, h3");y(e&&Array.from(e).map((function(t){var e=t.querySelector("a");return e?{id:t.id,offset:t.offsetTop+e.offsetTop}:{}})).filter(Boolean))}}),[m,h,o,g,n]);var E=Object(r.useMemo)((function(){if(!g||n){var t=c+h/2;if(T)for(var e=T.length-1;e>=0;e-=1){var r=T[e],o=r.id;if(t>=r.offset)return o}}}),[T,h,c,g,n]);return n?Object(i.d)(d,null):Object(i.d)(d,null,Object(i.d)(p,null,Object(i.d)("h2",null,"On this page"),Object(i.d)("nav",null,Object(i.d)("ul",null,e.filter((function(t){return 2===t.depth||3===t.depth})).map((function(t){var e=t.value.toString().toLowerCase().trim().replace(/\s/g,"-").replace(/[^\w\-\u00b4\u00C0-\u00C3\u00c7\u00C9-\u00CA\u00CD\u00D3-\u00D5\u00DA\u00E0-\u00E3\u00E7\u00E9-\u00EA\u00ED\u00F3-\u00F5\u00FA]+/g,"");return Object(i.d)("li",{key:t.value,style:{marginLeft:3===t.depth?"8px":null}},Object(i.d)("a",{href:"#"+e,style:{color:E===e?l.colors.primary:l.colors.text}},t.value))}))))))}m.defaultProps={headings:null};var h=n("Wbzz"),b=n("Emr8");var T=Object(f.a)("aside",{target:"e1wh78ri0"})("width:100%;overflow-y:auto;display:flex;justify-content:space-between;align-items:center;flex-direction:column;position:sticky;top:0;padding-top:36px;transition:transform 0.5s;height:calc(100vh - 1px);nav{width:100%;padding-top:24px;align-self:flex-start;flex:1;}@media (max-width:780px){max-width:75%;min-width:auto;z-index:1001;position:fixed;top:0;bottom:0;left:0;padding-top:32px;background:",(function(t){return t.theme.colors.background}),";transform:translate3d( ",(function(t){return t.isMenuOpen?"0":"-100%"}),",0,0 );}"),y=Object(f.a)("div",{target:"e1wh78ri1"})({name:"2yrou",styles:"width:100%;a{width:100%;padding-left:30px;display:flex;justify-content:flex-start;align-items:center;}"}),g=Object(f.a)("ul",{target:"e1wh78ri2"})({name:"mbmci8",styles:"list-style:none;width:100%;padding-left:0;display:flex;justify-content:flex-start;align-items:center;flex-direction:column;"}),E=Object(f.a)("li",{target:"e1wh78ri3"})("padding-left:30px;width:100%;text-transform:uppercase;font-size:14px;font-weight:bold;margin-top:20px;color:",(function(t){return t.theme.colors.title}),";letter-spacing:0.142em;"),v=Object(f.a)("li",{target:"e1wh78ri4"})("font-size:15px;width:100%;transition:all 200ms ease-in-out;padding:0 20px;cursor:pointer;a,span{display:block;font-size:15px;color:",(function(t){return t.theme.colors.text}),";background-color:",(function(t){return t.theme.colors.background}),";padding:4px 10px;margin:4px 0;border-radius:4px;font-weight:normal;text-decoration:none;width:100%;height:100%;display:flex;justify-content:flex-start;align-items:center;cursor:pointer;margin:0 auto;transition:all 0.2s ease;svg{width:20px;height:20px;margin-right:10px;}&:not(.active-link):hover{color:",(function(t){return t.theme.colors.primary}),";}&.active-link{color:",(function(t){return t.theme.colors.primary}),";background-color:",(function(t){return t.theme.colors.shape}),";}@media (max-width:780px){&.active-link{background:",(function(t){return t.theme.colors.shape}),";}}}"),O=Object(f.a)(g,{target:"e1wh78ri5"})({name:"1lo7kqu",styles:"margin:5px 0 0 0;"}),A=n("0pJf"),w=n("Tgqd");function _(t){var e=t.link,n=t.label;return Object(i.d)("a",{href:e,rel:"noopener noreferrer"},n,Object(i.d)(w.a,{style:{width:"16px",height:"16px",marginLeft:"10px"}}))}function S(t){var e=t.link,n=t.label;return Object(i.d)(h.Link,{to:e,activeClassName:"active-link"},n)}var j=n("AArq"),x=n.n(j);function P(t){return Object(i.d)("img",{src:x.a,alt:"Logo",width:"90px",height:"80px"})}function R(t){var e=t.children,n=t.text;return Object(i.d)(o.a.Fragment,null,Object(i.d)(E,null,n),Object(i.d)(O,null,e))}function M(t){var e=t.isMenuOpen,n=Object(h.useStaticQuery)("2328931024").site.siteMetadata.basePath,r=function(){var t=Object(h.useStaticQuery)("1954253342"),e=t.site.siteMetadata.basePath,n=t.allSidebarItems.edges;return e?n.map((function(t){var n=t.node,r=n.label,o=n.link,i=n.items,a=n.id;return Array.isArray(i)&&(i=i.map((function(t){return{label:t.label,link:Object(b.resolveLink)(t.link,e)}}))),{node:{id:a,label:r,items:i,link:Object(b.resolveLink)(o,e)}}})):n}();function o(t,e){return Object(A.isExternalUrl)(t)?Object(i.d)(_,{link:t,label:e}):Object(i.d)(S,{link:t,label:e})}return Object(i.d)(T,{isMenuOpen:e},Object(i.d)(y,null,Object(i.d)(h.Link,{to:n,"aria-label":"Go to home page"},Object(i.d)(P,{"aria-hidden":"true"}))),Object(i.d)("nav",null,Object(i.d)(g,null,r.map((function(t){var e=t.node,n=e.label,r=e.link,a=e.items,c=e.id;if(Array.isArray(a)){var u=a.map((function(t){return Object(i.d)(v,{key:t.link},o(t.link,t.label))}));return Object(i.d)(R,{key:c,text:n},u)}return Object(i.d)(v,{key:c},o(r,n))})))))}var C=n("tjd4"),I=Object(f.a)("header",{target:"esnpb7p0"})({name:"9q3p0l",styles:"display:flex;justify-content:flex-start;align-items:center;height:40px;margin-bottom:24px;h2{margin:0;border:none;padding:0;font-size:18px;@media (max-width:359px){font-size:14px;}}button{border:none;background:none;cursor:pointer;margin-right:16px;display:flex;justify-content:flex-start;align-items:center;}@media (min-width:780px){display:none;}"});function L(t){var e=t.handleMenuOpen,n=Object(h.useStaticQuery)("973074209").site.siteMetadata.siteTitle;return Object(i.d)(I,null,Object(i.d)("button",{"aria-label":"Open sidebar",type:"button",onClick:e},Object(i.d)(C.a,{size:23,"aria-hidden":"true"})),Object(i.d)("h2",null,n))}var N=n("wx14"),k=n("zLVn");function G(t){var e=t.isMenuOpen,n=Object(k.a)(t,["isMenuOpen"]);return Object(i.d)("div",Object(N.a)({css:Object(i.c)("::after{content:'';position:fixed;width:100%;height:100%;left:0;right:0;bottom:0;background-color:rgba(0,0,0,0.8);z-index:999;display:",e?"block":"none",";}"),"aria-label":"Close menu"},n))}G.defaultProps={isMenuOpen:!1};var H=Object(f.a)("div",{target:"eees1d50"})({name:"1i3ij69",styles:"width:100%;max-width:1400px;margin:0 auto;padding:0 24px;display:grid;grid-template-columns:280px calc(100% - 320px);grid-auto-flow:row;grid-gap:40px;@media (max-width:780px){padding:24px;grid-template-columns:100%;}"}),D=Object(f.a)("main",{target:"eees1d51"})({name:"19vacph",styles:"height:100%;padding-top:36px;width:100%;display:flex;justify-content:flex-start;position:relative;@media (max-width:1200px){flex-direction:column;}@media (max-width:780px){padding-top:0;}"}),U=Object(f.a)("div",{target:"eees1d52"})({name:"1ehkd4h",styles:"width:100%;max-width:calc(75% - 64px);padding-right:64px;@media (max-width:1200px){max-width:100%;padding-right:0;order:3;}"}),q={name:"enx1eb",styles:"display:none;@media (max-width:1200px){display:block;}"},B={name:"1n3b8my",styles:"@media (max-width:1200px){display:none;}"};function F(t){var e=t.children,n=t.disableTableOfContents,a=t.title,c=t.headings,u=Object(r.useRef)(null),l=Object(r.useState)(!1),s=l[0],f=l[1],d=!0===n||!c||0===c.length;function p(){f(!s)}return Object(i.d)(o.a.Fragment,null,Object(i.d)(G,{isMenuOpen:s,onClick:p}),Object(i.d)(H,null,Object(i.d)(M,{isMenuOpen:s}),Object(i.d)(D,null,Object(i.d)(L,{handleMenuOpen:p}),a&&Object(i.d)("h1",{css:q},a),Object(i.d)(U,{ref:u},a&&Object(i.d)("h1",{css:B},a),e),Object(i.d)(m,{headings:c,disableTOC:d,contentRef:u}))))}F.defaultProps={disableTableOfContents:!1,title:"",headings:null}},v1p5:function(t,e,n){(function(t){e.__esModule=!0,e.warn=e.requestAnimationFrame=e.reducePropsToState=e.mapStateOnServer=e.handleClientStateChange=e.convertReactPropstoHtmlAttributes=void 0;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},o=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t},i=u(n("q1tI")),a=u(n("6qGY")),c=n("hFT/");function u(t){return t&&t.__esModule?t:{default:t}}var l,s=function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return!1===e?String(t):String(t).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#x27;")},f=function(t){var e=b(t,c.TAG_NAMES.TITLE),n=b(t,c.HELMET_PROPS.TITLE_TEMPLATE);if(n&&e)return n.replace(/%s/g,(function(){return e}));var r=b(t,c.HELMET_PROPS.DEFAULT_TITLE);return e||r||void 0},d=function(t){return b(t,c.HELMET_PROPS.ON_CHANGE_CLIENT_STATE)||function(){}},p=function(t,e){return e.filter((function(e){return void 0!==e[t]})).map((function(e){return e[t]})).reduce((function(t,e){return o({},t,e)}),{})},m=function(t,e){return e.filter((function(t){return void 0!==t[c.TAG_NAMES.BASE]})).map((function(t){return t[c.TAG_NAMES.BASE]})).reverse().reduce((function(e,n){if(!e.length)for(var r=Object.keys(n),o=0;o<r.length;o++){var i=r[o].toLowerCase();if(-1!==t.indexOf(i)&&n[i])return e.concat(n)}return e}),[])},h=function(t,e,n){var o={};return n.filter((function(e){return!!Array.isArray(e[t])||(void 0!==e[t]&&v("Helmet: "+t+' should be of type "Array". Instead found type "'+r(e[t])+'"'),!1)})).map((function(e){return e[t]})).reverse().reduce((function(t,n){var r={};n.filter((function(t){for(var n=void 0,i=Object.keys(t),a=0;a<i.length;a++){var u=i[a],l=u.toLowerCase();-1===e.indexOf(l)||n===c.TAG_PROPERTIES.REL&&"canonical"===t[n].toLowerCase()||l===c.TAG_PROPERTIES.REL&&"stylesheet"===t[l].toLowerCase()||(n=l),-1===e.indexOf(u)||u!==c.TAG_PROPERTIES.INNER_HTML&&u!==c.TAG_PROPERTIES.CSS_TEXT&&u!==c.TAG_PROPERTIES.ITEM_PROP||(n=u)}if(!n||!t[n])return!1;var s=t[n].toLowerCase();return o[n]||(o[n]={}),r[n]||(r[n]={}),!o[n][s]&&(r[n][s]=!0,!0)})).reverse().forEach((function(e){return t.push(e)}));for(var i=Object.keys(r),u=0;u<i.length;u++){var l=i[u],s=(0,a.default)({},o[l],r[l]);o[l]=s}return t}),[]).reverse()},b=function(t,e){for(var n=t.length-1;n>=0;n--){var r=t[n];if(r.hasOwnProperty(e))return r[e]}return null},T=(l=Date.now(),function(t){var e=Date.now();e-l>16?(l=e,t(e)):setTimeout((function(){T(t)}),0)}),y=function(t){return clearTimeout(t)},g="undefined"!=typeof window?window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||T:t.requestAnimationFrame||T,E="undefined"!=typeof window?window.cancelAnimationFrame||window.webkitCancelAnimationFrame||window.mozCancelAnimationFrame||y:t.cancelAnimationFrame||y,v=function(t){return console&&"function"==typeof console.warn&&console.warn(t)},O=null,A=function(t,e){var n=t.baseTag,r=t.bodyAttributes,o=t.htmlAttributes,i=t.linkTags,a=t.metaTags,u=t.noscriptTags,l=t.onChangeClientState,s=t.scriptTags,f=t.styleTags,d=t.title,p=t.titleAttributes;S(c.TAG_NAMES.BODY,r),S(c.TAG_NAMES.HTML,o),_(d,p);var m={baseTag:j(c.TAG_NAMES.BASE,n),linkTags:j(c.TAG_NAMES.LINK,i),metaTags:j(c.TAG_NAMES.META,a),noscriptTags:j(c.TAG_NAMES.NOSCRIPT,u),scriptTags:j(c.TAG_NAMES.SCRIPT,s),styleTags:j(c.TAG_NAMES.STYLE,f)},h={},b={};Object.keys(m).forEach((function(t){var e=m[t],n=e.newTags,r=e.oldTags;n.length&&(h[t]=n),r.length&&(b[t]=m[t].oldTags)})),e&&e(),l(t,h,b)},w=function(t){return Array.isArray(t)?t.join(""):t},_=function(t,e){void 0!==t&&document.title!==t&&(document.title=w(t)),S(c.TAG_NAMES.TITLE,e)},S=function(t,e){var n=document.getElementsByTagName(t)[0];if(n){for(var r=n.getAttribute(c.HELMET_ATTRIBUTE),o=r?r.split(","):[],i=[].concat(o),a=Object.keys(e),u=0;u<a.length;u++){var l=a[u],s=e[l]||"";n.getAttribute(l)!==s&&n.setAttribute(l,s),-1===o.indexOf(l)&&o.push(l);var f=i.indexOf(l);-1!==f&&i.splice(f,1)}for(var d=i.length-1;d>=0;d--)n.removeAttribute(i[d]);o.length===i.length?n.removeAttribute(c.HELMET_ATTRIBUTE):n.getAttribute(c.HELMET_ATTRIBUTE)!==a.join(",")&&n.setAttribute(c.HELMET_ATTRIBUTE,a.join(","))}},j=function(t,e){var n=document.head||document.querySelector(c.TAG_NAMES.HEAD),r=n.querySelectorAll(t+"["+c.HELMET_ATTRIBUTE+"]"),o=Array.prototype.slice.call(r),i=[],a=void 0;return e&&e.length&&e.forEach((function(e){var n=document.createElement(t);for(var r in e)if(e.hasOwnProperty(r))if(r===c.TAG_PROPERTIES.INNER_HTML)n.innerHTML=e.innerHTML;else if(r===c.TAG_PROPERTIES.CSS_TEXT)n.styleSheet?n.styleSheet.cssText=e.cssText:n.appendChild(document.createTextNode(e.cssText));else{var u=void 0===e[r]?"":e[r];n.setAttribute(r,u)}n.setAttribute(c.HELMET_ATTRIBUTE,"true"),o.some((function(t,e){return a=e,n.isEqualNode(t)}))?o.splice(a,1):i.push(n)})),o.forEach((function(t){return t.parentNode.removeChild(t)})),i.forEach((function(t){return n.appendChild(t)})),{oldTags:o,newTags:i}},x=function(t){return Object.keys(t).reduce((function(e,n){var r=void 0!==t[n]?n+'="'+t[n]+'"':""+n;return e?e+" "+r:r}),"")},P=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return Object.keys(t).reduce((function(e,n){return e[c.REACT_TAG_MAP[n]||n]=t[n],e}),e)},R=function(t,e,n){switch(t){case c.TAG_NAMES.TITLE:return{toComponent:function(){return t=e.title,n=e.titleAttributes,(r={key:t})[c.HELMET_ATTRIBUTE]=!0,o=P(n,r),[i.default.createElement(c.TAG_NAMES.TITLE,o,t)];var t,n,r,o},toString:function(){return function(t,e,n,r){var o=x(n),i=w(e);return o?"<"+t+" "+c.HELMET_ATTRIBUTE+'="true" '+o+">"+s(i,r)+"</"+t+">":"<"+t+" "+c.HELMET_ATTRIBUTE+'="true">'+s(i,r)+"</"+t+">"}(t,e.title,e.titleAttributes,n)}};case c.ATTRIBUTE_NAMES.BODY:case c.ATTRIBUTE_NAMES.HTML:return{toComponent:function(){return P(e)},toString:function(){return x(e)}};default:return{toComponent:function(){return function(t,e){return e.map((function(e,n){var r,o=((r={key:n})[c.HELMET_ATTRIBUTE]=!0,r);return Object.keys(e).forEach((function(t){var n=c.REACT_TAG_MAP[t]||t;if(n===c.TAG_PROPERTIES.INNER_HTML||n===c.TAG_PROPERTIES.CSS_TEXT){var r=e.innerHTML||e.cssText;o.dangerouslySetInnerHTML={__html:r}}else o[n]=e[t]})),i.default.createElement(t,o)}))}(t,e)},toString:function(){return function(t,e,n){return e.reduce((function(e,r){var o=Object.keys(r).filter((function(t){return!(t===c.TAG_PROPERTIES.INNER_HTML||t===c.TAG_PROPERTIES.CSS_TEXT)})).reduce((function(t,e){var o=void 0===r[e]?e:e+'="'+s(r[e],n)+'"';return t?t+" "+o:o}),""),i=r.innerHTML||r.cssText||"",a=-1===c.SELF_CLOSING_TAGS.indexOf(t);return e+"<"+t+" "+c.HELMET_ATTRIBUTE+'="true" '+o+(a?"/>":">"+i+"</"+t+">")}),"")}(t,e,n)}}}};e.convertReactPropstoHtmlAttributes=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return Object.keys(t).reduce((function(e,n){return e[c.HTML_TAG_MAP[n]||n]=t[n],e}),e)},e.handleClientStateChange=function(t){O&&E(O),t.defer?O=g((function(){A(t,(function(){O=null}))})):(A(t),O=null)},e.mapStateOnServer=function(t){var e=t.baseTag,n=t.bodyAttributes,r=t.encode,o=t.htmlAttributes,i=t.linkTags,a=t.metaTags,u=t.noscriptTags,l=t.scriptTags,s=t.styleTags,f=t.title,d=void 0===f?"":f,p=t.titleAttributes;return{base:R(c.TAG_NAMES.BASE,e,r),bodyAttributes:R(c.ATTRIBUTE_NAMES.BODY,n,r),htmlAttributes:R(c.ATTRIBUTE_NAMES.HTML,o,r),link:R(c.TAG_NAMES.LINK,i,r),meta:R(c.TAG_NAMES.META,a,r),noscript:R(c.TAG_NAMES.NOSCRIPT,u,r),script:R(c.TAG_NAMES.SCRIPT,l,r),style:R(c.TAG_NAMES.STYLE,s,r),title:R(c.TAG_NAMES.TITLE,{title:d,titleAttributes:p},r)}},e.reducePropsToState=function(t){return{baseTag:m([c.TAG_PROPERTIES.HREF],t),bodyAttributes:p(c.ATTRIBUTE_NAMES.BODY,t),defer:b(t,c.HELMET_PROPS.DEFER),encode:b(t,c.HELMET_PROPS.ENCODE_SPECIAL_CHARACTERS),htmlAttributes:p(c.ATTRIBUTE_NAMES.HTML,t),linkTags:h(c.TAG_NAMES.LINK,[c.TAG_PROPERTIES.REL,c.TAG_PROPERTIES.HREF],t),metaTags:h(c.TAG_NAMES.META,[c.TAG_PROPERTIES.NAME,c.TAG_PROPERTIES.CHARSET,c.TAG_PROPERTIES.HTTPEQUIV,c.TAG_PROPERTIES.PROPERTY,c.TAG_PROPERTIES.ITEM_PROP],t),noscriptTags:h(c.TAG_NAMES.NOSCRIPT,[c.TAG_PROPERTIES.INNER_HTML],t),onChangeClientState:d(t),scriptTags:h(c.TAG_NAMES.SCRIPT,[c.TAG_PROPERTIES.SRC,c.TAG_PROPERTIES.INNER_HTML],t),styleTags:h(c.TAG_NAMES.STYLE,[c.TAG_PROPERTIES.CSS_TEXT],t),title:f(t),titleAttributes:p(c.ATTRIBUTE_NAMES.TITLE,t)}},e.requestAnimationFrame=g,e.warn=v}).call(this,n("yLpj"))}}]);
//# sourceMappingURL=a7629950cb7a18c7593baf47d0acfe798f1cddc4-4c1232454ad5571a0b75.js.map