From aa4f85213b08ef5dd0d58ad1e1c0dd2d6b4e5520 Mon Sep 17 00:00:00 2001 From: manuel-mauky Date: Wed, 11 Sep 2024 18:55:36 +0000 Subject: [PATCH] =?UTF-8?q?Deploying=20to=20gh-pages=20from=20@=20juggr/ju?= =?UTF-8?q?ggr.github.io@5144e6bfb4410968cb107eb714f4c54e0ea8afe4=20?= =?UTF-8?q?=F0=9F=9A=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 404.html | 4 +- 404/index.html | 4 +- _gatsby/slices/_gatsby-scripts-1.html | 4 +- about/index.html | 4 +- ...a677f533.js => app-545491b94328c8e7ee02.js | 6 +- ...=> app-545491b94328c8e7ee02.js.LICENSE.txt | 0 ....js.map => app-545491b94328c8e7ee02.js.map | 2 +- atom.xml | 38 +- chunk-map.json | 2 +- datenschutz/index.html | 4 +- debug/index.html | 4 +- debug/redirects/index.html | 6 +- feed.json | 18 +- impressum/index.html | 4 +- index.html | 8 +- jug-goerlitz.ics | 393 +++++++++--------- locations/casus/index.html | 4 +- locations/cideon/index.html | 4 +- locations/dser_elisabethstrasse/index.html | 4 +- locations/dser_steinstrasse/index.html | 6 +- locations/expleo/index.html | 4 +- locations/fraunhofer/index.html | 4 +- locations/hochschule_campus/index.html | 4 +- locations/hochschule_obermarkt/index.html | 4 +- locations/index.html | 4 +- locations/innolabs/index.html | 4 +- locations/saxsys/index.html | 4 +- locations/sqs/index.html | 4 +- locations/tallence/index.html | 4 +- locations/zeiss/index.html | 4 +- mitmachen/index.html | 4 +- page-data/app-data.json | 2 +- page-data/debug/redirects/page-data.json | 2 +- page-data/index/page-data.json | 2 +- .../dser_steinstrasse/page-data.json | 2 +- page-data/locations/page-data.json | 2 +- page-data/posters/page-data.json | 2 +- .../christian_heilmann/page-data.json | 1 + page-data/speakers/page-data.json | 2 +- page-data/tags/page-data.json | 2 +- .../page-data.json | 2 +- page-data/talks/page-data.json | 2 +- posters/index.html | 4 +- posts/2013-10-30-poster/index.html | 4 +- posts/2017-07-21-grillen/index.html | 4 +- posts/2018-07-31-grillabend/index.html | 4 +- posts/2018-09-26-coding-dojo/index.html | 4 +- .../2018-12-30-congress-everywhere/index.html | 4 +- posts/2019-08-16-grillen/index.html | 4 +- posts/2020-03-24-corona/index.html | 4 +- posts/2022-01-07-javaland/index.html | 4 +- posts/2023-12-01-javaland/index.html | 4 +- rss.xml | 38 +- speakers/alexander_casall/index.html | 4 +- speakers/andre_tepper/index.html | 4 +- speakers/andreas_knuepfer/index.html | 4 +- speakers/bruno_devic/index.html | 4 +- speakers/christian_heilmann/index.html | 353 ++++++++++++++++ speakers/christian_kuemmel/index.html | 4 +- speakers/christoph_menzel/index.html | 4 +- speakers/damian_dudziec/index.html | 4 +- speakers/daniel_fesenmeyer/index.html | 4 +- speakers/daniel_sernow/index.html | 4 +- speakers/daniel_sulyok/index.html | 4 +- speakers/denny_israel/index.html | 4 +- speakers/erik_jaehne/index.html | 4 +- speakers/gerrit_grunwald/index.html | 4 +- speakers/gregor_trefs/index.html | 4 +- speakers/hannes_kretschmer/index.html | 4 +- speakers/hans_markwart/index.html | 4 +- speakers/hendrik_ebbers/index.html | 4 +- speakers/index.html | 6 +- speakers/ingo_koerner/index.html | 4 +- speakers/jens_leuschner/index.html | 4 +- speakers/kay_grebenstein/index.html | 4 +- speakers/konstantin_eger/index.html | 4 +- speakers/lars_roewekamp/index.html | 4 +- speakers/maik_wagner/index.html | 4 +- speakers/manuel_mauky/index.html | 4 +- speakers/marco_gotthans/index.html | 4 +- speakers/marcus_doering/index.html | 4 +- speakers/mario_mann/index.html | 4 +- speakers/mario_reichel/index.html | 4 +- speakers/mariusz_zienkiewicz/index.html | 4 +- speakers/mark_ziener/index.html | 4 +- speakers/marko_modsching/index.html | 4 +- speakers/markus_kett/index.html | 4 +- speakers/markus_weiland/index.html | 4 +- speakers/marlene_knoche/index.html | 4 +- speakers/max_wielsch/index.html | 4 +- speakers/michael_foerster/index.html | 4 +- speakers/michael_hunger/index.html | 4 +- speakers/michael_thiele/index.html | 4 +- speakers/michael_wiedeking/index.html | 4 +- speakers/nico_foerster/index.html | 4 +- speakers/oliver_drotbohm/index.html | 4 +- speakers/patryk_lewandowski/index.html | 4 +- speakers/paul_weinhold/index.html | 4 +- speakers/pawel_adaszewski/index.html | 4 +- speakers/richard_hauswald/index.html | 4 +- speakers/robert_wirbs/index.html | 4 +- speakers/roland_weisleder/index.html | 4 +- speakers/sebastian_schmeck/index.html | 4 +- speakers/sergej_tihonov/index.html | 4 +- speakers/simon_roloff/index.html | 4 +- speakers/stefan_barth/index.html | 4 +- speakers/stefan_bley/index.html | 4 +- speakers/stefan_bradl/index.html | 4 +- speakers/stefan_heinze/index.html | 4 +- speakers/stefan_scheumann/index.html | 4 +- speakers/stefan_zoerner/index.html | 4 +- speakers/stefan_zoerner_2/index.html | 4 +- speakers/steffen_seidler/index.html | 4 +- speakers/stephan_strehler/index.html | 4 +- speakers/sven_hoffmann/index.html | 4 +- speakers/thilo_frotscher/index.html | 4 +- speakers/thomas_storch/index.html | 4 +- speakers/tobias_blaschke/index.html | 4 +- speakers/uwe_manteuffel/index.html | 4 +- speakers/wolfgang_weigend/index.html | 4 +- tags/index.html | 6 +- talks/2011-03-22-easymock/index.html | 4 +- talks/2011-03-22-jenkins/index.html | 4 +- talks/2011-04-27-gwt/index.html | 4 +- talks/2011-04-27-osgi_springdm/index.html | 4 +- talks/2011-05-27-guice/index.html | 4 +- talks/2011-06-29-javaee_jboss/index.html | 4 +- talks/2011-07-27-scala/index.html | 4 +- talks/2011-07-27-testng/index.html | 4 +- talks/2011-08-31-testen/index.html | 4 +- talks/2011-09-28-jdom/index.html | 4 +- talks/2011-09-28-single-sign-on/index.html | 4 +- talks/2011-10-26-android/index.html | 4 +- talks/2011-11-30-jsf-cdi/index.html | 4 +- talks/2012-01-01-hibernate/index.html | 4 +- talks/2012-01-25-jsf_cdi_advanced/index.html | 4 +- talks/2012-02-29-scala_webapps/index.html | 4 +- talks/2012-03-28-webtests/index.html | 4 +- talks/2012-04-25-maven/index.html | 4 +- talks/2012-05-30-jmonkey-engine3/index.html | 4 +- talks/2012-06-27-gridgain/index.html | 4 +- talks/2012-07-25-selenium_praxis/index.html | 4 +- talks/2012-09-26-bean_validation/index.html | 4 +- talks/2012-11-28-javafx2/index.html | 4 +- talks/2013-03-27-nxt_lego/index.html | 4 +- talks/2013-05-29-jruby/index.html | 4 +- talks/2013-07-31-persona/index.html | 4 +- talks/2013-10-30-app-design/index.html | 4 +- talks/2013-11-27-web-performance/index.html | 4 +- talks/2014-01-29-opendip/index.html | 4 +- talks/2014-04-02-assertj/index.html | 4 +- talks/2014-05-28-hazelcast/index.html | 4 +- talks/2014-07-30-java8-streams/index.html | 4 +- talks/2014-09-24-solr/index.html | 4 +- .../index.html | 4 +- talks/2014-12-03-model-view-star/index.html | 4 +- talks/2015-01-28-moskito/index.html | 4 +- talks/2015-03-25-android/index.html | 4 +- talks/2015-05-27-advanced-android/index.html | 4 +- talks/2015-07-29-drools/index.html | 4 +- talks/2015-09-30-guava/index.html | 4 +- talks/2015-11-25-javafx-mobile/index.html | 4 +- talks/2016-01-27-functional_java/index.html | 4 +- talks/2016-03-30-haskell_frege/index.html | 4 +- .../index.html | 4 +- .../index.html | 4 +- .../index.html | 4 +- talks/2016-11-30-inside_jvm/index.html | 4 +- talks/2017-01-25-junit5/index.html | 4 +- talks/2017-02-22-css/index.html | 4 +- talks/2017-03-22-angular/index.html | 4 +- talks/2017-04-26-jdk9/index.html | 4 +- talks/2017-05-31-react/index.html | 4 +- talks/2017-08-30-alexa/index.html | 4 +- talks/2017-10-25-serverless/index.html | 4 +- talks/2017-11-29-neo4j/index.html | 4 +- talks/2018-01-31-system_of_systems/index.html | 4 +- .../2018-02-28-java_auf_sap_cloud/index.html | 4 +- .../index.html | 4 +- talks/2018-04-25-kotlin/index.html | 4 +- talks/2018-05-30-graphql/index.html | 4 +- talks/2018-06-27-immutable-data/index.html | 4 +- .../index.html | 4 +- .../index.html | 4 +- talks/2019-02-27_reflection/index.html | 4 +- .../index.html | 4 +- talks/2019-04-24_jdk_jungle/index.html | 4 +- talks/2019-05-29-oauth/index.html | 4 +- .../index.html | 4 +- .../2019-11-28-advanced-bdd-tests/index.html | 4 +- talks/2020-01-27-cloud-foundry/index.html | 4 +- talks/2020-04-29-jdk14_graalvm/index.html | 4 +- talks/2020-07-22-branching_modelle/index.html | 4 +- talks/2020-11-25-secure_coding/index.html | 4 +- talks/2021-01-27-webcomponents/index.html | 4 +- talks/2021-06-30-microstream/index.html | 4 +- .../index.html | 4 +- talks/2022-10-12-indistrie_4.0/index.html | 4 +- talks/2022-11-30-iam-keycloak/index.html | 4 +- talks/2023-01-25-contentlab/index.html | 4 +- talks/2023-02-22-exception_first/index.html | 4 +- .../index.html | 4 +- .../index.html | 4 +- .../index.html | 4 +- talks/2023-06-28-graalvm_23/index.html | 4 +- talks/2023-09-27-virtual-threads/index.html | 4 +- talks/2023-10-25-aws_cdk_in_action/index.html | 4 +- talks/2023-11-29-crac/index.html | 4 +- talks/2024-01-31-flutter/index.html | 4 +- .../2024-02-28-architektur-reviews/index.html | 4 +- talks/2024-03-20-rust/index.html | 4 +- talks/2024-04-24-rust2/index.html | 4 +- .../index.html | 4 +- .../index.html | 8 +- talks/index.html | 6 +- unterstuetzer/index.html | 4 +- webpack.stats.json | 2 +- 217 files changed, 1015 insertions(+), 660 deletions(-) rename app-4a6f4c870da7a677f533.js => app-545491b94328c8e7ee02.js (99%) rename app-4a6f4c870da7a677f533.js.LICENSE.txt => app-545491b94328c8e7ee02.js.LICENSE.txt (100%) rename app-4a6f4c870da7a677f533.js.map => app-545491b94328c8e7ee02.js.map (99%) create mode 100644 page-data/speakers/christian_heilmann/page-data.json create mode 100644 speakers/christian_heilmann/index.html diff --git a/404.html b/404.html index 8e7400c0a..f6a054c47 100644 --- a/404.html +++ b/404.html @@ -348,6 +348,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/404/index.html b/404/index.html index 249af0f43..c1b24f7da 100644 --- a/404/index.html +++ b/404/index.html @@ -348,6 +348,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/_gatsby/slices/_gatsby-scripts-1.html b/_gatsby/slices/_gatsby-scripts-1.html index 3db39ee0e..b2d8e2093 100644 --- a/_gatsby/slices/_gatsby-scripts-1.html +++ b/_gatsby/slices/_gatsby-scripts-1.html @@ -2,6 +2,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/about/index.html b/about/index.html index 942ba1792..17f7445a0 100644 --- a/about/index.html +++ b/about/index.html @@ -455,6 +455,6 @@

Prof. Dr. Jörg Lässig

- \ No newline at end of file + \ No newline at end of file diff --git a/app-4a6f4c870da7a677f533.js b/app-545491b94328c8e7ee02.js similarity index 99% rename from app-4a6f4c870da7a677f533.js rename to app-545491b94328c8e7ee02.js index 83c0163c1..882e31510 100644 --- a/app-4a6f4c870da7a677f533.js +++ b/app-545491b94328c8e7ee02.js @@ -1,3 +1,3 @@ -/*! For license information please see app-4a6f4c870da7a677f533.js.LICENSE.txt */ -(self.webpackChunkjug_goerlitz=self.webpackChunkjug_goerlitz||[]).push([[143],{1783:function(e,t,r){var n=r(8269);t.hash=function(e,r){var n=(r=r||{}).callback||function(){};if(e){var o=r.scroller||t.scroller;setTimeout((function(){var r=t.elements(e);r&&(o(r.id)||o(r.name))?n():n(!0)}),0)}else n()},t.scroller=function(e){return!!e&&(e.scrollIntoView(),!0)},t.elements=function(e){var r=t.selectors(e);if(r)return{id:document.getElementById(r.id),name:document.querySelector(r.name)}},t.selectors=function(e){if(e&&(e=e.replace(/^#/,"")))return{id:e,name:'[name="'+n(e)+'"]'}},t.anchorate=function(e){t.hash(window.location.hash,e)},t.default=t.anchorate},8269:function(e,t,r){var n;n=void 0!==r.g?r.g:this,e.exports=function(e){if(e.CSS&&e.CSS.escape)return e.CSS.escape;var t=function(e){if(0==arguments.length)throw new TypeError("`CSS.escape` requires an argument.");for(var t,r=String(e),n=r.length,o=-1,a="",s=r.charCodeAt(0);++o=1&&t<=31||127==t||0==o&&t>=48&&t<=57||1==o&&t>=48&&t<=57&&45==s?"\\"+t.toString(16)+" ":0==o&&1==n&&45==t||!(t>=128||45==t||95==t||t>=48&&t<=57||t>=65&&t<=90||t>=97&&t<=122)?"\\"+r.charAt(o):r.charAt(o):a+="�";return a};return e.CSS||(e.CSS={}),e.CSS.escape=t,t}(n)},3150:function(e){"use strict";var t=/[|\\{}()[\]^$+*?.]/g;e.exports=function(e){if("string"!=typeof e)throw new TypeError("Expected a string");return e.replace(t,"\\$&")}},4506:function(e,t){"use strict";t.H=void 0;t.H=(e,t="always")=>{const r=e.endsWith(".html"),n=e.endsWith(".xml"),o=e.endsWith(".pdf");return"/"===e?e:((r||n||o)&&(t="never"),"always"===t?e.endsWith("/")?e:`${e}/`:"never"===t&&e.endsWith("/")?e.slice(0,-1):e)}},9679:function(e,t,r){"use strict";t.p2=t.$C=void 0;var n=r(1432);t.$C=n.ScrollHandler;var o=r(4855);t.p2=o.useScrollRestoration},1432:function(e,t,r){"use strict";var n=r(4836);t.__esModule=!0,t.ScrollHandler=t.ScrollContext=void 0;var o=n(r(6115)),a=n(r(7867)),s=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=u(t);if(r&&r.has(e))return r.get(e);var n={},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var a in e)if("default"!==a&&Object.prototype.hasOwnProperty.call(e,a)){var s=o?Object.getOwnPropertyDescriptor(e,a):null;s&&(s.get||s.set)?Object.defineProperty(n,a,s):n[a]=e[a]}n.default=e,r&&r.set(e,n);return n}(r(7294)),i=n(r(5697)),c=r(1142);function u(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(u=function(e){return e?r:t})(e)}var l=s.createContext(new c.SessionStorage);t.ScrollContext=l,l.displayName="GatsbyScrollContext";var h=function(e){function t(){for(var t,r=arguments.length,n=new Array(r),a=0;a{}},7730:function(e,t){"use strict";t.__esModule=!0,t.getForwards=function(e){return null==e?void 0:e.flatMap((e=>(null==e?void 0:e.forward)||[]))}},2731:function(e,t,r){"use strict";t.__esModule=!0,t.injectPartytownSnippet=function(e){if(!e.length)return;const t=document.querySelector("script[data-partytown]"),r=document.querySelector('iframe[src*="~partytown/partytown-sandbox-sw"]');t&&t.remove();r&&r.remove();const a=(0,o.getForwards)(e),s=document.createElement("script");s.dataset.partytown="",s.innerHTML=(0,n.partytownSnippet)({forward:a}),document.head.appendChild(s)};var n=r(2911),o=r(7730)},5418:function(e,t,r){t.components={"component---src-pages-404-tsx":()=>Promise.all([r.e(532),r.e(976),r.e(948),r.e(351),r.e(218)]).then(r.bind(r,2513)),"component---src-pages-debug-redirects-tsx":()=>Promise.all([r.e(532),r.e(976),r.e(948),r.e(351),r.e(356)]).then(r.bind(r,7470)),"component---src-pages-index-tsx":()=>Promise.all([r.e(532),r.e(976),r.e(948),r.e(885),r.e(351),r.e(534),r.e(325),r.e(691)]).then(r.bind(r,7200)),"component---src-pages-locations-tsx":()=>Promise.all([r.e(532),r.e(976),r.e(948),r.e(351),r.e(534),r.e(969)]).then(r.bind(r,6039)),"component---src-pages-posters-tsx":()=>Promise.all([r.e(532),r.e(976),r.e(948),r.e(351),r.e(743)]).then(r.bind(r,8445)),"component---src-pages-speakers-tsx":()=>Promise.all([r.e(532),r.e(976),r.e(948),r.e(351),r.e(534),r.e(758)]).then(r.bind(r,2206)),"component---src-pages-tags-tsx":()=>Promise.all([r.e(532),r.e(976),r.e(948),r.e(885),r.e(351),r.e(534),r.e(190)]).then(r.bind(r,6191)),"component---src-pages-talks-tsx":()=>Promise.all([r.e(532),r.e(976),r.e(948),r.e(885),r.e(351),r.e(534),r.e(505)]).then(r.bind(r,498)),"component---src-pages-unterstuetzer-tsx":()=>Promise.all([r.e(532),r.e(976),r.e(948),r.e(351),r.e(988)]).then(r.bind(r,7995)),"component---src-templates-location-page-tsx":()=>Promise.all([r.e(532),r.e(976),r.e(948),r.e(351),r.e(176)]).then(r.bind(r,2019)),"component---src-templates-speaker-page-tsx":()=>Promise.all([r.e(532),r.e(976),r.e(948),r.e(351),r.e(714)]).then(r.bind(r,4409)),"component---src-templates-static-page-tsx":()=>Promise.all([r.e(532),r.e(976),r.e(948),r.e(351),r.e(386)]).then(r.bind(r,5486)),"component---src-templates-talk-page-tsx":()=>Promise.all([r.e(532),r.e(976),r.e(948),r.e(885),r.e(351),r.e(534),r.e(325),r.e(721)]).then(r.bind(r,253))}},4741:function(e,t,r){e.exports=[{plugin:r(2154),options:{plugins:[],maxWidth:800,linkImagesToOriginal:!0,showCaptions:!1,markdownCaptions:!1,backgroundColor:"white",quality:50,withWebp:!1,withAvif:!1,tracedSVG:!1,loading:"lazy",decoding:"async",disableBgImageOnAlpha:!1,disableBgImage:!1}},{plugin:r(436),options:{plugins:[]}},{plugin:r(8348),options:{plugins:[],pathToConfigModule:"src/utils/typography.ts"}},{plugin:r(9608),options:{plugins:[],name:"JUG Görlitz",short_name:"JUG Görlitz",start_url:"/",background_color:"#fff",theme_color:"#337ab7",display:"minimal-ui",icon:"content/images/icon.png",legacy:!0,theme_color_in_head:!0,cache_busting_mode:"query",crossOrigin:"anonymous",include_favicon:!0,cacheDigest:"2ded17e3b6b8ff05cfb961a4ec8d0c25"}},{plugin:r(127),options:{plugins:[]}},{plugin:r(4094),options:{plugins:[]}}]},3092:function(e,t,r){const n=r(4741),{getResourceURLsForPathname:o,loadPage:a,loadPageSync:s}=r(8575).jN;t.h=function(e,t,r,i){void 0===t&&(t={});let c=n.map((r=>{if(!r.plugin[e])return;t.getResourceURLsForPathname=o,t.loadPage=a,t.loadPageSync=s;const n=r.plugin[e](t,r.options);return n&&i&&(t=i({args:t,result:n,plugin:r})),n}));return c=c.filter((e=>void 0!==e)),c.length>0?c:r?[r]:[]},t.I=(e,t,r)=>n.reduce(((r,n)=>n.plugin[e]?r.then((()=>n.plugin[e](t,n.options))):r),Promise.resolve())},4004:function(e,t){t.M=()=>""},8299:function(e,t,r){"use strict";r.d(t,{Z:function(){return n}});var n=function(e){return e=e||Object.create(null),{on:function(t,r){(e[t]||(e[t]=[])).push(r)},off:function(t,r){e[t]&&e[t].splice(e[t].indexOf(r)>>>0,1)},emit:function(t,r){(e[t]||[]).slice().map((function(e){e(r)})),(e["*"]||[]).slice().map((function(e){e(t,r)}))}}}()},7802:function(e,t,r){"use strict";r.d(t,{UD:function(){return d},Cj:function(){return f},GA:function(){return p},DS:function(){return h}});var n=r(7896),o=r(1505),a=e=>{if(void 0===e)return e;let[t,r=""]=e.split("?");return r&&(r="?"+r),"/"===t?"/"+r:"/"===t.charAt(t.length-1)?t.slice(0,-1)+r:t+r},s=r(6073);const i=new Map;let c=[];const u=e=>{let t=e;if(-1!==e.indexOf("?")){const[r,n]=e.split("?");t=`${r}?${encodeURIComponent(n)}`}const r=decodeURIComponent(t);return(0,o.Z)(r,decodeURIComponent("")).split("#")[0]};function l(e){return e.startsWith("/")||e.startsWith("https://")||e.startsWith("http://")?e:new URL(e,window.location.href+(window.location.href.endsWith("/")?"":"/")).pathname}const h=e=>{c=e},d=e=>{const t=m(e),r=c.map((e=>{let{path:t,matchPath:r}=e;return{path:r,originalPath:t}})),o=(0,n.pick)(r,t);return o?a(o.route.originalPath):null},p=e=>{const t=m(e),r=c.map((e=>{let{path:t,matchPath:r}=e;return{path:r,originalPath:t}})),o=(0,n.pick)(r,t);return o?o.params:{}},f=e=>{const t=u(l(e));if(i.has(t))return i.get(t);const r=(0,s.J)(e);if(r)return f(r.toPath);let n=d(t);return n||(n=m(e)),i.set(t,n),n},m=e=>{let t=u(l(e));return"/index.html"===t&&(t="/"),t=a(t),t}},4854:function(e,t,r){"use strict";r.r(t),r.d(t,{Link:function(){return i.rU},PageRenderer:function(){return a()},Script:function(){return E.Script},ScriptStrategy:function(){return E.ScriptStrategy},Slice:function(){return k},StaticQuery:function(){return c.i1},StaticQueryContext:function(){return c.B9},collectedScriptsByPage:function(){return E.collectedScriptsByPage},graphql:function(){return R},navigate:function(){return i.c4},parsePath:function(){return i.cP},prefetchPathname:function(){return S},scriptCache:function(){return E.scriptCache},scriptCallbackCache:function(){return E.scriptCallbackCache},useScrollRestoration:function(){return s.p2},useStaticQuery:function(){return c.K2},withAssetPrefix:function(){return i.mc},withPrefix:function(){return i.dq}});var n=r(8575),o=r(2743),a=r.n(o),s=r(9679),i=r(7118),c=r(1757),u=r(7326),l=r(4578);function h(e){return h=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},h(e)}var d=r(9611);function p(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}function f(e,t,r){return f=p()?Reflect.construct.bind():function(e,t,r){var n=[null];n.push.apply(n,t);var o=new(Function.bind.apply(e,n));return r&&(0,d.Z)(o,r.prototype),o},f.apply(null,arguments)}function m(e){var t="function"==typeof Map?new Map:void 0;return m=function(e){if(null===e||(r=e,-1===Function.toString.call(r).indexOf("[native code]")))return e;var r;if("function"!=typeof e)throw new TypeError("Super expression must either be null or a function");if(void 0!==t){if(t.has(e))return t.get(e);t.set(e,n)}function n(){return f(e,arguments,h(this).constructor)}return n.prototype=Object.create(e.prototype,{constructor:{value:n,enumerable:!1,writable:!0,configurable:!0}}),(0,d.Z)(n,e)},m(e)}var g=r(7294),P=r(4004),w=r(8995);const v=e=>{let{sliceId:t,children:r}=e;const n=[g.createElement("slice-start",{id:`${t}-1`}),g.createElement("slice-end",{id:`${t}-1`})];return r&&(n.push(r),n.push(g.createElement("slice-start",{id:`${t}-2`}),g.createElement("slice-end",{id:`${t}-2`}))),n},y=e=>{let{sliceName:t,allowEmpty:r,children:n,...o}=e;const a=(0,g.useContext)(w.u0),s=(0,g.useContext)(w.Db),i=a[t];if(!i){if(r)return null;throw new Error(`Slice "${i}" for "${t}" slot not found`)}const c=((e,t)=>Object.keys(t).length?`${e}-${(0,P.M)(t)}`:e)(i,o);let u=s[c];return u?n&&(u.hasChildren=!0):s[c]=u={props:o,sliceName:i,hasChildren:!!n},g.createElement(v,{sliceId:c},n)},b=e=>{let{sliceName:t,allowEmpty:r,children:n,...o}=e;const a=(0,g.useContext)(w.u0),s=(0,g.useContext)(w.m3),i=a[t],c=s.get(i);if(!c){if(r)return null;throw new Error(`Slice "${i}" for "${t}" slot not found`)}return g.createElement(c.component,Object.assign({sliceContext:c.sliceContext,data:c.data},o),n)};function k(e){{const t={...e,sliceName:e.alias};delete t.alias,delete t.__renderedByLocation;const r=(0,g.useContext)(w.Bs),n=C(e);if(Object.keys(n).length)throw new _("browser"===r.renderEnvironment,t.sliceName,n,e.__renderedByLocation);if("server"===r.renderEnvironment)return g.createElement(y,t);if("browser"===r.renderEnvironment)return g.createElement(b,t);if("engines"===r.renderEnvironment)return g.createElement(b,t);if("slices"===r.renderEnvironment){let t="";try{t=`\n\nSlice component "${r.sliceRoot.name}" (${r.sliceRoot.componentPath}) tried to render `}catch{}throw new Error(`Nested slices are not supported.${t}\n\nSee https://v5.gatsbyjs.com/docs/reference/built-in-components/gatsby-slice#nested-slices`)}throw new Error(`Slice context "${r.renderEnvironment}" is not supported.`)}}let _=function(e){function t(r,n,o,a){var s;const i=Object.entries(o).map((e=>{let[t,r]=e;return`not serializable "${r}" type passed to "${t}" prop`})).join(", "),c="SlicePropsError";let l="",h="";if(r){const e=g.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactDebugCurrentFrame.getCurrentStack().trim().split("\n").slice(1);e[0]=e[0].trim(),l="\n"+e.join("\n"),h=`Slice "${n}" was passed props that are not serializable (${i}).`}else{h=`${c}: Slice "${n}" was passed props that are not serializable (${i}).`;l=`${h}\n${(new Error).stack.trim().split("\n").slice(2).join("\n")}`}return(s=e.call(this,h)||this).name=c,l?s.stack=l:Error.captureStackTrace((0,u.Z)(s),t),a&&(s.forcedLocation={...a,functionName:"Slice"}),s}return(0,l.Z)(t,e),t}(m(Error));const C=function(e,t,r,n){void 0===t&&(t={}),void 0===r&&(r=[]),void 0===n&&(n=null);for(const[o,a]of Object.entries(e)){if(null==a||!n&&"children"===o)continue;const e=n?`${n}.${o}`:o;"function"==typeof a?t[e]=typeof a:"object"==typeof a&&r.indexOf(a)<=0&&(r.push(a),C(a,t,r,e))}return t};var E=r(3521);const S=n.ZP.enqueue;function R(){throw new Error("It appears like Gatsby is misconfigured. Gatsby related `graphql` calls are supposed to only be evaluated at compile time, and then compiled away. Unfortunately, something went wrong and the query was left in the compiled code.\n\nUnless your site has a complex or custom babel/Gatsby configuration this is likely a bug in Gatsby.")}},8575:function(e,t,r){"use strict";r.d(t,{uQ:function(){return d},kL:function(){return b},ZP:function(){return C},Nt:function(){return S},hs:function(){return E},jN:function(){return _},N1:function(){return k}});var n=r(4578);function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r{if("undefined"==typeof document)return void n();const o=document.createElement("link");o.setAttribute("rel","prefetch"),o.setAttribute("href",e),Object.keys(t).forEach((e=>{o.setAttribute(e,t[e])})),o.onload=r,o.onerror=n;(document.getElementsByTagName("head")[0]||document.getElementsByName("script")[0].parentNode).appendChild(o)}))}:function(e){return new Promise(((t,r)=>{const n=new XMLHttpRequest;n.open("GET",e,!0),n.onload=()=>{200===n.status?t():r()},n.send(null)}))},c={};var u=function(e,t){return new Promise((r=>{c[e]?r():i(e,t).then((()=>{r(),c[e]=!0})).catch((()=>{}))}))},l=r(8299),h=r(7802);const d={Error:"error",Success:"success"},p=e=>{const[t,r]=e.split("?");var n;return`/page-data/${"/"===t?"index":(n="/"===(n=t)[0]?n.slice(1):n).endsWith("/")?n.slice(0,-1):n}/page-data.json${r?`?${r}`:""}`};function f(e,t){return void 0===t&&(t="GET"),new Promise((r=>{const n=new XMLHttpRequest;n.open(t,e,!0),n.onreadystatechange=()=>{4==n.readyState&&r(n)},n.send(null)}))}const m=/bot|crawler|spider|crawling/i,g=function(e,t,r){var n;void 0===t&&(t=null);const o={componentChunkName:e.componentChunkName,path:e.path,webpackCompilationHash:e.webpackCompilationHash,matchPath:e.matchPath,staticQueryHashes:e.staticQueryHashes,getServerDataError:e.getServerDataError,slicesMap:null!==(n=e.slicesMap)&&void 0!==n?n:{}};return{component:t,head:r,json:e.result,page:o}};function P(e){return new Promise((t=>{try{const r=e.readRoot();t(r)}catch(r){if(!Object.hasOwnProperty.call(r,"_response")||!Object.hasOwnProperty.call(r,"_status"))throw r;setTimeout((()=>{P(e).then(t)}),200)}}))}let w=function(){function e(e,t){this.inFlightNetworkRequests=new Map,this.pageDb=new Map,this.inFlightDb=new Map,this.staticQueryDb={},this.pageDataDb=new Map,this.partialHydrationDb=new Map,this.slicesDataDb=new Map,this.sliceInflightDb=new Map,this.slicesDb=new Map,this.isPrefetchQueueRunning=!1,this.prefetchQueued=[],this.prefetchTriggered=new Set,this.prefetchCompleted=new Set,this.loadComponent=e,(0,h.DS)(t)}var t=e.prototype;return t.memoizedGet=function(e){let t=this.inFlightNetworkRequests.get(e);return t||(t=f(e,"GET"),this.inFlightNetworkRequests.set(e,t)),t.then((t=>(this.inFlightNetworkRequests.delete(e),t))).catch((t=>{throw this.inFlightNetworkRequests.delete(e),t}))},t.setApiRunner=function(e){this.apiRunner=e,this.prefetchDisabled=e("disableCorePrefetching").some((e=>e))},t.fetchPageDataJson=function(e){const{pagePath:t,retries:r=0}=e,n=p(t);return this.memoizedGet(n).then((n=>{const{status:o,responseText:a}=n;if(200===o)try{const r=JSON.parse(a);if(void 0===r.path)throw new Error("not a valid pageData response");const n=t.split("?")[1];return n&&!r.path.includes(n)&&(r.path+=`?${n}`),Object.assign(e,{status:d.Success,payload:r})}catch(s){}return 404===o||200===o?"/404.html"===t||"/500.html"===t?Object.assign(e,{status:d.Error}):this.fetchPageDataJson(Object.assign(e,{pagePath:"/404.html",notFound:!0})):500===o?this.fetchPageDataJson(Object.assign(e,{pagePath:"/500.html",internalServerError:!0})):r<3?this.fetchPageDataJson(Object.assign(e,{retries:r+1})):Object.assign(e,{status:d.Error})}))},t.fetchPartialHydrationJson=function(e){const{pagePath:t,retries:r=0}=e,n=p(t).replace(".json","-rsc.json");return this.memoizedGet(n).then((n=>{const{status:o,responseText:a}=n;if(200===o)try{return Object.assign(e,{status:d.Success,payload:a})}catch(s){}return 404===o||200===o?"/404.html"===t||"/500.html"===t?Object.assign(e,{status:d.Error}):this.fetchPartialHydrationJson(Object.assign(e,{pagePath:"/404.html",notFound:!0})):500===o?this.fetchPartialHydrationJson(Object.assign(e,{pagePath:"/500.html",internalServerError:!0})):r<3?this.fetchPartialHydrationJson(Object.assign(e,{retries:r+1})):Object.assign(e,{status:d.Error})}))},t.loadPageDataJson=function(e){const t=(0,h.Cj)(e);if(this.pageDataDb.has(t)){const e=this.pageDataDb.get(t);return Promise.resolve(e)}return this.fetchPageDataJson({pagePath:t}).then((e=>(this.pageDataDb.set(t,e),e)))},t.loadPartialHydrationJson=function(e){const t=(0,h.Cj)(e);if(this.partialHydrationDb.has(t)){const e=this.partialHydrationDb.get(t);return Promise.resolve(e)}return this.fetchPartialHydrationJson({pagePath:t}).then((e=>(this.partialHydrationDb.set(t,e),e)))},t.loadSliceDataJson=function(e){if(this.slicesDataDb.has(e)){const t=this.slicesDataDb.get(e);return Promise.resolve({sliceName:e,jsonPayload:t})}return f(`/slice-data/${e}.json`,"GET").then((t=>{const r=JSON.parse(t.responseText);return this.slicesDataDb.set(e,r),{sliceName:e,jsonPayload:r}}))},t.findMatchPath=function(e){return(0,h.UD)(e)},t.loadPage=function(e){const t=(0,h.Cj)(e);if(this.pageDb.has(t)){const e=this.pageDb.get(t);return e.error?{error:e.error,status:e.status}:Promise.resolve(e.payload)}if(this.inFlightDb.has(t))return this.inFlightDb.get(t);const r=[this.loadAppData(),this.loadPageDataJson(t)];const n=Promise.all(r).then((e=>{const[r,n,o]=e;if(n.status===d.Error||(null==o?void 0:o.status)===d.Error)return{status:d.Error};let i=n.payload;const{componentChunkName:c,staticQueryHashes:u=[],slicesMap:h={}}=i,p={},f=Array.from(new Set(Object.values(h))),m=e=>{if(this.slicesDb.has(e.name))return this.slicesDb.get(e.name);if(this.sliceInflightDb.has(e.name))return this.sliceInflightDb.get(e.name);const t=this.loadComponent(e.componentChunkName).then((t=>{return{component:(r=t,r&&r.default||r),sliceContext:e.result.sliceContext,data:e.result.data};var r}));return this.sliceInflightDb.set(e.name,t),t.then((t=>{this.slicesDb.set(e.name,t),this.sliceInflightDb.delete(e.name)})),t};return Promise.all(f.map((e=>this.loadSliceDataJson(e)))).then((e=>{const h=[],f=a(u);for(const{jsonPayload:t,sliceName:r}of Object.values(e)){h.push({name:r,...t});for(const e of t.staticQueryHashes)f.includes(e)||f.push(e)}const w=[Promise.all(h.map(m)),this.loadComponent(c,"head")];w.push(this.loadComponent(c));const v=Promise.all(w).then((e=>{const[t,a,c]=e;p.createdAt=new Date;for(const r of t)(!r||r instanceof Error)&&(p.status=d.Error,p.error=r);let u;if((!c||c instanceof Error)&&(p.status=d.Error,p.error=c),p.status!==d.Error){if(p.status=d.Success,!0!==n.notFound&&!0!==(null==o?void 0:o.notFound)||(p.notFound=!0),i=Object.assign(i,{webpackCompilationHash:r?r.webpackCompilationHash:""}),"string"==typeof(null==o?void 0:o.payload)){u=g(i,null,a),u.partialHydration=o.payload;const e=new ReadableStream({start(e){const t=new TextEncoder;e.enqueue(t.encode(o.payload))},pull(e){e.close()},cancel(){}});return P((0,s.createFromReadableStream)(e)).then((e=>(u.partialHydration=e,u)))}u=g(i,c,a)}return u})),y=Promise.all(f.map((e=>{if(this.staticQueryDb[e]){const t=this.staticQueryDb[e];return{staticQueryHash:e,jsonPayload:t}}return this.memoizedGet(`/page-data/sq/d/${e}.json`).then((t=>{const r=JSON.parse(t.responseText);return{staticQueryHash:e,jsonPayload:r}})).catch((()=>{throw new Error(`We couldn't load "/page-data/sq/d/${e}.json"`)}))}))).then((e=>{const t={};return e.forEach((e=>{let{staticQueryHash:r,jsonPayload:n}=e;t[r]=n,this.staticQueryDb[r]=n})),t}));return Promise.all([v,y]).then((e=>{let r,[n,o]=e;return n&&(r={...n,staticQueryResults:o},p.payload=r,l.Z.emit("onPostLoadPageResources",{page:r,pageResources:r})),this.pageDb.set(t,p),p.error?{error:p.error,status:p.status}:r})).catch((e=>({error:e,status:d.Error})))}))}));return n.then((()=>{this.inFlightDb.delete(t)})).catch((e=>{throw this.inFlightDb.delete(t),e})),this.inFlightDb.set(t,n),n},t.loadPageSync=function(e,t){void 0===t&&(t={});const r=(0,h.Cj)(e);if(this.pageDb.has(r)){var n;const e=this.pageDb.get(r);if(e.payload)return e.payload;if(null!==(n=t)&&void 0!==n&&n.withErrorDetails)return{error:e.error,status:e.status}}},t.shouldPrefetch=function(e){return!!(()=>{if("connection"in navigator&&void 0!==navigator.connection){if((navigator.connection.effectiveType||"").includes("2g"))return!1;if(navigator.connection.saveData)return!1}return!0})()&&((!navigator.userAgent||!m.test(navigator.userAgent))&&!this.pageDb.has(e))},t.prefetch=function(e){if(!this.shouldPrefetch(e))return{then:e=>e(!1),abort:()=>{}};if(this.prefetchTriggered.has(e))return{then:e=>e(!0),abort:()=>{}};const t={resolve:null,reject:null,promise:null};t.promise=new Promise(((e,r)=>{t.resolve=e,t.reject=r})),this.prefetchQueued.push([e,t]);const r=new AbortController;return r.signal.addEventListener("abort",(()=>{const t=this.prefetchQueued.findIndex((t=>{let[r]=t;return r===e}));-1!==t&&this.prefetchQueued.splice(t,1)})),this.isPrefetchQueueRunning||(this.isPrefetchQueueRunning=!0,setTimeout((()=>{this._processNextPrefetchBatch()}),3e3)),{then:(e,r)=>t.promise.then(e,r),abort:r.abort.bind(r)}},t._processNextPrefetchBatch=function(){(window.requestIdleCallback||(e=>setTimeout(e,0)))((()=>{const e=this.prefetchQueued.splice(0,4),t=Promise.all(e.map((e=>{let[t,r]=e;return this.prefetchTriggered.has(t)||(this.apiRunner("onPrefetchPathname",{pathname:t}),this.prefetchTriggered.add(t)),this.prefetchDisabled?r.resolve(!1):this.doPrefetch((0,h.Cj)(t)).then((()=>{this.prefetchCompleted.has(t)||(this.apiRunner("onPostPrefetchPathname",{pathname:t}),this.prefetchCompleted.add(t)),r.resolve(!0)}))})));this.prefetchQueued.length?t.then((()=>{setTimeout((()=>{this._processNextPrefetchBatch()}),3e3)})):this.isPrefetchQueueRunning=!1}))},t.doPrefetch=function(e){const t=p(e);return u(t,{crossOrigin:"anonymous",as:"fetch"}).then((()=>this.loadPageDataJson(e)))},t.hovering=function(e){this.loadPage(e)},t.getResourceURLsForPathname=function(e){const t=(0,h.Cj)(e),r=this.pageDataDb.get(t);if(r){const e=g(r.payload);return[].concat(a(v(e.page.componentChunkName)),[p(t)])}return null},t.isPageNotFound=function(e){const t=(0,h.Cj)(e),r=this.pageDb.get(t);return!r||r.notFound},t.loadAppData=function(e){return void 0===e&&(e=0),this.memoizedGet("/page-data/app-data.json").then((t=>{const{status:r,responseText:n}=t;let o;if(200!==r&&e<3)return this.loadAppData(e+1);if(200===r)try{const e=JSON.parse(n);if(void 0===e.webpackCompilationHash)throw new Error("not a valid app-data response");o=e}catch(a){}return o}))},e}();const v=e=>(window.___chunkMapping[e]||[]).map((e=>""+e));let y,b=function(e){function t(t,r,n){var o;return o=e.call(this,(function(e,r){if(void 0===r&&(r="components"),!t[r="components"][e])throw new Error(`We couldn't find the correct component chunk with the name "${e}"`);return t[r][e]().catch((e=>e))}),r)||this,n&&o.pageDataDb.set((0,h.Cj)(n.path),{pagePath:n.path,payload:n,status:"success"}),o}(0,n.Z)(t,e);var r=t.prototype;return r.doPrefetch=function(t){return e.prototype.doPrefetch.call(this,t).then((e=>{if(e.status!==d.Success)return Promise.resolve();const t=e.payload,r=t.componentChunkName,n=v(r);return Promise.all(n.map(u)).then((()=>t))}))},r.loadPageDataJson=function(t){return e.prototype.loadPageDataJson.call(this,t).then((e=>e.notFound?f(t,"HEAD").then((t=>200===t.status?{status:d.Error}:e)):e))},r.loadPartialHydrationJson=function(t){return e.prototype.loadPartialHydrationJson.call(this,t).then((e=>e.notFound?f(t,"HEAD").then((t=>200===t.status?{status:d.Error}:e)):e))},t}(w);const k=e=>{y=e},_={enqueue:e=>y.prefetch(e),getResourceURLsForPathname:e=>y.getResourceURLsForPathname(e),loadPage:e=>y.loadPage(e),loadPageSync:function(e,t){return void 0===t&&(t={}),y.loadPageSync(e,t)},prefetch:e=>y.prefetch(e),isPageNotFound:e=>y.isPageNotFound(e),hovering:e=>y.hovering(e),loadAppData:()=>y.loadAppData()};var C=_;function E(){return y?y.staticQueryDb:{}}function S(){return y?y.slicesDb:{}}},4779:function(e,t,r){"use strict";r.d(t,{Z:function(){return w}});var n=r(7294),o=r(5697),a=r.n(o),s=r(3092),i=r(7802),c=r(4854),u=r(7896),l=r(4941);function h(e){let{children:t,callback:r}=e;return(0,n.useEffect)((()=>{r()})),t}const d=["link","meta","style","title","base","noscript","script"];function p(e,t){if(e instanceof HTMLElement&&t instanceof HTMLElement){const r=t.getAttribute("nonce");if(r&&!e.getAttribute("nonce")){const n=t.cloneNode(!0);return n.setAttribute("nonce",""),n.nonce=r,r===e.nonce&&e.isEqualNode(n)}}return e.isEqualNode(t)}const f=document.createElement("div"),m=()=>{var e;const t=[],r=new Map;for(const u of f.childNodes){var n,o;const e=u.nodeName.toLowerCase(),s=null===(n=u.attributes)||void 0===n||null===(o=n.id)||void 0===o?void 0:o.value;if(d.includes(e)){let e=u.cloneNode(!0);if(e.setAttribute("data-gatsby-head",!0),"script"===e.nodeName.toLowerCase()){const t=document.createElement("script");for(const r of e.attributes)t.setAttribute(r.name,r.value);t.innerHTML=e.innerHTML,e=t}if(s)if(r.has(s)){var a;const n=r.get(s);null===(a=t[n].parentNode)||void 0===a||a.removeChild(t[n]),t[n]=e}else t.push(e),r.set(s,t.length-1);else t.push(e)}else;}const s=document.querySelectorAll("[data-gatsby-head]");var i;if(0===s.length)return void(i=document.head).append.apply(i,t);const c=[];!function(e){let{oldNodes:t,newNodes:r,onStale:n,onNew:o}=e;for(const a of t){const e=r.findIndex((e=>p(e,a)));-1===e?n(a):r.splice(e,1)}for(const a of r)o(a)}({oldNodes:s,newNodes:t,onStale:e=>e.parentNode.removeChild(e),onNew:e=>c.push(e)}),(e=document.head).append.apply(e,c)};function g(e){let{pageComponent:t,staticQueryResults:r,pageComponentProps:o}=e;(0,n.useEffect)((()=>{if(null!=t&&t.Head){!function(e){if("function"!=typeof e)throw new Error(`Expected "Head" export to be a function got "${typeof e}".`)}(t.Head);const{render:a}=(0,l.U)(),s=t.Head;a(n.createElement(h,{callback:m},n.createElement(c.StaticQueryContext.Provider,{value:r},n.createElement(u.LocationProvider,null,n.createElement(s,{location:{pathname:(e=o).location.pathname},params:e.params,data:e.data||{},pageContext:e.pageContext})))),f)}var e;return()=>{(()=>{const e=document.querySelectorAll("[data-gatsby-head]");for(const t of e)t.parentNode.removeChild(t)})()}}))}function P(e){const t={...e,params:{...(0,i.GA)(e.location.pathname),...e.pageResources.json.pageContext.__params}};let r;var o;r=e.pageResources.partialHydration?e.pageResources.partialHydration:(0,n.createElement)((o=e.pageResources.component)&&o.default||o,{...t,key:e.path||e.pageResources.page.path});g({pageComponent:e.pageResources.head,staticQueryResults:e.pageResources.staticQueryResults,pageComponentProps:t});return(0,s.h)("wrapPageElement",{element:r,props:t},r,(e=>{let{result:r}=e;return{element:r,props:t}})).pop()}P.propTypes={location:a().object.isRequired,pageResources:a().object.isRequired,data:a().object,pageContext:a().object.isRequired};var w=P},5824:function(e,t,r){"use strict";var n=r(4578),o=r(3092),a=r(7294),s=r(7896),i=r(9679),c=r(1757),u=r(8995),l=r(8575),h=r(6073),d=r(8299);const p={id:"gatsby-announcer",style:{position:"absolute",top:0,width:1,height:1,padding:0,overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",border:0},"aria-live":"assertive","aria-atomic":"true"};var f=r(7118);function m(e){const t=(0,h.J)(e),{hash:r,search:n}=window.location;return null!=t&&(window.___replace(t.toPath+n+r),!0)}let g="";window.addEventListener("unhandledrejection",(e=>{/loading chunk \d* failed./i.test(e.reason)&&g&&(window.location.pathname=g)}));const P=(e,t)=>{m(e.pathname)||(g=e.pathname,(0,o.h)("onPreRouteUpdate",{location:e,prevLocation:t}))},w=(e,t)=>{m(e.pathname)||(0,o.h)("onRouteUpdate",{location:e,prevLocation:t})},v=function(e,t){if(void 0===t&&(t={}),"number"==typeof e)return void s.globalHistory.navigate(e);const{pathname:r,search:n,hash:a}=(0,f.cP)(e),i=(0,h.J)(r);if(i&&(e=i.toPath+n+a),window.___swUpdated)return void(window.location=r+n+a);const c=setTimeout((()=>{d.Z.emit("onDelayedLoadPageResources",{pathname:r}),(0,o.h)("onRouteUpdateDelayed",{location:window.location})}),1e3);l.ZP.loadPage(r+n).then((o=>{if(!o||o.status===l.uQ.Error)return window.history.replaceState({},"",location.href),window.location=r,void clearTimeout(c);o&&o.page.webpackCompilationHash!==window.___webpackCompilationHash&&("serviceWorker"in navigator&&null!==navigator.serviceWorker.controller&&"activated"===navigator.serviceWorker.controller.state&&navigator.serviceWorker.controller.postMessage({gatsbyApi:"clearPathResources"}),window.location=r+n+a),(0,s.navigate)(e,t),clearTimeout(c)}))};function y(e,t){let{location:r}=t;const{pathname:n,hash:a}=r,s=(0,o.h)("shouldUpdateScroll",{prevRouterProps:e,pathname:n,routerProps:{location:r},getSavedScrollPosition:e=>[0,this._stateStorage.read(e,e.key)]});if(s.length>0)return s[s.length-1];if(e){const{location:{pathname:t}}=e;if(t===n)return a?decodeURI(a.slice(1)):[0,0]}return!0}let b=function(e){function t(t){var r;return(r=e.call(this,t)||this).announcementRef=a.createRef(),r}(0,n.Z)(t,e);var r=t.prototype;return r.componentDidUpdate=function(e,t){requestAnimationFrame((()=>{let e=`new page at ${this.props.location.pathname}`;document.title&&(e=document.title);const t=document.querySelectorAll("#gatsby-focus-wrapper h1");t&&t.length&&(e=t[0].textContent);const r=`Navigated to ${e}`;if(this.announcementRef.current){this.announcementRef.current.innerText!==r&&(this.announcementRef.current.innerText=r)}}))},r.render=function(){return a.createElement("div",Object.assign({},p,{ref:this.announcementRef}))},t}(a.Component);const k=(e,t)=>{var r,n;return e.href!==t.href||(null==e||null===(r=e.state)||void 0===r?void 0:r.key)!==(null==t||null===(n=t.state)||void 0===n?void 0:n.key)};let _=function(e){function t(t){var r;return r=e.call(this,t)||this,P(t.location,null),r}(0,n.Z)(t,e);var r=t.prototype;return r.componentDidMount=function(){w(this.props.location,null)},r.shouldComponentUpdate=function(e){return!!k(e.location,this.props.location)&&(P(this.props.location,e.location),!0)},r.componentDidUpdate=function(e){k(e.location,this.props.location)&&w(this.props.location,e.location)},r.render=function(){return a.createElement(a.Fragment,null,this.props.children,a.createElement(b,{location:location}))},t}(a.Component);var C=r(4779),E=r(5418);function S(e,t){for(var r in e)if(!(r in t))return!0;for(var n in t)if(e[n]!==t[n])return!0;return!1}var R=function(e){function t(t){var r;r=e.call(this)||this;const{location:n,pageResources:o}=t;return r.state={location:{...n},pageResources:o||l.ZP.loadPageSync(n.pathname+n.search,{withErrorDetails:!0})},r}(0,n.Z)(t,e),t.getDerivedStateFromProps=function(e,t){let{location:r}=e;if(t.location.href!==r.href){return{pageResources:l.ZP.loadPageSync(r.pathname+r.search,{withErrorDetails:!0}),location:{...r}}}return{location:{...r}}};var r=t.prototype;return r.loadResources=function(e){l.ZP.loadPage(e).then((t=>{t&&t.status!==l.uQ.Error?this.setState({location:{...window.location},pageResources:t}):(window.history.replaceState({},"",location.href),window.location=e)}))},r.shouldComponentUpdate=function(e,t){return t.pageResources?this.state.pageResources!==t.pageResources||(this.state.pageResources.component!==t.pageResources.component||(this.state.pageResources.json!==t.pageResources.json||(!(this.state.location.key===t.location.key||!t.pageResources.page||!t.pageResources.page.matchPath&&!t.pageResources.page.path)||function(e,t,r){return S(e.props,t)||S(e.state,r)}(this,e,t)))):(this.loadResources(e.location.pathname+e.location.search),!1)},r.render=function(){return this.props.children(this.state)},t}(a.Component),j=r(1505),I=r(4941);const x=new l.kL(E,[],window.pageData);(0,l.N1)(x),x.setApiRunner(o.h);const{render:B,hydrate:O}=(0,I.U)();window.asyncRequires=E,window.___emitter=d.Z,window.___loader=l.jN,s.globalHistory.listen((e=>{e.location.action=e.action})),window.___push=e=>v(e,{replace:!1}),window.___replace=e=>v(e,{replace:!0}),window.___navigate=(e,t)=>v(e,t);const D="gatsby-reload-compilation-hash-match";(0,o.I)("onClientEntry").then((()=>{(0,o.h)("registerServiceWorker").filter(Boolean).length>0&&r(9939);const e=e=>a.createElement(s.BaseContext.Provider,{value:{baseuri:"/",basepath:"/"}},a.createElement(C.Z,e)),t=a.createContext({}),h={renderEnvironment:"browser"};let d=function(e){function r(){return e.apply(this,arguments)||this}return(0,n.Z)(r,e),r.prototype.render=function(){const{children:e}=this.props;return a.createElement(s.Location,null,(r=>{let{location:n}=r;return a.createElement(R,{location:n},(r=>{let{pageResources:n,location:o}=r;const s=(0,l.hs)(),i=(0,l.Nt)();return a.createElement(c.B9.Provider,{value:s},a.createElement(u.Bs.Provider,{value:h},a.createElement(u.m3.Provider,{value:i},a.createElement(u.u0.Provider,{value:n.page.slicesMap},a.createElement(t.Provider,{value:{pageResources:n,location:o}},e)))))}))}))},r}(a.Component),p=function(r){function o(){return r.apply(this,arguments)||this}return(0,n.Z)(o,r),o.prototype.render=function(){return a.createElement(t.Consumer,null,(t=>{let{pageResources:r,location:n}=t;return a.createElement(_,{location:n},a.createElement(i.$C,{location:n,shouldUpdateScroll:y},a.createElement(s.Router,{basepath:"",location:n,id:"gatsby-focus-wrapper"},a.createElement(e,Object.assign({path:"/404.html"===r.page.path||"/500.html"===r.page.path?(0,j.Z)(n.pathname,""):encodeURI((r.page.matchPath||r.page.path).split("?")[0])},this.props,{location:n,pageResources:r},r.json)))))}))},o}(a.Component);const{pagePath:f,location:m}=window;f&&""+f!==m.pathname+(f.includes("?")?m.search:"")&&!(x.findMatchPath((0,j.Z)(m.pathname,""))||f.match(/^\/(404|500)(\/?|.html)$/)||f.match(/^\/offline-plugin-app-shell-fallback\/?$/))&&(0,s.navigate)(""+f+(f.includes("?")?"":m.search)+m.hash,{replace:!0});const g=()=>{try{return sessionStorage}catch{return null}};l.jN.loadPage(m.pathname+m.search).then((e=>{var t;const r=g();if(null!=e&&null!==(t=e.page)&&void 0!==t&&t.webpackCompilationHash&&e.page.webpackCompilationHash!==window.___webpackCompilationHash&&("serviceWorker"in navigator&&null!==navigator.serviceWorker.controller&&"activated"===navigator.serviceWorker.controller.state&&navigator.serviceWorker.controller.postMessage({gatsbyApi:"clearPathResources"}),r)){if(!("1"===r.getItem(D)))return r.setItem(D,"1"),void window.location.reload(!0)}if(r&&r.removeItem(D),!e||e.status===l.uQ.Error){const t=`page resources for ${m.pathname} not found. Not rendering React`;if(e&&e.error)throw console.error(t),e.error;throw new Error(t)}const n=(0,o.h)("wrapRootElement",{element:a.createElement(p,null)},a.createElement(p,null),(e=>{let{result:t}=e;return{element:t}})).pop(),s=function(){const e=a.useRef(!1);return a.useEffect((()=>{e.current||(e.current=!0,performance.mark&&performance.mark("onInitialClientRender"),(0,o.h)("onInitialClientRender"))}),[]),a.createElement(d,null,n)},i=document.getElementById("gatsby-focus-wrapper");let c=B;i&&i.children.length&&(c=O);const u=(0,o.h)("replaceHydrateFunction",void 0,c)[0];function h(){const e="undefined"!=typeof window?document.getElementById("___gatsby"):null;u(a.createElement(s,null),e)}const f=document;if("complete"===f.readyState||"loading"!==f.readyState&&!f.documentElement.doScroll)setTimeout((function(){h()}),0);else{const e=function(){f.removeEventListener("DOMContentLoaded",e,!1),window.removeEventListener("load",e,!1),h()};f.addEventListener("DOMContentLoaded",e,!1),window.addEventListener("load",e,!1)}}))}))},224:function(e,t,r){"use strict";r.r(t);var n=r(7294),o=r(8575),a=r(4779);t.default=e=>{let{location:t}=e;const r=o.ZP.loadPageSync(t.pathname);return r?n.createElement(a.Z,{location:t,pageResources:r,...r.json}):null}},2743:function(e,t,r){var n;e.exports=(n=r(224))&&n.default||n},4941:function(e,t,r){"use strict";r.d(t,{U:function(){return o}});const n=new WeakMap;function o(){const e=r(745);return{render:(t,r)=>{let o=n.get(r);o||n.set(r,o=e.createRoot(r)),o.render(t)},hydrate:(t,r)=>e.hydrateRoot(r,t)}}},6073:function(e,t,r){"use strict";r.d(t,{J:function(){return s}});var n=JSON.parse('[{"fromPath":"/2018/06/27/immutable-data","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2018-06-27-immutable-data/"},{"fromPath":"/2018/06/27/immutable-data.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2018-06-27-immutable-data/"},{"fromPath":"/2018/05/30/graphql","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2018-05-30-graphql/"},{"fromPath":"/2018/05/30/graphql.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2018-05-30-graphql/"},{"fromPath":"/2018/04/25/kotlin","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2018-04-25-kotlin/"},{"fromPath":"/2018/04/25/kotlin.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2018-04-25-kotlin/"},{"fromPath":"/2018/03/20/mikro_vs_makroarchitektur","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2018-03-20-mikro_vs_makroarchitektur/"},{"fromPath":"/2018/03/20/mikro_vs_makroarchitektur.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2018-03-20-mikro_vs_makroarchitektur/"},{"fromPath":"/2018/02/28/java_auf_sap_cloud","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2018-02-28-java_auf_sap_cloud/"},{"fromPath":"/2018/02/28/java_auf_sap_cloud.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2018-02-28-java_auf_sap_cloud/"},{"fromPath":"/2018/01/31/system_of_systems","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2018-01-31-system_of_systems/"},{"fromPath":"/2018/01/31/system_of_systems.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2018-01-31-system_of_systems/"},{"fromPath":"/2017/11/29/neo4j","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2017-11-29-neo4j/"},{"fromPath":"/2017/11/29/neo4j.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2017-11-29-neo4j/"},{"fromPath":"/2017/10/25/serverless","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2017-10-25-serverless/"},{"fromPath":"/2017/10/25/serverless.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2017-10-25-serverless/"},{"fromPath":"/2017/08/30/alexa","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2017-08-30-alexa/"},{"fromPath":"/2017/08/30/alexa.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2017-08-30-alexa/"},{"fromPath":"/2017/05/31/react","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2017-05-31-react/"},{"fromPath":"/2017/05/31/react.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2017-05-31-react/"},{"fromPath":"/2017/04/25/jdk9","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2017-04-26-jdk9/"},{"fromPath":"/2017/04/25/jdk9.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2017-04-26-jdk9/"},{"fromPath":"/2017/03/22/angular","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2017-03-22-angular/"},{"fromPath":"/2017/03/22/angular.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2017-03-22-angular/"},{"fromPath":"/2017/02/22/css","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2017-02-22-css/"},{"fromPath":"/2017/02/22/css.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2017-02-22-css/"},{"fromPath":"/2017/01/25/junit5","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2017-01-25-junit5/"},{"fromPath":"/2017/01/25/junit5.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2017-01-25-junit5/"},{"fromPath":"/2016/11/30/inside_jvm","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2016-11-30-inside_jvm/"},{"fromPath":"/2016/11/30/inside_jvm.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2016-11-30-inside_jvm/"},{"fromPath":"/2016/09/21/kommunikationskultur","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2016-09-21-kommunikationskultur/"},{"fromPath":"/2016/09/21/kommunikationskultur.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2016-09-21-kommunikationskultur/"},{"fromPath":"/2016/07/27/testwerkzeuge_javafx","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2016-07-27-testwerkzeuge_javafx/"},{"fromPath":"/2016/07/27/testwerkzeuge_javafx.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2016-07-27-testwerkzeuge_javafx/"},{"fromPath":"/2016/05/25/performance-analyse-inspectit","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2016-05-25-performance-analyse-inspectit/"},{"fromPath":"/2016/05/25/performance-analyse-inspectit.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2016-05-25-performance-analyse-inspectit/"},{"fromPath":"/2016/03/30/haskell_frege","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2016-03-30-haskell_frege/"},{"fromPath":"/2016/03/30/haskell_frege.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2016-03-30-haskell_frege/"},{"fromPath":"/2016/01/27/functional_java","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2016-01-27-functional_java/"},{"fromPath":"/2016/01/27/functional_java.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2016-01-27-functional_java/"},{"fromPath":"/2015/11/25/javafx-mobile","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2015-11-25-javafx-mobile/"},{"fromPath":"/2015/11/25/javafx-mobile.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2015-11-25-javafx-mobile/"},{"fromPath":"/2015/09/30/guava","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2015-09-30-guava/"},{"fromPath":"/2015/09/30/guava.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2015-09-30-guava/"},{"fromPath":"/2015/07/29/drools","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2015-07-29-drools/"},{"fromPath":"/2015/07/29/drools.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2015-07-29-drools/"},{"fromPath":"/2015/05/27/advanced-android","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2015-05-27-advanced-android/"},{"fromPath":"/2015/05/27/advanced-android.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2015-05-27-advanced-android/"},{"fromPath":"/2015/03/25/android","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2015-03-25-android/"},{"fromPath":"/2015/03/25/android.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2015-03-25-android/"},{"fromPath":"/2015/01/28/moskito","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2015-01-28-moskito/"},{"fromPath":"/2015/01/28/moskito.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2015-01-28-moskito/"},{"fromPath":"/2014/12/03/model-view-star","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2014-12-03-model-view-star/"},{"fromPath":"/2014/12/03/model-view-star.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2014-12-03-model-view-star/"},{"fromPath":"/2014/10/29/infrastructure_as_code","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2014-10-29-infrastructure_as_code/"},{"fromPath":"/2014/10/29/infrastructure_as_code.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2014-10-29-infrastructure_as_code/"},{"fromPath":"/2014/09/24/solr","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2014-09-24-solr/"},{"fromPath":"/2014/09/24/solr.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2014-09-24-solr/"},{"fromPath":"/2014/07/30/java8-streams","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2014-07-30-java8-streams/"},{"fromPath":"/2014/07/30/java8-streams.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2014-07-30-java8-streams/"},{"fromPath":"/2014/05/28/hazelcast","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2014-05-28-hazelcast/"},{"fromPath":"/2014/05/28/hazelcast.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2014-05-28-hazelcast/"},{"fromPath":"/2014/04/02/assertj","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2014-04-02-assertj/"},{"fromPath":"/2014/04/02/assertj.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2014-04-02-assertj/"},{"fromPath":"/2014/01/29/opendip","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2014-01-29-opendip/"},{"fromPath":"/2014/01/29/opendip.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2014-01-29-opendip/"},{"fromPath":"/2013/11/27/web-performance","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2013-11-27-web-performance/"},{"fromPath":"/2013/11/27/web-performance.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2013-11-27-web-performance/"},{"fromPath":"/2013/10/30/app-design","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2013-10-30-app-design/"},{"fromPath":"/2013/10/30/app-design.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2013-10-30-app-design/"},{"fromPath":"/2013/07/31/persona","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2013-07-31-persona/"},{"fromPath":"/2013/07/31/persona.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2013-07-31-persona/"},{"fromPath":"/2013/05/29/jruby","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2013-05-29-jruby/"},{"fromPath":"/2013/05/29/jruby.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2013-05-29-jruby/"},{"fromPath":"/2013/03/27/nxt_lego","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2013-03-27-nxt_lego/"},{"fromPath":"/2013/03/27/nxt_lego.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2013-03-27-nxt_lego/"},{"fromPath":"/2012/11/28/javafx2","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2012-11-28-javafx2/"},{"fromPath":"/2012/11/28/javafx2.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2012-11-28-javafx2/"},{"fromPath":"/2012/09/26/bean_validation","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2012-09-26-bean_validation/"},{"fromPath":"/2012/09/26/bean_validation.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2012-09-26-bean_validation/"},{"fromPath":"/2012/07/25/selenium_praxis","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2012-07-25-selenium_praxis/"},{"fromPath":"/2012/07/25/selenium_praxis.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2012-07-25-selenium_praxis/"},{"fromPath":"/2012/06/27/gridgain","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2012-06-27-gridgain/"},{"fromPath":"/2012/06/27/gridgain.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2012-06-27-gridgain/"},{"fromPath":"/2012/05/30/jmonkey-engine3","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2012-05-30-jmonkey-engine3/"},{"fromPath":"/2012/05/30/jmonkey-engine3.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2012-05-30-jmonkey-engine3/"},{"fromPath":"/2012/04/25/maven","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2012-04-25-maven/"},{"fromPath":"/2012/04/25/maven.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2012-04-25-maven/"},{"fromPath":"/2012/03/28/webtests","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2012-03-28-webtests/"},{"fromPath":"/2012/03/28/webtests.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2012-03-28-webtests/"},{"fromPath":"/2012/02/29/scala_webapps","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2012-02-29-scala_webapps/"},{"fromPath":"/2012/02/29/scala_webapps.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2012-02-29-scala_webapps/"},{"fromPath":"/2012/01/25/jsf_cdi_advanced","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2012-01-25-jsf_cdi_advanced/"},{"fromPath":"/2012/01/25/jsf_cdi_advanced.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2012-01-25-jsf_cdi_advanced/"},{"fromPath":"/2012/01/04/hibernate","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2012-01-01-hibernate/"},{"fromPath":"/2012/01/04/hibernate.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2012-01-01-hibernate/"},{"fromPath":"/2011/11/30/jsf-cdi","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2011-11-30-jsf-cdi/"},{"fromPath":"/2011/11/30/jsf-cdi.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2011-11-30-jsf-cdi/"},{"fromPath":"/2011/10/26/android","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2011-10-26-android/"},{"fromPath":"/2011/10/26/android.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2011-10-26-android/"},{"fromPath":"/2011/09/28/jdom","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2011-09-28-jdom/"},{"fromPath":"/2011/09/28/jdom.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2011-09-28-jdom/"},{"fromPath":"/2011/09/28/single-sign-on","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2011-09-28-single-sign-on/"},{"fromPath":"/2011/09/28/single-sign-on.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2011-09-28-single-sign-on/"},{"fromPath":"/2011/08/31/testen","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2011-08-31-testen/"},{"fromPath":"/2011/08/31/testen.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2011-08-31-testen/"},{"fromPath":"/2011/07/27/testng","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2011-07-27-testng/"},{"fromPath":"/2011/07/27/testng.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2011-07-27-testng/"},{"fromPath":"/2011/07/27/scala","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2011-07-27-scala/"},{"fromPath":"/2011/07/27/scala.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2011-07-27-scala/"},{"fromPath":"/2011/06/29/javaee_jboss","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2011-06-29-javaee_jboss/"},{"fromPath":"/2011/06/29/javaee_jboss.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2011-06-29-javaee_jboss/"},{"fromPath":"/2011/05/27/guice","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2011-05-27-guice/"},{"fromPath":"/2011/05/27/guice.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2011-05-27-guice/"},{"fromPath":"/2011/04/27/gwt","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2011-04-27-gwt/"},{"fromPath":"/2011/04/27/gwt.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2011-04-27-gwt/"},{"fromPath":"/2011/04/27/osgi_springdm","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2011-04-27-osgi_springdm/"},{"fromPath":"/2011/04/27/osgi_springdm.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2011-04-27-osgi_springdm/"},{"fromPath":"/2011/03/22/easymock","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2011-03-22-easymock/"},{"fromPath":"/2011/03/22/easymock.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2011-03-22-easymock/"},{"fromPath":"/2011/03/22/jenkins","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2011-03-22-jenkins/"},{"fromPath":"/2011/03/22/jenkins.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2011-03-22-jenkins/"}]');const o=new Map,a=new Map;function s(e){let t=o.get(e);return t||(t=a.get(e.toLowerCase())),t}n.forEach((e=>{e.ignoreCase?a.set(e.fromPath,e):o.set(e.fromPath,e)}))},9939:function(e,t,r){"use strict";r.r(t);var n=r(3092);"https:"!==window.location.protocol&&"localhost"!==window.location.hostname?console.error("Service workers can only be used over HTTPS, or on localhost for development"):"serviceWorker"in navigator&&navigator.serviceWorker.register("/sw.js").then((function(e){e.addEventListener("updatefound",(()=>{(0,n.h)("onServiceWorkerUpdateFound",{serviceWorker:e});const t=e.installing;console.log("installingWorker",t),t.addEventListener("statechange",(()=>{switch(t.state){case"installed":navigator.serviceWorker.controller?(window.___swUpdated=!0,(0,n.h)("onServiceWorkerUpdateReady",{serviceWorker:e}),window.___failedResources&&(console.log("resources failed, SW updated - reloading"),window.location.reload())):(console.log("Content is now available offline!"),(0,n.h)("onServiceWorkerInstalled",{serviceWorker:e}));break;case"redundant":console.error("The installing service worker became redundant."),(0,n.h)("onServiceWorkerRedundant",{serviceWorker:e});break;case"activated":(0,n.h)("onServiceWorkerActive",{serviceWorker:e})}}))}))})).catch((function(e){console.error("Error during service worker registration:",e)}))},8995:function(e,t,r){"use strict";r.d(t,{Bs:function(){return a},Db:function(){return i},m3:function(){return o},u0:function(){return s}});var n=r(7294);const o=n.createContext({}),a=n.createContext({}),s=n.createContext({}),i=n.createContext({})},1757:function(e,t,r){"use strict";r.d(t,{i1:function(){return c},B9:function(){return o},K2:function(){return u}});var n=r(7294);const o=(a="StaticQuery",s={},n.createServerContext?function(e,t){return void 0===t&&(t=null),globalThis.__SERVER_CONTEXT||(globalThis.__SERVER_CONTEXT={}),globalThis.__SERVER_CONTEXT[e]||(globalThis.__SERVER_CONTEXT[e]=n.createServerContext(e,t)),globalThis.__SERVER_CONTEXT[e]}(a,s):n.createContext(s));var a,s;function i(e){let{staticQueryData:t,data:r,query:o,render:a}=e;const s=r?r.data:t[o]&&t[o].data;return n.createElement(n.Fragment,null,s&&a(s),!s&&n.createElement("div",null,"Loading (StaticQuery)"))}const c=e=>{const{data:t,query:r,render:a,children:s}=e;return n.createElement(o.Consumer,null,(e=>n.createElement(i,{data:t,query:r,render:a||s,staticQueryData:e})))},u=e=>{var t;n.useContext;const r=n.useContext(o);if(isNaN(Number(e)))throw new Error(`useStaticQuery was called with a string but expects to be called using \`graphql\`. Try this:\n\nimport { useStaticQuery, graphql } from 'gatsby';\n\nuseStaticQuery(graphql\`${e}\`);\n`);if(null!==(t=r[e])&&void 0!==t&&t.data)return r[e].data;throw new Error("The result of this StaticQuery could not be fetched.\n\nThis is likely a bug in Gatsby and if refreshing the page does not fix it, please open an issue in https://github.com/gatsbyjs/gatsby/issues")}},1505:function(e,t,r){"use strict";function n(e,t){return void 0===t&&(t=""),t?e===t?"/":e.startsWith(`${t}/`)?e.slice(t.length):e:e}r.d(t,{Z:function(){return n}})},7118:function(e,t,r){"use strict";r.d(t,{c4:function(){return C},cP:function(){return h},dq:function(){return f},mc:function(){return v},rU:function(){return _}});var n=r(7326),o=r(4578),a=r(5697),s=r.n(a),i=r(7294),c=r(7896),u=r(4506);function l(){return l=Object.assign?Object.assign.bind():function(e){for(var t=1;t{if("string"==typeof e)return!(e=>d.test(e))(e)};function f(e,t){var r;if(void 0===t&&(t=""),!p(e))return e;if(e.startsWith("./")||e.startsWith("../"))return e;const n=null!=(r=null!=t?t:"")?r:"/";return`${null!=n&&n.endsWith("/")?n.slice(0,-1):n}${e.startsWith("/")?e:`/${e}`}`}const m=e=>null==e?void 0:e.startsWith("/");function g(e,t){const{pathname:r,search:n,hash:o}=h(e);return`${(0,u.H)(r,t)}${n}${o}`}const P=(e,t)=>"number"==typeof e?e:p(e)?m(e)?function(e){const t=f(e),r="always";return g(t,r)}(e):function(e,t){if(m(e))return e;const r="always",n=(0,c.resolve)(e,t);return g(n,r)}(e,t):e,w=["to","getProps","onClick","onMouseEnter","activeClassName","activeStyle","innerRef","partiallyActive","state","replace","_location"];function v(e){return f(e,"")}const y={activeClassName:s().string,activeStyle:s().object,partiallyActive:s().bool};function b(e){return i.createElement(c.Location,null,(t=>{let{location:r}=t;return i.createElement(k,l({},e,{_location:r}))}))}let k=function(e){function t(t){var r;(r=e.call(this,t)||this).defaultGetProps=e=>{let{isPartiallyCurrent:t,isCurrent:n}=e;return(r.props.partiallyActive?t:n)?{className:[r.props.className,r.props.activeClassName].filter(Boolean).join(" "),style:l({},r.props.style,r.props.activeStyle)}:null};let o=!1;return"undefined"!=typeof window&&window.IntersectionObserver&&(o=!0),r.state={IOSupported:o},r.abortPrefetch=null,r.handleRef=r.handleRef.bind((0,n.Z)(r)),r}(0,o.Z)(t,e);var r=t.prototype;return r._prefetch=function(){let e=window.location.pathname+window.location.search;this.props._location&&this.props._location.pathname&&(e=this.props._location.pathname+this.props._location.search);const t=h(P(this.props.to,e)),r=t.pathname+t.search;if(e!==r)return ___loader.enqueue(r)},r.componentWillUnmount=function(){if(!this.io)return;const{instance:e,el:t}=this.io;this.abortPrefetch&&this.abortPrefetch.abort(),e.unobserve(t),e.disconnect()},r.handleRef=function(e){this.props.innerRef&&Object.prototype.hasOwnProperty.call(this.props.innerRef,"current")?this.props.innerRef.current=e:this.props.innerRef&&this.props.innerRef(e),this.state.IOSupported&&e&&(this.io=((e,t)=>{const r=new window.IntersectionObserver((r=>{r.forEach((r=>{e===r.target&&t(r.isIntersecting||r.intersectionRatio>0)}))}));return r.observe(e),{instance:r,el:e}})(e,(e=>{e?this.abortPrefetch=this._prefetch():this.abortPrefetch&&this.abortPrefetch.abort()})))},r.render=function(){const e=this.props,{to:t,getProps:r=this.defaultGetProps,onClick:n,onMouseEnter:o,state:a,replace:s,_location:u}=e,d=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n=0||(o[r]=e[r]);return o}(e,w),f=P(t,u.pathname);return p(f)?i.createElement(c.Link,l({to:f,state:a,getProps:r,innerRef:this.handleRef,onMouseEnter:e=>{o&&o(e);const t=h(f);___loader.hovering(t.pathname+t.search)},onClick:e=>{if(n&&n(e),!(0!==e.button||this.props.target||e.defaultPrevented||e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)){e.preventDefault();let t=s;const r=encodeURI(f)===u.pathname;"boolean"!=typeof s&&r&&(t=!0),window.___navigate(f,{state:a,replace:t})}return!0}},d)):i.createElement("a",l({href:f},d))},t}(i.Component);k.propTypes=l({},y,{onClick:s().func,to:s().string.isRequired,replace:s().bool,state:s().object});const _=i.forwardRef(((e,t)=>i.createElement(b,l({innerRef:t},e)))),C=(e,t)=>{window.___navigate(P(e,window.location.pathname),t)}},436:function(e,t,r){"use strict";r.r(t),r.d(t,{onClientEntry:function(){return c}});var n=r(4854),o=r(3150),a=r.n(o);const s=e=>"/"===e[0]?e:`/${e}`,i=(e,t)=>r=>{if(window.___failedResources)return!0;if((e=>0!==e.button||e.altKey||e.ctrlKey||e.metaKey||e.shiftKey)(r))return!0;if((e=>e.defaultPrevented)(r))return!0;const o=(e=>{for(;e.parentNode;e=e.parentNode)if("a"===e.nodeName.toLowerCase())return e;return null})(r.target);if(null==o)return!0;if(!0===(i=o).hasAttribute("download")||!1===(e=>!1===e.hasAttribute("target")||null==e.target||["_self",""].includes(e.target)||"_parent"===e.target&&(!e.ownerDocument.defaultView.parent||e.ownerDocument.defaultView.parent===e.ownerDocument.defaultView)||"_top"===e.target&&(!e.ownerDocument.defaultView.top||e.ownerDocument.defaultView.top===e.ownerDocument.defaultView))(i))return!0;var i;const c=document.createElement("a");""!==o.href&&(c.href=o.href),"SVGAnimatedString"in window&&o.href instanceof SVGAnimatedString&&(c.href=o.href.animVal);const u=document.createElement("a");if(u.href=window.location.href,!1===((e,t)=>e.protocol===t.protocol&&e.host===t.host)(u,c))return!0;const l=new RegExp(`^${a()((0,n.withPrefix)("/"))}`);if(((e,t)=>!1===t.test(s(e.pathname))||-1!==e.pathname.search(/^.*\.((?!htm)[a-z0-9]{1,5})$/i))(c,l))return!0;if(((e,t)=>""!==t.hash&&(""===t.pathname||t.pathname===e.pathname))(u,c))return!0;if(t.excludePattern){if(new RegExp(t.excludePattern).test(c.pathname))return!0}r.preventDefault();const h=s(c.pathname).replace(l,"/");return e(`${h}${c.search}${c.hash}`),!1};const c=function(e,t){void 0===t&&(t={}),function(e,t,r){const n=i(r,t);e.addEventListener("click",n)}(window,t,(e=>{(0,n.navigate)(e)}))}},9608:function(e,t,r){"use strict";r.r(t),r.d(t,{onRouteUpdate:function(){return n}});r(4854),r(292);const n=function(e,t){let{location:r}=e}},292:function(e,t,r){"use strict";var n=r(4854)},8348:function(){"use strict"},855:function(e,t){"use strict";t.DEFAULT_OPTIONS={maxWidth:650,wrapperStyle:"",backgroundColor:"white",linkImagesToOriginal:!0,showCaptions:!1,markdownCaptions:!1,withWebp:!1,withAvif:!1,tracedSVG:!1,loading:"lazy",decoding:"async",disableBgImageOnAlpha:!1,disableBgImage:!1},t.EMPTY_ALT="GATSBY_EMPTY_ALT",t.imageClass="gatsby-resp-image-image",t.imageWrapperClass="gatsby-resp-image-wrapper",t.imageBackgroundClass="gatsby-resp-image-background-image"},2154:function(e,t,r){"use strict";var n=r(855),o=n.DEFAULT_OPTIONS,a=n.imageClass,s=n.imageBackgroundClass,i=n.imageWrapperClass;t.onRouteUpdate=function(e,t){for(var r=Object.assign({},o,t),n=document.querySelectorAll("."+i),c=function(e){var t=n[e],o=t.querySelector("."+s),i=t.querySelector("."+a),c=function(){o.style.transition="opacity 0.5s 0.5s",i.style.transition="opacity 0.5s",u()},u=function e(){o.style.opacity=0,i.style.opacity=1,i.style.color="inherit",i.style.boxShadow="inset 0px 0px 0px 400px "+r.backgroundColor,i.removeEventListener("load",c),i.removeEventListener("error",e)};i.style.opacity=0,i.addEventListener("load",c),i.addEventListener("error",u),i.complete&&u()},u=0;u{(0,n.anchorate)()}},1143:function(e){"use strict";e.exports=function(e,t,r,n,o,a,s,i){if(!e){var c;if(void 0===t)c=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var u=[r,n,o,a,s,i],l=0;(c=new Error(t.replace(/%s/g,(function(){return u[l++]})))).name="Invariant Violation"}throw c.framesToPop=1,c}}},9730:function(e,t,r){"use strict";var n=r(7294),o={stream:!0},a=new Map,s=Symbol.for("react.element"),i=Symbol.for("react.lazy"),c=Symbol.for("react.default_value"),u=n.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ContextRegistry;function l(e,t,r){this._status=e,this._value=t,this._response=r}function h(e){switch(e._status){case 3:return e._value;case 1:var t=JSON.parse(e._value,e._response._fromJSON);return e._status=3,e._value=t;case 2:for(var n=(t=e._value).chunks,o=0;o((e,t)=>{const{forward:r=[],...n}=e||{},o=JSON.stringify(n,((e,t)=>("function"==typeof t&&(t=String(t)).startsWith(e+"(")&&(t="function "+t),t)));return["!(function(w,p,f,c){",Object.keys(n).length>0?`c=w[p]=Object.assign(w[p]||{},${o});`:"c=w[p]=w[p]||{};","c[f]=(c[f]||[])",r.length>0?`.concat(${JSON.stringify(r)})`:"","})(window,'partytown','forward');",t].join("")})(e,'/* Partytown 0.5.4 - MIT builder.io */\n!function(t,e,n,i,r,o,a,d,s,c,p,l){function u(){l||(l=1,"/"==(a=(o.lib||"/~partytown/")+(o.debug?"debug/":""))[0]&&(s=e.querySelectorAll(\'script[type="text/partytown"]\'),i!=t?i.dispatchEvent(new CustomEvent("pt1",{detail:t})):(d=setTimeout(w,1e4),e.addEventListener("pt0",f),r?h(1):n.serviceWorker?n.serviceWorker.register(a+(o.swPath||"partytown-sw.js"),{scope:a}).then((function(t){t.active?h():t.installing&&t.installing.addEventListener("statechange",(function(t){"activated"==t.target.state&&h()}))}),console.error):w())))}function h(t){c=e.createElement(t?"script":"iframe"),t||(c.setAttribute("style","display:block;width:0;height:0;border:0;visibility:hidden"),c.setAttribute("aria-hidden",!0)),c.src=a+"partytown-"+(t?"atomics.js?v=0.5.4":"sandbox-sw.html?"+Date.now()),e.body.appendChild(c)}function w(t,n){for(f(),t=0;t=0||(o[r]=e[r]);return o}const u=e=>{const{search:t,hash:r,href:n,origin:o,protocol:a,host:s,hostname:i,port:c}=e.location;let{pathname:u}=e.location;return!u&&n&&d&&(u=new URL(n).pathname),{pathname:encodeURI(decodeURI(u)),search:t,hash:r,href:n,origin:o,protocol:a,host:s,hostname:i,port:c,state:e.history.state,key:e.history.state&&e.history.state.key||"initial"}},l=(e,t)=>{let r=[],n=u(e),o=!1,a=()=>{};return{get location(){return n},get transitioning(){return o},_onTransitionComplete(){o=!1,a()},listen(t){r.push(t);const o=()=>{n=u(e),t({location:n,action:"POP"})};return e.addEventListener("popstate",o),()=>{e.removeEventListener("popstate",o),r=r.filter((e=>e!==t))}},navigate(t,{state:s,replace:c=!1}={}){if("number"==typeof t)e.history.go(t);else{s=i({},s,{key:Date.now()+""});try{o||c?e.history.replaceState(s,null,t):e.history.pushState(s,null,t)}catch(r){e.location[c?"replace":"assign"](t)}}n=u(e),o=!0;const l=new Promise((e=>a=e));return r.forEach((e=>e({location:n,action:"PUSH"}))),l}}},h=(e="/")=>{const t=e.indexOf("?"),r={pathname:t>-1?e.substr(0,t):e,search:t>-1?e.substr(t):""};let n=0;const o=[r],a=[null];return{get location(){return o[n]},addEventListener(e,t){},removeEventListener(e,t){},history:{get entries(){return o},get index(){return n},get state(){return a[n]},pushState(e,t,r){const[s,i=""]=r.split("?");n++,o.push({pathname:s,search:i.length?`?${i}`:i}),a.push(e)},replaceState(e,t,r){const[s,i=""]=r.split("?");o[n]={pathname:s,search:i},a[n]=e},go(e){const t=n+e;t<0||t>a.length-1||(n=t)}}}},d=!("undefined"==typeof window||!window.document||!window.document.createElement),p=l(d?window:h()),{navigate:f}=p;function m(e,t){return o.createServerContext?((e,t=null)=>(globalThis.__SERVER_CONTEXT||(globalThis.__SERVER_CONTEXT={}),globalThis.__SERVER_CONTEXT[e]||(globalThis.__SERVER_CONTEXT[e]=o.createServerContext(e,t)),globalThis.__SERVER_CONTEXT[e]))(e,t):o.createContext(t)}const g=m("Base",{baseuri:"/",basepath:"/"}),P=m("Location"),w=()=>o.useContext(g),v=()=>o.useContext(P);function y(e){this.uri=e}const b=e=>e instanceof y,k=e=>{throw new y(e)};function _(e){const{to:t,replace:r=!0,state:n,noThrow:a,baseuri:s}=e;o.useEffect((()=>{Promise.resolve().then((()=>{const o=j(t,s);f(I(o,e),{replace:r,state:n})}))}),[]);const i=j(t,s);return a||k(I(i,e)),null}const C=e=>{const t=v(),{baseuri:r}=w();return o.createElement(_,i({},t,{baseuri:r},e))};C.propTypes={from:a.string,to:a.string.isRequired};const E=(e,t)=>e.substr(0,t.length)===t,S=(e,t)=>{let r,n;const[o]=t.split("?"),a=L(o),i=""===a[0],c=N(e);for(let u=0,l=c.length;u dynamic segment "${n[1]}" is a reserved name. Please use a different name in path "${o.path}".`);const t=decodeURIComponent(r);h[n[1]]=t}else if(t!==r){e=!0;break}}if(!e){r={route:o,params:h,uri:"/"+a.slice(0,p).join("/")};break}}return r||n||null},R=(e,t)=>S([{path:e}],t),j=(e,t)=>{if(E(e,"/"))return e;const[r,n]=e.split("?"),[o]=t.split("?"),a=L(r),s=L(o);if(""===a[0])return M(o,n);if(!E(a[0],".")){const e=s.concat(a).join("/");return M(("/"===o?"":"/")+e,n)}const i=s.concat(a),c=[];for(let u=0,l=i.length;u{const[r,n=""]=e.split("?");let o="/"+L(r).map((e=>{const r=B.exec(e);return r?t[r[1]]:e})).join("/");const{location:{search:a=""}={}}=t,s=a.split("?")[1]||"";return o=M(o,n,s),o},x=(e,t)=>{const r=e=>O(e);return L(e).filter(r).sort().join("/")===L(t).filter(r).sort().join("/")},B=/^:(.+)/,O=e=>B.test(e),D=e=>e&&"*"===e[0],T=(e,t)=>({route:e,score:e.default?0:L(e.path).reduce(((e,t)=>(e+=4,(e=>""===e)(t)?e+=1:O(t)?e+=2:D(t)?e-=5:e+=3,e)),0),index:t}),N=e=>e.map(T).sort(((e,t)=>e.scoret.score?-1:e.index-t.index)),L=e=>e.replace(/(^\/+|\/+$)/g,"").split("/"),M=(e,...t)=>e+((t=t.filter((e=>e&&e.length>0)))&&t.length>0?`?${t.join("&")}`:""),$=["uri","path"],A=(e,t)=>{const r=Object.keys(e);return r.length===Object.keys(t).length&&r.every((r=>t.hasOwnProperty(r)&&e[r]===t[r]))},H=e=>e.replace(/(^\/+|\/+$)/g,""),U=e=>t=>{if(!t)return null;if(t.type===o.Fragment&&t.props.children)return o.Children.map(t.props.children,U(e));if(s(t.props.path||t.props.default||t.type===C,`: Children of must have a \`path\` or \`default\` prop, or be a \`\`. None found on element type \`${t.type}\``),s(!!(t.type!==C||t.props.from&&t.props.to),` requires both "from" and "to" props when inside a .`),s(!(t.type===C&&!x(t.props.from,t.props.to)),` has mismatched dynamic segments, ensure both paths have the exact same dynamic segments.`),t.props.default)return{value:t,default:!0};const r=t.type===C?t.props.from:t.props.path,n="/"===r?e:`${H(e)}/${H(r)}`;return{value:t,default:t.props.default,path:t.props.children?`${H(n)}/*`:n}},W=["innerRef"],q=["to","state","replace","getProps"],F=["key"];let{forwardRef:J}=n||(n=r.t(o,2));void 0===J&&(J=e=>e);const Q=()=>{},Z=J(((e,t)=>{let{innerRef:r}=e,n=c(e,W);const{baseuri:a}=w(),{location:s}=v(),{to:u,state:l,replace:h,getProps:d=Q}=n,p=c(n,q),m=j(u,a),g=encodeURI(m),P=s.pathname===g,y=E(s.pathname,g);return o.createElement("a",i({ref:t||r,"aria-current":P?"page":void 0},p,d({isCurrent:P,isPartiallyCurrent:y,href:m,location:s}),{href:m,onClick:e=>{if(p.onClick&&p.onClick(e),(e=>!e.defaultPrevented&&0===e.button&&!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey))(e)){e.preventDefault();let t=h;if("boolean"!=typeof h&&P){const e=c(i({},s.state),F);t=A(i({},l),e)}f(m,{state:l,replace:t})}}}))}));Z.displayName="Link",Z.propTypes={to:a.string.isRequired};class G extends o.Component{constructor(...e){super(...e),this.displayName="ReactUseErrorBoundary"}componentDidCatch(...e){this.setState({}),this.props.onError(...e)}render(){return this.props.children}}const z=o.createContext({componentDidCatch:{current:void 0},error:void 0,setError:()=>!1});function V({children:e}){const[t,r]=o.useState(),n=o.useRef(),a=o.useMemo((()=>({componentDidCatch:n,error:t,setError:r})),[t]);return o.createElement(z.Provider,{value:a},o.createElement(G,{error:t,onError:(e,t)=>{r(e),null==n.current||n.current(e,t)}},e))}V.displayName="ReactUseErrorBoundaryContext";const K=function(e){var t,r;function n(t){return o.createElement(V,null,o.createElement(e,i({key:"WrappedComponent"},t)))}return n.displayName=`WithErrorBoundary(${null!=(t=null!=(r=e.displayName)?r:e.name)?t:"Component"})`,n}((({history:e=p,children:t})=>{const{location:r}=e,[n,a]=o.useState({location:r}),[s]=function(e){const t=o.useContext(z);t.componentDidCatch.current=void 0;const r=o.useCallback((()=>{t.setError(void 0)}),[]);return[t.error,r]}();if(o.useEffect((()=>{e._onTransitionComplete()}),[n.location]),o.useEffect((()=>{let t=!1;const r=e.listen((({location:e})=>{Promise.resolve().then((()=>{requestAnimationFrame((()=>{t||a({location:e})}))}))}));return()=>{t=!0,r()}}),[]),s){if(!b(s))throw s;f(s.uri,{replace:!0})}return o.createElement(P.Provider,{value:n},"function"==typeof t?t(n):t||null)})),X=({children:e})=>{const t=v();return t?e(t):o.createElement(K,null,e)},Y=({url:e,children:t})=>{const r=e.indexOf("?");let n,a="";return r>-1?(n=e.substring(0,r),a=e.substring(r)):n=e,o.createElement(P.Provider,{value:{location:{pathname:n,search:a,hash:""}}},t)},ee=({path:e,children:t})=>{const{baseuri:r}=w(),{location:n}=v(),o=j(e,r),a=R(o,n.pathname);return t({location:n,match:a?i({},a.params,{uri:a.uri,path:e}):null})},te=["uri","location","component"],re=["children","style","component","uri","location"],ne=e=>{let{uri:t,location:r,component:n}=e,a=c(e,te);return o.createElement(ae,i({},a,{component:n,uri:t,location:r}))};let oe=0;const ae=e=>{let{children:t,style:r,component:n="div",uri:a,location:s}=e,u=c(e,re);const l=o.useRef(),h=o.useRef(!0),d=o.useRef(a),p=o.useRef(s.pathname),f=o.useRef(!1);o.useEffect((()=>(oe++,m(),()=>{oe--,0===oe&&(h.current=!0)})),[]),o.useEffect((()=>{let e=!1,t=!1;a!==d.current&&(d.current=a,e=!0),s.pathname!==p.current&&(p.current=s.pathname,t=!0),f.current=e||t&&s.pathname===a,f.current&&m()}),[a,s]);const m=o.useCallback((()=>{var e;h.current?h.current=!1:(e=l.current,f.current&&e&&e.focus())}),[]);return o.createElement(n,i({style:i({outline:"none"},r),tabIndex:"-1",ref:l},u),t)},se=["location","primary","children","basepath","baseuri","component"],ie=e=>{const t=w(),r=v();return o.createElement(ce,i({},t,r,e))};function ce(e){const{location:t,primary:r=!0,children:n,basepath:a,component:s="div"}=e,u=c(e,se),l=o.Children.toArray(n).reduce(((e,t)=>{const r=U(a)(t);return e.concat(r)}),[]),{pathname:h}=t,d=S(l,h);if(d){const{params:e,uri:n,route:c,route:{value:l}}=d,h=c.default?a:c.path.replace(/\*$/,""),p=i({},e,{uri:n,location:t}),f=o.cloneElement(l,p,l.props.children?o.createElement(ie,{location:t,primary:r},l.props.children):void 0),m=r?ne:s,P=r?i({uri:n,location:t,component:s},u):u;return o.createElement(g.Provider,{value:{baseuri:n,basepath:h}},o.createElement(m,P,f))}return null}const ue=()=>{const e=v();if(!e)throw new Error("useLocation hook was used but a LocationContext.Provider was not found in the parent tree. Make sure this is used in a component that is a child of Router");return e.location},le=()=>{throw new Error("useNavigate is removed. Use import { navigate } from 'gatsby' instead")},he=()=>{const e=w();if(!e)throw new Error("useParams hook was used but a LocationContext.Provider was not found in the parent tree. Make sure this is used in a component that is a child of Router");const t=ue(),r=R(e.basepath,t.pathname);return r?r.params:null},de=e=>{if(!e)throw new Error("useMatch(path: string) requires an argument of a string to match against");const t=w();if(!t)throw new Error("useMatch hook was used but a LocationContext.Provider was not found in the parent tree. Make sure this is used in a component that is a child of Router");const r=ue(),n=j(e,t.baseuri),o=R(n,r.pathname);return o?i({},o.params,{uri:o.uri,path:e}):null}},3521:function(e,t,r){"use strict";r.r(t),r.d(t,{Script:function(){return f},ScriptStrategy:function(){return u},collectedScriptsByPage:function(){return i},scriptCache:function(){return d},scriptCallbackCache:function(){return p}});var n=r(7294),o=r(7896);function a(){return a=Object.assign?Object.assign.bind():function(e){for(var t=1;ts.get(e)||[],set(e,t){const r=s.get(e)||[];r.push(t),s.set(e,r)},delete(e){s.delete(e)}},c="undefined"!=typeof self&&self.requestIdleCallback&&self.requestIdleCallback.bind(window)||function(e){const t=Date.now();return setTimeout((function(){e({didTimeout:!1,timeRemaining:function(){return Math.max(0,50-(Date.now()-t))}})}),1)};var u,l;(l=u||(u={})).postHydrate="post-hydrate",l.idle="idle",l.offMainThread="off-main-thread";const h=new Set(["src","strategy","dangerouslySetInnerHTML","children","onLoad","onError"]),d=new Set,p=new Map;function f(e){return n.createElement(o.Location,null,(()=>n.createElement(m,e)))}function m(e){const{src:t,strategy:r=u.postHydrate}=e||{},{pathname:s}=(0,o.useLocation)();if((0,n.useEffect)((()=>{let t;switch(r){case u.postHydrate:t=g(e);break;case u.idle:c((()=>{t=g(e)}));break;case u.offMainThread:{const t=w(e);i.set(s,t)}}return()=>{const{script:e,loadCallback:r,errorCallback:n}=t||{};r&&(null==e||e.removeEventListener("load",r)),n&&(null==e||e.removeEventListener("error",n)),null==e||e.remove()}}),[]),r===u.offMainThread){const o=P(e),c=w(e);return"undefined"==typeof window&&i.set(s,c),n.createElement("script",o?a({type:"text/partytown","data-strategy":r,crossOrigin:"anonymous"},c,{dangerouslySetInnerHTML:{__html:P(e)}}):a({type:"text/partytown",src:v(t),"data-strategy":r,crossOrigin:"anonymous"},c))}return null}function g(e){const{id:t,src:r,strategy:n=u.postHydrate,onLoad:o,onError:s}=e||{},i=t||r,c=["load","error"],l={load:o,error:s};if(i){for(const e of c)if(null!=l&&l[e]){var h;const t=p.get(i)||{},{callbacks:r=[]}=(null==t?void 0:t[e])||{};var f,m;r.push(null==l?void 0:l[e]),null!=t&&null!=(h=t[e])&&h.event?null==l||null==(f=l[e])||f.call(l,null==t||null==(m=t[e])?void 0:m.event):p.set(i,a({},t,{[e]:{callbacks:r}}))}if(d.has(i))return null}const g=P(e),v=w(e),b=document.createElement("script");t&&(b.id=t),b.dataset.strategy=n;for(const[a,u]of Object.entries(v))b.setAttribute(a,u);g&&(b.textContent=g),r&&(b.src=r);const k={};if(i){for(const e of c){const t=t=>y(t,i,e);b.addEventListener(e,t),k[`${e}Callback`]=t}d.add(i)}return document.body.appendChild(b),{script:b,loadCallback:k.loadCallback,errorCallback:k.errorCallback}}function P(e){const{dangerouslySetInnerHTML:t,children:r=""}=e||{},{__html:n=""}=t||{};return n||r}function w(e){const t={};for(const[r,n]of Object.entries(e))h.has(r)||(t[r]=n);return t}function v(e){if(e)return`/__third-party-proxy?url=${encodeURIComponent(e)}`}function y(e,t,r){const n=p.get(t)||{};for(const a of(null==n||null==(o=n[r])?void 0:o.callbacks)||[]){var o;a(e)}p.set(t,{[r]:{event:e}})}}},function(e){e.O(0,[774],(function(){return t=5824,e(e.s=t);var t}));e.O()}]); -//# sourceMappingURL=app-4a6f4c870da7a677f533.js.map \ No newline at end of file +/*! For license information please see app-545491b94328c8e7ee02.js.LICENSE.txt */ +(self.webpackChunkjug_goerlitz=self.webpackChunkjug_goerlitz||[]).push([[143],{1783:function(e,t,r){var n=r(8269);t.hash=function(e,r){var n=(r=r||{}).callback||function(){};if(e){var o=r.scroller||t.scroller;setTimeout((function(){var r=t.elements(e);r&&(o(r.id)||o(r.name))?n():n(!0)}),0)}else n()},t.scroller=function(e){return!!e&&(e.scrollIntoView(),!0)},t.elements=function(e){var r=t.selectors(e);if(r)return{id:document.getElementById(r.id),name:document.querySelector(r.name)}},t.selectors=function(e){if(e&&(e=e.replace(/^#/,"")))return{id:e,name:'[name="'+n(e)+'"]'}},t.anchorate=function(e){t.hash(window.location.hash,e)},t.default=t.anchorate},8269:function(e,t,r){var n;n=void 0!==r.g?r.g:this,e.exports=function(e){if(e.CSS&&e.CSS.escape)return e.CSS.escape;var t=function(e){if(0==arguments.length)throw new TypeError("`CSS.escape` requires an argument.");for(var t,r=String(e),n=r.length,o=-1,a="",s=r.charCodeAt(0);++o=1&&t<=31||127==t||0==o&&t>=48&&t<=57||1==o&&t>=48&&t<=57&&45==s?"\\"+t.toString(16)+" ":0==o&&1==n&&45==t||!(t>=128||45==t||95==t||t>=48&&t<=57||t>=65&&t<=90||t>=97&&t<=122)?"\\"+r.charAt(o):r.charAt(o):a+="�";return a};return e.CSS||(e.CSS={}),e.CSS.escape=t,t}(n)},3150:function(e){"use strict";var t=/[|\\{}()[\]^$+*?.]/g;e.exports=function(e){if("string"!=typeof e)throw new TypeError("Expected a string");return e.replace(t,"\\$&")}},4506:function(e,t){"use strict";t.H=void 0;t.H=(e,t="always")=>{const r=e.endsWith(".html"),n=e.endsWith(".xml"),o=e.endsWith(".pdf");return"/"===e?e:((r||n||o)&&(t="never"),"always"===t?e.endsWith("/")?e:`${e}/`:"never"===t&&e.endsWith("/")?e.slice(0,-1):e)}},9679:function(e,t,r){"use strict";t.p2=t.$C=void 0;var n=r(1432);t.$C=n.ScrollHandler;var o=r(4855);t.p2=o.useScrollRestoration},1432:function(e,t,r){"use strict";var n=r(4836);t.__esModule=!0,t.ScrollHandler=t.ScrollContext=void 0;var o=n(r(6115)),a=n(r(7867)),s=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=u(t);if(r&&r.has(e))return r.get(e);var n={},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var a in e)if("default"!==a&&Object.prototype.hasOwnProperty.call(e,a)){var s=o?Object.getOwnPropertyDescriptor(e,a):null;s&&(s.get||s.set)?Object.defineProperty(n,a,s):n[a]=e[a]}n.default=e,r&&r.set(e,n);return n}(r(7294)),i=n(r(5697)),c=r(1142);function u(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(u=function(e){return e?r:t})(e)}var l=s.createContext(new c.SessionStorage);t.ScrollContext=l,l.displayName="GatsbyScrollContext";var h=function(e){function t(){for(var t,r=arguments.length,n=new Array(r),a=0;a{}},7730:function(e,t){"use strict";t.__esModule=!0,t.getForwards=function(e){return null==e?void 0:e.flatMap((e=>(null==e?void 0:e.forward)||[]))}},2731:function(e,t,r){"use strict";t.__esModule=!0,t.injectPartytownSnippet=function(e){if(!e.length)return;const t=document.querySelector("script[data-partytown]"),r=document.querySelector('iframe[src*="~partytown/partytown-sandbox-sw"]');t&&t.remove();r&&r.remove();const a=(0,o.getForwards)(e),s=document.createElement("script");s.dataset.partytown="",s.innerHTML=(0,n.partytownSnippet)({forward:a}),document.head.appendChild(s)};var n=r(2911),o=r(7730)},5418:function(e,t,r){t.components={"component---src-pages-404-tsx":()=>Promise.all([r.e(532),r.e(976),r.e(948),r.e(351),r.e(218)]).then(r.bind(r,2513)),"component---src-pages-debug-redirects-tsx":()=>Promise.all([r.e(532),r.e(976),r.e(948),r.e(351),r.e(356)]).then(r.bind(r,7470)),"component---src-pages-index-tsx":()=>Promise.all([r.e(532),r.e(976),r.e(948),r.e(885),r.e(351),r.e(534),r.e(325),r.e(691)]).then(r.bind(r,7200)),"component---src-pages-locations-tsx":()=>Promise.all([r.e(532),r.e(976),r.e(948),r.e(351),r.e(534),r.e(969)]).then(r.bind(r,6039)),"component---src-pages-posters-tsx":()=>Promise.all([r.e(532),r.e(976),r.e(948),r.e(351),r.e(743)]).then(r.bind(r,8445)),"component---src-pages-speakers-tsx":()=>Promise.all([r.e(532),r.e(976),r.e(948),r.e(351),r.e(534),r.e(758)]).then(r.bind(r,2206)),"component---src-pages-tags-tsx":()=>Promise.all([r.e(532),r.e(976),r.e(948),r.e(885),r.e(351),r.e(534),r.e(190)]).then(r.bind(r,6191)),"component---src-pages-talks-tsx":()=>Promise.all([r.e(532),r.e(976),r.e(948),r.e(885),r.e(351),r.e(534),r.e(505)]).then(r.bind(r,498)),"component---src-pages-unterstuetzer-tsx":()=>Promise.all([r.e(532),r.e(976),r.e(948),r.e(351),r.e(988)]).then(r.bind(r,7995)),"component---src-templates-location-page-tsx":()=>Promise.all([r.e(532),r.e(976),r.e(948),r.e(351),r.e(176)]).then(r.bind(r,2019)),"component---src-templates-speaker-page-tsx":()=>Promise.all([r.e(532),r.e(976),r.e(948),r.e(351),r.e(714)]).then(r.bind(r,4409)),"component---src-templates-static-page-tsx":()=>Promise.all([r.e(532),r.e(976),r.e(948),r.e(351),r.e(386)]).then(r.bind(r,5486)),"component---src-templates-talk-page-tsx":()=>Promise.all([r.e(532),r.e(976),r.e(948),r.e(885),r.e(351),r.e(534),r.e(325),r.e(721)]).then(r.bind(r,253))}},4741:function(e,t,r){e.exports=[{plugin:r(2154),options:{plugins:[],maxWidth:800,linkImagesToOriginal:!0,showCaptions:!1,markdownCaptions:!1,backgroundColor:"white",quality:50,withWebp:!1,withAvif:!1,tracedSVG:!1,loading:"lazy",decoding:"async",disableBgImageOnAlpha:!1,disableBgImage:!1}},{plugin:r(436),options:{plugins:[]}},{plugin:r(8348),options:{plugins:[],pathToConfigModule:"src/utils/typography.ts"}},{plugin:r(9608),options:{plugins:[],name:"JUG Görlitz",short_name:"JUG Görlitz",start_url:"/",background_color:"#fff",theme_color:"#337ab7",display:"minimal-ui",icon:"content/images/icon.png",legacy:!0,theme_color_in_head:!0,cache_busting_mode:"query",crossOrigin:"anonymous",include_favicon:!0,cacheDigest:"2ded17e3b6b8ff05cfb961a4ec8d0c25"}},{plugin:r(127),options:{plugins:[]}},{plugin:r(4094),options:{plugins:[]}}]},3092:function(e,t,r){const n=r(4741),{getResourceURLsForPathname:o,loadPage:a,loadPageSync:s}=r(8575).jN;t.h=function(e,t,r,i){void 0===t&&(t={});let c=n.map((r=>{if(!r.plugin[e])return;t.getResourceURLsForPathname=o,t.loadPage=a,t.loadPageSync=s;const n=r.plugin[e](t,r.options);return n&&i&&(t=i({args:t,result:n,plugin:r})),n}));return c=c.filter((e=>void 0!==e)),c.length>0?c:r?[r]:[]},t.I=(e,t,r)=>n.reduce(((r,n)=>n.plugin[e]?r.then((()=>n.plugin[e](t,n.options))):r),Promise.resolve())},4004:function(e,t){t.M=()=>""},8299:function(e,t,r){"use strict";r.d(t,{Z:function(){return n}});var n=function(e){return e=e||Object.create(null),{on:function(t,r){(e[t]||(e[t]=[])).push(r)},off:function(t,r){e[t]&&e[t].splice(e[t].indexOf(r)>>>0,1)},emit:function(t,r){(e[t]||[]).slice().map((function(e){e(r)})),(e["*"]||[]).slice().map((function(e){e(t,r)}))}}}()},7802:function(e,t,r){"use strict";r.d(t,{UD:function(){return d},Cj:function(){return f},GA:function(){return p},DS:function(){return h}});var n=r(7896),o=r(1505),a=e=>{if(void 0===e)return e;let[t,r=""]=e.split("?");return r&&(r="?"+r),"/"===t?"/"+r:"/"===t.charAt(t.length-1)?t.slice(0,-1)+r:t+r},s=r(6073);const i=new Map;let c=[];const u=e=>{let t=e;if(-1!==e.indexOf("?")){const[r,n]=e.split("?");t=`${r}?${encodeURIComponent(n)}`}const r=decodeURIComponent(t);return(0,o.Z)(r,decodeURIComponent("")).split("#")[0]};function l(e){return e.startsWith("/")||e.startsWith("https://")||e.startsWith("http://")?e:new URL(e,window.location.href+(window.location.href.endsWith("/")?"":"/")).pathname}const h=e=>{c=e},d=e=>{const t=m(e),r=c.map((e=>{let{path:t,matchPath:r}=e;return{path:r,originalPath:t}})),o=(0,n.pick)(r,t);return o?a(o.route.originalPath):null},p=e=>{const t=m(e),r=c.map((e=>{let{path:t,matchPath:r}=e;return{path:r,originalPath:t}})),o=(0,n.pick)(r,t);return o?o.params:{}},f=e=>{const t=u(l(e));if(i.has(t))return i.get(t);const r=(0,s.J)(e);if(r)return f(r.toPath);let n=d(t);return n||(n=m(e)),i.set(t,n),n},m=e=>{let t=u(l(e));return"/index.html"===t&&(t="/"),t=a(t),t}},4854:function(e,t,r){"use strict";r.r(t),r.d(t,{Link:function(){return i.rU},PageRenderer:function(){return a()},Script:function(){return E.Script},ScriptStrategy:function(){return E.ScriptStrategy},Slice:function(){return k},StaticQuery:function(){return c.i1},StaticQueryContext:function(){return c.B9},collectedScriptsByPage:function(){return E.collectedScriptsByPage},graphql:function(){return R},navigate:function(){return i.c4},parsePath:function(){return i.cP},prefetchPathname:function(){return S},scriptCache:function(){return E.scriptCache},scriptCallbackCache:function(){return E.scriptCallbackCache},useScrollRestoration:function(){return s.p2},useStaticQuery:function(){return c.K2},withAssetPrefix:function(){return i.mc},withPrefix:function(){return i.dq}});var n=r(8575),o=r(2743),a=r.n(o),s=r(9679),i=r(7118),c=r(1757),u=r(7326),l=r(4578);function h(e){return h=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},h(e)}var d=r(9611);function p(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}function f(e,t,r){return f=p()?Reflect.construct.bind():function(e,t,r){var n=[null];n.push.apply(n,t);var o=new(Function.bind.apply(e,n));return r&&(0,d.Z)(o,r.prototype),o},f.apply(null,arguments)}function m(e){var t="function"==typeof Map?new Map:void 0;return m=function(e){if(null===e||(r=e,-1===Function.toString.call(r).indexOf("[native code]")))return e;var r;if("function"!=typeof e)throw new TypeError("Super expression must either be null or a function");if(void 0!==t){if(t.has(e))return t.get(e);t.set(e,n)}function n(){return f(e,arguments,h(this).constructor)}return n.prototype=Object.create(e.prototype,{constructor:{value:n,enumerable:!1,writable:!0,configurable:!0}}),(0,d.Z)(n,e)},m(e)}var g=r(7294),P=r(4004),w=r(8995);const v=e=>{let{sliceId:t,children:r}=e;const n=[g.createElement("slice-start",{id:`${t}-1`}),g.createElement("slice-end",{id:`${t}-1`})];return r&&(n.push(r),n.push(g.createElement("slice-start",{id:`${t}-2`}),g.createElement("slice-end",{id:`${t}-2`}))),n},y=e=>{let{sliceName:t,allowEmpty:r,children:n,...o}=e;const a=(0,g.useContext)(w.u0),s=(0,g.useContext)(w.Db),i=a[t];if(!i){if(r)return null;throw new Error(`Slice "${i}" for "${t}" slot not found`)}const c=((e,t)=>Object.keys(t).length?`${e}-${(0,P.M)(t)}`:e)(i,o);let u=s[c];return u?n&&(u.hasChildren=!0):s[c]=u={props:o,sliceName:i,hasChildren:!!n},g.createElement(v,{sliceId:c},n)},b=e=>{let{sliceName:t,allowEmpty:r,children:n,...o}=e;const a=(0,g.useContext)(w.u0),s=(0,g.useContext)(w.m3),i=a[t],c=s.get(i);if(!c){if(r)return null;throw new Error(`Slice "${i}" for "${t}" slot not found`)}return g.createElement(c.component,Object.assign({sliceContext:c.sliceContext,data:c.data},o),n)};function k(e){{const t={...e,sliceName:e.alias};delete t.alias,delete t.__renderedByLocation;const r=(0,g.useContext)(w.Bs),n=C(e);if(Object.keys(n).length)throw new _("browser"===r.renderEnvironment,t.sliceName,n,e.__renderedByLocation);if("server"===r.renderEnvironment)return g.createElement(y,t);if("browser"===r.renderEnvironment)return g.createElement(b,t);if("engines"===r.renderEnvironment)return g.createElement(b,t);if("slices"===r.renderEnvironment){let t="";try{t=`\n\nSlice component "${r.sliceRoot.name}" (${r.sliceRoot.componentPath}) tried to render `}catch{}throw new Error(`Nested slices are not supported.${t}\n\nSee https://v5.gatsbyjs.com/docs/reference/built-in-components/gatsby-slice#nested-slices`)}throw new Error(`Slice context "${r.renderEnvironment}" is not supported.`)}}let _=function(e){function t(r,n,o,a){var s;const i=Object.entries(o).map((e=>{let[t,r]=e;return`not serializable "${r}" type passed to "${t}" prop`})).join(", "),c="SlicePropsError";let l="",h="";if(r){const e=g.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactDebugCurrentFrame.getCurrentStack().trim().split("\n").slice(1);e[0]=e[0].trim(),l="\n"+e.join("\n"),h=`Slice "${n}" was passed props that are not serializable (${i}).`}else{h=`${c}: Slice "${n}" was passed props that are not serializable (${i}).`;l=`${h}\n${(new Error).stack.trim().split("\n").slice(2).join("\n")}`}return(s=e.call(this,h)||this).name=c,l?s.stack=l:Error.captureStackTrace((0,u.Z)(s),t),a&&(s.forcedLocation={...a,functionName:"Slice"}),s}return(0,l.Z)(t,e),t}(m(Error));const C=function(e,t,r,n){void 0===t&&(t={}),void 0===r&&(r=[]),void 0===n&&(n=null);for(const[o,a]of Object.entries(e)){if(null==a||!n&&"children"===o)continue;const e=n?`${n}.${o}`:o;"function"==typeof a?t[e]=typeof a:"object"==typeof a&&r.indexOf(a)<=0&&(r.push(a),C(a,t,r,e))}return t};var E=r(3521);const S=n.ZP.enqueue;function R(){throw new Error("It appears like Gatsby is misconfigured. Gatsby related `graphql` calls are supposed to only be evaluated at compile time, and then compiled away. Unfortunately, something went wrong and the query was left in the compiled code.\n\nUnless your site has a complex or custom babel/Gatsby configuration this is likely a bug in Gatsby.")}},8575:function(e,t,r){"use strict";r.d(t,{uQ:function(){return d},kL:function(){return b},ZP:function(){return C},Nt:function(){return S},hs:function(){return E},jN:function(){return _},N1:function(){return k}});var n=r(4578);function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r{if("undefined"==typeof document)return void n();const o=document.createElement("link");o.setAttribute("rel","prefetch"),o.setAttribute("href",e),Object.keys(t).forEach((e=>{o.setAttribute(e,t[e])})),o.onload=r,o.onerror=n;(document.getElementsByTagName("head")[0]||document.getElementsByName("script")[0].parentNode).appendChild(o)}))}:function(e){return new Promise(((t,r)=>{const n=new XMLHttpRequest;n.open("GET",e,!0),n.onload=()=>{200===n.status?t():r()},n.send(null)}))},c={};var u=function(e,t){return new Promise((r=>{c[e]?r():i(e,t).then((()=>{r(),c[e]=!0})).catch((()=>{}))}))},l=r(8299),h=r(7802);const d={Error:"error",Success:"success"},p=e=>{const[t,r]=e.split("?");var n;return`/page-data/${"/"===t?"index":(n="/"===(n=t)[0]?n.slice(1):n).endsWith("/")?n.slice(0,-1):n}/page-data.json${r?`?${r}`:""}`};function f(e,t){return void 0===t&&(t="GET"),new Promise((r=>{const n=new XMLHttpRequest;n.open(t,e,!0),n.onreadystatechange=()=>{4==n.readyState&&r(n)},n.send(null)}))}const m=/bot|crawler|spider|crawling/i,g=function(e,t,r){var n;void 0===t&&(t=null);const o={componentChunkName:e.componentChunkName,path:e.path,webpackCompilationHash:e.webpackCompilationHash,matchPath:e.matchPath,staticQueryHashes:e.staticQueryHashes,getServerDataError:e.getServerDataError,slicesMap:null!==(n=e.slicesMap)&&void 0!==n?n:{}};return{component:t,head:r,json:e.result,page:o}};function P(e){return new Promise((t=>{try{const r=e.readRoot();t(r)}catch(r){if(!Object.hasOwnProperty.call(r,"_response")||!Object.hasOwnProperty.call(r,"_status"))throw r;setTimeout((()=>{P(e).then(t)}),200)}}))}let w=function(){function e(e,t){this.inFlightNetworkRequests=new Map,this.pageDb=new Map,this.inFlightDb=new Map,this.staticQueryDb={},this.pageDataDb=new Map,this.partialHydrationDb=new Map,this.slicesDataDb=new Map,this.sliceInflightDb=new Map,this.slicesDb=new Map,this.isPrefetchQueueRunning=!1,this.prefetchQueued=[],this.prefetchTriggered=new Set,this.prefetchCompleted=new Set,this.loadComponent=e,(0,h.DS)(t)}var t=e.prototype;return t.memoizedGet=function(e){let t=this.inFlightNetworkRequests.get(e);return t||(t=f(e,"GET"),this.inFlightNetworkRequests.set(e,t)),t.then((t=>(this.inFlightNetworkRequests.delete(e),t))).catch((t=>{throw this.inFlightNetworkRequests.delete(e),t}))},t.setApiRunner=function(e){this.apiRunner=e,this.prefetchDisabled=e("disableCorePrefetching").some((e=>e))},t.fetchPageDataJson=function(e){const{pagePath:t,retries:r=0}=e,n=p(t);return this.memoizedGet(n).then((n=>{const{status:o,responseText:a}=n;if(200===o)try{const r=JSON.parse(a);if(void 0===r.path)throw new Error("not a valid pageData response");const n=t.split("?")[1];return n&&!r.path.includes(n)&&(r.path+=`?${n}`),Object.assign(e,{status:d.Success,payload:r})}catch(s){}return 404===o||200===o?"/404.html"===t||"/500.html"===t?Object.assign(e,{status:d.Error}):this.fetchPageDataJson(Object.assign(e,{pagePath:"/404.html",notFound:!0})):500===o?this.fetchPageDataJson(Object.assign(e,{pagePath:"/500.html",internalServerError:!0})):r<3?this.fetchPageDataJson(Object.assign(e,{retries:r+1})):Object.assign(e,{status:d.Error})}))},t.fetchPartialHydrationJson=function(e){const{pagePath:t,retries:r=0}=e,n=p(t).replace(".json","-rsc.json");return this.memoizedGet(n).then((n=>{const{status:o,responseText:a}=n;if(200===o)try{return Object.assign(e,{status:d.Success,payload:a})}catch(s){}return 404===o||200===o?"/404.html"===t||"/500.html"===t?Object.assign(e,{status:d.Error}):this.fetchPartialHydrationJson(Object.assign(e,{pagePath:"/404.html",notFound:!0})):500===o?this.fetchPartialHydrationJson(Object.assign(e,{pagePath:"/500.html",internalServerError:!0})):r<3?this.fetchPartialHydrationJson(Object.assign(e,{retries:r+1})):Object.assign(e,{status:d.Error})}))},t.loadPageDataJson=function(e){const t=(0,h.Cj)(e);if(this.pageDataDb.has(t)){const e=this.pageDataDb.get(t);return Promise.resolve(e)}return this.fetchPageDataJson({pagePath:t}).then((e=>(this.pageDataDb.set(t,e),e)))},t.loadPartialHydrationJson=function(e){const t=(0,h.Cj)(e);if(this.partialHydrationDb.has(t)){const e=this.partialHydrationDb.get(t);return Promise.resolve(e)}return this.fetchPartialHydrationJson({pagePath:t}).then((e=>(this.partialHydrationDb.set(t,e),e)))},t.loadSliceDataJson=function(e){if(this.slicesDataDb.has(e)){const t=this.slicesDataDb.get(e);return Promise.resolve({sliceName:e,jsonPayload:t})}return f(`/slice-data/${e}.json`,"GET").then((t=>{const r=JSON.parse(t.responseText);return this.slicesDataDb.set(e,r),{sliceName:e,jsonPayload:r}}))},t.findMatchPath=function(e){return(0,h.UD)(e)},t.loadPage=function(e){const t=(0,h.Cj)(e);if(this.pageDb.has(t)){const e=this.pageDb.get(t);return e.error?{error:e.error,status:e.status}:Promise.resolve(e.payload)}if(this.inFlightDb.has(t))return this.inFlightDb.get(t);const r=[this.loadAppData(),this.loadPageDataJson(t)];const n=Promise.all(r).then((e=>{const[r,n,o]=e;if(n.status===d.Error||(null==o?void 0:o.status)===d.Error)return{status:d.Error};let i=n.payload;const{componentChunkName:c,staticQueryHashes:u=[],slicesMap:h={}}=i,p={},f=Array.from(new Set(Object.values(h))),m=e=>{if(this.slicesDb.has(e.name))return this.slicesDb.get(e.name);if(this.sliceInflightDb.has(e.name))return this.sliceInflightDb.get(e.name);const t=this.loadComponent(e.componentChunkName).then((t=>{return{component:(r=t,r&&r.default||r),sliceContext:e.result.sliceContext,data:e.result.data};var r}));return this.sliceInflightDb.set(e.name,t),t.then((t=>{this.slicesDb.set(e.name,t),this.sliceInflightDb.delete(e.name)})),t};return Promise.all(f.map((e=>this.loadSliceDataJson(e)))).then((e=>{const h=[],f=a(u);for(const{jsonPayload:t,sliceName:r}of Object.values(e)){h.push({name:r,...t});for(const e of t.staticQueryHashes)f.includes(e)||f.push(e)}const w=[Promise.all(h.map(m)),this.loadComponent(c,"head")];w.push(this.loadComponent(c));const v=Promise.all(w).then((e=>{const[t,a,c]=e;p.createdAt=new Date;for(const r of t)(!r||r instanceof Error)&&(p.status=d.Error,p.error=r);let u;if((!c||c instanceof Error)&&(p.status=d.Error,p.error=c),p.status!==d.Error){if(p.status=d.Success,!0!==n.notFound&&!0!==(null==o?void 0:o.notFound)||(p.notFound=!0),i=Object.assign(i,{webpackCompilationHash:r?r.webpackCompilationHash:""}),"string"==typeof(null==o?void 0:o.payload)){u=g(i,null,a),u.partialHydration=o.payload;const e=new ReadableStream({start(e){const t=new TextEncoder;e.enqueue(t.encode(o.payload))},pull(e){e.close()},cancel(){}});return P((0,s.createFromReadableStream)(e)).then((e=>(u.partialHydration=e,u)))}u=g(i,c,a)}return u})),y=Promise.all(f.map((e=>{if(this.staticQueryDb[e]){const t=this.staticQueryDb[e];return{staticQueryHash:e,jsonPayload:t}}return this.memoizedGet(`/page-data/sq/d/${e}.json`).then((t=>{const r=JSON.parse(t.responseText);return{staticQueryHash:e,jsonPayload:r}})).catch((()=>{throw new Error(`We couldn't load "/page-data/sq/d/${e}.json"`)}))}))).then((e=>{const t={};return e.forEach((e=>{let{staticQueryHash:r,jsonPayload:n}=e;t[r]=n,this.staticQueryDb[r]=n})),t}));return Promise.all([v,y]).then((e=>{let r,[n,o]=e;return n&&(r={...n,staticQueryResults:o},p.payload=r,l.Z.emit("onPostLoadPageResources",{page:r,pageResources:r})),this.pageDb.set(t,p),p.error?{error:p.error,status:p.status}:r})).catch((e=>({error:e,status:d.Error})))}))}));return n.then((()=>{this.inFlightDb.delete(t)})).catch((e=>{throw this.inFlightDb.delete(t),e})),this.inFlightDb.set(t,n),n},t.loadPageSync=function(e,t){void 0===t&&(t={});const r=(0,h.Cj)(e);if(this.pageDb.has(r)){var n;const e=this.pageDb.get(r);if(e.payload)return e.payload;if(null!==(n=t)&&void 0!==n&&n.withErrorDetails)return{error:e.error,status:e.status}}},t.shouldPrefetch=function(e){return!!(()=>{if("connection"in navigator&&void 0!==navigator.connection){if((navigator.connection.effectiveType||"").includes("2g"))return!1;if(navigator.connection.saveData)return!1}return!0})()&&((!navigator.userAgent||!m.test(navigator.userAgent))&&!this.pageDb.has(e))},t.prefetch=function(e){if(!this.shouldPrefetch(e))return{then:e=>e(!1),abort:()=>{}};if(this.prefetchTriggered.has(e))return{then:e=>e(!0),abort:()=>{}};const t={resolve:null,reject:null,promise:null};t.promise=new Promise(((e,r)=>{t.resolve=e,t.reject=r})),this.prefetchQueued.push([e,t]);const r=new AbortController;return r.signal.addEventListener("abort",(()=>{const t=this.prefetchQueued.findIndex((t=>{let[r]=t;return r===e}));-1!==t&&this.prefetchQueued.splice(t,1)})),this.isPrefetchQueueRunning||(this.isPrefetchQueueRunning=!0,setTimeout((()=>{this._processNextPrefetchBatch()}),3e3)),{then:(e,r)=>t.promise.then(e,r),abort:r.abort.bind(r)}},t._processNextPrefetchBatch=function(){(window.requestIdleCallback||(e=>setTimeout(e,0)))((()=>{const e=this.prefetchQueued.splice(0,4),t=Promise.all(e.map((e=>{let[t,r]=e;return this.prefetchTriggered.has(t)||(this.apiRunner("onPrefetchPathname",{pathname:t}),this.prefetchTriggered.add(t)),this.prefetchDisabled?r.resolve(!1):this.doPrefetch((0,h.Cj)(t)).then((()=>{this.prefetchCompleted.has(t)||(this.apiRunner("onPostPrefetchPathname",{pathname:t}),this.prefetchCompleted.add(t)),r.resolve(!0)}))})));this.prefetchQueued.length?t.then((()=>{setTimeout((()=>{this._processNextPrefetchBatch()}),3e3)})):this.isPrefetchQueueRunning=!1}))},t.doPrefetch=function(e){const t=p(e);return u(t,{crossOrigin:"anonymous",as:"fetch"}).then((()=>this.loadPageDataJson(e)))},t.hovering=function(e){this.loadPage(e)},t.getResourceURLsForPathname=function(e){const t=(0,h.Cj)(e),r=this.pageDataDb.get(t);if(r){const e=g(r.payload);return[].concat(a(v(e.page.componentChunkName)),[p(t)])}return null},t.isPageNotFound=function(e){const t=(0,h.Cj)(e),r=this.pageDb.get(t);return!r||r.notFound},t.loadAppData=function(e){return void 0===e&&(e=0),this.memoizedGet("/page-data/app-data.json").then((t=>{const{status:r,responseText:n}=t;let o;if(200!==r&&e<3)return this.loadAppData(e+1);if(200===r)try{const e=JSON.parse(n);if(void 0===e.webpackCompilationHash)throw new Error("not a valid app-data response");o=e}catch(a){}return o}))},e}();const v=e=>(window.___chunkMapping[e]||[]).map((e=>""+e));let y,b=function(e){function t(t,r,n){var o;return o=e.call(this,(function(e,r){if(void 0===r&&(r="components"),!t[r="components"][e])throw new Error(`We couldn't find the correct component chunk with the name "${e}"`);return t[r][e]().catch((e=>e))}),r)||this,n&&o.pageDataDb.set((0,h.Cj)(n.path),{pagePath:n.path,payload:n,status:"success"}),o}(0,n.Z)(t,e);var r=t.prototype;return r.doPrefetch=function(t){return e.prototype.doPrefetch.call(this,t).then((e=>{if(e.status!==d.Success)return Promise.resolve();const t=e.payload,r=t.componentChunkName,n=v(r);return Promise.all(n.map(u)).then((()=>t))}))},r.loadPageDataJson=function(t){return e.prototype.loadPageDataJson.call(this,t).then((e=>e.notFound?f(t,"HEAD").then((t=>200===t.status?{status:d.Error}:e)):e))},r.loadPartialHydrationJson=function(t){return e.prototype.loadPartialHydrationJson.call(this,t).then((e=>e.notFound?f(t,"HEAD").then((t=>200===t.status?{status:d.Error}:e)):e))},t}(w);const k=e=>{y=e},_={enqueue:e=>y.prefetch(e),getResourceURLsForPathname:e=>y.getResourceURLsForPathname(e),loadPage:e=>y.loadPage(e),loadPageSync:function(e,t){return void 0===t&&(t={}),y.loadPageSync(e,t)},prefetch:e=>y.prefetch(e),isPageNotFound:e=>y.isPageNotFound(e),hovering:e=>y.hovering(e),loadAppData:()=>y.loadAppData()};var C=_;function E(){return y?y.staticQueryDb:{}}function S(){return y?y.slicesDb:{}}},4779:function(e,t,r){"use strict";r.d(t,{Z:function(){return w}});var n=r(7294),o=r(5697),a=r.n(o),s=r(3092),i=r(7802),c=r(4854),u=r(7896),l=r(4941);function h(e){let{children:t,callback:r}=e;return(0,n.useEffect)((()=>{r()})),t}const d=["link","meta","style","title","base","noscript","script"];function p(e,t){if(e instanceof HTMLElement&&t instanceof HTMLElement){const r=t.getAttribute("nonce");if(r&&!e.getAttribute("nonce")){const n=t.cloneNode(!0);return n.setAttribute("nonce",""),n.nonce=r,r===e.nonce&&e.isEqualNode(n)}}return e.isEqualNode(t)}const f=document.createElement("div"),m=()=>{var e;const t=[],r=new Map;for(const u of f.childNodes){var n,o;const e=u.nodeName.toLowerCase(),s=null===(n=u.attributes)||void 0===n||null===(o=n.id)||void 0===o?void 0:o.value;if(d.includes(e)){let e=u.cloneNode(!0);if(e.setAttribute("data-gatsby-head",!0),"script"===e.nodeName.toLowerCase()){const t=document.createElement("script");for(const r of e.attributes)t.setAttribute(r.name,r.value);t.innerHTML=e.innerHTML,e=t}if(s)if(r.has(s)){var a;const n=r.get(s);null===(a=t[n].parentNode)||void 0===a||a.removeChild(t[n]),t[n]=e}else t.push(e),r.set(s,t.length-1);else t.push(e)}else;}const s=document.querySelectorAll("[data-gatsby-head]");var i;if(0===s.length)return void(i=document.head).append.apply(i,t);const c=[];!function(e){let{oldNodes:t,newNodes:r,onStale:n,onNew:o}=e;for(const a of t){const e=r.findIndex((e=>p(e,a)));-1===e?n(a):r.splice(e,1)}for(const a of r)o(a)}({oldNodes:s,newNodes:t,onStale:e=>e.parentNode.removeChild(e),onNew:e=>c.push(e)}),(e=document.head).append.apply(e,c)};function g(e){let{pageComponent:t,staticQueryResults:r,pageComponentProps:o}=e;(0,n.useEffect)((()=>{if(null!=t&&t.Head){!function(e){if("function"!=typeof e)throw new Error(`Expected "Head" export to be a function got "${typeof e}".`)}(t.Head);const{render:a}=(0,l.U)(),s=t.Head;a(n.createElement(h,{callback:m},n.createElement(c.StaticQueryContext.Provider,{value:r},n.createElement(u.LocationProvider,null,n.createElement(s,{location:{pathname:(e=o).location.pathname},params:e.params,data:e.data||{},pageContext:e.pageContext})))),f)}var e;return()=>{(()=>{const e=document.querySelectorAll("[data-gatsby-head]");for(const t of e)t.parentNode.removeChild(t)})()}}))}function P(e){const t={...e,params:{...(0,i.GA)(e.location.pathname),...e.pageResources.json.pageContext.__params}};let r;var o;r=e.pageResources.partialHydration?e.pageResources.partialHydration:(0,n.createElement)((o=e.pageResources.component)&&o.default||o,{...t,key:e.path||e.pageResources.page.path});g({pageComponent:e.pageResources.head,staticQueryResults:e.pageResources.staticQueryResults,pageComponentProps:t});return(0,s.h)("wrapPageElement",{element:r,props:t},r,(e=>{let{result:r}=e;return{element:r,props:t}})).pop()}P.propTypes={location:a().object.isRequired,pageResources:a().object.isRequired,data:a().object,pageContext:a().object.isRequired};var w=P},5824:function(e,t,r){"use strict";var n=r(4578),o=r(3092),a=r(7294),s=r(7896),i=r(9679),c=r(1757),u=r(8995),l=r(8575),h=r(6073),d=r(8299);const p={id:"gatsby-announcer",style:{position:"absolute",top:0,width:1,height:1,padding:0,overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",border:0},"aria-live":"assertive","aria-atomic":"true"};var f=r(7118);function m(e){const t=(0,h.J)(e),{hash:r,search:n}=window.location;return null!=t&&(window.___replace(t.toPath+n+r),!0)}let g="";window.addEventListener("unhandledrejection",(e=>{/loading chunk \d* failed./i.test(e.reason)&&g&&(window.location.pathname=g)}));const P=(e,t)=>{m(e.pathname)||(g=e.pathname,(0,o.h)("onPreRouteUpdate",{location:e,prevLocation:t}))},w=(e,t)=>{m(e.pathname)||(0,o.h)("onRouteUpdate",{location:e,prevLocation:t})},v=function(e,t){if(void 0===t&&(t={}),"number"==typeof e)return void s.globalHistory.navigate(e);const{pathname:r,search:n,hash:a}=(0,f.cP)(e),i=(0,h.J)(r);if(i&&(e=i.toPath+n+a),window.___swUpdated)return void(window.location=r+n+a);const c=setTimeout((()=>{d.Z.emit("onDelayedLoadPageResources",{pathname:r}),(0,o.h)("onRouteUpdateDelayed",{location:window.location})}),1e3);l.ZP.loadPage(r+n).then((o=>{if(!o||o.status===l.uQ.Error)return window.history.replaceState({},"",location.href),window.location=r,void clearTimeout(c);o&&o.page.webpackCompilationHash!==window.___webpackCompilationHash&&("serviceWorker"in navigator&&null!==navigator.serviceWorker.controller&&"activated"===navigator.serviceWorker.controller.state&&navigator.serviceWorker.controller.postMessage({gatsbyApi:"clearPathResources"}),window.location=r+n+a),(0,s.navigate)(e,t),clearTimeout(c)}))};function y(e,t){let{location:r}=t;const{pathname:n,hash:a}=r,s=(0,o.h)("shouldUpdateScroll",{prevRouterProps:e,pathname:n,routerProps:{location:r},getSavedScrollPosition:e=>[0,this._stateStorage.read(e,e.key)]});if(s.length>0)return s[s.length-1];if(e){const{location:{pathname:t}}=e;if(t===n)return a?decodeURI(a.slice(1)):[0,0]}return!0}let b=function(e){function t(t){var r;return(r=e.call(this,t)||this).announcementRef=a.createRef(),r}(0,n.Z)(t,e);var r=t.prototype;return r.componentDidUpdate=function(e,t){requestAnimationFrame((()=>{let e=`new page at ${this.props.location.pathname}`;document.title&&(e=document.title);const t=document.querySelectorAll("#gatsby-focus-wrapper h1");t&&t.length&&(e=t[0].textContent);const r=`Navigated to ${e}`;if(this.announcementRef.current){this.announcementRef.current.innerText!==r&&(this.announcementRef.current.innerText=r)}}))},r.render=function(){return a.createElement("div",Object.assign({},p,{ref:this.announcementRef}))},t}(a.Component);const k=(e,t)=>{var r,n;return e.href!==t.href||(null==e||null===(r=e.state)||void 0===r?void 0:r.key)!==(null==t||null===(n=t.state)||void 0===n?void 0:n.key)};let _=function(e){function t(t){var r;return r=e.call(this,t)||this,P(t.location,null),r}(0,n.Z)(t,e);var r=t.prototype;return r.componentDidMount=function(){w(this.props.location,null)},r.shouldComponentUpdate=function(e){return!!k(e.location,this.props.location)&&(P(this.props.location,e.location),!0)},r.componentDidUpdate=function(e){k(e.location,this.props.location)&&w(this.props.location,e.location)},r.render=function(){return a.createElement(a.Fragment,null,this.props.children,a.createElement(b,{location:location}))},t}(a.Component);var C=r(4779),E=r(5418);function S(e,t){for(var r in e)if(!(r in t))return!0;for(var n in t)if(e[n]!==t[n])return!0;return!1}var R=function(e){function t(t){var r;r=e.call(this)||this;const{location:n,pageResources:o}=t;return r.state={location:{...n},pageResources:o||l.ZP.loadPageSync(n.pathname+n.search,{withErrorDetails:!0})},r}(0,n.Z)(t,e),t.getDerivedStateFromProps=function(e,t){let{location:r}=e;if(t.location.href!==r.href){return{pageResources:l.ZP.loadPageSync(r.pathname+r.search,{withErrorDetails:!0}),location:{...r}}}return{location:{...r}}};var r=t.prototype;return r.loadResources=function(e){l.ZP.loadPage(e).then((t=>{t&&t.status!==l.uQ.Error?this.setState({location:{...window.location},pageResources:t}):(window.history.replaceState({},"",location.href),window.location=e)}))},r.shouldComponentUpdate=function(e,t){return t.pageResources?this.state.pageResources!==t.pageResources||(this.state.pageResources.component!==t.pageResources.component||(this.state.pageResources.json!==t.pageResources.json||(!(this.state.location.key===t.location.key||!t.pageResources.page||!t.pageResources.page.matchPath&&!t.pageResources.page.path)||function(e,t,r){return S(e.props,t)||S(e.state,r)}(this,e,t)))):(this.loadResources(e.location.pathname+e.location.search),!1)},r.render=function(){return this.props.children(this.state)},t}(a.Component),j=r(1505),I=r(4941);const x=new l.kL(E,[],window.pageData);(0,l.N1)(x),x.setApiRunner(o.h);const{render:B,hydrate:O}=(0,I.U)();window.asyncRequires=E,window.___emitter=d.Z,window.___loader=l.jN,s.globalHistory.listen((e=>{e.location.action=e.action})),window.___push=e=>v(e,{replace:!1}),window.___replace=e=>v(e,{replace:!0}),window.___navigate=(e,t)=>v(e,t);const D="gatsby-reload-compilation-hash-match";(0,o.I)("onClientEntry").then((()=>{(0,o.h)("registerServiceWorker").filter(Boolean).length>0&&r(9939);const e=e=>a.createElement(s.BaseContext.Provider,{value:{baseuri:"/",basepath:"/"}},a.createElement(C.Z,e)),t=a.createContext({}),h={renderEnvironment:"browser"};let d=function(e){function r(){return e.apply(this,arguments)||this}return(0,n.Z)(r,e),r.prototype.render=function(){const{children:e}=this.props;return a.createElement(s.Location,null,(r=>{let{location:n}=r;return a.createElement(R,{location:n},(r=>{let{pageResources:n,location:o}=r;const s=(0,l.hs)(),i=(0,l.Nt)();return a.createElement(c.B9.Provider,{value:s},a.createElement(u.Bs.Provider,{value:h},a.createElement(u.m3.Provider,{value:i},a.createElement(u.u0.Provider,{value:n.page.slicesMap},a.createElement(t.Provider,{value:{pageResources:n,location:o}},e)))))}))}))},r}(a.Component),p=function(r){function o(){return r.apply(this,arguments)||this}return(0,n.Z)(o,r),o.prototype.render=function(){return a.createElement(t.Consumer,null,(t=>{let{pageResources:r,location:n}=t;return a.createElement(_,{location:n},a.createElement(i.$C,{location:n,shouldUpdateScroll:y},a.createElement(s.Router,{basepath:"",location:n,id:"gatsby-focus-wrapper"},a.createElement(e,Object.assign({path:"/404.html"===r.page.path||"/500.html"===r.page.path?(0,j.Z)(n.pathname,""):encodeURI((r.page.matchPath||r.page.path).split("?")[0])},this.props,{location:n,pageResources:r},r.json)))))}))},o}(a.Component);const{pagePath:f,location:m}=window;f&&""+f!==m.pathname+(f.includes("?")?m.search:"")&&!(x.findMatchPath((0,j.Z)(m.pathname,""))||f.match(/^\/(404|500)(\/?|.html)$/)||f.match(/^\/offline-plugin-app-shell-fallback\/?$/))&&(0,s.navigate)(""+f+(f.includes("?")?"":m.search)+m.hash,{replace:!0});const g=()=>{try{return sessionStorage}catch{return null}};l.jN.loadPage(m.pathname+m.search).then((e=>{var t;const r=g();if(null!=e&&null!==(t=e.page)&&void 0!==t&&t.webpackCompilationHash&&e.page.webpackCompilationHash!==window.___webpackCompilationHash&&("serviceWorker"in navigator&&null!==navigator.serviceWorker.controller&&"activated"===navigator.serviceWorker.controller.state&&navigator.serviceWorker.controller.postMessage({gatsbyApi:"clearPathResources"}),r)){if(!("1"===r.getItem(D)))return r.setItem(D,"1"),void window.location.reload(!0)}if(r&&r.removeItem(D),!e||e.status===l.uQ.Error){const t=`page resources for ${m.pathname} not found. Not rendering React`;if(e&&e.error)throw console.error(t),e.error;throw new Error(t)}const n=(0,o.h)("wrapRootElement",{element:a.createElement(p,null)},a.createElement(p,null),(e=>{let{result:t}=e;return{element:t}})).pop(),s=function(){const e=a.useRef(!1);return a.useEffect((()=>{e.current||(e.current=!0,performance.mark&&performance.mark("onInitialClientRender"),(0,o.h)("onInitialClientRender"))}),[]),a.createElement(d,null,n)},i=document.getElementById("gatsby-focus-wrapper");let c=B;i&&i.children.length&&(c=O);const u=(0,o.h)("replaceHydrateFunction",void 0,c)[0];function h(){const e="undefined"!=typeof window?document.getElementById("___gatsby"):null;u(a.createElement(s,null),e)}const f=document;if("complete"===f.readyState||"loading"!==f.readyState&&!f.documentElement.doScroll)setTimeout((function(){h()}),0);else{const e=function(){f.removeEventListener("DOMContentLoaded",e,!1),window.removeEventListener("load",e,!1),h()};f.addEventListener("DOMContentLoaded",e,!1),window.addEventListener("load",e,!1)}}))}))},224:function(e,t,r){"use strict";r.r(t);var n=r(7294),o=r(8575),a=r(4779);t.default=e=>{let{location:t}=e;const r=o.ZP.loadPageSync(t.pathname);return r?n.createElement(a.Z,{location:t,pageResources:r,...r.json}):null}},2743:function(e,t,r){var n;e.exports=(n=r(224))&&n.default||n},4941:function(e,t,r){"use strict";r.d(t,{U:function(){return o}});const n=new WeakMap;function o(){const e=r(745);return{render:(t,r)=>{let o=n.get(r);o||n.set(r,o=e.createRoot(r)),o.render(t)},hydrate:(t,r)=>e.hydrateRoot(r,t)}}},6073:function(e,t,r){"use strict";r.d(t,{J:function(){return s}});var n=JSON.parse('[{"fromPath":"/2018/06/27/immutable-data","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2018-06-27-immutable-data/"},{"fromPath":"/2018/06/27/immutable-data.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2018-06-27-immutable-data/"},{"fromPath":"/2018/05/30/graphql","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2018-05-30-graphql/"},{"fromPath":"/2018/05/30/graphql.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2018-05-30-graphql/"},{"fromPath":"/2018/04/25/kotlin","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2018-04-25-kotlin/"},{"fromPath":"/2018/04/25/kotlin.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2018-04-25-kotlin/"},{"fromPath":"/2018/03/20/mikro_vs_makroarchitektur","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2018-03-20-mikro_vs_makroarchitektur/"},{"fromPath":"/2018/03/20/mikro_vs_makroarchitektur.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2018-03-20-mikro_vs_makroarchitektur/"},{"fromPath":"/2018/02/28/java_auf_sap_cloud","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2018-02-28-java_auf_sap_cloud/"},{"fromPath":"/2018/02/28/java_auf_sap_cloud.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2018-02-28-java_auf_sap_cloud/"},{"fromPath":"/2018/01/31/system_of_systems","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2018-01-31-system_of_systems/"},{"fromPath":"/2018/01/31/system_of_systems.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2018-01-31-system_of_systems/"},{"fromPath":"/2017/11/29/neo4j","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2017-11-29-neo4j/"},{"fromPath":"/2017/11/29/neo4j.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2017-11-29-neo4j/"},{"fromPath":"/2017/10/25/serverless","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2017-10-25-serverless/"},{"fromPath":"/2017/10/25/serverless.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2017-10-25-serverless/"},{"fromPath":"/2017/08/30/alexa","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2017-08-30-alexa/"},{"fromPath":"/2017/08/30/alexa.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2017-08-30-alexa/"},{"fromPath":"/2017/05/31/react","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2017-05-31-react/"},{"fromPath":"/2017/05/31/react.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2017-05-31-react/"},{"fromPath":"/2017/04/25/jdk9","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2017-04-26-jdk9/"},{"fromPath":"/2017/04/25/jdk9.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2017-04-26-jdk9/"},{"fromPath":"/2017/03/22/angular","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2017-03-22-angular/"},{"fromPath":"/2017/03/22/angular.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2017-03-22-angular/"},{"fromPath":"/2017/02/22/css","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2017-02-22-css/"},{"fromPath":"/2017/02/22/css.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2017-02-22-css/"},{"fromPath":"/2017/01/25/junit5","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2017-01-25-junit5/"},{"fromPath":"/2017/01/25/junit5.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2017-01-25-junit5/"},{"fromPath":"/2016/11/30/inside_jvm","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2016-11-30-inside_jvm/"},{"fromPath":"/2016/11/30/inside_jvm.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2016-11-30-inside_jvm/"},{"fromPath":"/2016/09/21/kommunikationskultur","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2016-09-21-kommunikationskultur/"},{"fromPath":"/2016/09/21/kommunikationskultur.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2016-09-21-kommunikationskultur/"},{"fromPath":"/2016/07/27/testwerkzeuge_javafx","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2016-07-27-testwerkzeuge_javafx/"},{"fromPath":"/2016/07/27/testwerkzeuge_javafx.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2016-07-27-testwerkzeuge_javafx/"},{"fromPath":"/2016/05/25/performance-analyse-inspectit","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2016-05-25-performance-analyse-inspectit/"},{"fromPath":"/2016/05/25/performance-analyse-inspectit.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2016-05-25-performance-analyse-inspectit/"},{"fromPath":"/2016/03/30/haskell_frege","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2016-03-30-haskell_frege/"},{"fromPath":"/2016/03/30/haskell_frege.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2016-03-30-haskell_frege/"},{"fromPath":"/2016/01/27/functional_java","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2016-01-27-functional_java/"},{"fromPath":"/2016/01/27/functional_java.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2016-01-27-functional_java/"},{"fromPath":"/2015/11/25/javafx-mobile","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2015-11-25-javafx-mobile/"},{"fromPath":"/2015/11/25/javafx-mobile.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2015-11-25-javafx-mobile/"},{"fromPath":"/2015/09/30/guava","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2015-09-30-guava/"},{"fromPath":"/2015/09/30/guava.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2015-09-30-guava/"},{"fromPath":"/2015/07/29/drools","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2015-07-29-drools/"},{"fromPath":"/2015/07/29/drools.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2015-07-29-drools/"},{"fromPath":"/2015/05/27/advanced-android","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2015-05-27-advanced-android/"},{"fromPath":"/2015/05/27/advanced-android.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2015-05-27-advanced-android/"},{"fromPath":"/2015/03/25/android","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2015-03-25-android/"},{"fromPath":"/2015/03/25/android.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2015-03-25-android/"},{"fromPath":"/2015/01/28/moskito","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2015-01-28-moskito/"},{"fromPath":"/2015/01/28/moskito.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2015-01-28-moskito/"},{"fromPath":"/2014/12/03/model-view-star","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2014-12-03-model-view-star/"},{"fromPath":"/2014/12/03/model-view-star.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2014-12-03-model-view-star/"},{"fromPath":"/2014/10/29/infrastructure_as_code","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2014-10-29-infrastructure_as_code/"},{"fromPath":"/2014/10/29/infrastructure_as_code.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2014-10-29-infrastructure_as_code/"},{"fromPath":"/2014/09/24/solr","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2014-09-24-solr/"},{"fromPath":"/2014/09/24/solr.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2014-09-24-solr/"},{"fromPath":"/2014/07/30/java8-streams","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2014-07-30-java8-streams/"},{"fromPath":"/2014/07/30/java8-streams.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2014-07-30-java8-streams/"},{"fromPath":"/2014/05/28/hazelcast","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2014-05-28-hazelcast/"},{"fromPath":"/2014/05/28/hazelcast.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2014-05-28-hazelcast/"},{"fromPath":"/2014/04/02/assertj","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2014-04-02-assertj/"},{"fromPath":"/2014/04/02/assertj.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2014-04-02-assertj/"},{"fromPath":"/2014/01/29/opendip","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2014-01-29-opendip/"},{"fromPath":"/2014/01/29/opendip.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2014-01-29-opendip/"},{"fromPath":"/2013/11/27/web-performance","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2013-11-27-web-performance/"},{"fromPath":"/2013/11/27/web-performance.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2013-11-27-web-performance/"},{"fromPath":"/2013/10/30/app-design","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2013-10-30-app-design/"},{"fromPath":"/2013/10/30/app-design.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2013-10-30-app-design/"},{"fromPath":"/2013/07/31/persona","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2013-07-31-persona/"},{"fromPath":"/2013/07/31/persona.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2013-07-31-persona/"},{"fromPath":"/2013/05/29/jruby","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2013-05-29-jruby/"},{"fromPath":"/2013/05/29/jruby.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2013-05-29-jruby/"},{"fromPath":"/2013/03/27/nxt_lego","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2013-03-27-nxt_lego/"},{"fromPath":"/2013/03/27/nxt_lego.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2013-03-27-nxt_lego/"},{"fromPath":"/2012/11/28/javafx2","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2012-11-28-javafx2/"},{"fromPath":"/2012/11/28/javafx2.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2012-11-28-javafx2/"},{"fromPath":"/2012/09/26/bean_validation","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2012-09-26-bean_validation/"},{"fromPath":"/2012/09/26/bean_validation.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2012-09-26-bean_validation/"},{"fromPath":"/2012/07/25/selenium_praxis","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2012-07-25-selenium_praxis/"},{"fromPath":"/2012/07/25/selenium_praxis.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2012-07-25-selenium_praxis/"},{"fromPath":"/2012/06/27/gridgain","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2012-06-27-gridgain/"},{"fromPath":"/2012/06/27/gridgain.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2012-06-27-gridgain/"},{"fromPath":"/2012/05/30/jmonkey-engine3","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2012-05-30-jmonkey-engine3/"},{"fromPath":"/2012/05/30/jmonkey-engine3.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2012-05-30-jmonkey-engine3/"},{"fromPath":"/2012/04/25/maven","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2012-04-25-maven/"},{"fromPath":"/2012/04/25/maven.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2012-04-25-maven/"},{"fromPath":"/2012/03/28/webtests","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2012-03-28-webtests/"},{"fromPath":"/2012/03/28/webtests.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2012-03-28-webtests/"},{"fromPath":"/2012/02/29/scala_webapps","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2012-02-29-scala_webapps/"},{"fromPath":"/2012/02/29/scala_webapps.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2012-02-29-scala_webapps/"},{"fromPath":"/2012/01/25/jsf_cdi_advanced","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2012-01-25-jsf_cdi_advanced/"},{"fromPath":"/2012/01/25/jsf_cdi_advanced.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2012-01-25-jsf_cdi_advanced/"},{"fromPath":"/2012/01/04/hibernate","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2012-01-01-hibernate/"},{"fromPath":"/2012/01/04/hibernate.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2012-01-01-hibernate/"},{"fromPath":"/2011/11/30/jsf-cdi","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2011-11-30-jsf-cdi/"},{"fromPath":"/2011/11/30/jsf-cdi.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2011-11-30-jsf-cdi/"},{"fromPath":"/2011/10/26/android","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2011-10-26-android/"},{"fromPath":"/2011/10/26/android.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2011-10-26-android/"},{"fromPath":"/2011/09/28/jdom","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2011-09-28-jdom/"},{"fromPath":"/2011/09/28/jdom.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2011-09-28-jdom/"},{"fromPath":"/2011/09/28/single-sign-on","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2011-09-28-single-sign-on/"},{"fromPath":"/2011/09/28/single-sign-on.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2011-09-28-single-sign-on/"},{"fromPath":"/2011/08/31/testen","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2011-08-31-testen/"},{"fromPath":"/2011/08/31/testen.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2011-08-31-testen/"},{"fromPath":"/2011/07/27/scala","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2011-07-27-scala/"},{"fromPath":"/2011/07/27/scala.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2011-07-27-scala/"},{"fromPath":"/2011/07/27/testng","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2011-07-27-testng/"},{"fromPath":"/2011/07/27/testng.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2011-07-27-testng/"},{"fromPath":"/2011/06/29/javaee_jboss","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2011-06-29-javaee_jboss/"},{"fromPath":"/2011/06/29/javaee_jboss.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2011-06-29-javaee_jboss/"},{"fromPath":"/2011/05/27/guice","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2011-05-27-guice/"},{"fromPath":"/2011/05/27/guice.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2011-05-27-guice/"},{"fromPath":"/2011/04/27/gwt","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2011-04-27-gwt/"},{"fromPath":"/2011/04/27/gwt.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2011-04-27-gwt/"},{"fromPath":"/2011/04/27/osgi_springdm","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2011-04-27-osgi_springdm/"},{"fromPath":"/2011/04/27/osgi_springdm.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2011-04-27-osgi_springdm/"},{"fromPath":"/2011/03/22/easymock","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2011-03-22-easymock/"},{"fromPath":"/2011/03/22/easymock.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2011-03-22-easymock/"},{"fromPath":"/2011/03/22/jenkins","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2011-03-22-jenkins/"},{"fromPath":"/2011/03/22/jenkins.html","isPermanent":true,"ignoreCase":true,"redirectInBrowser":true,"toPath":"/talks/2011-03-22-jenkins/"}]');const o=new Map,a=new Map;function s(e){let t=o.get(e);return t||(t=a.get(e.toLowerCase())),t}n.forEach((e=>{e.ignoreCase?a.set(e.fromPath,e):o.set(e.fromPath,e)}))},9939:function(e,t,r){"use strict";r.r(t);var n=r(3092);"https:"!==window.location.protocol&&"localhost"!==window.location.hostname?console.error("Service workers can only be used over HTTPS, or on localhost for development"):"serviceWorker"in navigator&&navigator.serviceWorker.register("/sw.js").then((function(e){e.addEventListener("updatefound",(()=>{(0,n.h)("onServiceWorkerUpdateFound",{serviceWorker:e});const t=e.installing;console.log("installingWorker",t),t.addEventListener("statechange",(()=>{switch(t.state){case"installed":navigator.serviceWorker.controller?(window.___swUpdated=!0,(0,n.h)("onServiceWorkerUpdateReady",{serviceWorker:e}),window.___failedResources&&(console.log("resources failed, SW updated - reloading"),window.location.reload())):(console.log("Content is now available offline!"),(0,n.h)("onServiceWorkerInstalled",{serviceWorker:e}));break;case"redundant":console.error("The installing service worker became redundant."),(0,n.h)("onServiceWorkerRedundant",{serviceWorker:e});break;case"activated":(0,n.h)("onServiceWorkerActive",{serviceWorker:e})}}))}))})).catch((function(e){console.error("Error during service worker registration:",e)}))},8995:function(e,t,r){"use strict";r.d(t,{Bs:function(){return a},Db:function(){return i},m3:function(){return o},u0:function(){return s}});var n=r(7294);const o=n.createContext({}),a=n.createContext({}),s=n.createContext({}),i=n.createContext({})},1757:function(e,t,r){"use strict";r.d(t,{i1:function(){return c},B9:function(){return o},K2:function(){return u}});var n=r(7294);const o=(a="StaticQuery",s={},n.createServerContext?function(e,t){return void 0===t&&(t=null),globalThis.__SERVER_CONTEXT||(globalThis.__SERVER_CONTEXT={}),globalThis.__SERVER_CONTEXT[e]||(globalThis.__SERVER_CONTEXT[e]=n.createServerContext(e,t)),globalThis.__SERVER_CONTEXT[e]}(a,s):n.createContext(s));var a,s;function i(e){let{staticQueryData:t,data:r,query:o,render:a}=e;const s=r?r.data:t[o]&&t[o].data;return n.createElement(n.Fragment,null,s&&a(s),!s&&n.createElement("div",null,"Loading (StaticQuery)"))}const c=e=>{const{data:t,query:r,render:a,children:s}=e;return n.createElement(o.Consumer,null,(e=>n.createElement(i,{data:t,query:r,render:a||s,staticQueryData:e})))},u=e=>{var t;n.useContext;const r=n.useContext(o);if(isNaN(Number(e)))throw new Error(`useStaticQuery was called with a string but expects to be called using \`graphql\`. Try this:\n\nimport { useStaticQuery, graphql } from 'gatsby';\n\nuseStaticQuery(graphql\`${e}\`);\n`);if(null!==(t=r[e])&&void 0!==t&&t.data)return r[e].data;throw new Error("The result of this StaticQuery could not be fetched.\n\nThis is likely a bug in Gatsby and if refreshing the page does not fix it, please open an issue in https://github.com/gatsbyjs/gatsby/issues")}},1505:function(e,t,r){"use strict";function n(e,t){return void 0===t&&(t=""),t?e===t?"/":e.startsWith(`${t}/`)?e.slice(t.length):e:e}r.d(t,{Z:function(){return n}})},7118:function(e,t,r){"use strict";r.d(t,{c4:function(){return C},cP:function(){return h},dq:function(){return f},mc:function(){return v},rU:function(){return _}});var n=r(7326),o=r(4578),a=r(5697),s=r.n(a),i=r(7294),c=r(7896),u=r(4506);function l(){return l=Object.assign?Object.assign.bind():function(e){for(var t=1;t{if("string"==typeof e)return!(e=>d.test(e))(e)};function f(e,t){var r;if(void 0===t&&(t=""),!p(e))return e;if(e.startsWith("./")||e.startsWith("../"))return e;const n=null!=(r=null!=t?t:"")?r:"/";return`${null!=n&&n.endsWith("/")?n.slice(0,-1):n}${e.startsWith("/")?e:`/${e}`}`}const m=e=>null==e?void 0:e.startsWith("/");function g(e,t){const{pathname:r,search:n,hash:o}=h(e);return`${(0,u.H)(r,t)}${n}${o}`}const P=(e,t)=>"number"==typeof e?e:p(e)?m(e)?function(e){const t=f(e),r="always";return g(t,r)}(e):function(e,t){if(m(e))return e;const r="always",n=(0,c.resolve)(e,t);return g(n,r)}(e,t):e,w=["to","getProps","onClick","onMouseEnter","activeClassName","activeStyle","innerRef","partiallyActive","state","replace","_location"];function v(e){return f(e,"")}const y={activeClassName:s().string,activeStyle:s().object,partiallyActive:s().bool};function b(e){return i.createElement(c.Location,null,(t=>{let{location:r}=t;return i.createElement(k,l({},e,{_location:r}))}))}let k=function(e){function t(t){var r;(r=e.call(this,t)||this).defaultGetProps=e=>{let{isPartiallyCurrent:t,isCurrent:n}=e;return(r.props.partiallyActive?t:n)?{className:[r.props.className,r.props.activeClassName].filter(Boolean).join(" "),style:l({},r.props.style,r.props.activeStyle)}:null};let o=!1;return"undefined"!=typeof window&&window.IntersectionObserver&&(o=!0),r.state={IOSupported:o},r.abortPrefetch=null,r.handleRef=r.handleRef.bind((0,n.Z)(r)),r}(0,o.Z)(t,e);var r=t.prototype;return r._prefetch=function(){let e=window.location.pathname+window.location.search;this.props._location&&this.props._location.pathname&&(e=this.props._location.pathname+this.props._location.search);const t=h(P(this.props.to,e)),r=t.pathname+t.search;if(e!==r)return ___loader.enqueue(r)},r.componentWillUnmount=function(){if(!this.io)return;const{instance:e,el:t}=this.io;this.abortPrefetch&&this.abortPrefetch.abort(),e.unobserve(t),e.disconnect()},r.handleRef=function(e){this.props.innerRef&&Object.prototype.hasOwnProperty.call(this.props.innerRef,"current")?this.props.innerRef.current=e:this.props.innerRef&&this.props.innerRef(e),this.state.IOSupported&&e&&(this.io=((e,t)=>{const r=new window.IntersectionObserver((r=>{r.forEach((r=>{e===r.target&&t(r.isIntersecting||r.intersectionRatio>0)}))}));return r.observe(e),{instance:r,el:e}})(e,(e=>{e?this.abortPrefetch=this._prefetch():this.abortPrefetch&&this.abortPrefetch.abort()})))},r.render=function(){const e=this.props,{to:t,getProps:r=this.defaultGetProps,onClick:n,onMouseEnter:o,state:a,replace:s,_location:u}=e,d=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n=0||(o[r]=e[r]);return o}(e,w),f=P(t,u.pathname);return p(f)?i.createElement(c.Link,l({to:f,state:a,getProps:r,innerRef:this.handleRef,onMouseEnter:e=>{o&&o(e);const t=h(f);___loader.hovering(t.pathname+t.search)},onClick:e=>{if(n&&n(e),!(0!==e.button||this.props.target||e.defaultPrevented||e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)){e.preventDefault();let t=s;const r=encodeURI(f)===u.pathname;"boolean"!=typeof s&&r&&(t=!0),window.___navigate(f,{state:a,replace:t})}return!0}},d)):i.createElement("a",l({href:f},d))},t}(i.Component);k.propTypes=l({},y,{onClick:s().func,to:s().string.isRequired,replace:s().bool,state:s().object});const _=i.forwardRef(((e,t)=>i.createElement(b,l({innerRef:t},e)))),C=(e,t)=>{window.___navigate(P(e,window.location.pathname),t)}},436:function(e,t,r){"use strict";r.r(t),r.d(t,{onClientEntry:function(){return c}});var n=r(4854),o=r(3150),a=r.n(o);const s=e=>"/"===e[0]?e:`/${e}`,i=(e,t)=>r=>{if(window.___failedResources)return!0;if((e=>0!==e.button||e.altKey||e.ctrlKey||e.metaKey||e.shiftKey)(r))return!0;if((e=>e.defaultPrevented)(r))return!0;const o=(e=>{for(;e.parentNode;e=e.parentNode)if("a"===e.nodeName.toLowerCase())return e;return null})(r.target);if(null==o)return!0;if(!0===(i=o).hasAttribute("download")||!1===(e=>!1===e.hasAttribute("target")||null==e.target||["_self",""].includes(e.target)||"_parent"===e.target&&(!e.ownerDocument.defaultView.parent||e.ownerDocument.defaultView.parent===e.ownerDocument.defaultView)||"_top"===e.target&&(!e.ownerDocument.defaultView.top||e.ownerDocument.defaultView.top===e.ownerDocument.defaultView))(i))return!0;var i;const c=document.createElement("a");""!==o.href&&(c.href=o.href),"SVGAnimatedString"in window&&o.href instanceof SVGAnimatedString&&(c.href=o.href.animVal);const u=document.createElement("a");if(u.href=window.location.href,!1===((e,t)=>e.protocol===t.protocol&&e.host===t.host)(u,c))return!0;const l=new RegExp(`^${a()((0,n.withPrefix)("/"))}`);if(((e,t)=>!1===t.test(s(e.pathname))||-1!==e.pathname.search(/^.*\.((?!htm)[a-z0-9]{1,5})$/i))(c,l))return!0;if(((e,t)=>""!==t.hash&&(""===t.pathname||t.pathname===e.pathname))(u,c))return!0;if(t.excludePattern){if(new RegExp(t.excludePattern).test(c.pathname))return!0}r.preventDefault();const h=s(c.pathname).replace(l,"/");return e(`${h}${c.search}${c.hash}`),!1};const c=function(e,t){void 0===t&&(t={}),function(e,t,r){const n=i(r,t);e.addEventListener("click",n)}(window,t,(e=>{(0,n.navigate)(e)}))}},9608:function(e,t,r){"use strict";r.r(t),r.d(t,{onRouteUpdate:function(){return n}});r(4854),r(292);const n=function(e,t){let{location:r}=e}},292:function(e,t,r){"use strict";var n=r(4854)},8348:function(){"use strict"},855:function(e,t){"use strict";t.DEFAULT_OPTIONS={maxWidth:650,wrapperStyle:"",backgroundColor:"white",linkImagesToOriginal:!0,showCaptions:!1,markdownCaptions:!1,withWebp:!1,withAvif:!1,tracedSVG:!1,loading:"lazy",decoding:"async",disableBgImageOnAlpha:!1,disableBgImage:!1},t.EMPTY_ALT="GATSBY_EMPTY_ALT",t.imageClass="gatsby-resp-image-image",t.imageWrapperClass="gatsby-resp-image-wrapper",t.imageBackgroundClass="gatsby-resp-image-background-image"},2154:function(e,t,r){"use strict";var n=r(855),o=n.DEFAULT_OPTIONS,a=n.imageClass,s=n.imageBackgroundClass,i=n.imageWrapperClass;t.onRouteUpdate=function(e,t){for(var r=Object.assign({},o,t),n=document.querySelectorAll("."+i),c=function(e){var t=n[e],o=t.querySelector("."+s),i=t.querySelector("."+a),c=function(){o.style.transition="opacity 0.5s 0.5s",i.style.transition="opacity 0.5s",u()},u=function e(){o.style.opacity=0,i.style.opacity=1,i.style.color="inherit",i.style.boxShadow="inset 0px 0px 0px 400px "+r.backgroundColor,i.removeEventListener("load",c),i.removeEventListener("error",e)};i.style.opacity=0,i.addEventListener("load",c),i.addEventListener("error",u),i.complete&&u()},u=0;u{(0,n.anchorate)()}},1143:function(e){"use strict";e.exports=function(e,t,r,n,o,a,s,i){if(!e){var c;if(void 0===t)c=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var u=[r,n,o,a,s,i],l=0;(c=new Error(t.replace(/%s/g,(function(){return u[l++]})))).name="Invariant Violation"}throw c.framesToPop=1,c}}},9730:function(e,t,r){"use strict";var n=r(7294),o={stream:!0},a=new Map,s=Symbol.for("react.element"),i=Symbol.for("react.lazy"),c=Symbol.for("react.default_value"),u=n.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ContextRegistry;function l(e,t,r){this._status=e,this._value=t,this._response=r}function h(e){switch(e._status){case 3:return e._value;case 1:var t=JSON.parse(e._value,e._response._fromJSON);return e._status=3,e._value=t;case 2:for(var n=(t=e._value).chunks,o=0;o((e,t)=>{const{forward:r=[],...n}=e||{},o=JSON.stringify(n,((e,t)=>("function"==typeof t&&(t=String(t)).startsWith(e+"(")&&(t="function "+t),t)));return["!(function(w,p,f,c){",Object.keys(n).length>0?`c=w[p]=Object.assign(w[p]||{},${o});`:"c=w[p]=w[p]||{};","c[f]=(c[f]||[])",r.length>0?`.concat(${JSON.stringify(r)})`:"","})(window,'partytown','forward');",t].join("")})(e,'/* Partytown 0.5.4 - MIT builder.io */\n!function(t,e,n,i,r,o,a,d,s,c,p,l){function u(){l||(l=1,"/"==(a=(o.lib||"/~partytown/")+(o.debug?"debug/":""))[0]&&(s=e.querySelectorAll(\'script[type="text/partytown"]\'),i!=t?i.dispatchEvent(new CustomEvent("pt1",{detail:t})):(d=setTimeout(w,1e4),e.addEventListener("pt0",f),r?h(1):n.serviceWorker?n.serviceWorker.register(a+(o.swPath||"partytown-sw.js"),{scope:a}).then((function(t){t.active?h():t.installing&&t.installing.addEventListener("statechange",(function(t){"activated"==t.target.state&&h()}))}),console.error):w())))}function h(t){c=e.createElement(t?"script":"iframe"),t||(c.setAttribute("style","display:block;width:0;height:0;border:0;visibility:hidden"),c.setAttribute("aria-hidden",!0)),c.src=a+"partytown-"+(t?"atomics.js?v=0.5.4":"sandbox-sw.html?"+Date.now()),e.body.appendChild(c)}function w(t,n){for(f(),t=0;t=0||(o[r]=e[r]);return o}const u=e=>{const{search:t,hash:r,href:n,origin:o,protocol:a,host:s,hostname:i,port:c}=e.location;let{pathname:u}=e.location;return!u&&n&&d&&(u=new URL(n).pathname),{pathname:encodeURI(decodeURI(u)),search:t,hash:r,href:n,origin:o,protocol:a,host:s,hostname:i,port:c,state:e.history.state,key:e.history.state&&e.history.state.key||"initial"}},l=(e,t)=>{let r=[],n=u(e),o=!1,a=()=>{};return{get location(){return n},get transitioning(){return o},_onTransitionComplete(){o=!1,a()},listen(t){r.push(t);const o=()=>{n=u(e),t({location:n,action:"POP"})};return e.addEventListener("popstate",o),()=>{e.removeEventListener("popstate",o),r=r.filter((e=>e!==t))}},navigate(t,{state:s,replace:c=!1}={}){if("number"==typeof t)e.history.go(t);else{s=i({},s,{key:Date.now()+""});try{o||c?e.history.replaceState(s,null,t):e.history.pushState(s,null,t)}catch(r){e.location[c?"replace":"assign"](t)}}n=u(e),o=!0;const l=new Promise((e=>a=e));return r.forEach((e=>e({location:n,action:"PUSH"}))),l}}},h=(e="/")=>{const t=e.indexOf("?"),r={pathname:t>-1?e.substr(0,t):e,search:t>-1?e.substr(t):""};let n=0;const o=[r],a=[null];return{get location(){return o[n]},addEventListener(e,t){},removeEventListener(e,t){},history:{get entries(){return o},get index(){return n},get state(){return a[n]},pushState(e,t,r){const[s,i=""]=r.split("?");n++,o.push({pathname:s,search:i.length?`?${i}`:i}),a.push(e)},replaceState(e,t,r){const[s,i=""]=r.split("?");o[n]={pathname:s,search:i},a[n]=e},go(e){const t=n+e;t<0||t>a.length-1||(n=t)}}}},d=!("undefined"==typeof window||!window.document||!window.document.createElement),p=l(d?window:h()),{navigate:f}=p;function m(e,t){return o.createServerContext?((e,t=null)=>(globalThis.__SERVER_CONTEXT||(globalThis.__SERVER_CONTEXT={}),globalThis.__SERVER_CONTEXT[e]||(globalThis.__SERVER_CONTEXT[e]=o.createServerContext(e,t)),globalThis.__SERVER_CONTEXT[e]))(e,t):o.createContext(t)}const g=m("Base",{baseuri:"/",basepath:"/"}),P=m("Location"),w=()=>o.useContext(g),v=()=>o.useContext(P);function y(e){this.uri=e}const b=e=>e instanceof y,k=e=>{throw new y(e)};function _(e){const{to:t,replace:r=!0,state:n,noThrow:a,baseuri:s}=e;o.useEffect((()=>{Promise.resolve().then((()=>{const o=j(t,s);f(I(o,e),{replace:r,state:n})}))}),[]);const i=j(t,s);return a||k(I(i,e)),null}const C=e=>{const t=v(),{baseuri:r}=w();return o.createElement(_,i({},t,{baseuri:r},e))};C.propTypes={from:a.string,to:a.string.isRequired};const E=(e,t)=>e.substr(0,t.length)===t,S=(e,t)=>{let r,n;const[o]=t.split("?"),a=L(o),i=""===a[0],c=N(e);for(let u=0,l=c.length;u dynamic segment "${n[1]}" is a reserved name. Please use a different name in path "${o.path}".`);const t=decodeURIComponent(r);h[n[1]]=t}else if(t!==r){e=!0;break}}if(!e){r={route:o,params:h,uri:"/"+a.slice(0,p).join("/")};break}}return r||n||null},R=(e,t)=>S([{path:e}],t),j=(e,t)=>{if(E(e,"/"))return e;const[r,n]=e.split("?"),[o]=t.split("?"),a=L(r),s=L(o);if(""===a[0])return M(o,n);if(!E(a[0],".")){const e=s.concat(a).join("/");return M(("/"===o?"":"/")+e,n)}const i=s.concat(a),c=[];for(let u=0,l=i.length;u{const[r,n=""]=e.split("?");let o="/"+L(r).map((e=>{const r=B.exec(e);return r?t[r[1]]:e})).join("/");const{location:{search:a=""}={}}=t,s=a.split("?")[1]||"";return o=M(o,n,s),o},x=(e,t)=>{const r=e=>O(e);return L(e).filter(r).sort().join("/")===L(t).filter(r).sort().join("/")},B=/^:(.+)/,O=e=>B.test(e),D=e=>e&&"*"===e[0],T=(e,t)=>({route:e,score:e.default?0:L(e.path).reduce(((e,t)=>(e+=4,(e=>""===e)(t)?e+=1:O(t)?e+=2:D(t)?e-=5:e+=3,e)),0),index:t}),N=e=>e.map(T).sort(((e,t)=>e.scoret.score?-1:e.index-t.index)),L=e=>e.replace(/(^\/+|\/+$)/g,"").split("/"),M=(e,...t)=>e+((t=t.filter((e=>e&&e.length>0)))&&t.length>0?`?${t.join("&")}`:""),$=["uri","path"],A=(e,t)=>{const r=Object.keys(e);return r.length===Object.keys(t).length&&r.every((r=>t.hasOwnProperty(r)&&e[r]===t[r]))},H=e=>e.replace(/(^\/+|\/+$)/g,""),U=e=>t=>{if(!t)return null;if(t.type===o.Fragment&&t.props.children)return o.Children.map(t.props.children,U(e));if(s(t.props.path||t.props.default||t.type===C,`: Children of must have a \`path\` or \`default\` prop, or be a \`\`. None found on element type \`${t.type}\``),s(!!(t.type!==C||t.props.from&&t.props.to),` requires both "from" and "to" props when inside a .`),s(!(t.type===C&&!x(t.props.from,t.props.to)),` has mismatched dynamic segments, ensure both paths have the exact same dynamic segments.`),t.props.default)return{value:t,default:!0};const r=t.type===C?t.props.from:t.props.path,n="/"===r?e:`${H(e)}/${H(r)}`;return{value:t,default:t.props.default,path:t.props.children?`${H(n)}/*`:n}},W=["innerRef"],q=["to","state","replace","getProps"],F=["key"];let{forwardRef:J}=n||(n=r.t(o,2));void 0===J&&(J=e=>e);const Q=()=>{},Z=J(((e,t)=>{let{innerRef:r}=e,n=c(e,W);const{baseuri:a}=w(),{location:s}=v(),{to:u,state:l,replace:h,getProps:d=Q}=n,p=c(n,q),m=j(u,a),g=encodeURI(m),P=s.pathname===g,y=E(s.pathname,g);return o.createElement("a",i({ref:t||r,"aria-current":P?"page":void 0},p,d({isCurrent:P,isPartiallyCurrent:y,href:m,location:s}),{href:m,onClick:e=>{if(p.onClick&&p.onClick(e),(e=>!e.defaultPrevented&&0===e.button&&!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey))(e)){e.preventDefault();let t=h;if("boolean"!=typeof h&&P){const e=c(i({},s.state),F);t=A(i({},l),e)}f(m,{state:l,replace:t})}}}))}));Z.displayName="Link",Z.propTypes={to:a.string.isRequired};class G extends o.Component{constructor(...e){super(...e),this.displayName="ReactUseErrorBoundary"}componentDidCatch(...e){this.setState({}),this.props.onError(...e)}render(){return this.props.children}}const z=o.createContext({componentDidCatch:{current:void 0},error:void 0,setError:()=>!1});function V({children:e}){const[t,r]=o.useState(),n=o.useRef(),a=o.useMemo((()=>({componentDidCatch:n,error:t,setError:r})),[t]);return o.createElement(z.Provider,{value:a},o.createElement(G,{error:t,onError:(e,t)=>{r(e),null==n.current||n.current(e,t)}},e))}V.displayName="ReactUseErrorBoundaryContext";const K=function(e){var t,r;function n(t){return o.createElement(V,null,o.createElement(e,i({key:"WrappedComponent"},t)))}return n.displayName=`WithErrorBoundary(${null!=(t=null!=(r=e.displayName)?r:e.name)?t:"Component"})`,n}((({history:e=p,children:t})=>{const{location:r}=e,[n,a]=o.useState({location:r}),[s]=function(e){const t=o.useContext(z);t.componentDidCatch.current=void 0;const r=o.useCallback((()=>{t.setError(void 0)}),[]);return[t.error,r]}();if(o.useEffect((()=>{e._onTransitionComplete()}),[n.location]),o.useEffect((()=>{let t=!1;const r=e.listen((({location:e})=>{Promise.resolve().then((()=>{requestAnimationFrame((()=>{t||a({location:e})}))}))}));return()=>{t=!0,r()}}),[]),s){if(!b(s))throw s;f(s.uri,{replace:!0})}return o.createElement(P.Provider,{value:n},"function"==typeof t?t(n):t||null)})),X=({children:e})=>{const t=v();return t?e(t):o.createElement(K,null,e)},Y=({url:e,children:t})=>{const r=e.indexOf("?");let n,a="";return r>-1?(n=e.substring(0,r),a=e.substring(r)):n=e,o.createElement(P.Provider,{value:{location:{pathname:n,search:a,hash:""}}},t)},ee=({path:e,children:t})=>{const{baseuri:r}=w(),{location:n}=v(),o=j(e,r),a=R(o,n.pathname);return t({location:n,match:a?i({},a.params,{uri:a.uri,path:e}):null})},te=["uri","location","component"],re=["children","style","component","uri","location"],ne=e=>{let{uri:t,location:r,component:n}=e,a=c(e,te);return o.createElement(ae,i({},a,{component:n,uri:t,location:r}))};let oe=0;const ae=e=>{let{children:t,style:r,component:n="div",uri:a,location:s}=e,u=c(e,re);const l=o.useRef(),h=o.useRef(!0),d=o.useRef(a),p=o.useRef(s.pathname),f=o.useRef(!1);o.useEffect((()=>(oe++,m(),()=>{oe--,0===oe&&(h.current=!0)})),[]),o.useEffect((()=>{let e=!1,t=!1;a!==d.current&&(d.current=a,e=!0),s.pathname!==p.current&&(p.current=s.pathname,t=!0),f.current=e||t&&s.pathname===a,f.current&&m()}),[a,s]);const m=o.useCallback((()=>{var e;h.current?h.current=!1:(e=l.current,f.current&&e&&e.focus())}),[]);return o.createElement(n,i({style:i({outline:"none"},r),tabIndex:"-1",ref:l},u),t)},se=["location","primary","children","basepath","baseuri","component"],ie=e=>{const t=w(),r=v();return o.createElement(ce,i({},t,r,e))};function ce(e){const{location:t,primary:r=!0,children:n,basepath:a,component:s="div"}=e,u=c(e,se),l=o.Children.toArray(n).reduce(((e,t)=>{const r=U(a)(t);return e.concat(r)}),[]),{pathname:h}=t,d=S(l,h);if(d){const{params:e,uri:n,route:c,route:{value:l}}=d,h=c.default?a:c.path.replace(/\*$/,""),p=i({},e,{uri:n,location:t}),f=o.cloneElement(l,p,l.props.children?o.createElement(ie,{location:t,primary:r},l.props.children):void 0),m=r?ne:s,P=r?i({uri:n,location:t,component:s},u):u;return o.createElement(g.Provider,{value:{baseuri:n,basepath:h}},o.createElement(m,P,f))}return null}const ue=()=>{const e=v();if(!e)throw new Error("useLocation hook was used but a LocationContext.Provider was not found in the parent tree. Make sure this is used in a component that is a child of Router");return e.location},le=()=>{throw new Error("useNavigate is removed. Use import { navigate } from 'gatsby' instead")},he=()=>{const e=w();if(!e)throw new Error("useParams hook was used but a LocationContext.Provider was not found in the parent tree. Make sure this is used in a component that is a child of Router");const t=ue(),r=R(e.basepath,t.pathname);return r?r.params:null},de=e=>{if(!e)throw new Error("useMatch(path: string) requires an argument of a string to match against");const t=w();if(!t)throw new Error("useMatch hook was used but a LocationContext.Provider was not found in the parent tree. Make sure this is used in a component that is a child of Router");const r=ue(),n=j(e,t.baseuri),o=R(n,r.pathname);return o?i({},o.params,{uri:o.uri,path:e}):null}},3521:function(e,t,r){"use strict";r.r(t),r.d(t,{Script:function(){return f},ScriptStrategy:function(){return u},collectedScriptsByPage:function(){return i},scriptCache:function(){return d},scriptCallbackCache:function(){return p}});var n=r(7294),o=r(7896);function a(){return a=Object.assign?Object.assign.bind():function(e){for(var t=1;ts.get(e)||[],set(e,t){const r=s.get(e)||[];r.push(t),s.set(e,r)},delete(e){s.delete(e)}},c="undefined"!=typeof self&&self.requestIdleCallback&&self.requestIdleCallback.bind(window)||function(e){const t=Date.now();return setTimeout((function(){e({didTimeout:!1,timeRemaining:function(){return Math.max(0,50-(Date.now()-t))}})}),1)};var u,l;(l=u||(u={})).postHydrate="post-hydrate",l.idle="idle",l.offMainThread="off-main-thread";const h=new Set(["src","strategy","dangerouslySetInnerHTML","children","onLoad","onError"]),d=new Set,p=new Map;function f(e){return n.createElement(o.Location,null,(()=>n.createElement(m,e)))}function m(e){const{src:t,strategy:r=u.postHydrate}=e||{},{pathname:s}=(0,o.useLocation)();if((0,n.useEffect)((()=>{let t;switch(r){case u.postHydrate:t=g(e);break;case u.idle:c((()=>{t=g(e)}));break;case u.offMainThread:{const t=w(e);i.set(s,t)}}return()=>{const{script:e,loadCallback:r,errorCallback:n}=t||{};r&&(null==e||e.removeEventListener("load",r)),n&&(null==e||e.removeEventListener("error",n)),null==e||e.remove()}}),[]),r===u.offMainThread){const o=P(e),c=w(e);return"undefined"==typeof window&&i.set(s,c),n.createElement("script",o?a({type:"text/partytown","data-strategy":r,crossOrigin:"anonymous"},c,{dangerouslySetInnerHTML:{__html:P(e)}}):a({type:"text/partytown",src:v(t),"data-strategy":r,crossOrigin:"anonymous"},c))}return null}function g(e){const{id:t,src:r,strategy:n=u.postHydrate,onLoad:o,onError:s}=e||{},i=t||r,c=["load","error"],l={load:o,error:s};if(i){for(const e of c)if(null!=l&&l[e]){var h;const t=p.get(i)||{},{callbacks:r=[]}=(null==t?void 0:t[e])||{};var f,m;r.push(null==l?void 0:l[e]),null!=t&&null!=(h=t[e])&&h.event?null==l||null==(f=l[e])||f.call(l,null==t||null==(m=t[e])?void 0:m.event):p.set(i,a({},t,{[e]:{callbacks:r}}))}if(d.has(i))return null}const g=P(e),v=w(e),b=document.createElement("script");t&&(b.id=t),b.dataset.strategy=n;for(const[a,u]of Object.entries(v))b.setAttribute(a,u);g&&(b.textContent=g),r&&(b.src=r);const k={};if(i){for(const e of c){const t=t=>y(t,i,e);b.addEventListener(e,t),k[`${e}Callback`]=t}d.add(i)}return document.body.appendChild(b),{script:b,loadCallback:k.loadCallback,errorCallback:k.errorCallback}}function P(e){const{dangerouslySetInnerHTML:t,children:r=""}=e||{},{__html:n=""}=t||{};return n||r}function w(e){const t={};for(const[r,n]of Object.entries(e))h.has(r)||(t[r]=n);return t}function v(e){if(e)return`/__third-party-proxy?url=${encodeURIComponent(e)}`}function y(e,t,r){const n=p.get(t)||{};for(const a of(null==n||null==(o=n[r])?void 0:o.callbacks)||[]){var o;a(e)}p.set(t,{[r]:{event:e}})}}},function(e){e.O(0,[774],(function(){return t=5824,e(e.s=t);var t}));e.O()}]); +//# sourceMappingURL=app-545491b94328c8e7ee02.js.map \ No newline at end of file diff --git a/app-4a6f4c870da7a677f533.js.LICENSE.txt b/app-545491b94328c8e7ee02.js.LICENSE.txt similarity index 100% rename from app-4a6f4c870da7a677f533.js.LICENSE.txt rename to app-545491b94328c8e7ee02.js.LICENSE.txt diff --git a/app-4a6f4c870da7a677f533.js.map b/app-545491b94328c8e7ee02.js.map similarity index 99% rename from app-4a6f4c870da7a677f533.js.map rename to app-545491b94328c8e7ee02.js.map index 41e616e9a..93f3a6104 100644 --- a/app-4a6f4c870da7a677f533.js.map +++ b/app-545491b94328c8e7ee02.js.map @@ -1 +1 @@ -{"version":3,"file":"app-4a6f4c870da7a677f533.js","mappings":"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","sources":["webpack://jug-goerlitz/./node_modules/anchorate/index.js","webpack://jug-goerlitz/./node_modules/css.escape/css.escape.js","webpack://jug-goerlitz/./node_modules/escape-string-regexp/index.js","webpack://jug-goerlitz/./node_modules/gatsby-page-utils/dist/apply-trailing-slash-option.js","webpack://jug-goerlitz/./node_modules/gatsby-react-router-scroll/index.js","webpack://jug-goerlitz/./node_modules/gatsby-react-router-scroll/scroll-handler.js","webpack://jug-goerlitz/./node_modules/gatsby-react-router-scroll/session-storage.js","webpack://jug-goerlitz/./node_modules/gatsby-react-router-scroll/use-scroll-restoration.js","webpack://jug-goerlitz/./node_modules/gatsby/dist/internal-plugins/partytown/gatsby-browser.js","webpack://jug-goerlitz/./node_modules/gatsby/dist/internal-plugins/partytown/utils/get-forwards.js","webpack://jug-goerlitz/./node_modules/gatsby/dist/internal-plugins/partytown/utils/inject-partytown-snippet.js","webpack://jug-goerlitz/./.cache/_this_is_virtual_fs_path_/$virtual/async-requires.js","webpack://jug-goerlitz/./.cache/api-runner-browser-plugins.js","webpack://jug-goerlitz/./.cache/api-runner-browser.js","webpack://jug-goerlitz/./.cache/create-content-digest-browser-shim.js","webpack://jug-goerlitz/./.cache/emitter.js","webpack://jug-goerlitz/./node_modules/mitt/dist/mitt.es.js","webpack://jug-goerlitz/./.cache/normalize-page-path.js","webpack://jug-goerlitz/./.cache/find-path.js","webpack://jug-goerlitz/./node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js","webpack://jug-goerlitz/./node_modules/@babel/runtime/helpers/esm/isNativeReflectConstruct.js","webpack://jug-goerlitz/./node_modules/@babel/runtime/helpers/esm/construct.js","webpack://jug-goerlitz/./node_modules/@babel/runtime/helpers/esm/wrapNativeSuper.js","webpack://jug-goerlitz/./node_modules/@babel/runtime/helpers/esm/isNativeFunction.js","webpack://jug-goerlitz/./.cache/slice/server-slice-renderer.js","webpack://jug-goerlitz/./.cache/slice/server-slice.js","webpack://jug-goerlitz/./.cache/slice/inline-slice.js","webpack://jug-goerlitz/./.cache/slice.js","webpack://jug-goerlitz/./.cache/gatsby-browser-entry.js","webpack://jug-goerlitz/./node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js","webpack://jug-goerlitz/./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js","webpack://jug-goerlitz/./node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js","webpack://jug-goerlitz/./node_modules/@babel/runtime/helpers/esm/iterableToArray.js","webpack://jug-goerlitz/./node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js","webpack://jug-goerlitz/./node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js","webpack://jug-goerlitz/./.cache/prefetch.js","webpack://jug-goerlitz/./.cache/loader.js","webpack://jug-goerlitz/./.cache/head/components/fire-callback-in-effect.js","webpack://jug-goerlitz/./.cache/head/constants.js","webpack://jug-goerlitz/./.cache/head/utils.js","webpack://jug-goerlitz/./.cache/head/head-export-handler-for-browser.js","webpack://jug-goerlitz/./.cache/page-renderer.js","webpack://jug-goerlitz/./.cache/route-announcer-props.js","webpack://jug-goerlitz/./.cache/navigation.js","webpack://jug-goerlitz/./node_modules/shallow-compare/es/index.js","webpack://jug-goerlitz/./.cache/ensure-resources.js","webpack://jug-goerlitz/./.cache/production-app.js","webpack://jug-goerlitz/./.cache/public-page-renderer-prod.js","webpack://jug-goerlitz/./.cache/public-page-renderer.js","webpack://jug-goerlitz/./.cache/react-dom-utils.js","webpack://jug-goerlitz/./.cache/redirect-utils.js","webpack://jug-goerlitz/./.cache/register-service-worker.js","webpack://jug-goerlitz/./.cache/slice/context.js","webpack://jug-goerlitz/./.cache/static-query.js","webpack://jug-goerlitz/./.cache/context-utils.js","webpack://jug-goerlitz/./.cache/strip-prefix.js","webpack://jug-goerlitz/./node_modules/gatsby-plugin-catch-links/catch-links.js","webpack://jug-goerlitz/./node_modules/gatsby-plugin-catch-links/gatsby-browser.js","webpack://jug-goerlitz/./node_modules/gatsby-plugin-manifest/gatsby-browser.js","webpack://jug-goerlitz/./node_modules/gatsby-plugin-manifest/get-manifest-pathname.js","webpack://jug-goerlitz/./node_modules/gatsby-remark-images/constants.js","webpack://jug-goerlitz/./node_modules/gatsby-remark-images/gatsby-browser.js","webpack://jug-goerlitz/./gatsby-browser.ts","webpack://jug-goerlitz/./node_modules/invariant/browser.js","webpack://jug-goerlitz/./node_modules/react-server-dom-webpack/cjs/react-server-dom-webpack.production.min.js","webpack://jug-goerlitz/./node_modules/react-server-dom-webpack/index.js","webpack://jug-goerlitz/./node_modules/@babel/runtime/helpers/assertThisInitialized.js","webpack://jug-goerlitz/./node_modules/@babel/runtime/helpers/inheritsLoose.js","webpack://jug-goerlitz/./node_modules/@babel/runtime/helpers/interopRequireDefault.js","webpack://jug-goerlitz/./node_modules/@babel/runtime/helpers/setPrototypeOf.js","webpack://jug-goerlitz/./node_modules/@builder.io/partytown/integration/index.cjs","webpack://jug-goerlitz/./node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","webpack://jug-goerlitz/./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","webpack://jug-goerlitz/./node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","webpack://jug-goerlitz/./node_modules/@gatsbyjs/reach-router/dist/index.modern.mjs","webpack://jug-goerlitz/./node_modules/gatsby-script/dist/index.modern.mjs"],"sourcesContent":["/**\n * Originally based on:\n * https://github.com/reactjs/react-router/issues/394#issuecomment-220221604\n */\n\nvar CSSescape = require('css.escape')\n\nexports.hash = function hash (h, options) {\n options = options || {}\n var cb = options.callback || function () {}\n // There's no hash to scroll to, so \"success\", we did it.\n if (!h) return void cb()\n var scroller = options.scroller || exports.scroller\n // Push onto callback queue so it runs after the DOM is updated,\n // this is required when navigating from a different page so that\n // the element is rendered on the page before trying to getElementById.\n setTimeout(function () {\n var els = exports.elements(h)\n if (!els) return void cb(true)\n if (scroller(els.id) || scroller(els.name)) return void cb()\n cb(true)\n }, 0)\n}\n\nexports.scroller = function scroller (el) {\n if (!el) return false\n el.scrollIntoView()\n return true\n}\n\nexports.elements = function elements (h) {\n var sels = exports.selectors(h)\n if (!sels) return\n return {\n id: document.getElementById(sels.id),\n name: document.querySelector(sels.name)\n }\n}\n\nexports.selectors = function selectors (h) {\n if (!h) return\n h = h.replace(/^#/, '')\n if (!h) return\n return {\n id: h,\n name: '[name=\"' + CSSescape(h) + '\"]'\n }\n}\n\nexports.anchorate = function anchorate (options) {\n exports.hash(window.location.hash, options)\n}\n\nexports.default = exports.anchorate\n","/*! https://mths.be/cssescape v1.5.1 by @mathias | MIT license */\n;(function(root, factory) {\n\t// https://github.com/umdjs/umd/blob/master/returnExports.js\n\tif (typeof exports == 'object') {\n\t\t// For Node.js.\n\t\tmodule.exports = factory(root);\n\t} else if (typeof define == 'function' && define.amd) {\n\t\t// For AMD. Register as an anonymous module.\n\t\tdefine([], factory.bind(root, root));\n\t} else {\n\t\t// For browser globals (not exposing the function separately).\n\t\tfactory(root);\n\t}\n}(typeof global != 'undefined' ? global : this, function(root) {\n\n\tif (root.CSS && root.CSS.escape) {\n\t\treturn root.CSS.escape;\n\t}\n\n\t// https://drafts.csswg.org/cssom/#serialize-an-identifier\n\tvar cssEscape = function(value) {\n\t\tif (arguments.length == 0) {\n\t\t\tthrow new TypeError('`CSS.escape` requires an argument.');\n\t\t}\n\t\tvar string = String(value);\n\t\tvar length = string.length;\n\t\tvar index = -1;\n\t\tvar codeUnit;\n\t\tvar result = '';\n\t\tvar firstCodeUnit = string.charCodeAt(0);\n\t\twhile (++index < length) {\n\t\t\tcodeUnit = string.charCodeAt(index);\n\t\t\t// Note: there’s no need to special-case astral symbols, surrogate\n\t\t\t// pairs, or lone surrogates.\n\n\t\t\t// If the character is NULL (U+0000), then the REPLACEMENT CHARACTER\n\t\t\t// (U+FFFD).\n\t\t\tif (codeUnit == 0x0000) {\n\t\t\t\tresult += '\\uFFFD';\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\t// If the character is in the range [\\1-\\1F] (U+0001 to U+001F) or is\n\t\t\t\t// U+007F, […]\n\t\t\t\t(codeUnit >= 0x0001 && codeUnit <= 0x001F) || codeUnit == 0x007F ||\n\t\t\t\t// If the character is the first character and is in the range [0-9]\n\t\t\t\t// (U+0030 to U+0039), […]\n\t\t\t\t(index == 0 && codeUnit >= 0x0030 && codeUnit <= 0x0039) ||\n\t\t\t\t// If the character is the second character and is in the range [0-9]\n\t\t\t\t// (U+0030 to U+0039) and the first character is a `-` (U+002D), […]\n\t\t\t\t(\n\t\t\t\t\tindex == 1 &&\n\t\t\t\t\tcodeUnit >= 0x0030 && codeUnit <= 0x0039 &&\n\t\t\t\t\tfirstCodeUnit == 0x002D\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\t// https://drafts.csswg.org/cssom/#escape-a-character-as-code-point\n\t\t\t\tresult += '\\\\' + codeUnit.toString(16) + ' ';\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\t// If the character is the first character and is a `-` (U+002D), and\n\t\t\t\t// there is no second character, […]\n\t\t\t\tindex == 0 &&\n\t\t\t\tlength == 1 &&\n\t\t\t\tcodeUnit == 0x002D\n\t\t\t) {\n\t\t\t\tresult += '\\\\' + string.charAt(index);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If the character is not handled by one of the above rules and is\n\t\t\t// greater than or equal to U+0080, is `-` (U+002D) or `_` (U+005F), or\n\t\t\t// is in one of the ranges [0-9] (U+0030 to U+0039), [A-Z] (U+0041 to\n\t\t\t// U+005A), or [a-z] (U+0061 to U+007A), […]\n\t\t\tif (\n\t\t\t\tcodeUnit >= 0x0080 ||\n\t\t\t\tcodeUnit == 0x002D ||\n\t\t\t\tcodeUnit == 0x005F ||\n\t\t\t\tcodeUnit >= 0x0030 && codeUnit <= 0x0039 ||\n\t\t\t\tcodeUnit >= 0x0041 && codeUnit <= 0x005A ||\n\t\t\t\tcodeUnit >= 0x0061 && codeUnit <= 0x007A\n\t\t\t) {\n\t\t\t\t// the character itself\n\t\t\t\tresult += string.charAt(index);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Otherwise, the escaped character.\n\t\t\t// https://drafts.csswg.org/cssom/#escape-a-character\n\t\t\tresult += '\\\\' + string.charAt(index);\n\n\t\t}\n\t\treturn result;\n\t};\n\n\tif (!root.CSS) {\n\t\troot.CSS = {};\n\t}\n\n\troot.CSS.escape = cssEscape;\n\treturn cssEscape;\n\n}));\n","'use strict';\n\nvar matchOperatorsRe = /[|\\\\{}()[\\]^$+*?.]/g;\n\nmodule.exports = function (str) {\n\tif (typeof str !== 'string') {\n\t\tthrow new TypeError('Expected a string');\n\t}\n\n\treturn str.replace(matchOperatorsRe, '\\\\$&');\n};\n","\"use strict\";\n\nexports.__esModule = true;\nexports.applyTrailingSlashOption = void 0;\n\nconst applyTrailingSlashOption = (input, option = `always`) => {\n const hasHtmlSuffix = input.endsWith(`.html`);\n const hasXmlSuffix = input.endsWith(`.xml`);\n const hasPdfSuffix = input.endsWith(`.pdf`);\n if (input === `/`) return input;\n\n if (hasHtmlSuffix || hasXmlSuffix || hasPdfSuffix) {\n option = `never`;\n }\n\n if (option === `always`) {\n return input.endsWith(`/`) ? input : `${input}/`;\n }\n\n if (option === `never`) {\n return input.endsWith(`/`) ? input.slice(0, -1) : input;\n }\n\n return input;\n};\n\nexports.applyTrailingSlashOption = applyTrailingSlashOption;","\"use strict\";\n\nexports.__esModule = true;\nexports.useScrollRestoration = exports.ScrollContext = void 0;\n\nvar _scrollHandler = require(\"./scroll-handler\");\n\nexports.ScrollContext = _scrollHandler.ScrollHandler;\n\nvar _useScrollRestoration = require(\"./use-scroll-restoration\");\n\nexports.useScrollRestoration = _useScrollRestoration.useScrollRestoration;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports.ScrollHandler = exports.ScrollContext = void 0;\n\nvar _assertThisInitialized2 = _interopRequireDefault(require(\"@babel/runtime/helpers/assertThisInitialized\"));\n\nvar _inheritsLoose2 = _interopRequireDefault(require(\"@babel/runtime/helpers/inheritsLoose\"));\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _sessionStorage = require(\"./session-storage\");\n\nfunction _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== \"function\") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }\n\nfunction _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nvar ScrollContext = /*#__PURE__*/React.createContext(new _sessionStorage.SessionStorage());\nexports.ScrollContext = ScrollContext;\nScrollContext.displayName = \"GatsbyScrollContext\";\n\nvar ScrollHandler = /*#__PURE__*/function (_React$Component) {\n (0, _inheritsLoose2.default)(ScrollHandler, _React$Component);\n\n function ScrollHandler() {\n var _this;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n _this._stateStorage = new _sessionStorage.SessionStorage();\n _this._isTicking = false;\n _this._latestKnownScrollY = 0;\n\n _this.scrollListener = function () {\n _this._latestKnownScrollY = window.scrollY;\n\n if (!_this._isTicking) {\n _this._isTicking = true;\n requestAnimationFrame(_this._saveScroll.bind((0, _assertThisInitialized2.default)(_this)));\n }\n };\n\n _this.windowScroll = function (position, prevProps) {\n if (_this.shouldUpdateScroll(prevProps, _this.props)) {\n window.scrollTo(0, position);\n }\n };\n\n _this.scrollToHash = function (hash, prevProps) {\n var node = document.getElementById(hash.substring(1));\n\n if (node && _this.shouldUpdateScroll(prevProps, _this.props)) {\n node.scrollIntoView();\n }\n };\n\n _this.shouldUpdateScroll = function (prevRouterProps, routerProps) {\n var shouldUpdateScroll = _this.props.shouldUpdateScroll;\n\n if (!shouldUpdateScroll) {\n return true;\n } // Hack to allow accessing this._stateStorage.\n\n\n return shouldUpdateScroll.call((0, _assertThisInitialized2.default)(_this), prevRouterProps, routerProps);\n };\n\n return _this;\n }\n\n var _proto = ScrollHandler.prototype;\n\n _proto._saveScroll = function _saveScroll() {\n var key = this.props.location.key || null;\n\n if (key) {\n this._stateStorage.save(this.props.location, key, this._latestKnownScrollY);\n }\n\n this._isTicking = false;\n };\n\n _proto.componentDidMount = function componentDidMount() {\n window.addEventListener(\"scroll\", this.scrollListener);\n var scrollPosition;\n var _this$props$location = this.props.location,\n key = _this$props$location.key,\n hash = _this$props$location.hash;\n\n if (key) {\n scrollPosition = this._stateStorage.read(this.props.location, key);\n }\n\n if (scrollPosition) {\n this.windowScroll(scrollPosition, undefined);\n } else if (hash) {\n this.scrollToHash(decodeURI(hash), undefined);\n }\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n window.removeEventListener(\"scroll\", this.scrollListener);\n };\n\n _proto.componentDidUpdate = function componentDidUpdate(prevProps) {\n var _this$props$location2 = this.props.location,\n hash = _this$props$location2.hash,\n key = _this$props$location2.key;\n var scrollPosition;\n\n if (key) {\n scrollPosition = this._stateStorage.read(this.props.location, key);\n }\n /** There are two pieces of state: the browser url and\n * history state which keeps track of scroll position\n * Native behaviour prescribes that we ought to restore scroll position\n * when a user navigates back in their browser (this is the `POP` action)\n * Currently, reach router has a bug that prevents this at https://github.com/reach/router/issues/228\n * So we _always_ stick to the url as a source of truth — if the url\n * contains a hash, we scroll to it\n */\n\n\n if (hash) {\n this.scrollToHash(decodeURI(hash), prevProps);\n } else {\n this.windowScroll(scrollPosition, prevProps);\n }\n };\n\n _proto.render = function render() {\n return /*#__PURE__*/React.createElement(ScrollContext.Provider, {\n value: this._stateStorage\n }, this.props.children);\n };\n\n return ScrollHandler;\n}(React.Component);\n\nexports.ScrollHandler = ScrollHandler;\nScrollHandler.propTypes = {\n shouldUpdateScroll: _propTypes.default.func,\n children: _propTypes.default.element.isRequired,\n location: _propTypes.default.object.isRequired\n};","\"use strict\";\n\nexports.__esModule = true;\nexports.SessionStorage = void 0;\nvar STATE_KEY_PREFIX = \"@@scroll|\";\nvar GATSBY_ROUTER_SCROLL_STATE = \"___GATSBY_REACT_ROUTER_SCROLL\";\n\nvar SessionStorage = /*#__PURE__*/function () {\n function SessionStorage() {}\n\n var _proto = SessionStorage.prototype;\n\n _proto.read = function read(location, key) {\n var stateKey = this.getStateKey(location, key);\n\n try {\n var value = window.sessionStorage.getItem(stateKey);\n return value ? JSON.parse(value) : 0;\n } catch (e) {\n if (process.env.NODE_ENV !== \"production\") {\n console.warn(\"[gatsby-react-router-scroll] Unable to access sessionStorage; sessionStorage is not available.\");\n }\n\n if (window && window[GATSBY_ROUTER_SCROLL_STATE] && window[GATSBY_ROUTER_SCROLL_STATE][stateKey]) {\n return window[GATSBY_ROUTER_SCROLL_STATE][stateKey];\n }\n\n return 0;\n }\n };\n\n _proto.save = function save(location, key, value) {\n var stateKey = this.getStateKey(location, key);\n var storedValue = JSON.stringify(value);\n\n try {\n window.sessionStorage.setItem(stateKey, storedValue);\n } catch (e) {\n if (window && window[GATSBY_ROUTER_SCROLL_STATE]) {\n window[GATSBY_ROUTER_SCROLL_STATE][stateKey] = JSON.parse(storedValue);\n } else {\n window[GATSBY_ROUTER_SCROLL_STATE] = {};\n window[GATSBY_ROUTER_SCROLL_STATE][stateKey] = JSON.parse(storedValue);\n }\n\n if (process.env.NODE_ENV !== \"production\") {\n console.warn(\"[gatsby-react-router-scroll] Unable to save state in sessionStorage; sessionStorage is not available.\");\n }\n }\n };\n\n _proto.getStateKey = function getStateKey(location, key) {\n var stateKeyBase = \"\" + STATE_KEY_PREFIX + location.pathname;\n return key === null || typeof key === \"undefined\" ? stateKeyBase : stateKeyBase + \"|\" + key;\n };\n\n return SessionStorage;\n}();\n\nexports.SessionStorage = SessionStorage;","\"use strict\";\n\nexports.__esModule = true;\nexports.useScrollRestoration = useScrollRestoration;\n\nvar _scrollHandler = require(\"./scroll-handler\");\n\nvar _react = require(\"react\");\n\nvar _reachRouter = require(\"@gatsbyjs/reach-router\");\n\nfunction useScrollRestoration(identifier) {\n var location = (0, _reachRouter.useLocation)();\n var state = (0, _react.useContext)(_scrollHandler.ScrollContext);\n var ref = (0, _react.useRef)(null);\n (0, _react.useLayoutEffect)(function () {\n if (ref.current) {\n var position = state.read(location, identifier);\n ref.current.scrollTo(0, position || 0);\n }\n }, [location.key]);\n return {\n ref: ref,\n onScroll: function onScroll() {\n if (ref.current) {\n state.save(location, identifier, ref.current.scrollTop);\n }\n }\n };\n}","\"use strict\";\n\nexports.__esModule = true;\nexports.onInitialClientRender = void 0;\n\nvar _gatsbyScript = require(\"gatsby-script\");\n\nvar _injectPartytownSnippet = require(\"./utils/inject-partytown-snippet\");\n\n// Makes sure off-main-thread scripts are loaded in `gatsby develop`\nconst onInitialClientRender = () => {\n if (process.env.NODE_ENV !== `development`) {\n return;\n }\n\n (0, _injectPartytownSnippet.injectPartytownSnippet)(_gatsbyScript.collectedScriptsByPage.get(window.location.pathname)); // Clear scripts after we've used them to avoid leaky behavior\n\n _gatsbyScript.collectedScriptsByPage.delete(window.location.pathname);\n}; // Client-side navigation (CSR, e.g. Gatsby Link navigations) are broken upstream in Partytown.\n// We need an official API from Partytown for handling re-configuration and on-demand script loading.\n// Until then, `off-main-thread` scripts load only on server-side navigation (SSR).\n// See https://github.com/BuilderIO/partytown/issues/74 for more details.\n\n\nexports.onInitialClientRender = onInitialClientRender;\n//# sourceMappingURL=gatsby-browser.js.map","\"use strict\";\n\nexports.__esModule = true;\nexports.getForwards = getForwards;\n\nfunction getForwards(collectedScripts) {\n return collectedScripts === null || collectedScripts === void 0 ? void 0 : collectedScripts.flatMap(script => (script === null || script === void 0 ? void 0 : script.forward) || []);\n}\n//# sourceMappingURL=get-forwards.js.map","\"use strict\";\n\nexports.__esModule = true;\nexports.injectPartytownSnippet = injectPartytownSnippet;\n\nvar _integration = require(\"@builder.io/partytown/integration\");\n\nvar _getForwards = require(\"./get-forwards\");\n\n// Adapted from https://github.com/BuilderIO/partytown/blob/main/src/react/snippet.tsx to only include CSR logic\nfunction injectPartytownSnippet(collectedScripts) {\n if (!collectedScripts.length) {\n return;\n }\n\n const existingSnippet = document.querySelector(`script[data-partytown]`);\n const existingSandbox = document.querySelector(`iframe[src*=\"~partytown/partytown-sandbox-sw\"]`);\n\n if (existingSnippet) {\n existingSnippet.remove();\n }\n\n if (existingSandbox) {\n existingSandbox.remove();\n }\n\n const forwards = (0, _getForwards.getForwards)(collectedScripts);\n const snippet = document.createElement(`script`);\n snippet.dataset.partytown = ``;\n snippet.innerHTML = (0, _integration.partytownSnippet)({\n forward: forwards\n });\n document.head.appendChild(snippet);\n}\n//# sourceMappingURL=inject-partytown-snippet.js.map","exports.components = {\n \"component---src-pages-404-tsx\": () => import(\"./../../../src/pages/404.tsx\" /* webpackChunkName: \"component---src-pages-404-tsx\" */),\n \"component---src-pages-debug-redirects-tsx\": () => import(\"./../../../src/pages/debug/redirects.tsx\" /* webpackChunkName: \"component---src-pages-debug-redirects-tsx\" */),\n \"component---src-pages-index-tsx\": () => import(\"./../../../src/pages/index.tsx\" /* webpackChunkName: \"component---src-pages-index-tsx\" */),\n \"component---src-pages-locations-tsx\": () => import(\"./../../../src/pages/locations.tsx\" /* webpackChunkName: \"component---src-pages-locations-tsx\" */),\n \"component---src-pages-posters-tsx\": () => import(\"./../../../src/pages/posters.tsx\" /* webpackChunkName: \"component---src-pages-posters-tsx\" */),\n \"component---src-pages-speakers-tsx\": () => import(\"./../../../src/pages/speakers.tsx\" /* webpackChunkName: \"component---src-pages-speakers-tsx\" */),\n \"component---src-pages-tags-tsx\": () => import(\"./../../../src/pages/tags.tsx\" /* webpackChunkName: \"component---src-pages-tags-tsx\" */),\n \"component---src-pages-talks-tsx\": () => import(\"./../../../src/pages/talks.tsx\" /* webpackChunkName: \"component---src-pages-talks-tsx\" */),\n \"component---src-pages-unterstuetzer-tsx\": () => import(\"./../../../src/pages/unterstuetzer.tsx\" /* webpackChunkName: \"component---src-pages-unterstuetzer-tsx\" */),\n \"component---src-templates-location-page-tsx\": () => import(\"./../../../src/templates/location-page.tsx\" /* webpackChunkName: \"component---src-templates-location-page-tsx\" */),\n \"component---src-templates-speaker-page-tsx\": () => import(\"./../../../src/templates/speaker-page.tsx\" /* webpackChunkName: \"component---src-templates-speaker-page-tsx\" */),\n \"component---src-templates-static-page-tsx\": () => import(\"./../../../src/templates/static-page.tsx\" /* webpackChunkName: \"component---src-templates-static-page-tsx\" */),\n \"component---src-templates-talk-page-tsx\": () => import(\"./../../../src/templates/talk-page.tsx\" /* webpackChunkName: \"component---src-templates-talk-page-tsx\" */)\n}\n\n","module.exports = [{\n plugin: require('../node_modules/gatsby-remark-images/gatsby-browser.js'),\n options: {\"plugins\":[],\"maxWidth\":800,\"linkImagesToOriginal\":true,\"showCaptions\":false,\"markdownCaptions\":false,\"backgroundColor\":\"white\",\"quality\":50,\"withWebp\":false,\"withAvif\":false,\"tracedSVG\":false,\"loading\":\"lazy\",\"decoding\":\"async\",\"disableBgImageOnAlpha\":false,\"disableBgImage\":false},\n },{\n plugin: require('../node_modules/gatsby-plugin-catch-links/gatsby-browser.js'),\n options: {\"plugins\":[]},\n },{\n plugin: require('../node_modules/gatsby-plugin-typography/gatsby-browser.js'),\n options: {\"plugins\":[],\"pathToConfigModule\":\"src/utils/typography.ts\"},\n },{\n plugin: require('../node_modules/gatsby-plugin-manifest/gatsby-browser.js'),\n options: {\"plugins\":[],\"name\":\"JUG Görlitz\",\"short_name\":\"JUG Görlitz\",\"start_url\":\"/\",\"background_color\":\"#fff\",\"theme_color\":\"#337ab7\",\"display\":\"minimal-ui\",\"icon\":\"content/images/icon.png\",\"legacy\":true,\"theme_color_in_head\":true,\"cache_busting_mode\":\"query\",\"crossOrigin\":\"anonymous\",\"include_favicon\":true,\"cacheDigest\":\"2ded17e3b6b8ff05cfb961a4ec8d0c25\"},\n },{\n plugin: require('../gatsby-browser.ts'),\n options: {\"plugins\":[]},\n },{\n plugin: require('../node_modules/gatsby/dist/internal-plugins/partytown/gatsby-browser.js'),\n options: {\"plugins\":[]},\n }]\n","const plugins = require(`./api-runner-browser-plugins`)\nconst { getResourceURLsForPathname, loadPage, loadPageSync } =\n require(`./loader`).publicLoader\n\nexports.apiRunner = (api, args = {}, defaultReturn, argTransform) => {\n // Hooks for gatsby-cypress's API handler\n if (process.env.CYPRESS_SUPPORT) {\n if (window.___apiHandler) {\n window.___apiHandler(api)\n } else if (window.___resolvedAPIs) {\n window.___resolvedAPIs.push(api)\n } else {\n window.___resolvedAPIs = [api]\n }\n }\n\n let results = plugins.map(plugin => {\n if (!plugin.plugin[api]) {\n return undefined\n }\n\n args.getResourceURLsForPathname = getResourceURLsForPathname\n args.loadPage = loadPage\n args.loadPageSync = loadPageSync\n\n const result = plugin.plugin[api](args, plugin.options)\n if (result && argTransform) {\n args = argTransform({ args, result, plugin })\n }\n return result\n })\n\n // Filter out undefined results.\n results = results.filter(result => typeof result !== `undefined`)\n\n if (results.length > 0) {\n return results\n } else if (defaultReturn) {\n return [defaultReturn]\n } else {\n return []\n }\n}\n\nexports.apiRunnerAsync = (api, args, defaultReturn) =>\n plugins.reduce(\n (previous, next) =>\n next.plugin[api]\n ? previous.then(() => next.plugin[api](args, next.options))\n : previous,\n Promise.resolve()\n )\n","exports.createContentDigest = () => ``\n","import mitt from \"mitt\"\n\nconst emitter = mitt()\nexport default emitter\n","// \n// An event handler can take an optional event argument\n// and should not return a value\n \n \n\n// An array of all currently registered event handlers for a type\n \n \n// A map of event types and their corresponding event handlers.\n \n \n \n \n\n/** Mitt: Tiny (~200b) functional event emitter / pubsub.\n * @name mitt\n * @returns {Mitt}\n */\nfunction mitt(all ) {\n\tall = all || Object.create(null);\n\n\treturn {\n\t\t/**\n\t\t * Register an event handler for the given type.\n\t\t *\n\t\t * @param {String} type\tType of event to listen for, or `\"*\"` for all events\n\t\t * @param {Function} handler Function to call in response to given event\n\t\t * @memberOf mitt\n\t\t */\n\t\ton: function on(type , handler ) {\n\t\t\t(all[type] || (all[type] = [])).push(handler);\n\t\t},\n\n\t\t/**\n\t\t * Remove an event handler for the given type.\n\t\t *\n\t\t * @param {String} type\tType of event to unregister `handler` from, or `\"*\"`\n\t\t * @param {Function} handler Handler function to remove\n\t\t * @memberOf mitt\n\t\t */\n\t\toff: function off(type , handler ) {\n\t\t\tif (all[type]) {\n\t\t\t\tall[type].splice(all[type].indexOf(handler) >>> 0, 1);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Invoke all handlers for the given type.\n\t\t * If present, `\"*\"` handlers are invoked after type-matched handlers.\n\t\t *\n\t\t * @param {String} type The event type to invoke\n\t\t * @param {Any} [evt] Any value (object is recommended and powerful), passed to each handler\n\t\t * @memberOf mitt\n\t\t */\n\t\temit: function emit(type , evt ) {\n\t\t\t(all[type] || []).slice().map(function (handler) { handler(evt); });\n\t\t\t(all['*'] || []).slice().map(function (handler) { handler(type, evt); });\n\t\t}\n\t};\n}\n\nexport default mitt;\n//# sourceMappingURL=mitt.es.js.map\n","export default pathAndSearch => {\n if (pathAndSearch === undefined) {\n return pathAndSearch\n }\n let [path, search = ``] = pathAndSearch.split(`?`)\n if (search) {\n search = `?` + search\n }\n\n if (path === `/`) {\n return `/` + search\n }\n if (path.charAt(path.length - 1) === `/`) {\n return path.slice(0, -1) + search\n }\n return path + search\n}\n","import { pick } from \"@gatsbyjs/reach-router\"\nimport stripPrefix from \"./strip-prefix\"\nimport normalizePagePath from \"./normalize-page-path\"\nimport { maybeGetBrowserRedirect } from \"./redirect-utils.js\"\n\nconst pathCache = new Map()\nlet matchPaths = []\n\nconst trimPathname = rawPathname => {\n let newRawPathname = rawPathname\n const queryIndex = rawPathname.indexOf(`?`)\n\n if (queryIndex !== -1) {\n const [path, qs] = rawPathname.split(`?`)\n newRawPathname = `${path}?${encodeURIComponent(qs)}`\n }\n\n const pathname = decodeURIComponent(newRawPathname)\n\n // Remove the pathPrefix from the pathname.\n const trimmedPathname = stripPrefix(\n pathname,\n decodeURIComponent(__BASE_PATH__)\n )\n // Remove any hashfragment\n .split(`#`)[0]\n\n return trimmedPathname\n}\n\nfunction absolutify(path) {\n // If it's already absolute, return as-is\n if (\n path.startsWith(`/`) ||\n path.startsWith(`https://`) ||\n path.startsWith(`http://`)\n ) {\n return path\n }\n // Calculate path relative to current location, adding a trailing slash to\n // match behavior of @reach/router\n return new URL(\n path,\n window.location.href + (window.location.href.endsWith(`/`) ? `` : `/`)\n ).pathname\n}\n\n/**\n * Set list of matchPaths\n *\n * @param {Array<{path: string, matchPath: string}>} value collection of matchPaths\n */\nexport const setMatchPaths = value => {\n matchPaths = value\n}\n\n/**\n * Return a matchpath url\n * if `match-paths.json` contains `{ \"/foo*\": \"/page1\", ...}`, then\n * `/foo?bar=far` => `/page1`\n *\n * @param {string} rawPathname A raw pathname\n * @return {string|null}\n */\nexport const findMatchPath = rawPathname => {\n const trimmedPathname = cleanPath(rawPathname)\n\n const pickPaths = matchPaths.map(({ path, matchPath }) => {\n return {\n path: matchPath,\n originalPath: path,\n }\n })\n\n const path = pick(pickPaths, trimmedPathname)\n\n if (path) {\n return normalizePagePath(path.route.originalPath)\n }\n\n return null\n}\n\n/**\n * Return a matchpath params from reach/router rules\n * if `match-paths.json` contains `{ \":bar/*foo\" }`, and the path is /baz/zaz/zoo\n * then it returns\n * { bar: baz, foo: zaz/zoo }\n *\n * @param {string} rawPathname A raw pathname\n * @return {object}\n */\nexport const grabMatchParams = rawPathname => {\n const trimmedPathname = cleanPath(rawPathname)\n\n const pickPaths = matchPaths.map(({ path, matchPath }) => {\n return {\n path: matchPath,\n originalPath: path,\n }\n })\n\n const path = pick(pickPaths, trimmedPathname)\n\n if (path) {\n return path.params\n }\n\n return {}\n}\n\n// Given a raw URL path, returns the cleaned version of it (trim off\n// `#` and query params), or if it matches an entry in\n// `match-paths.json`, its matched path is returned\n//\n// E.g. `/foo?bar=far` => `/foo`\n//\n// Or if `match-paths.json` contains `{ \"/foo*\": \"/page1\", ...}`, then\n// `/foo?bar=far` => `/page1`\nexport const findPath = rawPathname => {\n const trimmedPathname = trimPathname(absolutify(rawPathname))\n if (pathCache.has(trimmedPathname)) {\n return pathCache.get(trimmedPathname)\n }\n\n const redirect = maybeGetBrowserRedirect(rawPathname)\n if (redirect) {\n return findPath(redirect.toPath)\n }\n\n let foundPath = findMatchPath(trimmedPathname)\n\n if (!foundPath) {\n foundPath = cleanPath(rawPathname)\n }\n\n pathCache.set(trimmedPathname, foundPath)\n\n return foundPath\n}\n\n/**\n * Clean a url and converts /index.html => /\n * E.g. `/foo?bar=far` => `/foo`\n *\n * @param {string} rawPathname A raw pathname\n * @return {string}\n */\nexport const cleanPath = rawPathname => {\n const trimmedPathname = trimPathname(absolutify(rawPathname))\n\n let foundPath = trimmedPathname\n if (foundPath === `/index.html`) {\n foundPath = `/`\n }\n\n foundPath = normalizePagePath(foundPath)\n\n return foundPath\n}\n","export default function _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}","export default function _isNativeReflectConstruct() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n try {\n Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n}","import setPrototypeOf from \"./setPrototypeOf.js\";\nimport isNativeReflectConstruct from \"./isNativeReflectConstruct.js\";\nexport default function _construct(Parent, args, Class) {\n if (isNativeReflectConstruct()) {\n _construct = Reflect.construct.bind();\n } else {\n _construct = function _construct(Parent, args, Class) {\n var a = [null];\n a.push.apply(a, args);\n var Constructor = Function.bind.apply(Parent, a);\n var instance = new Constructor();\n if (Class) setPrototypeOf(instance, Class.prototype);\n return instance;\n };\n }\n return _construct.apply(null, arguments);\n}","import getPrototypeOf from \"./getPrototypeOf.js\";\nimport setPrototypeOf from \"./setPrototypeOf.js\";\nimport isNativeFunction from \"./isNativeFunction.js\";\nimport construct from \"./construct.js\";\nexport default function _wrapNativeSuper(Class) {\n var _cache = typeof Map === \"function\" ? new Map() : undefined;\n _wrapNativeSuper = function _wrapNativeSuper(Class) {\n if (Class === null || !isNativeFunction(Class)) return Class;\n if (typeof Class !== \"function\") {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n if (typeof _cache !== \"undefined\") {\n if (_cache.has(Class)) return _cache.get(Class);\n _cache.set(Class, Wrapper);\n }\n function Wrapper() {\n return construct(Class, arguments, getPrototypeOf(this).constructor);\n }\n Wrapper.prototype = Object.create(Class.prototype, {\n constructor: {\n value: Wrapper,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n return setPrototypeOf(Wrapper, Class);\n };\n return _wrapNativeSuper(Class);\n}","export default function _isNativeFunction(fn) {\n return Function.toString.call(fn).indexOf(\"[native code]\") !== -1;\n}","import React from \"react\"\n\nexport const ServerSliceRenderer = ({ sliceId, children }) => {\n const contents = [\n React.createElement(`slice-start`, {\n id: `${sliceId}-1`,\n }),\n React.createElement(`slice-end`, {\n id: `${sliceId}-1`,\n }),\n ]\n\n if (children) {\n // if children exist, we split the slice into a before and after piece\n // see renderSlices in render-html\n contents.push(children)\n contents.push(\n React.createElement(`slice-start`, {\n id: `${sliceId}-2`,\n }),\n React.createElement(`slice-end`, {\n id: `${sliceId}-2`,\n })\n )\n }\n\n return contents\n}\n","import React, { useContext } from \"react\"\nimport { createContentDigest } from \"gatsby-core-utils/create-content-digest\"\nimport { SlicesMapContext, SlicesPropsContext } from \"./context\"\nimport { ServerSliceRenderer } from \"./server-slice-renderer\"\n\nconst getSliceId = (sliceName, sliceProps) => {\n if (!Object.keys(sliceProps).length) {\n return sliceName\n }\n\n const propsString = createContentDigest(sliceProps)\n return `${sliceName}-${propsString}`\n}\n\nexport const ServerSlice = ({\n sliceName,\n allowEmpty,\n children,\n ...sliceProps\n}) => {\n const slicesMap = useContext(SlicesMapContext)\n const slicesProps = useContext(SlicesPropsContext)\n const concreteSliceName = slicesMap[sliceName]\n\n if (!concreteSliceName) {\n if (allowEmpty) {\n return null\n } else {\n throw new Error(\n `Slice \"${concreteSliceName}\" for \"${sliceName}\" slot not found`\n )\n }\n }\n\n const sliceId = getSliceId(concreteSliceName, sliceProps)\n\n // set props on context object for static-entry to return\n let sliceUsage = slicesProps[sliceId]\n if (!sliceUsage) {\n slicesProps[sliceId] = sliceUsage = {\n props: sliceProps,\n sliceName: concreteSliceName,\n hasChildren: !!children,\n }\n } else {\n if (children) {\n sliceUsage.hasChildren = true\n }\n }\n\n return {children}\n}\n","import React, { useContext } from \"react\"\nimport { SlicesMapContext, SlicesResultsContext } from \"./context\"\n\nexport const InlineSlice = ({\n sliceName,\n allowEmpty,\n children,\n ...sliceProps\n}) => {\n const slicesMap = useContext(SlicesMapContext)\n const slicesResultsMap = useContext(SlicesResultsContext)\n const concreteSliceName = slicesMap[sliceName]\n const slice = slicesResultsMap.get(concreteSliceName)\n\n if (!slice) {\n if (allowEmpty) {\n return null\n } else {\n throw new Error(\n `Slice \"${concreteSliceName}\" for \"${sliceName}\" slot not found`\n )\n }\n }\n\n return (\n \n {children}\n \n )\n}\n","\"use client\"\n\nimport React, { useContext } from \"react\"\nimport { ServerSlice } from \"./slice/server-slice\"\nimport { InlineSlice } from \"./slice/inline-slice\"\nimport { SlicesContext } from \"./slice/context\"\n\nexport function Slice(props) {\n if (process.env.GATSBY_SLICES) {\n // we use sliceName internally, so remap alias to sliceName\n const internalProps = {\n ...props,\n sliceName: props.alias,\n }\n delete internalProps.alias\n delete internalProps.__renderedByLocation\n\n const slicesContext = useContext(SlicesContext)\n\n // validate props\n const propErrors = validateSliceProps(props)\n if (Object.keys(propErrors).length) {\n throw new SlicePropsError(\n slicesContext.renderEnvironment === `browser`,\n internalProps.sliceName,\n propErrors,\n props.__renderedByLocation\n )\n }\n\n if (slicesContext.renderEnvironment === `server`) {\n return \n } else if (slicesContext.renderEnvironment === `browser`) {\n // in the browser, we'll just render the component as is\n return \n } else if (slicesContext.renderEnvironment === `engines`) {\n // if we're in SSR, we'll just render the component as is\n return \n } else if (slicesContext.renderEnvironment === `slices`) {\n // we are not yet supporting nested slices\n\n let additionalContextMessage = ``\n\n // just in case generating additional contextual information fails, we still want the base message to show\n // and not show another cryptic error message\n try {\n additionalContextMessage = `\\n\\nSlice component \"${slicesContext.sliceRoot.name}\" (${slicesContext.sliceRoot.componentPath}) tried to render `\n } catch {\n // don't need to handle it, we will just skip the additional context message if we fail to generate it\n }\n\n throw new Error(\n `Nested slices are not supported.${additionalContextMessage}\\n\\nSee https://v5.gatsbyjs.com/docs/reference/built-in-components/gatsby-slice#nested-slices`\n )\n } else {\n throw new Error(\n `Slice context \"${slicesContext.renderEnvironment}\" is not supported.`\n )\n }\n } else {\n throw new Error(`Slices are disabled.`)\n }\n}\n\nclass SlicePropsError extends Error {\n constructor(inBrowser, sliceName, propErrors, renderedByLocation) {\n const errors = Object.entries(propErrors)\n .map(\n ([key, value]) =>\n `not serializable \"${value}\" type passed to \"${key}\" prop`\n )\n .join(`, `)\n\n const name = `SlicePropsError`\n let stack = ``\n let message = ``\n\n if (inBrowser) {\n // They're just (kinda) kidding, I promise... You can still work here <3\n // https://www.gatsbyjs.com/careers/\n const fullStack =\n React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactDebugCurrentFrame.getCurrentStack()\n\n // remove the first line of the stack trace\n const stackLines = fullStack.trim().split(`\\n`).slice(1)\n stackLines[0] = stackLines[0].trim()\n stack = `\\n` + stackLines.join(`\\n`)\n\n message = `Slice \"${sliceName}\" was passed props that are not serializable (${errors}).`\n } else {\n // we can't really grab any extra info outside of the browser, so just print what we can\n message = `${name}: Slice \"${sliceName}\" was passed props that are not serializable (${errors}).`\n const stackLines = new Error().stack.trim().split(`\\n`).slice(2)\n stack = `${message}\\n${stackLines.join(`\\n`)}`\n }\n\n super(message)\n this.name = name\n if (stack) {\n this.stack = stack\n } else {\n Error.captureStackTrace(this, SlicePropsError)\n }\n\n if (renderedByLocation) {\n this.forcedLocation = { ...renderedByLocation, functionName: `Slice` }\n }\n }\n}\n\nconst validateSliceProps = (\n props,\n errors = {},\n seenObjects = [],\n path = null\n) => {\n // recursively validate all props\n for (const [name, value] of Object.entries(props)) {\n if (\n value === undefined ||\n value === null ||\n (!path && name === `children`)\n ) {\n continue\n }\n\n const propPath = path ? `${path}.${name}` : name\n\n if (typeof value === `function`) {\n errors[propPath] = typeof value\n } else if (typeof value === `object` && seenObjects.indexOf(value) <= 0) {\n seenObjects.push(value)\n validateSliceProps(value, errors, seenObjects, propPath)\n }\n }\n\n return errors\n}\n","import loader from \"./loader\"\n\nconst prefetchPathname = loader.enqueue\n\nfunction graphql() {\n throw new Error(\n `It appears like Gatsby is misconfigured. Gatsby related \\`graphql\\` calls ` +\n `are supposed to only be evaluated at compile time, and then compiled away. ` +\n `Unfortunately, something went wrong and the query was left in the compiled code.\\n\\n` +\n `Unless your site has a complex or custom babel/Gatsby configuration this is likely a bug in Gatsby.`\n )\n}\n\nexport { default as PageRenderer } from \"./public-page-renderer\"\nexport { useScrollRestoration } from \"gatsby-react-router-scroll\"\nexport {\n Link,\n withPrefix,\n withAssetPrefix,\n navigate,\n parsePath,\n} from \"gatsby-link\"\n\nexport { graphql, prefetchPathname }\nexport { StaticQuery, StaticQueryContext, useStaticQuery } from \"./static-query\"\nexport { Slice } from \"./slice\"\nexport * from \"gatsby-script\"\n","export default function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n return arr2;\n}","import arrayWithoutHoles from \"./arrayWithoutHoles.js\";\nimport iterableToArray from \"./iterableToArray.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableSpread from \"./nonIterableSpread.js\";\nexport default function _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();\n}","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nexport default function _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return arrayLikeToArray(arr);\n}","export default function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nexport default function _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}","export default function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","const support = function (feature) {\n if (typeof document === `undefined`) {\n return false\n }\n const fakeLink = document.createElement(`link`)\n try {\n if (fakeLink.relList && typeof fakeLink.relList.supports === `function`) {\n return fakeLink.relList.supports(feature)\n }\n } catch (err) {\n return false\n }\n return false\n}\n\nconst linkPrefetchStrategy = function (url, options) {\n return new Promise((resolve, reject) => {\n if (typeof document === `undefined`) {\n reject()\n return\n }\n\n const link = document.createElement(`link`)\n link.setAttribute(`rel`, `prefetch`)\n link.setAttribute(`href`, url)\n\n Object.keys(options).forEach(key => {\n link.setAttribute(key, options[key])\n })\n\n link.onload = resolve\n link.onerror = reject\n\n const parentElement =\n document.getElementsByTagName(`head`)[0] ||\n document.getElementsByName(`script`)[0].parentNode\n parentElement.appendChild(link)\n })\n}\n\nconst xhrPrefetchStrategy = function (url) {\n return new Promise((resolve, reject) => {\n const req = new XMLHttpRequest()\n req.open(`GET`, url, true)\n\n req.onload = () => {\n if (req.status === 200) {\n resolve()\n } else {\n reject()\n }\n }\n\n req.send(null)\n })\n}\n\nconst supportedPrefetchStrategy = support(`prefetch`)\n ? linkPrefetchStrategy\n : xhrPrefetchStrategy\n\nconst preFetched = {}\n\nconst prefetch = function (url, options) {\n return new Promise(resolve => {\n if (preFetched[url]) {\n resolve()\n return\n }\n\n supportedPrefetchStrategy(url, options)\n .then(() => {\n resolve()\n preFetched[url] = true\n })\n .catch(() => {}) // 404s are logged to the console anyway\n })\n}\n\nexport default prefetch\n","import { createFromReadableStream } from \"react-server-dom-webpack\"\nimport prefetchHelper from \"./prefetch\"\nimport emitter from \"./emitter\"\nimport { setMatchPaths, findPath, findMatchPath } from \"./find-path\"\n\n/**\n * Available resource loading statuses\n */\nexport const PageResourceStatus = {\n /**\n * At least one of critical resources failed to load\n */\n Error: `error`,\n /**\n * Resources loaded successfully\n */\n Success: `success`,\n}\n\nconst preferDefault = m => (m && m.default) || m\n\nconst stripSurroundingSlashes = s => {\n s = s[0] === `/` ? s.slice(1) : s\n s = s.endsWith(`/`) ? s.slice(0, -1) : s\n return s\n}\n\nconst createPageDataUrl = rawPath => {\n const [path, maybeSearch] = rawPath.split(`?`)\n const fixedPath = path === `/` ? `index` : stripSurroundingSlashes(path)\n return `${__PATH_PREFIX__}/page-data/${fixedPath}/page-data.json${\n maybeSearch ? `?${maybeSearch}` : ``\n }`\n}\n\nfunction doFetch(url, method = `GET`) {\n return new Promise(resolve => {\n const req = new XMLHttpRequest()\n req.open(method, url, true)\n req.onreadystatechange = () => {\n if (req.readyState == 4) {\n resolve(req)\n }\n }\n req.send(null)\n })\n}\n\nconst doesConnectionSupportPrefetch = () => {\n if (\n `connection` in navigator &&\n typeof navigator.connection !== `undefined`\n ) {\n if ((navigator.connection.effectiveType || ``).includes(`2g`)) {\n return false\n }\n if (navigator.connection.saveData) {\n return false\n }\n }\n return true\n}\n\n// Regex that matches common search crawlers\nconst BOT_REGEX = /bot|crawler|spider|crawling/i\n\nconst toPageResources = (pageData, component = null, head) => {\n const page = {\n componentChunkName: pageData.componentChunkName,\n path: pageData.path,\n webpackCompilationHash: pageData.webpackCompilationHash,\n matchPath: pageData.matchPath,\n staticQueryHashes: pageData.staticQueryHashes,\n getServerDataError: pageData.getServerDataError,\n slicesMap: pageData.slicesMap ?? {},\n }\n\n return {\n component,\n head,\n json: pageData.result,\n page,\n }\n}\n\nfunction waitForResponse(response) {\n return new Promise(resolve => {\n try {\n const result = response.readRoot()\n resolve(result)\n } catch (err) {\n if (\n Object.hasOwnProperty.call(err, `_response`) &&\n Object.hasOwnProperty.call(err, `_status`)\n ) {\n setTimeout(() => {\n waitForResponse(response).then(resolve)\n }, 200)\n } else {\n throw err\n }\n }\n })\n}\n\nexport class BaseLoader {\n constructor(loadComponent, matchPaths) {\n // Map of pagePath -> Page. Where Page is an object with: {\n // status: PageResourceStatus.Success || PageResourceStatus.Error,\n // payload: PageResources, // undefined if PageResourceStatus.Error\n // }\n // PageResources is {\n // component,\n // json: pageData.result,\n // page: {\n // componentChunkName,\n // path,\n // webpackCompilationHash,\n // staticQueryHashes\n // },\n // staticQueryResults\n // }\n this.pageDb = new Map()\n this.inFlightDb = new Map()\n this.staticQueryDb = {}\n this.pageDataDb = new Map()\n this.partialHydrationDb = new Map()\n this.slicesDataDb = new Map()\n this.sliceInflightDb = new Map()\n this.slicesDb = new Map()\n this.isPrefetchQueueRunning = false\n this.prefetchQueued = []\n this.prefetchTriggered = new Set()\n this.prefetchCompleted = new Set()\n this.loadComponent = loadComponent\n setMatchPaths(matchPaths)\n }\n\n inFlightNetworkRequests = new Map()\n\n memoizedGet(url) {\n let inFlightPromise = this.inFlightNetworkRequests.get(url)\n\n if (!inFlightPromise) {\n inFlightPromise = doFetch(url, `GET`)\n this.inFlightNetworkRequests.set(url, inFlightPromise)\n }\n\n // Prefer duplication with then + catch over .finally to prevent problems in ie11 + firefox\n return inFlightPromise\n .then(response => {\n this.inFlightNetworkRequests.delete(url)\n return response\n })\n .catch(err => {\n this.inFlightNetworkRequests.delete(url)\n throw err\n })\n }\n\n setApiRunner(apiRunner) {\n this.apiRunner = apiRunner\n this.prefetchDisabled = apiRunner(`disableCorePrefetching`).some(a => a)\n }\n\n fetchPageDataJson(loadObj) {\n const { pagePath, retries = 0 } = loadObj\n const url = createPageDataUrl(pagePath)\n return this.memoizedGet(url).then(req => {\n const { status, responseText } = req\n\n // Handle 200\n if (status === 200) {\n try {\n const jsonPayload = JSON.parse(responseText)\n if (jsonPayload.path === undefined) {\n throw new Error(`not a valid pageData response`)\n }\n\n const maybeSearch = pagePath.split(`?`)[1]\n if (maybeSearch && !jsonPayload.path.includes(maybeSearch)) {\n jsonPayload.path += `?${maybeSearch}`\n }\n\n return Object.assign(loadObj, {\n status: PageResourceStatus.Success,\n payload: jsonPayload,\n })\n } catch (err) {\n // continue regardless of error\n }\n }\n\n // Handle 404\n if (status === 404 || status === 200) {\n // If the request was for a 404/500 page and it doesn't exist, we're done\n if (pagePath === `/404.html` || pagePath === `/500.html`) {\n return Object.assign(loadObj, {\n status: PageResourceStatus.Error,\n })\n }\n\n // Need some code here to cache the 404 request. In case\n // multiple loadPageDataJsons result in 404s\n return this.fetchPageDataJson(\n Object.assign(loadObj, { pagePath: `/404.html`, notFound: true })\n )\n }\n\n // handle 500 response (Unrecoverable)\n if (status === 500) {\n return this.fetchPageDataJson(\n Object.assign(loadObj, {\n pagePath: `/500.html`,\n internalServerError: true,\n })\n )\n }\n\n // Handle everything else, including status === 0, and 503s. Should retry\n if (retries < 3) {\n return this.fetchPageDataJson(\n Object.assign(loadObj, { retries: retries + 1 })\n )\n }\n\n // Retried 3 times already, result is an error.\n return Object.assign(loadObj, {\n status: PageResourceStatus.Error,\n })\n })\n }\n\n fetchPartialHydrationJson(loadObj) {\n const { pagePath, retries = 0 } = loadObj\n const url = createPageDataUrl(pagePath).replace(`.json`, `-rsc.json`)\n return this.memoizedGet(url).then(req => {\n const { status, responseText } = req\n\n // Handle 200\n if (status === 200) {\n try {\n return Object.assign(loadObj, {\n status: PageResourceStatus.Success,\n payload: responseText,\n })\n } catch (err) {\n // continue regardless of error\n }\n }\n\n // Handle 404\n if (status === 404 || status === 200) {\n // If the request was for a 404/500 page and it doesn't exist, we're done\n if (pagePath === `/404.html` || pagePath === `/500.html`) {\n return Object.assign(loadObj, {\n status: PageResourceStatus.Error,\n })\n }\n\n // Need some code here to cache the 404 request. In case\n // multiple loadPageDataJsons result in 404s\n return this.fetchPartialHydrationJson(\n Object.assign(loadObj, { pagePath: `/404.html`, notFound: true })\n )\n }\n\n // handle 500 response (Unrecoverable)\n if (status === 500) {\n return this.fetchPartialHydrationJson(\n Object.assign(loadObj, {\n pagePath: `/500.html`,\n internalServerError: true,\n })\n )\n }\n\n // Handle everything else, including status === 0, and 503s. Should retry\n if (retries < 3) {\n return this.fetchPartialHydrationJson(\n Object.assign(loadObj, { retries: retries + 1 })\n )\n }\n\n // Retried 3 times already, result is an error.\n return Object.assign(loadObj, {\n status: PageResourceStatus.Error,\n })\n })\n }\n\n loadPageDataJson(rawPath) {\n const pagePath = findPath(rawPath)\n if (this.pageDataDb.has(pagePath)) {\n const pageData = this.pageDataDb.get(pagePath)\n if (process.env.BUILD_STAGE !== `develop` || !pageData.stale) {\n return Promise.resolve(pageData)\n }\n }\n\n return this.fetchPageDataJson({ pagePath }).then(pageData => {\n this.pageDataDb.set(pagePath, pageData)\n\n return pageData\n })\n }\n\n loadPartialHydrationJson(rawPath) {\n const pagePath = findPath(rawPath)\n if (this.partialHydrationDb.has(pagePath)) {\n const pageData = this.partialHydrationDb.get(pagePath)\n if (process.env.BUILD_STAGE !== `develop` || !pageData.stale) {\n return Promise.resolve(pageData)\n }\n }\n\n return this.fetchPartialHydrationJson({ pagePath }).then(pageData => {\n this.partialHydrationDb.set(pagePath, pageData)\n\n return pageData\n })\n }\n\n loadSliceDataJson(sliceName) {\n if (this.slicesDataDb.has(sliceName)) {\n const jsonPayload = this.slicesDataDb.get(sliceName)\n return Promise.resolve({ sliceName, jsonPayload })\n }\n\n const url = `/slice-data/${sliceName}.json`\n return doFetch(url, `GET`).then(res => {\n const jsonPayload = JSON.parse(res.responseText)\n\n this.slicesDataDb.set(sliceName, jsonPayload)\n return { sliceName, jsonPayload }\n })\n }\n\n findMatchPath(rawPath) {\n return findMatchPath(rawPath)\n }\n\n // TODO check all uses of this and whether they use undefined for page resources not exist\n loadPage(rawPath) {\n const pagePath = findPath(rawPath)\n if (this.pageDb.has(pagePath)) {\n const page = this.pageDb.get(pagePath)\n if (process.env.BUILD_STAGE !== `develop` || !page.payload.stale) {\n if (page.error) {\n return {\n error: page.error,\n status: page.status,\n }\n }\n\n return Promise.resolve(page.payload)\n }\n }\n\n if (this.inFlightDb.has(pagePath)) {\n return this.inFlightDb.get(pagePath)\n }\n\n const loadDataPromises = [\n this.loadAppData(),\n this.loadPageDataJson(pagePath),\n ]\n\n if (global.hasPartialHydration) {\n loadDataPromises.push(this.loadPartialHydrationJson(pagePath))\n }\n\n const inFlightPromise = Promise.all(loadDataPromises).then(allData => {\n const [appDataResponse, pageDataResponse, rscDataResponse] = allData\n\n if (\n pageDataResponse.status === PageResourceStatus.Error ||\n rscDataResponse?.status === PageResourceStatus.Error\n ) {\n return {\n status: PageResourceStatus.Error,\n }\n }\n\n let pageData = pageDataResponse.payload\n\n const {\n componentChunkName,\n staticQueryHashes: pageStaticQueryHashes = [],\n slicesMap = {},\n } = pageData\n\n const finalResult = {}\n\n const dedupedSliceNames = Array.from(new Set(Object.values(slicesMap)))\n\n const loadSlice = slice => {\n if (this.slicesDb.has(slice.name)) {\n return this.slicesDb.get(slice.name)\n } else if (this.sliceInflightDb.has(slice.name)) {\n return this.sliceInflightDb.get(slice.name)\n }\n\n const inFlight = this.loadComponent(slice.componentChunkName).then(\n component => {\n return {\n component: preferDefault(component),\n sliceContext: slice.result.sliceContext,\n data: slice.result.data,\n }\n }\n )\n\n this.sliceInflightDb.set(slice.name, inFlight)\n inFlight.then(results => {\n this.slicesDb.set(slice.name, results)\n this.sliceInflightDb.delete(slice.name)\n })\n\n return inFlight\n }\n\n return Promise.all(\n dedupedSliceNames.map(sliceName => this.loadSliceDataJson(sliceName))\n ).then(slicesData => {\n const slices = []\n const dedupedStaticQueryHashes = [...pageStaticQueryHashes]\n\n for (const { jsonPayload, sliceName } of Object.values(slicesData)) {\n slices.push({ name: sliceName, ...jsonPayload })\n for (const staticQueryHash of jsonPayload.staticQueryHashes) {\n if (!dedupedStaticQueryHashes.includes(staticQueryHash)) {\n dedupedStaticQueryHashes.push(staticQueryHash)\n }\n }\n }\n\n const loadChunkPromises = [\n Promise.all(slices.map(loadSlice)),\n this.loadComponent(componentChunkName, `head`),\n ]\n\n if (!global.hasPartialHydration) {\n loadChunkPromises.push(this.loadComponent(componentChunkName))\n }\n\n // In develop we have separate chunks for template and Head components\n // to enable HMR (fast refresh requires single exports).\n // In production we have shared chunk with both exports. Double loadComponent here\n // will be deduped by webpack runtime resulting in single request and single module\n // being loaded for both `component` and `head`.\n // get list of components to get\n const componentChunkPromises = Promise.all(loadChunkPromises).then(\n components => {\n const [sliceComponents, headComponent, pageComponent] = components\n\n finalResult.createdAt = new Date()\n\n for (const sliceComponent of sliceComponents) {\n if (!sliceComponent || sliceComponent instanceof Error) {\n finalResult.status = PageResourceStatus.Error\n finalResult.error = sliceComponent\n }\n }\n\n if (\n !global.hasPartialHydration &&\n (!pageComponent || pageComponent instanceof Error)\n ) {\n finalResult.status = PageResourceStatus.Error\n finalResult.error = pageComponent\n }\n\n let pageResources\n\n if (finalResult.status !== PageResourceStatus.Error) {\n finalResult.status = PageResourceStatus.Success\n if (\n pageDataResponse.notFound === true ||\n rscDataResponse?.notFound === true\n ) {\n finalResult.notFound = true\n }\n pageData = Object.assign(pageData, {\n webpackCompilationHash: appDataResponse\n ? appDataResponse.webpackCompilationHash\n : ``,\n })\n\n if (typeof rscDataResponse?.payload === `string`) {\n pageResources = toPageResources(pageData, null, headComponent)\n\n pageResources.partialHydration = rscDataResponse.payload\n\n const readableStream = new ReadableStream({\n start(controller) {\n const te = new TextEncoder()\n controller.enqueue(te.encode(rscDataResponse.payload))\n },\n pull(controller) {\n // close on next read when queue is empty\n controller.close()\n },\n cancel() {},\n })\n\n return waitForResponse(\n createFromReadableStream(readableStream)\n ).then(result => {\n pageResources.partialHydration = result\n\n return pageResources\n })\n } else {\n pageResources = toPageResources(\n pageData,\n pageComponent,\n headComponent\n )\n }\n }\n\n // undefined if final result is an error\n return pageResources\n }\n )\n\n // get list of static queries to get\n const staticQueryBatchPromise = Promise.all(\n dedupedStaticQueryHashes.map(staticQueryHash => {\n // Check for cache in case this static query result has already been loaded\n if (this.staticQueryDb[staticQueryHash]) {\n const jsonPayload = this.staticQueryDb[staticQueryHash]\n return { staticQueryHash, jsonPayload }\n }\n\n return this.memoizedGet(\n `${__PATH_PREFIX__}/page-data/sq/d/${staticQueryHash}.json`\n )\n .then(req => {\n const jsonPayload = JSON.parse(req.responseText)\n return { staticQueryHash, jsonPayload }\n })\n .catch(() => {\n throw new Error(\n `We couldn't load \"${__PATH_PREFIX__}/page-data/sq/d/${staticQueryHash}.json\"`\n )\n })\n })\n ).then(staticQueryResults => {\n const staticQueryResultsMap = {}\n\n staticQueryResults.forEach(({ staticQueryHash, jsonPayload }) => {\n staticQueryResultsMap[staticQueryHash] = jsonPayload\n this.staticQueryDb[staticQueryHash] = jsonPayload\n })\n\n return staticQueryResultsMap\n })\n\n return (\n Promise.all([componentChunkPromises, staticQueryBatchPromise])\n .then(([pageResources, staticQueryResults]) => {\n let payload\n if (pageResources) {\n payload = { ...pageResources, staticQueryResults }\n finalResult.payload = payload\n emitter.emit(`onPostLoadPageResources`, {\n page: payload,\n pageResources: payload,\n })\n }\n\n this.pageDb.set(pagePath, finalResult)\n\n if (finalResult.error) {\n return {\n error: finalResult.error,\n status: finalResult.status,\n }\n }\n\n return payload\n })\n // when static-query fail to load we throw a better error\n .catch(err => {\n return {\n error: err,\n status: PageResourceStatus.Error,\n }\n })\n )\n })\n })\n\n inFlightPromise\n .then(() => {\n this.inFlightDb.delete(pagePath)\n })\n .catch(error => {\n this.inFlightDb.delete(pagePath)\n throw error\n })\n\n this.inFlightDb.set(pagePath, inFlightPromise)\n\n return inFlightPromise\n }\n\n // returns undefined if the page does not exists in cache\n loadPageSync(rawPath, options = {}) {\n const pagePath = findPath(rawPath)\n if (this.pageDb.has(pagePath)) {\n const pageData = this.pageDb.get(pagePath)\n\n if (pageData.payload) {\n return pageData.payload\n }\n\n if (options?.withErrorDetails) {\n return {\n error: pageData.error,\n status: pageData.status,\n }\n }\n }\n return undefined\n }\n\n shouldPrefetch(pagePath) {\n // Skip prefetching if we know user is on slow or constrained connection\n if (!doesConnectionSupportPrefetch()) {\n return false\n }\n\n // Don't prefetch if this is a crawler bot\n if (navigator.userAgent && BOT_REGEX.test(navigator.userAgent)) {\n return false\n }\n\n // Check if the page exists.\n if (this.pageDb.has(pagePath)) {\n return false\n }\n\n return true\n }\n\n prefetch(pagePath) {\n if (!this.shouldPrefetch(pagePath)) {\n return {\n then: resolve => resolve(false),\n abort: () => {},\n }\n }\n if (this.prefetchTriggered.has(pagePath)) {\n return {\n then: resolve => resolve(true),\n abort: () => {},\n }\n }\n\n const defer = {\n resolve: null,\n reject: null,\n promise: null,\n }\n defer.promise = new Promise((resolve, reject) => {\n defer.resolve = resolve\n defer.reject = reject\n })\n this.prefetchQueued.push([pagePath, defer])\n const abortC = new AbortController()\n abortC.signal.addEventListener(`abort`, () => {\n const index = this.prefetchQueued.findIndex(([p]) => p === pagePath)\n // remove from the queue\n if (index !== -1) {\n this.prefetchQueued.splice(index, 1)\n }\n })\n\n if (!this.isPrefetchQueueRunning) {\n this.isPrefetchQueueRunning = true\n setTimeout(() => {\n this._processNextPrefetchBatch()\n }, 3000)\n }\n\n return {\n then: (resolve, reject) => defer.promise.then(resolve, reject),\n abort: abortC.abort.bind(abortC),\n }\n }\n\n _processNextPrefetchBatch() {\n const idleCallback = window.requestIdleCallback || (cb => setTimeout(cb, 0))\n\n idleCallback(() => {\n const toPrefetch = this.prefetchQueued.splice(0, 4)\n const prefetches = Promise.all(\n toPrefetch.map(([pagePath, dPromise]) => {\n // Tell plugins with custom prefetching logic that they should start\n // prefetching this path.\n if (!this.prefetchTriggered.has(pagePath)) {\n this.apiRunner(`onPrefetchPathname`, { pathname: pagePath })\n this.prefetchTriggered.add(pagePath)\n }\n\n // If a plugin has disabled core prefetching, stop now.\n if (this.prefetchDisabled) {\n return dPromise.resolve(false)\n }\n\n return this.doPrefetch(findPath(pagePath)).then(() => {\n if (!this.prefetchCompleted.has(pagePath)) {\n this.apiRunner(`onPostPrefetchPathname`, { pathname: pagePath })\n this.prefetchCompleted.add(pagePath)\n }\n\n dPromise.resolve(true)\n })\n })\n )\n\n if (this.prefetchQueued.length) {\n prefetches.then(() => {\n setTimeout(() => {\n this._processNextPrefetchBatch()\n }, 3000)\n })\n } else {\n this.isPrefetchQueueRunning = false\n }\n })\n }\n\n doPrefetch(pagePath) {\n const pageDataUrl = createPageDataUrl(pagePath)\n\n if (global.hasPartialHydration) {\n return Promise.all([\n prefetchHelper(pageDataUrl, {\n crossOrigin: `anonymous`,\n as: `fetch`,\n }).then(() =>\n // This was just prefetched, so will return a response from\n // the cache instead of making another request to the server\n this.loadPageDataJson(pagePath)\n ),\n prefetchHelper(pageDataUrl.replace(`.json`, `-rsc.json`), {\n crossOrigin: `anonymous`,\n as: `fetch`,\n }).then(() =>\n // This was just prefetched, so will return a response from\n // the cache instead of making another request to the server\n this.loadPartialHydrationJson(pagePath)\n ),\n ])\n } else {\n return prefetchHelper(pageDataUrl, {\n crossOrigin: `anonymous`,\n as: `fetch`,\n }).then(() =>\n // This was just prefetched, so will return a response from\n // the cache instead of making another request to the server\n this.loadPageDataJson(pagePath)\n )\n }\n }\n\n hovering(rawPath) {\n this.loadPage(rawPath)\n }\n\n getResourceURLsForPathname(rawPath) {\n const pagePath = findPath(rawPath)\n const page = this.pageDataDb.get(pagePath)\n if (page) {\n const pageResources = toPageResources(page.payload)\n\n return [\n ...createComponentUrls(pageResources.page.componentChunkName),\n createPageDataUrl(pagePath),\n ]\n } else {\n return null\n }\n }\n\n isPageNotFound(rawPath) {\n const pagePath = findPath(rawPath)\n const page = this.pageDb.get(pagePath)\n return !page || page.notFound\n }\n\n loadAppData(retries = 0) {\n return this.memoizedGet(`${__PATH_PREFIX__}/page-data/app-data.json`).then(\n req => {\n const { status, responseText } = req\n\n let appData\n\n if (status !== 200 && retries < 3) {\n // Retry 3 times incase of non-200 responses\n return this.loadAppData(retries + 1)\n }\n\n // Handle 200\n if (status === 200) {\n try {\n const jsonPayload = JSON.parse(responseText)\n if (jsonPayload.webpackCompilationHash === undefined) {\n throw new Error(`not a valid app-data response`)\n }\n\n appData = jsonPayload\n } catch (err) {\n // continue regardless of error\n }\n }\n\n return appData\n }\n )\n }\n}\n\nconst createComponentUrls = componentChunkName =>\n (window.___chunkMapping[componentChunkName] || []).map(\n chunk => __PATH_PREFIX__ + chunk\n )\n\nexport class ProdLoader extends BaseLoader {\n constructor(asyncRequires, matchPaths, pageData) {\n const loadComponent = (chunkName, exportType = `components`) => {\n if (!global.hasPartialHydration) {\n exportType = `components`\n }\n\n if (!asyncRequires[exportType][chunkName]) {\n throw new Error(\n `We couldn't find the correct component chunk with the name \"${chunkName}\"`\n )\n }\n\n return (\n asyncRequires[exportType][chunkName]()\n // loader will handle the case when component is error\n .catch(err => err)\n )\n }\n\n super(loadComponent, matchPaths)\n\n if (pageData) {\n this.pageDataDb.set(findPath(pageData.path), {\n pagePath: pageData.path,\n payload: pageData,\n status: `success`,\n })\n }\n }\n\n doPrefetch(pagePath) {\n return super.doPrefetch(pagePath).then(result => {\n if (result.status !== PageResourceStatus.Success) {\n return Promise.resolve()\n }\n const pageData = result.payload\n const chunkName = pageData.componentChunkName\n const componentUrls = createComponentUrls(chunkName)\n return Promise.all(componentUrls.map(prefetchHelper)).then(() => pageData)\n })\n }\n\n loadPageDataJson(rawPath) {\n return super.loadPageDataJson(rawPath).then(data => {\n if (data.notFound) {\n // check if html file exist using HEAD request:\n // if it does we should navigate to it instead of showing 404\n return doFetch(rawPath, `HEAD`).then(req => {\n if (req.status === 200) {\n // page (.html file) actually exist (or we asked for 404 )\n // returning page resources status as errored to trigger\n // regular browser navigation to given page\n return {\n status: PageResourceStatus.Error,\n }\n }\n\n // if HEAD request wasn't 200, return notFound result\n // and show 404 page\n return data\n })\n }\n return data\n })\n }\n\n loadPartialHydrationJson(rawPath) {\n return super.loadPartialHydrationJson(rawPath).then(data => {\n if (data.notFound) {\n // check if html file exist using HEAD request:\n // if it does we should navigate to it instead of showing 404\n return doFetch(rawPath, `HEAD`).then(req => {\n if (req.status === 200) {\n // page (.html file) actually exist (or we asked for 404 )\n // returning page resources status as errored to trigger\n // regular browser navigation to given page\n return {\n status: PageResourceStatus.Error,\n }\n }\n\n // if HEAD request wasn't 200, return notFound result\n // and show 404 page\n return data\n })\n }\n return data\n })\n }\n}\n\nlet instance\n\nexport const setLoader = _loader => {\n instance = _loader\n}\n\nexport const publicLoader = {\n enqueue: rawPath => instance.prefetch(rawPath),\n\n // Real methods\n getResourceURLsForPathname: rawPath =>\n instance.getResourceURLsForPathname(rawPath),\n loadPage: rawPath => instance.loadPage(rawPath),\n // TODO add deprecation to v4 so people use withErrorDetails and then we can remove in v5 and change default behaviour\n loadPageSync: (rawPath, options = {}) =>\n instance.loadPageSync(rawPath, options),\n prefetch: rawPath => instance.prefetch(rawPath),\n isPageNotFound: rawPath => instance.isPageNotFound(rawPath),\n hovering: rawPath => instance.hovering(rawPath),\n loadAppData: () => instance.loadAppData(),\n}\n\nexport default publicLoader\n\nexport function getStaticQueryResults() {\n if (instance) {\n return instance.staticQueryDb\n } else {\n return {}\n }\n}\n\nexport function getSliceResults() {\n if (instance) {\n return instance.slicesDb\n } else {\n return {}\n }\n}\n","import { useEffect } from \"react\"\n\n/*\n * Calls callback in an effect and renders children\n */\nexport function FireCallbackInEffect({ children, callback }) {\n useEffect(() => {\n callback()\n })\n\n return children\n}\n","export const VALID_NODE_NAMES = [\n `link`,\n `meta`,\n `style`,\n `title`,\n `base`,\n `noscript`,\n `script`,\n]\n","import { VALID_NODE_NAMES } from \"./constants\"\n\n/**\n * Filter the props coming from a page down to just the ones that are relevant for head.\n * This e.g. filters out properties that are undefined during SSR.\n */\nexport function filterHeadProps(input) {\n return {\n location: {\n pathname: input.location.pathname,\n },\n params: input.params,\n data: input.data || {},\n pageContext: input.pageContext,\n }\n}\n\n/**\n * Throw error if Head export is not a valid\n */\nexport function headExportValidator(head) {\n if (typeof head !== `function`)\n throw new Error(\n `Expected \"Head\" export to be a function got \"${typeof head}\".`\n )\n}\n\n/**\n * Warn once for same messsage\n */\nlet warnOnce = _ => {}\nif (process.env.NODE_ENV !== `production`) {\n const warnings = new Set()\n warnOnce = msg => {\n if (!warnings.has(msg)) {\n console.warn(msg)\n }\n warnings.add(msg)\n }\n}\n\n/**\n * Warn for invalid tags in head.\n * @param {string} tagName\n */\nexport function warnForInvalidTags(tagName) {\n if (process.env.NODE_ENV !== `production`) {\n const warning = `<${tagName}> is not a valid head element. Please use one of the following: ${VALID_NODE_NAMES.join(\n `, `\n )}`\n\n warnOnce(warning)\n }\n}\n\n/**\n * When a `nonce` is present on an element, browsers such as Chrome and Firefox strip it out of the\n * actual HTML attributes for security reasons *when the element is added to the document*. Thus,\n * given two equivalent elements that have nonces, `Element,isEqualNode()` will return false if one\n * of those elements gets added to the document. Although the `element.nonce` property will be the\n * same for both elements, the one that was added to the document will return an empty string for\n * its nonce HTML attribute value.\n *\n * This custom `isEqualNode()` function therefore removes the nonce value from the `newTag` before\n * comparing it to `oldTag`, restoring it afterwards.\n *\n * For more information, see:\n * https://bugs.chromium.org/p/chromium/issues/detail?id=1211471#c12\n */\nexport function isEqualNode(oldTag, newTag) {\n if (oldTag instanceof HTMLElement && newTag instanceof HTMLElement) {\n const nonce = newTag.getAttribute(`nonce`)\n // Only strip the nonce if `oldTag` has had it stripped. An element's nonce attribute will not\n // be stripped if there is no content security policy response header that includes a nonce.\n if (nonce && !oldTag.getAttribute(`nonce`)) {\n const cloneTag = newTag.cloneNode(true)\n cloneTag.setAttribute(`nonce`, ``)\n cloneTag.nonce = nonce\n return nonce === oldTag.nonce && oldTag.isEqualNode(cloneTag)\n }\n }\n\n return oldTag.isEqualNode(newTag)\n}\n\nexport function diffNodes({ oldNodes, newNodes, onStale, onNew }) {\n for (const existingHeadElement of oldNodes) {\n const indexInNewNodes = newNodes.findIndex(e =>\n isEqualNode(e, existingHeadElement)\n )\n\n if (indexInNewNodes === -1) {\n onStale(existingHeadElement)\n } else {\n // this node is re-created as-is, so we keep old node, and remove it from list of new nodes (as we handled it already here)\n newNodes.splice(indexInNewNodes, 1)\n }\n }\n\n // remaing new nodes didn't have matching old node, so need to be added\n for (const newNode of newNodes) {\n onNew(newNode)\n }\n}\n","import React from \"react\"\nimport { useEffect } from \"react\"\nimport { StaticQueryContext } from \"gatsby\"\nimport { LocationProvider } from \"@gatsbyjs/reach-router\"\nimport { reactDOMUtils } from \"../react-dom-utils\"\nimport { FireCallbackInEffect } from \"./components/fire-callback-in-effect\"\nimport { VALID_NODE_NAMES } from \"./constants\"\nimport {\n headExportValidator,\n filterHeadProps,\n warnForInvalidTags,\n diffNodes,\n} from \"./utils\"\n\nconst hiddenRoot = document.createElement(`div`)\n\nconst removePrevHeadElements = () => {\n const prevHeadNodes = document.querySelectorAll(`[data-gatsby-head]`)\n\n for (const node of prevHeadNodes) {\n node.parentNode.removeChild(node)\n }\n}\n\nconst onHeadRendered = () => {\n const validHeadNodes = []\n\n const seenIds = new Map()\n for (const node of hiddenRoot.childNodes) {\n const nodeName = node.nodeName.toLowerCase()\n const id = node.attributes?.id?.value\n\n if (!VALID_NODE_NAMES.includes(nodeName)) {\n warnForInvalidTags(nodeName)\n } else {\n let clonedNode = node.cloneNode(true)\n clonedNode.setAttribute(`data-gatsby-head`, true)\n\n // Create an element for scripts to make script work\n if (clonedNode.nodeName.toLowerCase() === `script`) {\n const script = document.createElement(`script`)\n for (const attr of clonedNode.attributes) {\n script.setAttribute(attr.name, attr.value)\n }\n script.innerHTML = clonedNode.innerHTML\n clonedNode = script\n }\n\n if (id) {\n if (!seenIds.has(id)) {\n validHeadNodes.push(clonedNode)\n seenIds.set(id, validHeadNodes.length - 1)\n } else {\n const indexOfPreviouslyInsertedNode = seenIds.get(id)\n validHeadNodes[indexOfPreviouslyInsertedNode].parentNode?.removeChild(\n validHeadNodes[indexOfPreviouslyInsertedNode]\n )\n validHeadNodes[indexOfPreviouslyInsertedNode] = clonedNode\n }\n } else {\n validHeadNodes.push(clonedNode)\n }\n }\n }\n\n const existingHeadElements = document.querySelectorAll(`[data-gatsby-head]`)\n\n if (existingHeadElements.length === 0) {\n document.head.append(...validHeadNodes)\n return\n }\n\n const newHeadNodes = []\n diffNodes({\n oldNodes: existingHeadElements,\n newNodes: validHeadNodes,\n onStale: node => node.parentNode.removeChild(node),\n onNew: node => newHeadNodes.push(node),\n })\n\n document.head.append(...newHeadNodes)\n}\n\nif (process.env.BUILD_STAGE === `develop`) {\n // We set up observer to be able to regenerate after react-refresh\n // updates our hidden element.\n const observer = new MutationObserver(onHeadRendered)\n observer.observe(hiddenRoot, {\n attributes: true,\n childList: true,\n characterData: true,\n subtree: true,\n })\n}\n\nexport function headHandlerForBrowser({\n pageComponent,\n staticQueryResults,\n pageComponentProps,\n}) {\n useEffect(() => {\n if (pageComponent?.Head) {\n headExportValidator(pageComponent.Head)\n\n const { render } = reactDOMUtils()\n\n const Head = pageComponent.Head\n\n render(\n // just a hack to call the callback after react has done first render\n // Note: In dev, we call onHeadRendered twice( in FireCallbackInEffect and after mutualution observer dectects initail render into hiddenRoot) this is for hot reloading\n // In Prod we only call onHeadRendered in FireCallbackInEffect to render to head\n \n \n \n \n \n \n ,\n hiddenRoot\n )\n }\n\n return () => {\n removePrevHeadElements()\n }\n })\n}\n","import React, { Suspense, createElement } from \"react\"\nimport PropTypes from \"prop-types\"\nimport { apiRunner } from \"./api-runner-browser\"\nimport { grabMatchParams } from \"./find-path\"\nimport { headHandlerForBrowser } from \"./head/head-export-handler-for-browser\"\n\n// Renders page\nfunction PageRenderer(props) {\n const pageComponentProps = {\n ...props,\n params: {\n ...grabMatchParams(props.location.pathname),\n ...props.pageResources.json.pageContext.__params,\n },\n }\n\n const preferDefault = m => (m && m.default) || m\n\n let pageElement\n if (props.pageResources.partialHydration) {\n pageElement = props.pageResources.partialHydration\n } else {\n pageElement = createElement(preferDefault(props.pageResources.component), {\n ...pageComponentProps,\n key: props.path || props.pageResources.page.path,\n })\n }\n\n const pageComponent = props.pageResources.head\n\n headHandlerForBrowser({\n pageComponent,\n staticQueryResults: props.pageResources.staticQueryResults,\n pageComponentProps,\n })\n\n const wrappedPage = apiRunner(\n `wrapPageElement`,\n {\n element: pageElement,\n props: pageComponentProps,\n },\n pageElement,\n ({ result }) => {\n return { element: result, props: pageComponentProps }\n }\n ).pop()\n\n return wrappedPage\n}\n\nPageRenderer.propTypes = {\n location: PropTypes.object.isRequired,\n pageResources: PropTypes.object.isRequired,\n data: PropTypes.object,\n pageContext: PropTypes.object.isRequired,\n}\n\nexport default PageRenderer\n","// This is extracted to separate module because it's shared\n// between browser and SSR code\nexport const RouteAnnouncerProps = {\n id: `gatsby-announcer`,\n style: {\n position: `absolute`,\n top: 0,\n width: 1,\n height: 1,\n padding: 0,\n overflow: `hidden`,\n clip: `rect(0, 0, 0, 0)`,\n whiteSpace: `nowrap`,\n border: 0,\n },\n \"aria-live\": `assertive`,\n \"aria-atomic\": `true`,\n}\n","import React from \"react\"\nimport PropTypes from \"prop-types\"\nimport loader, { PageResourceStatus } from \"./loader\"\nimport { maybeGetBrowserRedirect } from \"./redirect-utils.js\"\nimport { apiRunner } from \"./api-runner-browser\"\nimport emitter from \"./emitter\"\nimport { RouteAnnouncerProps } from \"./route-announcer-props\"\nimport {\n navigate as reachNavigate,\n globalHistory,\n} from \"@gatsbyjs/reach-router\"\nimport { parsePath } from \"gatsby-link\"\n\nfunction maybeRedirect(pathname) {\n const redirect = maybeGetBrowserRedirect(pathname)\n const { hash, search } = window.location\n\n if (redirect != null) {\n window.___replace(redirect.toPath + search + hash)\n return true\n } else {\n return false\n }\n}\n\n// Catch unhandled chunk loading errors and force a restart of the app.\nlet nextRoute = ``\n\nwindow.addEventListener(`unhandledrejection`, event => {\n if (/loading chunk \\d* failed./i.test(event.reason)) {\n if (nextRoute) {\n window.location.pathname = nextRoute\n }\n }\n})\n\nconst onPreRouteUpdate = (location, prevLocation) => {\n if (!maybeRedirect(location.pathname)) {\n nextRoute = location.pathname\n apiRunner(`onPreRouteUpdate`, { location, prevLocation })\n }\n}\n\nconst onRouteUpdate = (location, prevLocation) => {\n if (!maybeRedirect(location.pathname)) {\n apiRunner(`onRouteUpdate`, { location, prevLocation })\n if (\n process.env.GATSBY_QUERY_ON_DEMAND &&\n process.env.GATSBY_QUERY_ON_DEMAND_LOADING_INDICATOR === `true`\n ) {\n emitter.emit(`onRouteUpdate`, { location, prevLocation })\n }\n }\n}\n\nconst navigate = (to, options = {}) => {\n // Support forward/backward navigation with numbers\n // navigate(-2) (jumps back 2 history steps)\n // navigate(2) (jumps forward 2 history steps)\n if (typeof to === `number`) {\n globalHistory.navigate(to)\n return\n }\n\n const { pathname, search, hash } = parsePath(to)\n const redirect = maybeGetBrowserRedirect(pathname)\n\n // If we're redirecting, just replace the passed in pathname\n // to the one we want to redirect to.\n if (redirect) {\n to = redirect.toPath + search + hash\n }\n\n // If we had a service worker update, no matter the path, reload window and\n // reset the pathname whitelist\n if (window.___swUpdated) {\n window.location = pathname + search + hash\n return\n }\n\n // Start a timer to wait for a second before transitioning and showing a\n // loader in case resources aren't around yet.\n const timeoutId = setTimeout(() => {\n emitter.emit(`onDelayedLoadPageResources`, { pathname })\n apiRunner(`onRouteUpdateDelayed`, {\n location: window.location,\n })\n }, 1000)\n\n loader.loadPage(pathname + search).then(pageResources => {\n // If no page resources, then refresh the page\n // Do this, rather than simply `window.location.reload()`, so that\n // pressing the back/forward buttons work - otherwise when pressing\n // back, the browser will just change the URL and expect JS to handle\n // the change, which won't always work since it might not be a Gatsby\n // page.\n if (!pageResources || pageResources.status === PageResourceStatus.Error) {\n window.history.replaceState({}, ``, location.href)\n window.location = pathname\n clearTimeout(timeoutId)\n return\n }\n\n // If the loaded page has a different compilation hash to the\n // window, then a rebuild has occurred on the server. Reload.\n if (process.env.NODE_ENV === `production` && pageResources) {\n if (\n pageResources.page.webpackCompilationHash !==\n window.___webpackCompilationHash\n ) {\n // Purge plugin-offline cache\n if (\n `serviceWorker` in navigator &&\n navigator.serviceWorker.controller !== null &&\n navigator.serviceWorker.controller.state === `activated`\n ) {\n navigator.serviceWorker.controller.postMessage({\n gatsbyApi: `clearPathResources`,\n })\n }\n\n window.location = pathname + search + hash\n }\n }\n reachNavigate(to, options)\n clearTimeout(timeoutId)\n })\n}\n\nfunction shouldUpdateScroll(prevRouterProps, { location }) {\n const { pathname, hash } = location\n const results = apiRunner(`shouldUpdateScroll`, {\n prevRouterProps,\n // `pathname` for backwards compatibility\n pathname,\n routerProps: { location },\n getSavedScrollPosition: args => [\n 0,\n // FIXME this is actually a big code smell, we should fix this\n // eslint-disable-next-line @babel/no-invalid-this\n this._stateStorage.read(args, args.key),\n ],\n })\n if (results.length > 0) {\n // Use the latest registered shouldUpdateScroll result, this allows users to override plugin's configuration\n // @see https://github.com/gatsbyjs/gatsby/issues/12038\n return results[results.length - 1]\n }\n\n if (prevRouterProps) {\n const {\n location: { pathname: oldPathname },\n } = prevRouterProps\n if (oldPathname === pathname) {\n // Scroll to element if it exists, if it doesn't, or no hash is provided,\n // scroll to top.\n return hash ? decodeURI(hash.slice(1)) : [0, 0]\n }\n }\n return true\n}\n\nfunction init() {\n // The \"scroll-behavior\" package expects the \"action\" to be on the location\n // object so let's copy it over.\n globalHistory.listen(args => {\n args.location.action = args.action\n })\n\n window.___push = to => navigate(to, { replace: false })\n window.___replace = to => navigate(to, { replace: true })\n window.___navigate = (to, options) => navigate(to, options)\n}\n\nclass RouteAnnouncer extends React.Component {\n constructor(props) {\n super(props)\n this.announcementRef = React.createRef()\n }\n\n componentDidUpdate(prevProps, nextProps) {\n requestAnimationFrame(() => {\n let pageName = `new page at ${this.props.location.pathname}`\n if (document.title) {\n pageName = document.title\n }\n const pageHeadings = document.querySelectorAll(`#gatsby-focus-wrapper h1`)\n if (pageHeadings && pageHeadings.length) {\n pageName = pageHeadings[0].textContent\n }\n const newAnnouncement = `Navigated to ${pageName}`\n if (this.announcementRef.current) {\n const oldAnnouncement = this.announcementRef.current.innerText\n if (oldAnnouncement !== newAnnouncement) {\n this.announcementRef.current.innerText = newAnnouncement\n }\n }\n })\n }\n\n render() {\n return
\n }\n}\n\nconst compareLocationProps = (prevLocation, nextLocation) => {\n if (prevLocation.href !== nextLocation.href) {\n return true\n }\n\n if (prevLocation?.state?.key !== nextLocation?.state?.key) {\n return true\n }\n\n return false\n}\n\n// Fire on(Pre)RouteUpdate APIs\nclass RouteUpdates extends React.Component {\n constructor(props) {\n super(props)\n onPreRouteUpdate(props.location, null)\n }\n\n componentDidMount() {\n onRouteUpdate(this.props.location, null)\n }\n\n shouldComponentUpdate(prevProps) {\n if (compareLocationProps(prevProps.location, this.props.location)) {\n onPreRouteUpdate(this.props.location, prevProps.location)\n return true\n }\n return false\n }\n\n componentDidUpdate(prevProps) {\n if (compareLocationProps(prevProps.location, this.props.location)) {\n onRouteUpdate(this.props.location, prevProps.location)\n }\n }\n\n render() {\n return (\n \n {this.props.children}\n \n \n )\n }\n}\n\nRouteUpdates.propTypes = {\n location: PropTypes.object.isRequired,\n}\n\nexport { init, shouldUpdateScroll, RouteUpdates, maybeGetBrowserRedirect }\n","// Pulled from react-compat\n// https://github.com/developit/preact-compat/blob/7c5de00e7c85e2ffd011bf3af02899b63f699d3a/src/index.js#L349\nfunction shallowDiffers(a, b) {\n for (var i in a) {\n if (!(i in b)) return true;\n }for (var _i in b) {\n if (a[_i] !== b[_i]) return true;\n }return false;\n}\n\nexport default (function (instance, nextProps, nextState) {\n return shallowDiffers(instance.props, nextProps) || shallowDiffers(instance.state, nextState);\n});","import React from \"react\"\nimport loader, { PageResourceStatus } from \"./loader\"\nimport shallowCompare from \"shallow-compare\"\n\nclass EnsureResources extends React.Component {\n constructor(props) {\n super()\n const { location, pageResources } = props\n this.state = {\n location: { ...location },\n pageResources:\n pageResources ||\n loader.loadPageSync(location.pathname + location.search, {\n withErrorDetails: true,\n }),\n }\n }\n\n static getDerivedStateFromProps({ location }, prevState) {\n if (prevState.location.href !== location.href) {\n const pageResources = loader.loadPageSync(\n location.pathname + location.search,\n {\n withErrorDetails: true,\n }\n )\n\n return {\n pageResources,\n location: { ...location },\n }\n }\n\n return {\n location: { ...location },\n }\n }\n\n loadResources(rawPath) {\n loader.loadPage(rawPath).then(pageResources => {\n if (pageResources && pageResources.status !== PageResourceStatus.Error) {\n this.setState({\n location: { ...window.location },\n pageResources,\n })\n } else {\n window.history.replaceState({}, ``, location.href)\n window.location = rawPath\n }\n })\n }\n\n shouldComponentUpdate(nextProps, nextState) {\n // Always return false if we're missing resources.\n if (!nextState.pageResources) {\n this.loadResources(\n nextProps.location.pathname + nextProps.location.search\n )\n return false\n }\n\n if (\n process.env.BUILD_STAGE === `develop` &&\n nextState.pageResources.stale\n ) {\n this.loadResources(\n nextProps.location.pathname + nextProps.location.search\n )\n return false\n }\n\n // Check if the component or json have changed.\n if (this.state.pageResources !== nextState.pageResources) {\n return true\n }\n if (\n this.state.pageResources.component !== nextState.pageResources.component\n ) {\n return true\n }\n\n if (this.state.pageResources.json !== nextState.pageResources.json) {\n return true\n }\n // Check if location has changed on a page using internal routing\n // via matchPath configuration.\n if (\n this.state.location.key !== nextState.location.key &&\n nextState.pageResources.page &&\n (nextState.pageResources.page.matchPath ||\n nextState.pageResources.page.path)\n ) {\n return true\n }\n return shallowCompare(this, nextProps, nextState)\n }\n\n render() {\n if (\n process.env.NODE_ENV !== `production` &&\n (!this.state.pageResources ||\n this.state.pageResources.status === PageResourceStatus.Error)\n ) {\n const message = `EnsureResources was not able to find resources for path: \"${this.props.location.pathname}\"\nThis typically means that an issue occurred building components for that path.\nRun \\`gatsby clean\\` to remove any cached elements.`\n if (this.state.pageResources?.error) {\n console.error(message)\n throw this.state.pageResources.error\n }\n\n throw new Error(message)\n }\n\n return this.props.children(this.state)\n }\n}\n\nexport default EnsureResources\n","import { apiRunner, apiRunnerAsync } from \"./api-runner-browser\"\nimport React from \"react\"\nimport { Router, navigate, Location, BaseContext } from \"@gatsbyjs/reach-router\"\nimport { ScrollContext } from \"gatsby-react-router-scroll\"\nimport { StaticQueryContext } from \"./static-query\"\nimport {\n SlicesMapContext,\n SlicesContext,\n SlicesResultsContext,\n} from \"./slice/context\"\nimport {\n shouldUpdateScroll,\n init as navigationInit,\n RouteUpdates,\n} from \"./navigation\"\nimport emitter from \"./emitter\"\nimport PageRenderer from \"./page-renderer\"\nimport asyncRequires from \"$virtual/async-requires\"\nimport {\n setLoader,\n ProdLoader,\n publicLoader,\n PageResourceStatus,\n getStaticQueryResults,\n getSliceResults,\n} from \"./loader\"\nimport EnsureResources from \"./ensure-resources\"\nimport stripPrefix from \"./strip-prefix\"\n\n// Generated during bootstrap\nimport matchPaths from \"$virtual/match-paths.json\"\nimport { reactDOMUtils } from \"./react-dom-utils\"\n\nconst loader = new ProdLoader(asyncRequires, matchPaths, window.pageData)\nsetLoader(loader)\nloader.setApiRunner(apiRunner)\n\nconst { render, hydrate } = reactDOMUtils()\n\nwindow.asyncRequires = asyncRequires\nwindow.___emitter = emitter\nwindow.___loader = publicLoader\n\nnavigationInit()\n\nconst reloadStorageKey = `gatsby-reload-compilation-hash-match`\n\napiRunnerAsync(`onClientEntry`).then(() => {\n // Let plugins register a service worker. The plugin just needs\n // to return true.\n if (apiRunner(`registerServiceWorker`).filter(Boolean).length > 0) {\n require(`./register-service-worker`)\n }\n\n // In gatsby v2 if Router is used in page using matchPaths\n // paths need to contain full path.\n // For example:\n // - page have `/app/*` matchPath\n // - inside template user needs to use `/app/xyz` as path\n // Resetting `basepath`/`baseuri` keeps current behaviour\n // to not introduce breaking change.\n // Remove this in v3\n const RouteHandler = props => (\n \n \n \n )\n\n const DataContext = React.createContext({})\n\n const slicesContext = {\n renderEnvironment: `browser`,\n }\n\n class GatsbyRoot extends React.Component {\n render() {\n const { children } = this.props\n return (\n \n {({ location }) => (\n \n {({ pageResources, location }) => {\n const staticQueryResults = getStaticQueryResults()\n const sliceResults = getSliceResults()\n\n return (\n \n \n \n \n \n {children}\n \n \n \n \n \n )\n }}\n \n )}\n \n )\n }\n }\n\n class LocationHandler extends React.Component {\n render() {\n return (\n \n {({ pageResources, location }) => (\n \n \n \n \n
\n \n \n )}\n \n )\n }\n }\n\n const { pagePath, location: browserLoc } = window\n\n // Explicitly call navigate if the canonical path (window.pagePath)\n // is different to the browser path (window.location.pathname). SSR\n // page paths might include search params, while SSG and DSG won't.\n // If page path include search params we also compare query params.\n // But only if NONE of the following conditions hold:\n //\n // - The url matches a client side route (page.matchPath)\n // - it's a 404 page\n // - it's the offline plugin shell (/offline-plugin-app-shell-fallback/)\n if (\n pagePath &&\n __BASE_PATH__ + pagePath !==\n browserLoc.pathname + (pagePath.includes(`?`) ? browserLoc.search : ``) &&\n !(\n loader.findMatchPath(stripPrefix(browserLoc.pathname, __BASE_PATH__)) ||\n pagePath.match(/^\\/(404|500)(\\/?|.html)$/) ||\n pagePath.match(/^\\/offline-plugin-app-shell-fallback\\/?$/)\n )\n ) {\n navigate(\n __BASE_PATH__ +\n pagePath +\n (!pagePath.includes(`?`) ? browserLoc.search : ``) +\n browserLoc.hash,\n {\n replace: true,\n }\n )\n }\n\n // It's possible that sessionStorage can throw an exception if access is not granted, see https://github.com/gatsbyjs/gatsby/issues/34512\n const getSessionStorage = () => {\n try {\n return sessionStorage\n } catch {\n return null\n }\n }\n\n publicLoader.loadPage(browserLoc.pathname + browserLoc.search).then(page => {\n const sessionStorage = getSessionStorage()\n\n if (\n page?.page?.webpackCompilationHash &&\n page.page.webpackCompilationHash !== window.___webpackCompilationHash\n ) {\n // Purge plugin-offline cache\n if (\n `serviceWorker` in navigator &&\n navigator.serviceWorker.controller !== null &&\n navigator.serviceWorker.controller.state === `activated`\n ) {\n navigator.serviceWorker.controller.postMessage({\n gatsbyApi: `clearPathResources`,\n })\n }\n\n // We have not matching html + js (inlined `window.___webpackCompilationHash`)\n // with our data (coming from `app-data.json` file). This can cause issues such as\n // errors trying to load static queries (as list of static queries is inside `page-data`\n // which might not match to currently loaded `.js` scripts).\n // We are making attempt to reload if hashes don't match, but we also have to handle case\n // when reload doesn't fix it (possibly broken deploy) so we don't end up in infinite reload loop\n if (sessionStorage) {\n const isReloaded = sessionStorage.getItem(reloadStorageKey) === `1`\n\n if (!isReloaded) {\n sessionStorage.setItem(reloadStorageKey, `1`)\n window.location.reload(true)\n return\n }\n }\n }\n\n if (sessionStorage) {\n sessionStorage.removeItem(reloadStorageKey)\n }\n\n if (!page || page.status === PageResourceStatus.Error) {\n const message = `page resources for ${browserLoc.pathname} not found. Not rendering React`\n\n // if the chunk throws an error we want to capture the real error\n // This should help with https://github.com/gatsbyjs/gatsby/issues/19618\n if (page && page.error) {\n console.error(message)\n throw page.error\n }\n\n throw new Error(message)\n }\n\n const SiteRoot = apiRunner(\n `wrapRootElement`,\n { element: },\n ,\n ({ result }) => {\n return { element: result }\n }\n ).pop()\n\n const App = function App() {\n const onClientEntryRanRef = React.useRef(false)\n\n React.useEffect(() => {\n if (!onClientEntryRanRef.current) {\n onClientEntryRanRef.current = true\n if (performance.mark) {\n performance.mark(`onInitialClientRender`)\n }\n\n apiRunner(`onInitialClientRender`)\n }\n }, [])\n\n return {SiteRoot}\n }\n\n const focusEl = document.getElementById(`gatsby-focus-wrapper`)\n\n // Client only pages have any empty body so we just do a normal\n // render to avoid React complaining about hydration mis-matches.\n let defaultRenderer = render\n if (focusEl && focusEl.children.length) {\n defaultRenderer = hydrate\n }\n\n const renderer = apiRunner(\n `replaceHydrateFunction`,\n undefined,\n defaultRenderer\n )[0]\n\n function runRender() {\n const rootElement =\n typeof window !== `undefined`\n ? document.getElementById(`___gatsby`)\n : null\n\n renderer(, rootElement)\n }\n\n // https://github.com/madrobby/zepto/blob/b5ed8d607f67724788ec9ff492be297f64d47dfc/src/zepto.js#L439-L450\n // TODO remove IE 10 support\n const doc = document\n if (\n doc.readyState === `complete` ||\n (doc.readyState !== `loading` && !doc.documentElement.doScroll)\n ) {\n setTimeout(function () {\n runRender()\n }, 0)\n } else {\n const handler = function () {\n doc.removeEventListener(`DOMContentLoaded`, handler, false)\n window.removeEventListener(`load`, handler, false)\n\n runRender()\n }\n\n doc.addEventListener(`DOMContentLoaded`, handler, false)\n window.addEventListener(`load`, handler, false)\n }\n\n return\n })\n})\n","import React from \"react\"\nimport PropTypes from \"prop-types\"\n\nimport loader from \"./loader\"\nimport InternalPageRenderer from \"./page-renderer\"\n\nconst ProdPageRenderer = ({ location }) => {\n const pageResources = loader.loadPageSync(location.pathname)\n if (!pageResources) {\n return null\n }\n return React.createElement(InternalPageRenderer, {\n location,\n pageResources,\n ...pageResources.json,\n })\n}\n\nProdPageRenderer.propTypes = {\n location: PropTypes.shape({\n pathname: PropTypes.string.isRequired,\n }).isRequired,\n}\n\nexport default ProdPageRenderer\n","const preferDefault = m => (m && m.default) || m\n\nif (process.env.BUILD_STAGE === `develop`) {\n module.exports = preferDefault(require(`./public-page-renderer-dev`))\n} else if (process.env.BUILD_STAGE === `build-javascript`) {\n module.exports = preferDefault(require(`./public-page-renderer-prod`))\n} else {\n module.exports = () => null\n}\n","const map = new WeakMap()\n\nexport function reactDOMUtils() {\n const reactDomClient = require(`react-dom/client`)\n\n const render = (Component, el) => {\n let root = map.get(el)\n if (!root) {\n map.set(el, (root = reactDomClient.createRoot(el)))\n }\n root.render(Component)\n }\n\n const hydrate = (Component, el) => reactDomClient.hydrateRoot(el, Component)\n\n return { render, hydrate }\n}\n","import redirects from \"./redirects.json\"\n\n// Convert to a map for faster lookup in maybeRedirect()\n\nconst redirectMap = new Map()\nconst redirectIgnoreCaseMap = new Map()\n\nredirects.forEach(redirect => {\n if (redirect.ignoreCase) {\n redirectIgnoreCaseMap.set(redirect.fromPath, redirect)\n } else {\n redirectMap.set(redirect.fromPath, redirect)\n }\n})\n\nexport function maybeGetBrowserRedirect(pathname) {\n let redirect = redirectMap.get(pathname)\n if (!redirect) {\n redirect = redirectIgnoreCaseMap.get(pathname.toLowerCase())\n }\n return redirect\n}\n","import { apiRunner } from \"./api-runner-browser\"\n\nif (\n window.location.protocol !== `https:` &&\n window.location.hostname !== `localhost`\n) {\n console.error(\n `Service workers can only be used over HTTPS, or on localhost for development`\n )\n} else if (`serviceWorker` in navigator) {\n navigator.serviceWorker\n .register(`${__BASE_PATH__}/sw.js`)\n .then(function (reg) {\n reg.addEventListener(`updatefound`, () => {\n apiRunner(`onServiceWorkerUpdateFound`, { serviceWorker: reg })\n // The updatefound event implies that reg.installing is set; see\n // https://w3c.github.io/ServiceWorker/#service-worker-registration-updatefound-event\n const installingWorker = reg.installing\n console.log(`installingWorker`, installingWorker)\n installingWorker.addEventListener(`statechange`, () => {\n switch (installingWorker.state) {\n case `installed`:\n if (navigator.serviceWorker.controller) {\n // At this point, the old content will have been purged and the fresh content will\n // have been added to the cache.\n\n // We set a flag so Gatsby Link knows to refresh the page on next navigation attempt\n window.___swUpdated = true\n // We call the onServiceWorkerUpdateReady API so users can show update prompts.\n apiRunner(`onServiceWorkerUpdateReady`, { serviceWorker: reg })\n\n // If resources failed for the current page, reload.\n if (window.___failedResources) {\n console.log(`resources failed, SW updated - reloading`)\n window.location.reload()\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a \"Content is cached for offline use.\" message.\n console.log(`Content is now available offline!`)\n\n // Post to service worker that install is complete.\n // Delay to allow time for the event listener to be added --\n // otherwise fetch is called too soon and resources aren't cached.\n apiRunner(`onServiceWorkerInstalled`, { serviceWorker: reg })\n }\n break\n\n case `redundant`:\n console.error(`The installing service worker became redundant.`)\n apiRunner(`onServiceWorkerRedundant`, { serviceWorker: reg })\n break\n\n case `activated`:\n apiRunner(`onServiceWorkerActive`, { serviceWorker: reg })\n break\n }\n })\n })\n })\n .catch(function (e) {\n console.error(`Error during service worker registration:`, e)\n })\n}\n","import React from \"react\"\n\nconst SlicesResultsContext = React.createContext({})\nconst SlicesContext = React.createContext({})\nconst SlicesMapContext = React.createContext({})\nconst SlicesPropsContext = React.createContext({})\n\nexport {\n SlicesResultsContext,\n SlicesContext,\n SlicesMapContext,\n SlicesPropsContext,\n}\n","import React from \"react\"\nimport PropTypes from \"prop-types\"\nimport { createServerOrClientContext } from \"./context-utils\"\n\nconst StaticQueryContext = createServerOrClientContext(`StaticQuery`, {})\n\nfunction StaticQueryDataRenderer({ staticQueryData, data, query, render }) {\n const finalData = data\n ? data.data\n : staticQueryData[query] && staticQueryData[query].data\n\n return (\n \n {finalData && render(finalData)}\n {!finalData &&
Loading (StaticQuery)
}\n
\n )\n}\n\nlet warnedAboutStaticQuery = false\n\n// TODO(v6): Remove completely\nconst StaticQuery = props => {\n const { data, query, render, children } = props\n\n if (process.env.NODE_ENV === `development` && !warnedAboutStaticQuery) {\n console.warn(\n `The component is deprecated and will be removed in Gatsby v6. Use useStaticQuery instead. Refer to the migration guide for more information: https://gatsby.dev/migrating-4-to-5/#staticquery--is-deprecated`\n )\n warnedAboutStaticQuery = true\n }\n\n return (\n \n {staticQueryData => (\n \n )}\n \n )\n}\n\nStaticQuery.propTypes = {\n data: PropTypes.object,\n query: PropTypes.string.isRequired,\n render: PropTypes.func,\n children: PropTypes.func,\n}\n\nconst useStaticQuery = query => {\n if (\n typeof React.useContext !== `function` &&\n process.env.NODE_ENV === `development`\n ) {\n // TODO(v5): Remove since we require React >= 18\n throw new Error(\n `You're likely using a version of React that doesn't support Hooks\\n` +\n `Please update React and ReactDOM to 16.8.0 or later to use the useStaticQuery hook.`\n )\n }\n\n const context = React.useContext(StaticQueryContext)\n\n // query is a stringified number like `3303882` when wrapped with graphql, If a user forgets\n // to wrap the query in a grqphql, then casting it to a Number results in `NaN` allowing us to\n // catch the misuse of the API and give proper direction\n if (isNaN(Number(query))) {\n throw new Error(`useStaticQuery was called with a string but expects to be called using \\`graphql\\`. Try this:\n\nimport { useStaticQuery, graphql } from 'gatsby';\n\nuseStaticQuery(graphql\\`${query}\\`);\n`)\n }\n\n if (context[query]?.data) {\n return context[query].data\n } else {\n throw new Error(\n `The result of this StaticQuery could not be fetched.\\n\\n` +\n `This is likely a bug in Gatsby and if refreshing the page does not fix it, ` +\n `please open an issue in https://github.com/gatsbyjs/gatsby/issues`\n )\n }\n}\n\nexport { StaticQuery, StaticQueryContext, useStaticQuery }\n","import React from \"react\"\n\n// Ensure serverContext is not created more than once as React will throw when creating it more than once\n// https://github.com/facebook/react/blob/dd2d6522754f52c70d02c51db25eb7cbd5d1c8eb/packages/react/src/ReactServerContext.js#L101\nconst createServerContext = (name, defaultValue = null) => {\n /* eslint-disable no-undef */\n if (!globalThis.__SERVER_CONTEXT) {\n globalThis.__SERVER_CONTEXT = {}\n }\n\n if (!globalThis.__SERVER_CONTEXT[name]) {\n globalThis.__SERVER_CONTEXT[name] = React.createServerContext(\n name,\n defaultValue\n )\n }\n\n return globalThis.__SERVER_CONTEXT[name]\n}\n\nfunction createServerOrClientContext(name, defaultValue) {\n if (React.createServerContext) {\n return createServerContext(name, defaultValue)\n }\n\n return React.createContext(defaultValue)\n}\n\nexport { createServerOrClientContext }\n","/**\n * Remove a prefix from a string. Return the input string if the given prefix\n * isn't found.\n */\n\nexport default function stripPrefix(str, prefix = ``) {\n if (!prefix) {\n return str\n }\n\n if (str === prefix) {\n return `/`\n }\n\n if (str.startsWith(`${prefix}/`)) {\n return str.slice(prefix.length)\n }\n\n return str\n}\n","import escapeStringRegexp from \"escape-string-regexp\";\nimport { withPrefix } from \"gatsby\";\nexport const userIsForcingNavigation = event => event.button !== 0 || event.altKey || event.ctrlKey || event.metaKey || event.shiftKey; // IE does not include leading slash in anchor.pathname\n\nexport const slashedPathname = pathname => pathname[0] === `/` ? pathname : `/${pathname}`;\nexport const navigationWasHandledElsewhere = event => event.defaultPrevented;\nexport const findClosestAnchor = node => {\n for (; node.parentNode; node = node.parentNode) {\n if (node.nodeName.toLowerCase() === `a`) {\n return node;\n }\n }\n\n return null;\n};\nexport const anchorsTargetIsEquivalentToSelf = anchor =>\n/* If target attribute is not present it's treated as _self */\nanchor.hasAttribute(`target`) === false ||\n/**\n * The browser defaults to _self, but, not all browsers set\n * a.target to the string value `_self` by default\n */\n\n/**\n * Assumption: some browsers use null/undefined for default\n * attribute values\n */\nanchor.target == null ||\n/**\n * Some browsers use the empty string to mean _self, check\n * for actual `_self`\n */\n[`_self`, ``].includes(anchor.target) ||\n/**\n * As per https://developer.mozilla.org/en-US/docs/Web/HTML/Element/a#attr-target\n */\nanchor.target === `_parent` && (!anchor.ownerDocument.defaultView.parent || // Assumption: This can be falsey\nanchor.ownerDocument.defaultView.parent === anchor.ownerDocument.defaultView) || anchor.target === `_top` && (!anchor.ownerDocument.defaultView.top || // Assumption: This can be falsey\nanchor.ownerDocument.defaultView.top === anchor.ownerDocument.defaultView);\nexport const authorIsForcingNavigation = anchor =>\n/**\n * HTML5 attribute that informs the browser to handle the\n * href as a downloadable file; let the browser handle it\n */\nanchor.hasAttribute(`download`) === true ||\n/**\n * Let the browser handle anything that doesn't look like a\n * target=\"_self\" anchor\n */\nanchorsTargetIsEquivalentToSelf(anchor) === false; // https://developer.mozilla.org/en-US/docs/Web/Security/Same-origin_policy\n\nexport const urlsAreOnSameOrigin = (origin, destination) => origin.protocol === destination.protocol &&\n/* a.host includes both hostname and port in the expected format host:port */\norigin.host === destination.host;\nexport const pathIsNotHandledByApp = (destination, pathStartRegEx) => {\n const pathFileExtensionRegEx = /^.*\\.((?!htm)[a-z0-9]{1,5})$/i;\n return (\n /**\n * For when pathPrefix is used in an app and there happens to be a link\n * pointing to the same domain but outside of the app's pathPrefix. For\n * example, a Gatsby app lives at https://example.com/myapp/, with the\n * pathPrefix set to `/myapp`. When adding an absolute link to the same\n * domain but outside of the /myapp path, for example, `` the plugin won't catch it and\n * will navigate to an external link instead of doing a pushState resulting\n * in `https://example.com/myapp/https://example.com/not-my-app`\n */\n pathStartRegEx.test(slashedPathname(destination.pathname)) === false ||\n /**\n * Don't catch links pointed at what look like file extensions (other than\n * .htm/html extensions).\n */\n destination.pathname.search(pathFileExtensionRegEx) !== -1\n );\n};\nexport const hashShouldBeFollowed = (origin, destination) => destination.hash !== `` && (\n/**\n * Dynamically created anchor links (href=\"#my-anchor\") do not always\n * have pathname on IE\n */\ndestination.pathname === `` ||\n/* Don't catch links pointed to the same page but with a hash. */\ndestination.pathname === origin.pathname);\nexport const routeThroughBrowserOrApp = (hrefHandler, pluginOptions) => event => {\n if (window.___failedResources) return true;\n if (userIsForcingNavigation(event)) return true;\n if (navigationWasHandledElsewhere(event)) return true;\n const clickedAnchor = findClosestAnchor(event.target);\n if (clickedAnchor == null) return true;\n if (authorIsForcingNavigation(clickedAnchor)) return true; // IE clears the host value if the anchor href changed after creation, e.g.\n // in React. Creating a new anchor element to ensure host value is present\n\n const destination = document.createElement(`a`); // https://html.spec.whatwg.org/multipage/links.html#concept-hyperlink-url-set\n // If clickedAnchor has no href attribute like `example`, the href getter returns empty string.\n\n if (clickedAnchor.href !== ``) {\n destination.href = clickedAnchor.href;\n }\n\n if (`SVGAnimatedString` in window && clickedAnchor.href instanceof SVGAnimatedString) {\n destination.href = clickedAnchor.href.animVal;\n } // In IE, the default port is included in the anchor host but excluded from\n // the location host. This affects the ability to directly compare\n // location host to anchor host. For example: http://example.com would\n // have a location.host of 'example.com' and an destination.host of\n // 'example.com:80' Creating anchor from the location.href to normalize the\n // host value.\n\n\n const origin = document.createElement(`a`);\n origin.href = window.location.href;\n if (urlsAreOnSameOrigin(origin, destination) === false) return true; // Regex to test pathname against pathPrefix\n\n const pathStartRegEx = new RegExp(`^${escapeStringRegexp(withPrefix(`/`))}`);\n if (pathIsNotHandledByApp(destination, pathStartRegEx)) return true;\n if (hashShouldBeFollowed(origin, destination)) return true;\n\n if (pluginOptions.excludePattern) {\n const excludeRegex = new RegExp(pluginOptions.excludePattern);\n\n if (excludeRegex.test(destination.pathname)) {\n return true;\n }\n }\n\n event.preventDefault(); // See issue #8907: destination.pathname already includes pathPrefix added\n // by gatsby-transformer-remark but gatsby-link.navigate needs href without\n\n const destinationPathname = slashedPathname(destination.pathname).replace(pathStartRegEx, `/`);\n hrefHandler(`${destinationPathname}${destination.search}${destination.hash}`);\n return false;\n};\nexport default function (root, pluginOptions, cb) {\n const clickHandler = routeThroughBrowserOrApp(cb, pluginOptions);\n root.addEventListener(`click`, clickHandler);\n return () => root.removeEventListener(`click`, clickHandler);\n}","import { navigate } from \"gatsby\";\nimport catchLinks from \"./catch-links\";\nexport const onClientEntry = (_, pluginOptions = {}) => {\n catchLinks(window, pluginOptions, href => {\n navigate(href);\n });\n};","/* global __MANIFEST_PLUGIN_HAS_LOCALISATION__ */\nimport { withPrefix } from \"gatsby\";\nimport getManifestForPathname from \"./get-manifest-pathname\"; // when we don't have localisation in our manifest, we tree shake everything away\n\nexport const onRouteUpdate = function onRouteUpdate({\n location\n}, pluginOptions) {\n if (__MANIFEST_PLUGIN_HAS_LOCALISATION__) {\n const {\n localize\n } = pluginOptions;\n const manifestFilename = getManifestForPathname(location.pathname, localize, true);\n const manifestEl = document.head.querySelector(`link[rel=\"manifest\"]`);\n\n if (manifestEl) {\n manifestEl.setAttribute(`href`, withPrefix(manifestFilename));\n }\n }\n};","\"use strict\";\n\nexports.__esModule = true;\nexports.default = void 0;\n\nvar _gatsby = require(\"gatsby\");\n\n/**\n * Get a manifest filename depending on localized pathname\n *\n * @param {string} pathname\n * @param {Array<{start_url: string, lang: string}>} localizedManifests\n * @param {boolean} shouldPrependPathPrefix\n * @return string\n */\nvar _default = (pathname, localizedManifests, shouldPrependPathPrefix = false) => {\n const defaultFilename = `manifest.webmanifest`;\n\n if (!Array.isArray(localizedManifests)) {\n return defaultFilename;\n }\n\n const localizedManifest = localizedManifests.find(app => {\n let startUrl = app.start_url;\n\n if (shouldPrependPathPrefix) {\n startUrl = (0, _gatsby.withPrefix)(startUrl);\n }\n\n return pathname.startsWith(startUrl);\n });\n\n if (!localizedManifest) {\n return defaultFilename;\n }\n\n return `manifest_${localizedManifest.lang}.webmanifest`;\n};\n\nexports.default = _default;","\"use strict\";\n\nexports.DEFAULT_OPTIONS = {\n maxWidth: 650,\n wrapperStyle: \"\",\n backgroundColor: \"white\",\n linkImagesToOriginal: true,\n showCaptions: false,\n markdownCaptions: false,\n withWebp: false,\n withAvif: false,\n tracedSVG: false,\n loading: \"lazy\",\n decoding: \"async\",\n disableBgImageOnAlpha: false,\n disableBgImage: false\n};\nexports.EMPTY_ALT = \"GATSBY_EMPTY_ALT\";\nexports.imageClass = \"gatsby-resp-image-image\";\nexports.imageWrapperClass = \"gatsby-resp-image-wrapper\";\nexports.imageBackgroundClass = \"gatsby-resp-image-background-image\";","\"use strict\";\n\nvar _require = require(\"./constants\"),\n DEFAULT_OPTIONS = _require.DEFAULT_OPTIONS,\n imageClass = _require.imageClass,\n imageBackgroundClass = _require.imageBackgroundClass,\n imageWrapperClass = _require.imageWrapperClass;\n\nexports.onRouteUpdate = function (apiCallbackContext, pluginOptions) {\n var options = Object.assign({}, DEFAULT_OPTIONS, pluginOptions);\n var imageWrappers = document.querySelectorAll(\".\" + imageWrapperClass); // https://css-tricks.com/snippets/javascript/loop-queryselectorall-matches/\n // for cross-browser looping through NodeList without polyfills\n\n var _loop = function _loop(i) {\n var imageWrapper = imageWrappers[i];\n var backgroundElement = imageWrapper.querySelector(\".\" + imageBackgroundClass);\n var imageElement = imageWrapper.querySelector(\".\" + imageClass);\n\n var onImageLoad = function onImageLoad() {\n backgroundElement.style.transition = \"opacity 0.5s 0.5s\";\n imageElement.style.transition = \"opacity 0.5s\";\n onImageComplete();\n };\n\n var onImageComplete = function onImageComplete() {\n backgroundElement.style.opacity = 0;\n imageElement.style.opacity = 1;\n imageElement.style.color = \"inherit\";\n imageElement.style.boxShadow = \"inset 0px 0px 0px 400px \" + options.backgroundColor;\n imageElement.removeEventListener(\"load\", onImageLoad);\n imageElement.removeEventListener(\"error\", onImageComplete);\n };\n\n imageElement.style.opacity = 0;\n imageElement.addEventListener(\"load\", onImageLoad);\n imageElement.addEventListener(\"error\", onImageComplete);\n\n if (imageElement.complete) {\n onImageComplete();\n }\n };\n\n for (var i = 0; i < imageWrappers.length; i++) {\n _loop(i);\n }\n};","import { anchorate } from \"anchorate\"\n\nexport const onRouteUpdate = () => {\n anchorate()\n}\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\n/**\n * Use invariant() to assert state which your program assumes to be true.\n *\n * Provide sprintf-style format (only %s is supported) and arguments\n * to provide information about what broke and what you were\n * expecting.\n *\n * The invariant message will be stripped in production, but the invariant\n * will remain to ensure logic does not differ in production.\n */\n\nvar invariant = function(condition, format, a, b, c, d, e, f) {\n if (process.env.NODE_ENV !== 'production') {\n if (format === undefined) {\n throw new Error('invariant requires an error message argument');\n }\n }\n\n if (!condition) {\n var error;\n if (format === undefined) {\n error = new Error(\n 'Minified exception occurred; use the non-minified dev environment ' +\n 'for the full error message and additional helpful warnings.'\n );\n } else {\n var args = [a, b, c, d, e, f];\n var argIndex = 0;\n error = new Error(\n format.replace(/%s/g, function() { return args[argIndex++]; })\n );\n error.name = 'Invariant Violation';\n }\n\n error.framesToPop = 1; // we don't care about invariant's own frame\n throw error;\n }\n};\n\nmodule.exports = invariant;\n","/**\n * @license React\n * react-server-dom-webpack.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var k=require(\"react\"),l={stream:!0},n=new Map,p=Symbol.for(\"react.element\"),q=Symbol.for(\"react.lazy\"),r=Symbol.for(\"react.default_value\"),t=k.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ContextRegistry;function u(a){t[a]||(t[a]=k.createServerContext(a,r));return t[a]}function v(a,b,c){this._status=a;this._value=b;this._response=c}v.prototype.then=function(a){0===this._status?(null===this._value&&(this._value=[]),this._value.push(a)):a()};\nfunction w(a){switch(a._status){case 3:return a._value;case 1:var b=JSON.parse(a._value,a._response._fromJSON);a._status=3;return a._value=b;case 2:b=a._value;for(var c=b.chunks,d=0;d {\n const { forward = [], ...filteredConfig } = config || {};\n const configStr = JSON.stringify(filteredConfig, (k, v) => {\n if (typeof v === 'function') {\n v = String(v);\n if (v.startsWith(k + '(')) {\n v = 'function ' + v;\n }\n }\n return v;\n });\n return [\n `!(function(w,p,f,c){`,\n Object.keys(filteredConfig).length > 0\n ? `c=w[p]=Object.assign(w[p]||{},${configStr});`\n : `c=w[p]=w[p]||{};`,\n `c[f]=(c[f]||[])`,\n forward.length > 0 ? `.concat(${JSON.stringify(forward)})` : ``,\n `})(window,'partytown','forward');`,\n snippetCode,\n ].join('');\n};\n\n/**\n * The `type` attribute for Partytown scripts, which does two things:\n *\n * 1. Prevents the ` - \ No newline at end of file + \ No newline at end of file diff --git a/debug/index.html b/debug/index.html index b44093923..d39cd1ef4 100644 --- a/debug/index.html +++ b/debug/index.html @@ -350,6 +350,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/debug/redirects/index.html b/debug/redirects/index.html index 1ed85dbc5..de8ba9764 100644 --- a/debug/redirects/index.html +++ b/debug/redirects/index.html @@ -3,10 +3,10 @@ * Copyright 2011-2022 The Bootstrap Authors * Copyright 2011-2022 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) - */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}*,:after,:before{box-sizing:border-box}html{-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent;font-family:sans-serif;line-height:1.15}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{background-color:#fff;color:#212529;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,Liberation Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-size:1rem;font-weight:400;line-height:1.5;margin:0;text-align:left}[tabindex="-1"]:focus:not(:focus-visible){outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;margin-top:0}p{margin-bottom:1rem;margin-top:0}abbr[data-original-title],abbr[title]{border-bottom:0;cursor:help;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{font-style:normal;line-height:inherit}address,dl,ol,ul{margin-bottom:1rem}dl,ol,ul{margin-top:0}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{background-color:transparent;color:#007bff}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}pre{-ms-overflow-style:scrollbar;margin-bottom:1rem;margin-top:0;overflow:auto}figure{margin:0 0 1rem}img{border-style:none}img,svg{vertical-align:middle}svg{overflow:hidden}table{border-collapse:collapse}caption{caption-side:bottom;color:#6c757d;padding-bottom:.75rem;padding-top:.75rem;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit;margin:0}button,input{overflow:visible}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}textarea{overflow:auto;resize:vertical}fieldset{border:0;margin:0;min-width:0;padding:0}legend{color:inherit;display:block;font-size:1.5rem;line-height:inherit;margin-bottom:.5rem;max-width:100%;padding:0;white-space:normal;width:100%}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:none;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}output{display:inline-block}summary{cursor:pointer;display:list-item}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-weight:500;line-height:1.2;margin-bottom:.5rem}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem}.display-1,.display-2{font-weight:300;line-height:1.2}.display-2{font-size:5.5rem}.display-3{font-size:4.5rem}.display-3,.display-4{font-weight:300;line-height:1.2}.display-4{font-size:3.5rem}hr{border:0;border-top:1px solid rgba(0,0,0,.1);margin-bottom:1rem;margin-top:1rem}.small,small{font-size:.875em;font-weight:400}.mark,mark{background-color:#fcf8e3;padding:.2em}.list-inline,.list-unstyled{list-style:none;padding-left:0}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{font-size:1.25rem;margin-bottom:1rem}.blockquote-footer{color:#6c757d;display:block;font-size:.875em}.blockquote-footer:before{content:"\2014\00A0"}.img-fluid,.img-thumbnail{height:auto;max-width:100%}.img-thumbnail{background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;padding:.25rem}.figure{display:inline-block}.figure-img{line-height:1;margin-bottom:.5rem}.figure-caption{color:#6c757d;font-size:90%}code{word-wrap:break-word;color:#e83e8c;font-size:87.5%}a>code{color:inherit}kbd{background-color:#212529;border-radius:.2rem;color:#fff;font-size:87.5%;padding:.2rem .4rem}kbd kbd{font-size:100%;font-weight:700;padding:0}pre{color:#212529;display:block;font-size:87.5%}pre code{color:inherit;font-size:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container,.container-fluid,.container-lg,.container-md,.container-sm,.container-xl{margin-left:auto;margin-right:auto;padding-left:15px;padding-right:15px;width:100%}@media (min-width:576px){.container,.container-sm{max-width:540px}}@media (min-width:768px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px}}.row{display:flex;flex-wrap:wrap;margin-left:-15px;margin-right:-15px}.no-gutters{margin-left:0;margin-right:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-left:0;padding-right:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{padding-left:15px;padding-right:15px;position:relative;width:100%}.col{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-1>*{flex:0 0 100%;max-width:100%}.row-cols-2>*{flex:0 0 50%;max-width:50%}.row-cols-3>*{flex:0 0 33.333333%;max-width:33.333333%}.row-cols-4>*{flex:0 0 25%;max-width:25%}.row-cols-5>*{flex:0 0 20%;max-width:20%}.row-cols-6>*{flex:0 0 16.666667%;max-width:16.666667%}.col-auto{flex:0 0 auto;max-width:100%;width:auto}.col-1{flex:0 0 8.333333%;max-width:8.333333%}.col-2{flex:0 0 16.666667%;max-width:16.666667%}.col-3{flex:0 0 25%;max-width:25%}.col-4{flex:0 0 33.333333%;max-width:33.333333%}.col-5{flex:0 0 41.666667%;max-width:41.666667%}.col-6{flex:0 0 50%;max-width:50%}.col-7{flex:0 0 58.333333%;max-width:58.333333%}.col-8{flex:0 0 66.666667%;max-width:66.666667%}.col-9{flex:0 0 75%;max-width:75%}.col-10{flex:0 0 83.333333%;max-width:83.333333%}.col-11{flex:0 0 91.666667%;max-width:91.666667%}.col-12{flex:0 0 100%;max-width:100%}.order-first{order:-1}.order-last{order:13}.order-0{order:0}.order-1{order:1}.order-2{order:2}.order-3{order:3}.order-4{order:4}.order-5{order:5}.order-6{order:6}.order-7{order:7}.order-8{order:8}.order-9{order:9}.order-10{order:10}.order-11{order:11}.order-12{order:12}.offset-1{margin-left:8.333333%}.offset-2{margin-left:16.666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.333333%}.offset-5{margin-left:41.666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.333333%}.offset-8{margin-left:66.666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.333333%}.offset-11{margin-left:91.666667%}@media (min-width:576px){.col-sm{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-sm-1>*{flex:0 0 100%;max-width:100%}.row-cols-sm-2>*{flex:0 0 50%;max-width:50%}.row-cols-sm-3>*{flex:0 0 33.333333%;max-width:33.333333%}.row-cols-sm-4>*{flex:0 0 25%;max-width:25%}.row-cols-sm-5>*{flex:0 0 20%;max-width:20%}.row-cols-sm-6>*{flex:0 0 16.666667%;max-width:16.666667%}.col-sm-auto{flex:0 0 auto;max-width:100%;width:auto}.col-sm-1{flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{flex:0 0 25%;max-width:25%}.col-sm-4{flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{flex:0 0 50%;max-width:50%}.col-sm-7{flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{flex:0 0 75%;max-width:75%}.col-sm-10{flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{flex:0 0 100%;max-width:100%}.order-sm-first{order:-1}.order-sm-last{order:13}.order-sm-0{order:0}.order-sm-1{order:1}.order-sm-2{order:2}.order-sm-3{order:3}.order-sm-4{order:4}.order-sm-5{order:5}.order-sm-6{order:6}.order-sm-7{order:7}.order-sm-8{order:8}.order-sm-9{order:9}.order-sm-10{order:10}.order-sm-11{order:11}.order-sm-12{order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}}@media (min-width:768px){.col-md{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-md-1>*{flex:0 0 100%;max-width:100%}.row-cols-md-2>*{flex:0 0 50%;max-width:50%}.row-cols-md-3>*{flex:0 0 33.333333%;max-width:33.333333%}.row-cols-md-4>*{flex:0 0 25%;max-width:25%}.row-cols-md-5>*{flex:0 0 20%;max-width:20%}.row-cols-md-6>*{flex:0 0 16.666667%;max-width:16.666667%}.col-md-auto{flex:0 0 auto;max-width:100%;width:auto}.col-md-1{flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{flex:0 0 25%;max-width:25%}.col-md-4{flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{flex:0 0 50%;max-width:50%}.col-md-7{flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{flex:0 0 75%;max-width:75%}.col-md-10{flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{flex:0 0 100%;max-width:100%}.order-md-first{order:-1}.order-md-last{order:13}.order-md-0{order:0}.order-md-1{order:1}.order-md-2{order:2}.order-md-3{order:3}.order-md-4{order:4}.order-md-5{order:5}.order-md-6{order:6}.order-md-7{order:7}.order-md-8{order:8}.order-md-9{order:9}.order-md-10{order:10}.order-md-11{order:11}.order-md-12{order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.333333%}.offset-md-2{margin-left:16.666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.333333%}.offset-md-5{margin-left:41.666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.333333%}.offset-md-8{margin-left:66.666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.333333%}.offset-md-11{margin-left:91.666667%}}@media (min-width:992px){.col-lg{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-lg-1>*{flex:0 0 100%;max-width:100%}.row-cols-lg-2>*{flex:0 0 50%;max-width:50%}.row-cols-lg-3>*{flex:0 0 33.333333%;max-width:33.333333%}.row-cols-lg-4>*{flex:0 0 25%;max-width:25%}.row-cols-lg-5>*{flex:0 0 20%;max-width:20%}.row-cols-lg-6>*{flex:0 0 16.666667%;max-width:16.666667%}.col-lg-auto{flex:0 0 auto;max-width:100%;width:auto}.col-lg-1{flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{flex:0 0 25%;max-width:25%}.col-lg-4{flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{flex:0 0 50%;max-width:50%}.col-lg-7{flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{flex:0 0 75%;max-width:75%}.col-lg-10{flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{flex:0 0 100%;max-width:100%}.order-lg-first{order:-1}.order-lg-last{order:13}.order-lg-0{order:0}.order-lg-1{order:1}.order-lg-2{order:2}.order-lg-3{order:3}.order-lg-4{order:4}.order-lg-5{order:5}.order-lg-6{order:6}.order-lg-7{order:7}.order-lg-8{order:8}.order-lg-9{order:9}.order-lg-10{order:10}.order-lg-11{order:11}.order-lg-12{order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.333333%}.offset-lg-2{margin-left:16.666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.333333%}.offset-lg-5{margin-left:41.666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.333333%}.offset-lg-8{margin-left:66.666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.333333%}.offset-lg-11{margin-left:91.666667%}}@media (min-width:1200px){.col-xl{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-xl-1>*{flex:0 0 100%;max-width:100%}.row-cols-xl-2>*{flex:0 0 50%;max-width:50%}.row-cols-xl-3>*{flex:0 0 33.333333%;max-width:33.333333%}.row-cols-xl-4>*{flex:0 0 25%;max-width:25%}.row-cols-xl-5>*{flex:0 0 20%;max-width:20%}.row-cols-xl-6>*{flex:0 0 16.666667%;max-width:16.666667%}.col-xl-auto{flex:0 0 auto;max-width:100%;width:auto}.col-xl-1{flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{flex:0 0 25%;max-width:25%}.col-xl-4{flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{flex:0 0 50%;max-width:50%}.col-xl-7{flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{flex:0 0 75%;max-width:75%}.col-xl-10{flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{flex:0 0 100%;max-width:100%}.order-xl-first{order:-1}.order-xl-last{order:13}.order-xl-0{order:0}.order-xl-1{order:1}.order-xl-2{order:2}.order-xl-3{order:3}.order-xl-4{order:4}.order-xl-5{order:5}.order-xl-6{order:6}.order-xl-7{order:7}.order-xl-8{order:8}.order-xl-9{order:9}.order-xl-10{order:10}.order-xl-11{order:11}.order-xl-12{order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.333333%}.offset-xl-2{margin-left:16.666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.333333%}.offset-xl-5{margin-left:41.666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.333333%}.offset-xl-8{margin-left:66.666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.333333%}.offset-xl-11{margin-left:91.666667%}}.table{color:#212529;margin-bottom:1rem;width:100%}.table td,.table th{border-top:1px solid #dee2e6;padding:.75rem;vertical-align:top}.table thead th{border-bottom:2px solid #dee2e6;vertical-align:bottom}.table tbody+tbody{border-top:2px solid #dee2e6}.table-sm td,.table-sm th{padding:.3rem}.table-bordered,.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{background-color:rgba(0,0,0,.075);color:#212529}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8daff}.table-primary tbody+tbody,.table-primary td,.table-primary th,.table-primary thead th{border-color:#7abaff}.table-hover .table-primary:hover,.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-secondary tbody+tbody,.table-secondary td,.table-secondary th,.table-secondary thead th{border-color:#b3b7bb}.table-hover .table-secondary:hover,.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-success tbody+tbody,.table-success td,.table-success th,.table-success thead th{border-color:#8fd19e}.table-hover .table-success:hover,.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-info tbody+tbody,.table-info td,.table-info th,.table-info thead th{border-color:#86cfda}.table-hover .table-info:hover,.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-warning tbody+tbody,.table-warning td,.table-warning th,.table-warning thead th{border-color:#ffdf7e}.table-hover .table-warning:hover,.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-danger tbody+tbody,.table-danger td,.table-danger th,.table-danger thead th{border-color:#ed969e}.table-hover .table-danger:hover,.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-light tbody+tbody,.table-light td,.table-light th,.table-light thead th{border-color:#fbfcfc}.table-hover .table-light:hover,.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#95999c}.table-hover .table-dark:hover,.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th,.table-hover .table-active:hover,.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{background-color:#343a40;border-color:#454d55;color:#fff}.table .thead-light th{background-color:#e9ecef;border-color:#dee2e6;color:#495057}.table-dark{background-color:#343a40;color:#fff}.table-dark td,.table-dark th,.table-dark thead th{border-color:#454d55}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:hsla(0,0%,100%,.05)}.table-dark.table-hover tbody tr:hover{background-color:hsla(0,0%,100%,.075);color:#fff}@media (max-width:575.98px){.table-responsive-sm{-webkit-overflow-scrolling:touch;display:block;overflow-x:auto;width:100%}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{-webkit-overflow-scrolling:touch;display:block;overflow-x:auto;width:100%}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{-webkit-overflow-scrolling:touch;display:block;overflow-x:auto;width:100%}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{-webkit-overflow-scrolling:touch;display:block;overflow-x:auto;width:100%}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{-webkit-overflow-scrolling:touch;display:block;overflow-x:auto;width:100%}.table-responsive>.table-bordered{border:0}.form-control{background-clip:padding-box;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem;color:#495057;display:block;font-size:1rem;font-weight:400;height:calc(1.5em + .75rem + 2px);line-height:1.5;padding:.375rem .75rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;width:100%}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{background-color:#fff;border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25);color:#495057;outline:0}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}input[type=date].form-control,input[type=datetime-local].form-control,input[type=month].form-control,input[type=time].form-control{-webkit-appearance:none;appearance:none}select.form-control:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}select.form-control:focus::-ms-value{background-color:#fff;color:#495057}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{font-size:inherit;line-height:1.5;margin-bottom:0;padding-bottom:calc(.375rem + 1px);padding-top:calc(.375rem + 1px)}.col-form-label-lg{font-size:1.25rem;line-height:1.5;padding-bottom:calc(.5rem + 1px);padding-top:calc(.5rem + 1px)}.col-form-label-sm{font-size:.875rem;line-height:1.5;padding-bottom:calc(.25rem + 1px);padding-top:calc(.25rem + 1px)}.form-control-plaintext{background-color:transparent;border:solid transparent;border-width:1px 0;color:#212529;display:block;font-size:1rem;line-height:1.5;margin-bottom:0;padding:.375rem 0;width:100%}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-left:0;padding-right:0}.form-control-sm{border-radius:.2rem;font-size:.875rem;height:calc(1.5em + .5rem + 2px);line-height:1.5;padding:.25rem .5rem}.form-control-lg{border-radius:.3rem;font-size:1.25rem;height:calc(1.5em + 1rem + 2px);line-height:1.5;padding:.5rem 1rem}select.form-control[multiple],select.form-control[size],textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:flex;flex-wrap:wrap;margin-left:-5px;margin-right:-5px}.form-row>.col,.form-row>[class*=col-]{padding-left:5px;padding-right:5px}.form-check{display:block;padding-left:1.25rem;position:relative}.form-check-input{margin-left:-1.25rem;margin-top:.3rem;position:absolute}.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{align-items:center;display:inline-flex;margin-right:.75rem;padding-left:0}.form-check-inline .form-check-input{margin-left:0;margin-right:.3125rem;margin-top:0;position:static}.valid-feedback{color:#28a745;display:none;font-size:.875em;margin-top:.25rem;width:100%}.valid-tooltip{background-color:rgba(40,167,69,.9);border-radius:.25rem;color:#fff;display:none;font-size:.875rem;left:0;line-height:1.5;margin-top:.1rem;max-width:100%;padding:.25rem .5rem;position:absolute;top:100%;z-index:5}.form-row>.col>.valid-tooltip,.form-row>[class*=col-]>.valid-tooltip{left:5px}.is-valid~.valid-feedback,.is-valid~.valid-tooltip,.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip{display:block}.form-control.is-valid,.was-validated .form-control:valid{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3E%3Cpath fill='%2328a745' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3E%3C/svg%3E");background-position:right calc(.375em + .1875rem) center;background-repeat:no-repeat;background-size:calc(.75em + .375rem) calc(.75em + .375rem);border-color:#28a745;padding-right:calc(1.5em + .75rem)!important}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.was-validated select.form-control:valid,select.form-control.is-valid{background-position:right 1.5rem center;padding-right:3rem!important}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem);padding-right:calc(1.5em + .75rem)}.custom-select.is-valid,.was-validated .custom-select:valid{background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3E%3Cpath fill='%23343a40' d='M2 0 0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") right .75rem center/8px 10px no-repeat,#fff url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3E%3Cpath fill='%2328a745' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3E%3C/svg%3E") center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem) no-repeat;border-color:#28a745;padding-right:calc(.75em + 2.3125rem)!important}.custom-select.is-valid:focus,.was-validated .custom-select:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label:before,.was-validated .custom-control-input:valid~.custom-control-label:before{border-color:#28a745}.custom-control-input.is-valid:checked~.custom-control-label:before,.was-validated .custom-control-input:valid:checked~.custom-control-label:before{background-color:#34ce57;border-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label:before,.was-validated .custom-control-input:valid:focus~.custom-control-label:before{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-control-input.is-valid:focus:not(:checked)~.custom-control-label:before,.was-validated .custom-control-input:valid:focus:not(:checked)~.custom-control-label:before{border-color:#28a745}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{color:#dc3545;display:none;font-size:.875em;margin-top:.25rem;width:100%}.invalid-tooltip{background-color:rgba(220,53,69,.9);border-radius:.25rem;color:#fff;display:none;font-size:.875rem;left:0;line-height:1.5;margin-top:.1rem;max-width:100%;padding:.25rem .5rem;position:absolute;top:100%;z-index:5}.form-row>.col>.invalid-tooltip,.form-row>[class*=col-]>.invalid-tooltip{left:5px}.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip,.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip{display:block}.form-control.is-invalid,.was-validated .form-control:invalid{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3E%3Ccircle cx='6' cy='6' r='4.5'/%3E%3Cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3E%3Ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3E%3C/svg%3E");background-position:right calc(.375em + .1875rem) center;background-repeat:no-repeat;background-size:calc(.75em + .375rem) calc(.75em + .375rem);border-color:#dc3545;padding-right:calc(1.5em + .75rem)!important}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.was-validated select.form-control:invalid,select.form-control.is-invalid{background-position:right 1.5rem center;padding-right:3rem!important}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem);padding-right:calc(1.5em + .75rem)}.custom-select.is-invalid,.was-validated .custom-select:invalid{background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3E%3Cpath fill='%23343a40' d='M2 0 0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") right .75rem center/8px 10px no-repeat,#fff url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3E%3Ccircle cx='6' cy='6' r='4.5'/%3E%3Cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3E%3Ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3E%3C/svg%3E") center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem) no-repeat;border-color:#dc3545;padding-right:calc(.75em + 2.3125rem)!important}.custom-select.is-invalid:focus,.was-validated .custom-select:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc3545}.custom-control-input.is-invalid~.custom-control-label:before,.was-validated .custom-control-input:invalid~.custom-control-label:before{border-color:#dc3545}.custom-control-input.is-invalid:checked~.custom-control-label:before,.was-validated .custom-control-input:invalid:checked~.custom-control-label:before{background-color:#e4606d;border-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label:before,.was-validated .custom-control-input:invalid:focus~.custom-control-label:before{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label:before,.was-validated .custom-control-input:invalid:focus:not(:checked)~.custom-control-label:before{border-color:#dc3545}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{align-items:center;display:flex;flex-flow:row wrap}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{justify-content:center}.form-inline .form-group,.form-inline label{align-items:center;display:flex;margin-bottom:0}.form-inline .form-group{flex:0 0 auto;flex-flow:row wrap}.form-inline .form-control{display:inline-block;vertical-align:middle;width:auto}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{align-items:center;display:flex;justify-content:center;padding-left:0;width:auto}.form-inline .form-check-input{flex-shrink:0;margin-left:0;margin-right:.25rem;margin-top:0;position:relative}.form-inline .custom-control{align-items:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{background-color:transparent;border:1px solid transparent;border-radius:.25rem;color:#212529;display:inline-block;font-size:1rem;font-weight:400;line-height:1.5;padding:.375rem .75rem;text-align:center;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-user-select:none;user-select:none;vertical-align:middle}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:#212529;text-decoration:none}.btn.focus,.btn:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.25);outline:0}.btn.disabled,.btn:disabled{opacity:.65}.btn:not(:disabled):not(.disabled){cursor:pointer}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{background-color:#007bff;border-color:#007bff;color:#fff}.btn-primary.focus,.btn-primary:focus,.btn-primary:hover{background-color:#0069d9;border-color:#0062cc;color:#fff}.btn-primary.focus,.btn-primary:focus{box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-primary.disabled,.btn-primary:disabled{background-color:#007bff;border-color:#007bff;color:#fff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{background-color:#0062cc;border-color:#005cbf;color:#fff}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-secondary{background-color:#6c757d;border-color:#6c757d;color:#fff}.btn-secondary.focus,.btn-secondary:focus,.btn-secondary:hover{background-color:#5a6268;border-color:#545b62;color:#fff}.btn-secondary.focus,.btn-secondary:focus{box-shadow:0 0 0 .2rem hsla(208,6%,54%,.5)}.btn-secondary.disabled,.btn-secondary:disabled{background-color:#6c757d;border-color:#6c757d;color:#fff}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{background-color:#545b62;border-color:#4e555b;color:#fff}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem hsla(208,6%,54%,.5)}.btn-success{background-color:#28a745;border-color:#28a745;color:#fff}.btn-success.focus,.btn-success:focus,.btn-success:hover{background-color:#218838;border-color:#1e7e34;color:#fff}.btn-success.focus,.btn-success:focus{box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-success.disabled,.btn-success:disabled{background-color:#28a745;border-color:#28a745;color:#fff}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{background-color:#1e7e34;border-color:#1c7430;color:#fff}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-info{background-color:#17a2b8;border-color:#17a2b8;color:#fff}.btn-info.focus,.btn-info:focus,.btn-info:hover{background-color:#138496;border-color:#117a8b;color:#fff}.btn-info.focus,.btn-info:focus{box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-info.disabled,.btn-info:disabled{background-color:#17a2b8;border-color:#17a2b8;color:#fff}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{background-color:#117a8b;border-color:#10707f;color:#fff}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-warning{background-color:#ffc107;border-color:#ffc107;color:#212529}.btn-warning.focus,.btn-warning:focus,.btn-warning:hover{background-color:#e0a800;border-color:#d39e00;color:#212529}.btn-warning.focus,.btn-warning:focus{box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-warning.disabled,.btn-warning:disabled{background-color:#ffc107;border-color:#ffc107;color:#212529}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{background-color:#d39e00;border-color:#c69500;color:#212529}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-danger{background-color:#dc3545;border-color:#dc3545;color:#fff}.btn-danger.focus,.btn-danger:focus,.btn-danger:hover{background-color:#c82333;border-color:#bd2130;color:#fff}.btn-danger.focus,.btn-danger:focus{box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-danger.disabled,.btn-danger:disabled{background-color:#dc3545;border-color:#dc3545;color:#fff}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{background-color:#bd2130;border-color:#b21f2d;color:#fff}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-light{background-color:#f8f9fa;border-color:#f8f9fa;color:#212529}.btn-light.focus,.btn-light:focus,.btn-light:hover{background-color:#e2e6ea;border-color:#dae0e5;color:#212529}.btn-light.focus,.btn-light:focus{box-shadow:0 0 0 .2rem hsla(220,4%,85%,.5)}.btn-light.disabled,.btn-light:disabled{background-color:#f8f9fa;border-color:#f8f9fa;color:#212529}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{background-color:#dae0e5;border-color:#d3d9df;color:#212529}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem hsla(220,4%,85%,.5)}.btn-dark{background-color:#343a40;border-color:#343a40;color:#fff}.btn-dark.focus,.btn-dark:focus,.btn-dark:hover{background-color:#23272b;border-color:#1d2124;color:#fff}.btn-dark.focus,.btn-dark:focus{box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-dark.disabled,.btn-dark:disabled{background-color:#343a40;border-color:#343a40;color:#fff}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{background-color:#1d2124;border-color:#171a1d;color:#fff}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-outline-primary{border-color:#007bff;color:#007bff}.btn-outline-primary:hover{background-color:#007bff;border-color:#007bff;color:#fff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{background-color:transparent;color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{background-color:#007bff;border-color:#007bff;color:#fff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-secondary{border-color:#6c757d;color:#6c757d}.btn-outline-secondary:hover{background-color:#6c757d;border-color:#6c757d;color:#fff}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem hsla(208,7%,46%,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{background-color:transparent;color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{background-color:#6c757d;border-color:#6c757d;color:#fff}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem hsla(208,7%,46%,.5)}.btn-outline-success{border-color:#28a745;color:#28a745}.btn-outline-success:hover{background-color:#28a745;border-color:#28a745;color:#fff}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{background-color:transparent;color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{background-color:#28a745;border-color:#28a745;color:#fff}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{border-color:#17a2b8;color:#17a2b8}.btn-outline-info:hover{background-color:#17a2b8;border-color:#17a2b8;color:#fff}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{background-color:transparent;color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{background-color:#17a2b8;border-color:#17a2b8;color:#fff}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{border-color:#ffc107;color:#ffc107}.btn-outline-warning:hover{background-color:#ffc107;border-color:#ffc107;color:#212529}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{background-color:transparent;color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{background-color:#ffc107;border-color:#ffc107;color:#212529}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{border-color:#dc3545;color:#dc3545}.btn-outline-danger:hover{background-color:#dc3545;border-color:#dc3545;color:#fff}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{background-color:transparent;color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{background-color:#dc3545;border-color:#dc3545;color:#fff}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-light{border-color:#f8f9fa;color:#f8f9fa}.btn-outline-light:hover{background-color:#f8f9fa;border-color:#f8f9fa;color:#212529}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{background-color:transparent;color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{background-color:#f8f9fa;border-color:#f8f9fa;color:#212529}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{border-color:#343a40;color:#343a40}.btn-outline-dark:hover{background-color:#343a40;border-color:#343a40;color:#fff}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{background-color:transparent;color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{background-color:#343a40;border-color:#343a40;color:#fff}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-link{color:#007bff;font-weight:400;text-decoration:none}.btn-link:hover{color:#0056b3}.btn-link.focus,.btn-link:focus,.btn-link:hover{text-decoration:underline}.btn-link.disabled,.btn-link:disabled{color:#6c757d;pointer-events:none}.btn-group-lg>.btn,.btn-lg{border-radius:.3rem;font-size:1.25rem;line-height:1.5;padding:.5rem 1rem}.btn-group-sm>.btn,.btn-sm{border-radius:.2rem;font-size:.875rem;line-height:1.5;padding:.25rem .5rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{height:0;overflow:hidden;position:relative;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.collapsing.width{height:auto;transition:width .35s ease;width:0}@media (prefers-reduced-motion:reduce){.collapsing.width{transition:none}}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle:after{border-bottom:0;border-left:.3em solid transparent;border-right:.3em solid transparent;border-top:.3em solid;content:"";display:inline-block;margin-left:.255em;vertical-align:.255em}.dropdown-toggle:empty:after{margin-left:0}.dropdown-menu{background-clip:padding-box;background-color:#fff;border:1px solid rgba(0,0,0,.15);border-radius:.25rem;color:#212529;display:none;float:left;font-size:1rem;left:0;list-style:none;margin:.125rem 0 0;min-width:10rem;padding:.5rem 0;position:absolute;text-align:left;top:100%;z-index:1000}.dropdown-menu-left{left:0;right:auto}.dropdown-menu-right{left:auto;right:0}@media (min-width:576px){.dropdown-menu-sm-left{left:0;right:auto}.dropdown-menu-sm-right{left:auto;right:0}}@media (min-width:768px){.dropdown-menu-md-left{left:0;right:auto}.dropdown-menu-md-right{left:auto;right:0}}@media (min-width:992px){.dropdown-menu-lg-left{left:0;right:auto}.dropdown-menu-lg-right{left:auto;right:0}}@media (min-width:1200px){.dropdown-menu-xl-left{left:0;right:auto}.dropdown-menu-xl-right{left:auto;right:0}}.dropup .dropdown-menu{bottom:100%;margin-bottom:.125rem;margin-top:0;top:auto}.dropup .dropdown-toggle:after{border-bottom:.3em solid;border-left:.3em solid transparent;border-right:.3em solid transparent;border-top:0;content:"";display:inline-block;margin-left:.255em;vertical-align:.255em}.dropup .dropdown-toggle:empty:after{margin-left:0}.dropright .dropdown-menu{left:100%;margin-left:.125rem;margin-top:0;right:auto;top:0}.dropright .dropdown-toggle:after{border-bottom:.3em solid transparent;border-left:.3em solid;border-right:0;border-top:.3em solid transparent;content:"";display:inline-block;margin-left:.255em;vertical-align:.255em}.dropright .dropdown-toggle:empty:after{margin-left:0}.dropright .dropdown-toggle:after{vertical-align:0}.dropleft .dropdown-menu{left:auto;margin-right:.125rem;margin-top:0;right:100%;top:0}.dropleft .dropdown-toggle:after{content:"";display:inline-block;display:none;margin-left:.255em;vertical-align:.255em}.dropleft .dropdown-toggle:before{border-bottom:.3em solid transparent;border-right:.3em solid;border-top:.3em solid transparent;content:"";display:inline-block;margin-right:.255em;vertical-align:.255em}.dropleft .dropdown-toggle:empty:after{margin-left:0}.dropleft .dropdown-toggle:before{vertical-align:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{bottom:auto;right:auto}.dropdown-divider{border-top:1px solid #e9ecef;height:0;margin:.5rem 0;overflow:hidden}.dropdown-item{background-color:transparent;border:0;clear:both;color:#212529;display:block;font-weight:400;padding:.25rem 1.5rem;text-align:inherit;white-space:nowrap;width:100%}.dropdown-item:focus,.dropdown-item:hover{background-color:#e9ecef;color:#16181b;text-decoration:none}.dropdown-item.active,.dropdown-item:active{background-color:#007bff;color:#fff;text-decoration:none}.dropdown-item.disabled,.dropdown-item:disabled{background-color:transparent;color:#adb5bd;pointer-events:none}.dropdown-menu.show{display:block}.dropdown-header{color:#6c757d;display:block;font-size:.875rem;margin-bottom:0;padding:.5rem 1.5rem;white-space:nowrap}.dropdown-item-text{color:#212529;display:block;padding:.25rem 1.5rem}.btn-group,.btn-group-vertical{display:inline-flex;position:relative;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{flex:1 1 auto;position:relative}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn-group:not(:first-child),.btn-group>.btn:not(:first-child){margin-left:-1px}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.dropdown-toggle-split{padding-left:.5625rem;padding-right:.5625rem}.dropdown-toggle-split:after,.dropright .dropdown-toggle-split:after,.dropup .dropdown-toggle-split:after{margin-left:0}.dropleft .dropdown-toggle-split:before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-left:.375rem;padding-right:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-left:.75rem;padding-right:.75rem}.btn-group-vertical{align-items:flex-start;flex-direction:column;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-left-radius:0;border-bottom-right-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio],.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio]{clip:rect(0,0,0,0);pointer-events:none;position:absolute}.input-group{align-items:stretch;display:flex;flex-wrap:wrap;position:relative;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control,.input-group>.form-control-plaintext{flex:1 1 auto;margin-bottom:0;min-width:0;position:relative;width:1%}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control,.input-group>.form-control-plaintext+.custom-file,.input-group>.form-control-plaintext+.custom-select,.input-group>.form-control-plaintext+.form-control{margin-left:-1px}.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.input-group>.custom-file{align-items:center;display:flex}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label:after{border-bottom-right-radius:0;border-top-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-bottom-left-radius:0;border-top-left-radius:0}.input-group.has-validation>.custom-file:nth-last-child(n+3) .custom-file-label,.input-group.has-validation>.custom-file:nth-last-child(n+3) .custom-file-label:after,.input-group.has-validation>.custom-select:nth-last-child(n+3),.input-group.has-validation>.form-control:nth-last-child(n+3),.input-group:not(.has-validation)>.custom-file:not(:last-child) .custom-file-label,.input-group:not(.has-validation)>.custom-file:not(:last-child) .custom-file-label:after,.input-group:not(.has-validation)>.custom-select:not(:last-child),.input-group:not(.has-validation)>.form-control:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.input-group-append,.input-group-prepend{display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn:focus,.input-group-prepend .btn:focus{z-index:3}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{align-items:center;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem;color:#495057;display:flex;font-size:1rem;font-weight:400;line-height:1.5;margin-bottom:0;padding:.375rem .75rem;text-align:center;white-space:nowrap}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group-lg>.custom-select,.input-group-lg>.form-control:not(textarea){height:calc(1.5em + 1rem + 2px)}.input-group-lg>.custom-select,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{border-radius:.3rem;font-size:1.25rem;line-height:1.5;padding:.5rem 1rem}.input-group-sm>.custom-select,.input-group-sm>.form-control:not(textarea){height:calc(1.5em + .5rem + 2px)}.input-group-sm>.custom-select,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{border-radius:.2rem;font-size:.875rem;line-height:1.5;padding:.25rem .5rem}.input-group-lg>.custom-select,.input-group-sm>.custom-select{padding-right:1.75rem}.input-group.has-validation>.input-group-append:nth-last-child(n+3)>.btn,.input-group.has-validation>.input-group-append:nth-last-child(n+3)>.input-group-text,.input-group:not(.has-validation)>.input-group-append:not(:last-child)>.btn,.input-group:not(.has-validation)>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-bottom-right-radius:0;border-top-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-bottom-left-radius:0;border-top-left-radius:0}.custom-control{display:block;min-height:1.5rem;padding-left:1.5rem;position:relative;-webkit-print-color-adjust:exact;print-color-adjust:exact;z-index:1}.custom-control-inline{display:inline-flex;margin-right:1rem}.custom-control-input{height:1.25rem;left:0;opacity:0;position:absolute;width:1rem;z-index:-1}.custom-control-input:checked~.custom-control-label:before{background-color:#007bff;border-color:#007bff;color:#fff}.custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-control-input:focus:not(:checked)~.custom-control-label:before{border-color:#80bdff}.custom-control-input:not(:disabled):active~.custom-control-label:before{background-color:#b3d7ff;border-color:#b3d7ff;color:#fff}.custom-control-input:disabled~.custom-control-label,.custom-control-input[disabled]~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label:before,.custom-control-input[disabled]~.custom-control-label:before{background-color:#e9ecef}.custom-control-label{margin-bottom:0;position:relative;vertical-align:top}.custom-control-label:before{background-color:#fff;border:1px solid #adb5bd;pointer-events:none}.custom-control-label:after,.custom-control-label:before{content:"";display:block;height:1rem;left:-1.5rem;position:absolute;top:.25rem;width:1rem}.custom-control-label:after{background:50%/50% 50% no-repeat}.custom-checkbox .custom-control-label:before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='m6.564.75-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label:before{background-color:#007bff;border-color:#007bff}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4' viewBox='0 0 4 4'%3E%3Cpath stroke='%23fff' d='M0 2h4'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label:before{background-color:rgba(0,123,255,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label:before{background-color:rgba(0,123,255,.5)}.custom-radio .custom-control-label:before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label:before{background-color:rgba(0,123,255,.5)}.custom-switch{padding-left:2.25rem}.custom-switch .custom-control-label:before{border-radius:.5rem;left:-2.25rem;pointer-events:all;width:1.75rem}.custom-switch .custom-control-label:after{background-color:#adb5bd;border-radius:.5rem;height:calc(1rem - 4px);left:calc(-2.25rem + 2px);top:calc(.25rem + 2px);transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;width:calc(1rem - 4px)}@media (prefers-reduced-motion:reduce){.custom-switch .custom-control-label:after{transition:none}}.custom-switch .custom-control-input:checked~.custom-control-label:after{background-color:#fff;transform:translateX(.75rem)}.custom-switch .custom-control-input:disabled:checked~.custom-control-label:before{background-color:rgba(0,123,255,.5)}.custom-select{-webkit-appearance:none;appearance:none;background:#fff url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3E%3Cpath fill='%23343a40' d='M2 0 0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") right .75rem center/8px 10px no-repeat;border:1px solid #ced4da;border-radius:.25rem;color:#495057;display:inline-block;font-size:1rem;font-weight:400;height:calc(1.5em + .75rem + 2px);line-height:1.5;padding:.375rem 1.75rem .375rem .75rem;vertical-align:middle;width:100%}.custom-select:focus{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25);outline:0}.custom-select:focus::-ms-value{background-color:#fff;color:#495057}.custom-select[multiple],.custom-select[size]:not([size="1"]){background-image:none;height:auto;padding-right:.75rem}.custom-select:disabled{background-color:#e9ecef;color:#6c757d}.custom-select::-ms-expand{display:none}.custom-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}.custom-select-sm{font-size:.875rem;height:calc(1.5em + .5rem + 2px);padding-bottom:.25rem;padding-left:.5rem;padding-top:.25rem}.custom-select-lg{font-size:1.25rem;height:calc(1.5em + 1rem + 2px);padding-bottom:.5rem;padding-left:1rem;padding-top:.5rem}.custom-file{display:inline-block;margin-bottom:0}.custom-file,.custom-file-input{height:calc(1.5em + .75rem + 2px);position:relative;width:100%}.custom-file-input{margin:0;opacity:0;overflow:hidden;z-index:2}.custom-file-input:focus~.custom-file-label{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-file-input:disabled~.custom-file-label,.custom-file-input[disabled]~.custom-file-label{background-color:#e9ecef}.custom-file-input:lang(en)~.custom-file-label:after{content:"Browse"}.custom-file-input~.custom-file-label[data-browse]:after{content:attr(data-browse)}.custom-file-label{background-color:#fff;border:1px solid #ced4da;border-radius:.25rem;font-weight:400;height:calc(1.5em + .75rem + 2px);left:0;overflow:hidden;z-index:1}.custom-file-label,.custom-file-label:after{color:#495057;line-height:1.5;padding:.375rem .75rem;position:absolute;right:0;top:0}.custom-file-label:after{background-color:#e9ecef;border-left:inherit;border-radius:0 .25rem .25rem 0;bottom:0;content:"Browse";display:block;height:calc(1.5em + .75rem);z-index:3}.custom-range{-webkit-appearance:none;appearance:none;background-color:transparent;height:1.4rem;padding:0;width:100%}.custom-range:focus{outline:0}.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;background-color:#007bff;border:0;border-radius:1rem;height:1rem;margin-top:-.25rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;width:1rem}@media (prefers-reduced-motion:reduce){.custom-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#b3d7ff}.custom-range::-webkit-slider-runnable-track{background-color:#dee2e6;border-color:transparent;border-radius:1rem;color:transparent;cursor:pointer;height:.5rem;width:100%}.custom-range::-moz-range-thumb{appearance:none;background-color:#007bff;border:0;border-radius:1rem;height:1rem;-moz-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;width:1rem}@media (prefers-reduced-motion:reduce){.custom-range::-moz-range-thumb{-moz-transition:none;transition:none}}.custom-range::-moz-range-thumb:active{background-color:#b3d7ff}.custom-range::-moz-range-track{background-color:#dee2e6;border-color:transparent;border-radius:1rem;color:transparent;cursor:pointer;height:.5rem;width:100%}.custom-range::-ms-thumb{appearance:none;background-color:#007bff;border:0;border-radius:1rem;height:1rem;margin-left:.2rem;margin-right:.2rem;margin-top:0;-ms-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;width:1rem}@media (prefers-reduced-motion:reduce){.custom-range::-ms-thumb{-ms-transition:none;transition:none}}.custom-range::-ms-thumb:active{background-color:#b3d7ff}.custom-range::-ms-track{background-color:transparent;border-color:transparent;border-width:.5rem;color:transparent;cursor:pointer;height:.5rem;width:100%}.custom-range::-ms-fill-lower,.custom-range::-ms-fill-upper{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px}.custom-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.custom-range:disabled::-webkit-slider-runnable-track{cursor:default}.custom-range:disabled::-moz-range-thumb{background-color:#adb5bd}.custom-range:disabled::-moz-range-track{cursor:default}.custom-range:disabled::-ms-thumb{background-color:#adb5bd}.custom-control-label:before,.custom-file-label,.custom-select{transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-control-label:before,.custom-file-label,.custom-select{transition:none}}.nav{display:flex;flex-wrap:wrap;list-style:none;margin-bottom:0;padding-left:0}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d;cursor:default;pointer-events:none}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-link{background-color:transparent;border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem;margin-bottom:-1px}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6;isolation:isolate}.nav-tabs .nav-link.disabled{background-color:transparent;border-color:transparent;color:#6c757d}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{background-color:#fff;border-color:#dee2e6 #dee2e6 #fff;color:#495057}.nav-tabs .dropdown-menu{border-top-left-radius:0;border-top-right-radius:0;margin-top:-1px}.nav-pills .nav-link{background:0 0;border:0;border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{background-color:#007bff;color:#fff}.nav-fill .nav-item,.nav-fill>.nav-link{flex:1 1 auto;text-align:center}.nav-justified .nav-item,.nav-justified>.nav-link{flex-basis:0;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{padding:.5rem 1rem;position:relative}.navbar,.navbar .container,.navbar .container-fluid,.navbar .container-lg,.navbar .container-md,.navbar .container-sm,.navbar .container-xl{align-items:center;display:flex;flex-wrap:wrap;justify-content:space-between}.navbar-brand{display:inline-block;font-size:1.25rem;line-height:inherit;margin-right:1rem;padding-bottom:.3125rem;padding-top:.3125rem;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:flex;flex-direction:column;list-style:none;margin-bottom:0;padding-left:0}.navbar-nav .nav-link{padding-left:0;padding-right:0}.navbar-nav .dropdown-menu{float:none;position:static}.navbar-text{display:inline-block;padding-bottom:.5rem;padding-top:.5rem}.navbar-collapse{align-items:center;flex-basis:100%;flex-grow:1}.navbar-toggler{background-color:transparent;border:1px solid transparent;border-radius:.25rem;font-size:1.25rem;line-height:1;padding:.25rem .75rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler-icon{background:50%/100% 100% no-repeat;content:"";display:inline-block;height:1.5em;vertical-align:middle;width:1.5em}.navbar-nav-scroll{max-height:75vh;overflow-y:auto}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{padding-left:0;padding-right:0}}@media (min-width:576px){.navbar-expand-sm{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-left:.5rem;padding-right:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{flex-wrap:nowrap}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{padding-left:0;padding-right:0}}@media (min-width:768px){.navbar-expand-md{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-left:.5rem;padding-right:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{flex-wrap:nowrap}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{padding-left:0;padding-right:0}}@media (min-width:992px){.navbar-expand-lg{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-left:.5rem;padding-right:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{flex-wrap:nowrap}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{padding-left:0;padding-right:0}}@media (min-width:1200px){.navbar-expand-xl{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-left:.5rem;padding-right:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{flex-wrap:nowrap}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{padding-left:0;padding-right:0}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-left:.5rem;padding-right:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{flex-wrap:nowrap}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand,.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{border-color:rgba(0,0,0,.1);color:rgba(0,0,0,.5)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a,.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand,.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:hsla(0,0%,100%,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:hsla(0,0%,100%,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:hsla(0,0%,100%,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{border-color:hsla(0,0%,100%,.1);color:hsla(0,0%,100%,.5)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3E%3Cpath stroke='rgba(255, 255, 255, 0.5)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-dark .navbar-text{color:hsla(0,0%,100%,.5)}.navbar-dark .navbar-text a,.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{word-wrap:break-word;background-clip:border-box;background-color:#fff;border:1px solid rgba(0,0,0,.125);border-radius:.25rem;display:flex;flex-direction:column;min-width:0;position:relative}.card>hr{margin-left:0;margin-right:0}.card>.list-group{border-bottom:inherit;border-top:inherit}.card>.list-group:first-child{border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px);border-top-width:0}.card>.list-group:last-child{border-bottom-left-radius:calc(.25rem - 1px);border-bottom-right-radius:calc(.25rem - 1px);border-bottom-width:0}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{flex:1 1 auto;min-height:1px;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem}.card-subtitle,.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125);margin-bottom:0;padding:.75rem 1.25rem}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-footer{background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125);padding:.75rem 1.25rem}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{border-bottom:0;margin-bottom:-.75rem}.card-header-pills,.card-header-tabs{margin-left:-.625rem;margin-right:-.625rem}.card-img-overlay{border-radius:calc(.25rem - 1px);bottom:0;left:0;padding:1.25rem;position:absolute;right:0;top:0}.card-img,.card-img-bottom,.card-img-top{flex-shrink:0;width:100%}.card-img,.card-img-top{border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom{border-bottom-left-radius:calc(.25rem - 1px);border-bottom-right-radius:calc(.25rem - 1px)}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{display:flex;flex-flow:row wrap;margin-left:-15px;margin-right:-15px}.card-deck .card{flex:1 0;margin-bottom:0;margin-left:15px;margin-right:15px}}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{display:flex;flex-flow:row wrap}.card-group>.card{flex:1 0;margin-bottom:0}.card-group>.card+.card{border-left:0;margin-left:0}.card-group>.card:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{column-count:3;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion{overflow-anchor:none}.accordion>.card{overflow:hidden}.accordion>.card:not(:last-of-type){border-bottom:0;border-bottom-left-radius:0;border-bottom-right-radius:0}.accordion>.card:not(:first-of-type){border-top-left-radius:0;border-top-right-radius:0}.accordion>.card>.card-header{border-radius:0;margin-bottom:-1px}.breadcrumb{background-color:#e9ecef;border-radius:.25rem;display:flex;flex-wrap:wrap;list-style:none;margin-bottom:1rem;padding:.75rem 1rem}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item:before{color:#6c757d;content:"/";float:left;padding-right:.5rem}.breadcrumb-item+.breadcrumb-item:hover:before{text-decoration:underline;text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{border-radius:.25rem;display:flex;list-style:none;padding-left:0}.page-link{background-color:#fff;border:1px solid #dee2e6;color:#007bff;display:block;line-height:1.25;margin-left:-1px;padding:.5rem .75rem;position:relative}.page-link:hover{background-color:#e9ecef;border-color:#dee2e6;color:#0056b3;text-decoration:none;z-index:2}.page-link:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.25);outline:0;z-index:3}.page-item:first-child .page-link{border-bottom-left-radius:.25rem;border-top-left-radius:.25rem;margin-left:0}.page-item:last-child .page-link{border-bottom-right-radius:.25rem;border-top-right-radius:.25rem}.page-item.active .page-link{background-color:#007bff;border-color:#007bff;color:#fff;z-index:3}.page-item.disabled .page-link{background-color:#fff;border-color:#dee2e6;color:#6c757d;cursor:auto;pointer-events:none}.pagination-lg .page-link{font-size:1.25rem;line-height:1.5;padding:.75rem 1.5rem}.pagination-lg .page-item:first-child .page-link{border-bottom-left-radius:.3rem;border-top-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-bottom-right-radius:.3rem;border-top-right-radius:.3rem}.pagination-sm .page-link{font-size:.875rem;line-height:1.5;padding:.25rem .5rem}.pagination-sm .page-item:first-child .page-link{border-bottom-left-radius:.2rem;border-top-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-bottom-right-radius:.2rem;border-top-right-radius:.2rem}.badge{border-radius:.25rem;display:inline-block;font-size:75%;font-weight:700;line-height:1;padding:.25em .4em;text-align:center;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;vertical-align:baseline;white-space:nowrap}@media (prefers-reduced-motion:reduce){.badge{transition:none}}a.badge:focus,a.badge:hover{text-decoration:none}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{border-radius:10rem;padding-left:.6em;padding-right:.6em}.badge-primary{background-color:#007bff;color:#fff}a.badge-primary:focus,a.badge-primary:hover{background-color:#0062cc;color:#fff}a.badge-primary.focus,a.badge-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5);outline:0}.badge-secondary{background-color:#6c757d;color:#fff}a.badge-secondary:focus,a.badge-secondary:hover{background-color:#545b62;color:#fff}a.badge-secondary.focus,a.badge-secondary:focus{box-shadow:0 0 0 .2rem hsla(208,7%,46%,.5);outline:0}.badge-success{background-color:#28a745;color:#fff}a.badge-success:focus,a.badge-success:hover{background-color:#1e7e34;color:#fff}a.badge-success.focus,a.badge-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5);outline:0}.badge-info{background-color:#17a2b8;color:#fff}a.badge-info:focus,a.badge-info:hover{background-color:#117a8b;color:#fff}a.badge-info.focus,a.badge-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5);outline:0}.badge-warning{background-color:#ffc107;color:#212529}a.badge-warning:focus,a.badge-warning:hover{background-color:#d39e00;color:#212529}a.badge-warning.focus,a.badge-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5);outline:0}.badge-danger{background-color:#dc3545;color:#fff}a.badge-danger:focus,a.badge-danger:hover{background-color:#bd2130;color:#fff}a.badge-danger.focus,a.badge-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5);outline:0}.badge-light{background-color:#f8f9fa;color:#212529}a.badge-light:focus,a.badge-light:hover{background-color:#dae0e5;color:#212529}a.badge-light.focus,a.badge-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5);outline:0}.badge-dark{background-color:#343a40;color:#fff}a.badge-dark:focus,a.badge-dark:hover{background-color:#1d2124;color:#fff}a.badge-dark.focus,a.badge-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5);outline:0}.jumbotron{background-color:#e9ecef;border-radius:.3rem;margin-bottom:2rem;padding:2rem 1rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{border-radius:0;padding-left:0;padding-right:0}.alert{border:1px solid transparent;border-radius:.25rem;margin-bottom:1rem;padding:.75rem 1.25rem;position:relative}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{color:inherit;padding:.75rem 1.25rem;position:absolute;right:0;top:0;z-index:2}.alert-primary{background-color:#cce5ff;border-color:#b8daff;color:#004085}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{background-color:#e2e3e5;border-color:#d6d8db;color:#383d41}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{background-color:#d4edda;border-color:#c3e6cb;color:#155724}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{background-color:#d1ecf1;border-color:#bee5eb;color:#0c5460}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{background-color:#fff3cd;border-color:#ffeeba;color:#856404}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{background-color:#f8d7da;border-color:#f5c6cb;color:#721c24}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{background-color:#fefefe;border-color:#fdfdfe;color:#818182}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{background-color:#d6d8d9;border-color:#c6c8ca;color:#1b1e21}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@keyframes progress-bar-stripes{0%{background-position:1rem 0}to{background-position:0 0}}.progress{background-color:#e9ecef;border-radius:.25rem;font-size:.75rem;height:1rem;line-height:0}.progress,.progress-bar{display:flex;overflow:hidden}.progress-bar{background-color:#007bff;color:#fff;flex-direction:column;justify-content:center;text-align:center;transition:width .6s ease;white-space:nowrap}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent);background-size:1rem 1rem}.progress-bar-animated{animation:progress-bar-stripes 1s linear infinite}@media (prefers-reduced-motion:reduce){.progress-bar-animated{animation:none}}.media{align-items:flex-start;display:flex}.media-body{flex:1 1}.list-group{border-radius:.25rem;display:flex;flex-direction:column;margin-bottom:0;padding-left:0}.list-group-item-action{color:#495057;text-align:inherit;width:100%}.list-group-item-action:focus,.list-group-item-action:hover{background-color:#f8f9fa;color:#495057;text-decoration:none;z-index:1}.list-group-item-action:active{background-color:#e9ecef;color:#212529}.list-group-item{background-color:#fff;border:1px solid rgba(0,0,0,.125);display:block;padding:.75rem 1.25rem;position:relative}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-left-radius:inherit;border-bottom-right-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{background-color:#fff;color:#6c757d;pointer-events:none}.list-group-item.active{background-color:#007bff;border-color:#007bff;color:#fff;z-index:2}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{border-top-width:1px;margin-top:-1px}.list-group-horizontal{flex-direction:row}.list-group-horizontal>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child{border-bottom-left-radius:0;border-top-right-radius:.25rem}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-left-width:0;border-top-width:1px}.list-group-horizontal>.list-group-item+.list-group-item.active{border-left-width:1px;margin-left:-1px}@media (min-width:576px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child{border-bottom-left-radius:0;border-top-right-radius:.25rem}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-left-width:0;border-top-width:1px}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{border-left-width:1px;margin-left:-1px}}@media (min-width:768px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child{border-bottom-left-radius:0;border-top-right-radius:.25rem}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-left-width:0;border-top-width:1px}.list-group-horizontal-md>.list-group-item+.list-group-item.active{border-left-width:1px;margin-left:-1px}}@media (min-width:992px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child{border-bottom-left-radius:0;border-top-right-radius:.25rem}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-left-width:0;border-top-width:1px}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{border-left-width:1px;margin-left:-1px}}@media (min-width:1200px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child{border-bottom-left-radius:0;border-top-right-radius:.25rem}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-left-width:0;border-top-width:1px}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{border-left-width:1px;margin-left:-1px}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 1px}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{background-color:#b8daff;color:#004085}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{background-color:#9fcdff;color:#004085}.list-group-item-primary.list-group-item-action.active{background-color:#004085;border-color:#004085;color:#fff}.list-group-item-secondary{background-color:#d6d8db;color:#383d41}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{background-color:#c8cbcf;color:#383d41}.list-group-item-secondary.list-group-item-action.active{background-color:#383d41;border-color:#383d41;color:#fff}.list-group-item-success{background-color:#c3e6cb;color:#155724}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{background-color:#b1dfbb;color:#155724}.list-group-item-success.list-group-item-action.active{background-color:#155724;border-color:#155724;color:#fff}.list-group-item-info{background-color:#bee5eb;color:#0c5460}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{background-color:#abdde5;color:#0c5460}.list-group-item-info.list-group-item-action.active{background-color:#0c5460;border-color:#0c5460;color:#fff}.list-group-item-warning{background-color:#ffeeba;color:#856404}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{background-color:#ffe8a1;color:#856404}.list-group-item-warning.list-group-item-action.active{background-color:#856404;border-color:#856404;color:#fff}.list-group-item-danger{background-color:#f5c6cb;color:#721c24}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{background-color:#f1b0b7;color:#721c24}.list-group-item-danger.list-group-item-action.active{background-color:#721c24;border-color:#721c24;color:#fff}.list-group-item-light{background-color:#fdfdfe;color:#818182}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{background-color:#ececf6;color:#818182}.list-group-item-light.list-group-item-action.active{background-color:#818182;border-color:#818182;color:#fff}.list-group-item-dark{background-color:#c6c8ca;color:#1b1e21}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{background-color:#b9bbbe;color:#1b1e21}.list-group-item-dark.list-group-item-action.active{background-color:#1b1e21;border-color:#1b1e21;color:#fff}.close{color:#000;float:right;font-size:1.5rem;font-weight:700;line-height:1;opacity:.5;text-shadow:0 1px 0 #fff}.close:hover{color:#000;text-decoration:none}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover{opacity:.75}button.close{background-color:transparent;border:0;padding:0}a.close.disabled{pointer-events:none}.toast{background-clip:padding-box;background-color:hsla(0,0%,100%,.85);border:1px solid rgba(0,0,0,.1);border-radius:.25rem;box-shadow:0 .25rem .75rem rgba(0,0,0,.1);flex-basis:350px;font-size:.875rem;max-width:350px;opacity:0}.toast:not(:last-child){margin-bottom:.75rem}.toast.showing{opacity:1}.toast.show{display:block;opacity:1}.toast.hide{display:none}.toast-header{align-items:center;background-clip:padding-box;background-color:hsla(0,0%,100%,.85);border-bottom:1px solid rgba(0,0,0,.05);border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px);color:#6c757d;display:flex;padding:.25rem .75rem}.toast-body{padding:.75rem}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{display:none;height:100%;left:0;outline:0;overflow:hidden;position:fixed;top:0;width:100%;z-index:1050}.modal-dialog{margin:.5rem;pointer-events:none;position:relative;width:auto}.modal.fade .modal-dialog{transform:translateY(-50px);transition:transform .3s ease-out}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal.modal-static .modal-dialog{transform:scale(1.02)}.modal-dialog-scrollable{display:flex;max-height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.modal-dialog-scrollable .modal-footer,.modal-dialog-scrollable .modal-header{flex-shrink:0}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{align-items:center;display:flex;min-height:calc(100% - 1rem)}.modal-dialog-centered:before{content:"";display:block;height:calc(100vh - 1rem);height:min-content}.modal-dialog-centered.modal-dialog-scrollable{flex-direction:column;height:100%;justify-content:center}.modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}.modal-dialog-centered.modal-dialog-scrollable:before{content:none}.modal-content{background-clip:padding-box;background-color:#fff;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;display:flex;flex-direction:column;outline:0;pointer-events:auto;position:relative;width:100%}.modal-backdrop{background-color:#000;height:100vh;left:0;position:fixed;top:0;width:100vw;z-index:1040}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{align-items:flex-start;border-bottom:1px solid #dee2e6;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px);display:flex;justify-content:space-between;padding:1rem}.modal-header .close{margin:-1rem -1rem -1rem auto;padding:1rem}.modal-title{line-height:1.5;margin-bottom:0}.modal-body{flex:1 1 auto;padding:1rem;position:relative}.modal-footer{align-items:center;border-bottom-left-radius:calc(.3rem - 1px);border-bottom-right-radius:calc(.3rem - 1px);border-top:1px solid #dee2e6;display:flex;flex-wrap:wrap;justify-content:flex-end;padding:.75rem}.modal-footer>*{margin:.25rem}.modal-scrollbar-measure{height:50px;overflow:scroll;position:absolute;top:-9999px;width:50px}@media (min-width:576px){.modal-dialog{margin:1.75rem auto;max-width:500px}.modal-dialog-scrollable{max-height:calc(100% - 3.5rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-dialog-centered:before{height:calc(100vh - 3.5rem);height:min-content}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width:1200px){.modal-xl{max-width:1140px}}.tooltip{word-wrap:break-word;display:block;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,Liberation Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-size:.875rem;font-style:normal;font-weight:400;letter-spacing:normal;line-break:auto;line-height:1.5;margin:0;opacity:0;position:absolute;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;z-index:1070}.tooltip.show{opacity:.9}.tooltip .arrow{display:block;height:.4rem;position:absolute;width:.8rem}.tooltip .arrow:before{border-color:transparent;border-style:solid;content:"";position:absolute}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow:before,.bs-tooltip-top .arrow:before{border-top-color:#000;border-width:.4rem .4rem 0;top:0}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{height:.8rem;left:0;width:.4rem}.bs-tooltip-auto[x-placement^=right] .arrow:before,.bs-tooltip-right .arrow:before{border-right-color:#000;border-width:.4rem .4rem .4rem 0;right:0}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow:before,.bs-tooltip-bottom .arrow:before{border-bottom-color:#000;border-width:0 .4rem .4rem;bottom:0}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{height:.8rem;right:0;width:.4rem}.bs-tooltip-auto[x-placement^=left] .arrow:before,.bs-tooltip-left .arrow:before{border-left-color:#000;border-width:.4rem 0 .4rem .4rem;left:0}.tooltip-inner{background-color:#000;border-radius:.25rem;color:#fff;max-width:200px;padding:.25rem .5rem;text-align:center}.popover{word-wrap:break-word;background-clip:padding-box;background-color:#fff;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,Liberation Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-size:.875rem;font-style:normal;font-weight:400;left:0;letter-spacing:normal;line-break:auto;line-height:1.5;max-width:276px;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;top:0;white-space:normal;word-break:normal;word-spacing:normal;z-index:1060}.popover,.popover .arrow{display:block;position:absolute}.popover .arrow{height:.5rem;margin:0 .3rem;width:1rem}.popover .arrow:after,.popover .arrow:before{border-color:transparent;border-style:solid;content:"";display:block;position:absolute}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top]>.arrow,.bs-popover-top>.arrow{bottom:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=top]>.arrow:before,.bs-popover-top>.arrow:before{border-top-color:rgba(0,0,0,.25);border-width:.5rem .5rem 0;bottom:0}.bs-popover-auto[x-placement^=top]>.arrow:after,.bs-popover-top>.arrow:after{border-top-color:#fff;border-width:.5rem .5rem 0;bottom:1px}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right]>.arrow,.bs-popover-right>.arrow{height:1rem;left:calc(-.5rem - 1px);margin:.3rem 0;width:.5rem}.bs-popover-auto[x-placement^=right]>.arrow:before,.bs-popover-right>.arrow:before{border-right-color:rgba(0,0,0,.25);border-width:.5rem .5rem .5rem 0;left:0}.bs-popover-auto[x-placement^=right]>.arrow:after,.bs-popover-right>.arrow:after{border-right-color:#fff;border-width:.5rem .5rem .5rem 0;left:1px}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom]>.arrow,.bs-popover-bottom>.arrow{top:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=bottom]>.arrow:before,.bs-popover-bottom>.arrow:before{border-bottom-color:rgba(0,0,0,.25);border-width:0 .5rem .5rem;top:0}.bs-popover-auto[x-placement^=bottom]>.arrow:after,.bs-popover-bottom>.arrow:after{border-bottom-color:#fff;border-width:0 .5rem .5rem;top:1px}.bs-popover-auto[x-placement^=bottom] .popover-header:before,.bs-popover-bottom .popover-header:before{border-bottom:1px solid #f7f7f7;content:"";display:block;left:50%;margin-left:-.5rem;position:absolute;top:0;width:1rem}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left]>.arrow,.bs-popover-left>.arrow{height:1rem;margin:.3rem 0;right:calc(-.5rem - 1px);width:.5rem}.bs-popover-auto[x-placement^=left]>.arrow:before,.bs-popover-left>.arrow:before{border-left-color:rgba(0,0,0,.25);border-width:.5rem 0 .5rem .5rem;right:0}.bs-popover-auto[x-placement^=left]>.arrow:after,.bs-popover-left>.arrow:after{border-left-color:#fff;border-width:.5rem 0 .5rem .5rem;right:1px}.popover-header{background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px);font-size:1rem;margin-bottom:0;padding:.5rem .75rem}.popover-header:empty{display:none}.popover-body{color:#212529;padding:.5rem .75rem}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y}.carousel-inner{overflow:hidden;position:relative;width:100%}.carousel-inner:after{clear:both;content:"";display:block}.carousel-item{backface-visibility:hidden;display:none;float:left;margin-right:-100%;position:relative;transition:transform .6s ease-in-out;width:100%}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-right,.carousel-item-next:not(.carousel-item-left){transform:translateX(100%)}.active.carousel-item-left,.carousel-item-prev:not(.carousel-item-right){transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transform:none;transition-property:opacity}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{opacity:1;z-index:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{opacity:0;transition:opacity 0s .6s;z-index:0}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{transition:none}}.carousel-control-next,.carousel-control-prev{align-items:center;background:0 0;border:0;bottom:0;color:#fff;display:flex;justify-content:center;opacity:.5;padding:0;position:absolute;text-align:center;top:0;transition:opacity .15s ease;width:15%;z-index:1}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;opacity:.9;outline:0;text-decoration:none}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{background:50%/100% 100% no-repeat;display:inline-block;height:20px;width:20px}.carousel-control-prev-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='m5.25 0-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3E%3C/svg%3E")}.carousel-control-next-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='m2.75 0-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3E%3C/svg%3E")}.carousel-indicators{bottom:0;display:flex;justify-content:center;left:0;list-style:none;margin-left:15%;margin-right:15%;padding-left:0;position:absolute;right:0;z-index:15}.carousel-indicators li{background-clip:padding-box;background-color:#fff;border-bottom:10px solid transparent;border-top:10px solid transparent;box-sizing:content-box;cursor:pointer;flex:0 1 auto;height:3px;margin-left:3px;margin-right:3px;opacity:.5;text-indent:-999px;transition:opacity .6s ease;width:30px}@media (prefers-reduced-motion:reduce){.carousel-indicators li{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{bottom:20px;color:#fff;left:15%;padding-bottom:20px;padding-top:20px;position:absolute;right:15%;text-align:center;z-index:10}@keyframes spinner-border{to{transform:rotate(1turn)}}.spinner-border{animation:spinner-border .75s linear infinite;border:.25em solid;border-radius:50%;border-right:.25em solid transparent;display:inline-block;height:2rem;vertical-align:-.125em;width:2rem}.spinner-border-sm{border-width:.2em;height:1rem;width:1rem}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}.spinner-grow{animation:spinner-grow .75s linear infinite;background-color:currentcolor;border-radius:50%;display:inline-block;height:2rem;opacity:0;vertical-align:-.125em;width:2rem}.spinner-grow-sm{height:1rem;width:1rem}@media (prefers-reduced-motion:reduce){.spinner-border,.spinner-grow{animation-duration:1.5s}}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#007bff!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0062cc!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#007bff!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded-sm{border-radius:.2rem!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important}.rounded-right,.rounded-top{border-top-right-radius:.25rem!important}.rounded-bottom,.rounded-right{border-bottom-right-radius:.25rem!important}.rounded-bottom,.rounded-left{border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important}.rounded-lg{border-radius:.3rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-0{border-radius:0!important}.clearfix:after{clear:both;content:"";display:block}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:flex!important}.d-inline-flex{display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}}.embed-responsive{display:block;overflow:hidden;padding:0;position:relative;width:100%}.embed-responsive:before{content:"";display:block}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{border:0;bottom:0;height:100%;left:0;position:absolute;top:0;width:100%}.embed-responsive-21by9:before{padding-top:42.857143%}.embed-responsive-16by9:before{padding-top:56.25%}.embed-responsive-4by3:before{padding-top:75%}.embed-responsive-1by1:before{padding-top:100%}.flex-row{flex-direction:row!important}.flex-column{flex-direction:column!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-column-reverse{flex-direction:column-reverse!important}.flex-wrap{flex-wrap:wrap!important}.flex-nowrap{flex-wrap:nowrap!important}.flex-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-fill{flex:1 1 auto!important}.flex-grow-0{flex-grow:0!important}.flex-grow-1{flex-grow:1!important}.flex-shrink-0{flex-shrink:0!important}.flex-shrink-1{flex-shrink:1!important}.justify-content-start{justify-content:flex-start!important}.justify-content-end{justify-content:flex-end!important}.justify-content-center{justify-content:center!important}.justify-content-between{justify-content:space-between!important}.justify-content-around{justify-content:space-around!important}.align-items-start{align-items:flex-start!important}.align-items-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.align-items-baseline{align-items:baseline!important}.align-items-stretch{align-items:stretch!important}.align-content-start{align-content:flex-start!important}.align-content-end{align-content:flex-end!important}.align-content-center{align-content:center!important}.align-content-between{align-content:space-between!important}.align-content-around{align-content:space-around!important}.align-content-stretch{align-content:stretch!important}.align-self-auto{align-self:auto!important}.align-self-start{align-self:flex-start!important}.align-self-end{align-self:flex-end!important}.align-self-center{align-self:center!important}.align-self-baseline{align-self:baseline!important}.align-self-stretch{align-self:stretch!important}@media (min-width:576px){.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-sm-fill{flex:1 1 auto!important}.flex-sm-grow-0{flex-grow:0!important}.flex-sm-grow-1{flex-grow:1!important}.flex-sm-shrink-0{flex-shrink:0!important}.flex-sm-shrink-1{flex-shrink:1!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}}@media (min-width:768px){.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-md-fill{flex:1 1 auto!important}.flex-md-grow-0{flex-grow:0!important}.flex-md-grow-1{flex-grow:1!important}.flex-md-shrink-0{flex-shrink:0!important}.flex-md-shrink-1{flex-shrink:1!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-lg-fill{flex:1 1 auto!important}.flex-lg-grow-0{flex-grow:0!important}.flex-lg-grow-1{flex-grow:1!important}.flex-lg-shrink-0{flex-shrink:0!important}.flex-lg-shrink-1{flex-shrink:1!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-xl-fill{flex:1 1 auto!important}.flex-xl-grow-0{flex-grow:0!important}.flex-xl-grow-1{flex-grow:1!important}.flex-xl-shrink-0{flex-shrink:0!important}.flex-xl-shrink-1{flex-shrink:1!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.user-select-all{-webkit-user-select:all!important;user-select:all!important}.user-select-auto{-webkit-user-select:auto!important;user-select:auto!important}.user-select-none{-webkit-user-select:none!important;user-select:none!important}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:sticky!important}.fixed-top{top:0}.fixed-bottom,.fixed-top{left:0;position:fixed;right:0;z-index:1030}.fixed-bottom{bottom:0}@supports (position:sticky){.sticky-top{position:sticky;top:0;z-index:1020}}.sr-only{clip:rect(0,0,0,0);border:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;overflow:visible;position:static;white-space:normal;width:auto}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.min-vw-100{min-width:100vw!important}.min-vh-100{min-height:100vh!important}.vw-100{width:100vw!important}.vh-100{height:100vh!important}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-n1{margin:-.25rem!important}.mt-n1,.my-n1{margin-top:-.25rem!important}.mr-n1,.mx-n1{margin-right:-.25rem!important}.mb-n1,.my-n1{margin-bottom:-.25rem!important}.ml-n1,.mx-n1{margin-left:-.25rem!important}.m-n2{margin:-.5rem!important}.mt-n2,.my-n2{margin-top:-.5rem!important}.mr-n2,.mx-n2{margin-right:-.5rem!important}.mb-n2,.my-n2{margin-bottom:-.5rem!important}.ml-n2,.mx-n2{margin-left:-.5rem!important}.m-n3{margin:-1rem!important}.mt-n3,.my-n3{margin-top:-1rem!important}.mr-n3,.mx-n3{margin-right:-1rem!important}.mb-n3,.my-n3{margin-bottom:-1rem!important}.ml-n3,.mx-n3{margin-left:-1rem!important}.m-n4{margin:-1.5rem!important}.mt-n4,.my-n4{margin-top:-1.5rem!important}.mr-n4,.mx-n4{margin-right:-1.5rem!important}.mb-n4,.my-n4{margin-bottom:-1.5rem!important}.ml-n4,.mx-n4{margin-left:-1.5rem!important}.m-n5{margin:-3rem!important}.mt-n5,.my-n5{margin-top:-3rem!important}.mr-n5,.mx-n5{margin-right:-3rem!important}.mb-n5,.my-n5{margin-bottom:-3rem!important}.ml-n5,.mx-n5{margin-left:-3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-n1{margin:-.25rem!important}.mt-sm-n1,.my-sm-n1{margin-top:-.25rem!important}.mr-sm-n1,.mx-sm-n1{margin-right:-.25rem!important}.mb-sm-n1,.my-sm-n1{margin-bottom:-.25rem!important}.ml-sm-n1,.mx-sm-n1{margin-left:-.25rem!important}.m-sm-n2{margin:-.5rem!important}.mt-sm-n2,.my-sm-n2{margin-top:-.5rem!important}.mr-sm-n2,.mx-sm-n2{margin-right:-.5rem!important}.mb-sm-n2,.my-sm-n2{margin-bottom:-.5rem!important}.ml-sm-n2,.mx-sm-n2{margin-left:-.5rem!important}.m-sm-n3{margin:-1rem!important}.mt-sm-n3,.my-sm-n3{margin-top:-1rem!important}.mr-sm-n3,.mx-sm-n3{margin-right:-1rem!important}.mb-sm-n3,.my-sm-n3{margin-bottom:-1rem!important}.ml-sm-n3,.mx-sm-n3{margin-left:-1rem!important}.m-sm-n4{margin:-1.5rem!important}.mt-sm-n4,.my-sm-n4{margin-top:-1.5rem!important}.mr-sm-n4,.mx-sm-n4{margin-right:-1.5rem!important}.mb-sm-n4,.my-sm-n4{margin-bottom:-1.5rem!important}.ml-sm-n4,.mx-sm-n4{margin-left:-1.5rem!important}.m-sm-n5{margin:-3rem!important}.mt-sm-n5,.my-sm-n5{margin-top:-3rem!important}.mr-sm-n5,.mx-sm-n5{margin-right:-3rem!important}.mb-sm-n5,.my-sm-n5{margin-bottom:-3rem!important}.ml-sm-n5,.mx-sm-n5{margin-left:-3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-n1{margin:-.25rem!important}.mt-md-n1,.my-md-n1{margin-top:-.25rem!important}.mr-md-n1,.mx-md-n1{margin-right:-.25rem!important}.mb-md-n1,.my-md-n1{margin-bottom:-.25rem!important}.ml-md-n1,.mx-md-n1{margin-left:-.25rem!important}.m-md-n2{margin:-.5rem!important}.mt-md-n2,.my-md-n2{margin-top:-.5rem!important}.mr-md-n2,.mx-md-n2{margin-right:-.5rem!important}.mb-md-n2,.my-md-n2{margin-bottom:-.5rem!important}.ml-md-n2,.mx-md-n2{margin-left:-.5rem!important}.m-md-n3{margin:-1rem!important}.mt-md-n3,.my-md-n3{margin-top:-1rem!important}.mr-md-n3,.mx-md-n3{margin-right:-1rem!important}.mb-md-n3,.my-md-n3{margin-bottom:-1rem!important}.ml-md-n3,.mx-md-n3{margin-left:-1rem!important}.m-md-n4{margin:-1.5rem!important}.mt-md-n4,.my-md-n4{margin-top:-1.5rem!important}.mr-md-n4,.mx-md-n4{margin-right:-1.5rem!important}.mb-md-n4,.my-md-n4{margin-bottom:-1.5rem!important}.ml-md-n4,.mx-md-n4{margin-left:-1.5rem!important}.m-md-n5{margin:-3rem!important}.mt-md-n5,.my-md-n5{margin-top:-3rem!important}.mr-md-n5,.mx-md-n5{margin-right:-3rem!important}.mb-md-n5,.my-md-n5{margin-bottom:-3rem!important}.ml-md-n5,.mx-md-n5{margin-left:-3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-n1{margin:-.25rem!important}.mt-lg-n1,.my-lg-n1{margin-top:-.25rem!important}.mr-lg-n1,.mx-lg-n1{margin-right:-.25rem!important}.mb-lg-n1,.my-lg-n1{margin-bottom:-.25rem!important}.ml-lg-n1,.mx-lg-n1{margin-left:-.25rem!important}.m-lg-n2{margin:-.5rem!important}.mt-lg-n2,.my-lg-n2{margin-top:-.5rem!important}.mr-lg-n2,.mx-lg-n2{margin-right:-.5rem!important}.mb-lg-n2,.my-lg-n2{margin-bottom:-.5rem!important}.ml-lg-n2,.mx-lg-n2{margin-left:-.5rem!important}.m-lg-n3{margin:-1rem!important}.mt-lg-n3,.my-lg-n3{margin-top:-1rem!important}.mr-lg-n3,.mx-lg-n3{margin-right:-1rem!important}.mb-lg-n3,.my-lg-n3{margin-bottom:-1rem!important}.ml-lg-n3,.mx-lg-n3{margin-left:-1rem!important}.m-lg-n4{margin:-1.5rem!important}.mt-lg-n4,.my-lg-n4{margin-top:-1.5rem!important}.mr-lg-n4,.mx-lg-n4{margin-right:-1.5rem!important}.mb-lg-n4,.my-lg-n4{margin-bottom:-1.5rem!important}.ml-lg-n4,.mx-lg-n4{margin-left:-1.5rem!important}.m-lg-n5{margin:-3rem!important}.mt-lg-n5,.my-lg-n5{margin-top:-3rem!important}.mr-lg-n5,.mx-lg-n5{margin-right:-3rem!important}.mb-lg-n5,.my-lg-n5{margin-bottom:-3rem!important}.ml-lg-n5,.mx-lg-n5{margin-left:-3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-n1{margin:-.25rem!important}.mt-xl-n1,.my-xl-n1{margin-top:-.25rem!important}.mr-xl-n1,.mx-xl-n1{margin-right:-.25rem!important}.mb-xl-n1,.my-xl-n1{margin-bottom:-.25rem!important}.ml-xl-n1,.mx-xl-n1{margin-left:-.25rem!important}.m-xl-n2{margin:-.5rem!important}.mt-xl-n2,.my-xl-n2{margin-top:-.5rem!important}.mr-xl-n2,.mx-xl-n2{margin-right:-.5rem!important}.mb-xl-n2,.my-xl-n2{margin-bottom:-.5rem!important}.ml-xl-n2,.mx-xl-n2{margin-left:-.5rem!important}.m-xl-n3{margin:-1rem!important}.mt-xl-n3,.my-xl-n3{margin-top:-1rem!important}.mr-xl-n3,.mx-xl-n3{margin-right:-1rem!important}.mb-xl-n3,.my-xl-n3{margin-bottom:-1rem!important}.ml-xl-n3,.mx-xl-n3{margin-left:-1rem!important}.m-xl-n4{margin:-1.5rem!important}.mt-xl-n4,.my-xl-n4{margin-top:-1.5rem!important}.mr-xl-n4,.mx-xl-n4{margin-right:-1.5rem!important}.mb-xl-n4,.my-xl-n4{margin-bottom:-1.5rem!important}.ml-xl-n4,.mx-xl-n4{margin-left:-1.5rem!important}.m-xl-n5{margin:-3rem!important}.mt-xl-n5,.my-xl-n5{margin-top:-3rem!important}.mr-xl-n5,.mx-xl-n5{margin-right:-3rem!important}.mb-xl-n5,.my-xl-n5{margin-bottom:-3rem!important}.ml-xl-n5,.mx-xl-n5{margin-left:-3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.stretched-link:after{background-color:transparent;bottom:0;content:"";left:0;pointer-events:auto;position:absolute;right:0;top:0;z-index:1}.text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace!important}.text-justify{text-align:justify!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-lighter{font-weight:lighter!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-weight-bolder{font-weight:bolder!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#007bff!important}a.text-primary:focus,a.text-primary:hover{color:#0056b3!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#494f54!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#19692c!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#0f6674!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#ba8b00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#a71d2a!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#cbd3da!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#121416!important}.text-body{color:#212529!important}.text-muted{color:#6c757d!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:hsla(0,0%,100%,.5)!important}.text-hide{background-color:transparent;border:0;color:transparent;font:0/0 a;text-shadow:none}.text-decoration-none{text-decoration:none!important}.text-break{word-wrap:break-word!important;word-break:break-word!important}.text-reset{color:inherit!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,:after,:before{box-shadow:none!important;text-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]:after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #adb5bd}blockquote,img,pre,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}.container,body{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #dee2e6!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#dee2e6}.table .thead-dark th{border-color:#dee2e6;color:inherit}}body{font-family:Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif}h2{margin-bottom:.5rem}.navbar{border:solid #e7e7e7;border-width:0 0 1px}.navbar a,.navbar a:hover{background-image:none}.navbar li{margin-bottom:0}.sidebar strong{display:block;font-size:1.3em;margin-bottom:1em}.sidebar p{font-size:1.2em;margin-bottom:.5em}.sidebar ul{font-size:1.1em}.sidebar li{margin-bottom:.2em}.sidebar li>ul{margin-top:0}.sidebar .banner a{display:block}.sidebar .banner a:hover,a{background-image:none;text-decoration:none}a{color:#337ab7}a:hover{background-image:linear-gradient(0deg,transparent,transparent 1px,#23527c 0,#23527c 2px,transparent 0);color:#23527c;text-decoration:none}.about-organizer-image{max-width:200px}a.supporter-page-image{display:block;max-width:400px}.supporter-page-image>a>span{margin-left:unset;margin-right:auto}.talk-content hr{margin-bottom:2rem;margin-top:2rem}.all-talks{margin:.5em}.all-talks li{display:flex;gap:1em;list-style:none;margin-left:0}.all-talks li .talk-number{display:block}

Debug: Redirects

This page lists all redirects that are present in the website

FromTo
/2018/06/27/immutable-data/talks/2018-06-27-immutable-data/
/2018/06/27/immutable-data.html/talks/2018-06-27-immutable-data/
/2018/05/30/graphql/talks/2018-05-30-graphql/
/2018/05/30/graphql.html/talks/2018-05-30-graphql/
/2018/04/25/kotlin/talks/2018-04-25-kotlin/
/2018/04/25/kotlin.html/talks/2018-04-25-kotlin/
/2018/03/20/mikro_vs_makroarchitektur/talks/2018-03-20-mikro_vs_makroarchitektur/
/2018/03/20/mikro_vs_makroarchitektur.html/talks/2018-03-20-mikro_vs_makroarchitektur/
/2018/02/28/java_auf_sap_cloud/talks/2018-02-28-java_auf_sap_cloud/
/2018/02/28/java_auf_sap_cloud.html/talks/2018-02-28-java_auf_sap_cloud/
/2018/01/31/system_of_systems/talks/2018-01-31-system_of_systems/
/2018/01/31/system_of_systems.html/talks/2018-01-31-system_of_systems/
/2017/11/29/neo4j/talks/2017-11-29-neo4j/
/2017/11/29/neo4j.html/talks/2017-11-29-neo4j/
/2017/10/25/serverless/talks/2017-10-25-serverless/
/2017/10/25/serverless.html/talks/2017-10-25-serverless/
/2017/08/30/alexa/talks/2017-08-30-alexa/
/2017/08/30/alexa.html/talks/2017-08-30-alexa/
/2017/05/31/react/talks/2017-05-31-react/
/2017/05/31/react.html/talks/2017-05-31-react/
/2017/04/25/jdk9/talks/2017-04-26-jdk9/
/2017/04/25/jdk9.html/talks/2017-04-26-jdk9/
/2017/03/22/angular/talks/2017-03-22-angular/
/2017/03/22/angular.html/talks/2017-03-22-angular/
/2017/02/22/css/talks/2017-02-22-css/
/2017/02/22/css.html/talks/2017-02-22-css/
/2017/01/25/junit5/talks/2017-01-25-junit5/
/2017/01/25/junit5.html/talks/2017-01-25-junit5/
/2016/11/30/inside_jvm/talks/2016-11-30-inside_jvm/
/2016/11/30/inside_jvm.html/talks/2016-11-30-inside_jvm/
/2016/09/21/kommunikationskultur/talks/2016-09-21-kommunikationskultur/
/2016/09/21/kommunikationskultur.html/talks/2016-09-21-kommunikationskultur/
/2016/07/27/testwerkzeuge_javafx/talks/2016-07-27-testwerkzeuge_javafx/
/2016/07/27/testwerkzeuge_javafx.html/talks/2016-07-27-testwerkzeuge_javafx/
/2016/05/25/performance-analyse-inspectit/talks/2016-05-25-performance-analyse-inspectit/
/2016/05/25/performance-analyse-inspectit.html/talks/2016-05-25-performance-analyse-inspectit/
/2016/03/30/haskell_frege/talks/2016-03-30-haskell_frege/
/2016/03/30/haskell_frege.html/talks/2016-03-30-haskell_frege/
/2016/01/27/functional_java/talks/2016-01-27-functional_java/
/2016/01/27/functional_java.html/talks/2016-01-27-functional_java/
/2015/11/25/javafx-mobile/talks/2015-11-25-javafx-mobile/
/2015/11/25/javafx-mobile.html/talks/2015-11-25-javafx-mobile/
/2015/09/30/guava/talks/2015-09-30-guava/
/2015/09/30/guava.html/talks/2015-09-30-guava/
/2015/07/29/drools/talks/2015-07-29-drools/
/2015/07/29/drools.html/talks/2015-07-29-drools/
/2015/05/27/advanced-android/talks/2015-05-27-advanced-android/
/2015/05/27/advanced-android.html/talks/2015-05-27-advanced-android/
/2015/03/25/android/talks/2015-03-25-android/
/2015/03/25/android.html/talks/2015-03-25-android/
/2015/01/28/moskito/talks/2015-01-28-moskito/
/2015/01/28/moskito.html/talks/2015-01-28-moskito/
/2014/12/03/model-view-star/talks/2014-12-03-model-view-star/
/2014/12/03/model-view-star.html/talks/2014-12-03-model-view-star/
/2014/10/29/infrastructure_as_code/talks/2014-10-29-infrastructure_as_code/
/2014/10/29/infrastructure_as_code.html/talks/2014-10-29-infrastructure_as_code/
/2014/09/24/solr/talks/2014-09-24-solr/
/2014/09/24/solr.html/talks/2014-09-24-solr/
/2014/07/30/java8-streams/talks/2014-07-30-java8-streams/
/2014/07/30/java8-streams.html/talks/2014-07-30-java8-streams/
/2014/05/28/hazelcast/talks/2014-05-28-hazelcast/
/2014/05/28/hazelcast.html/talks/2014-05-28-hazelcast/
/2014/04/02/assertj/talks/2014-04-02-assertj/
/2014/04/02/assertj.html/talks/2014-04-02-assertj/
/2014/01/29/opendip/talks/2014-01-29-opendip/
/2014/01/29/opendip.html/talks/2014-01-29-opendip/
/2013/11/27/web-performance/talks/2013-11-27-web-performance/
/2013/11/27/web-performance.html/talks/2013-11-27-web-performance/
/2013/10/30/app-design/talks/2013-10-30-app-design/
/2013/10/30/app-design.html/talks/2013-10-30-app-design/
/2013/07/31/persona/talks/2013-07-31-persona/
/2013/07/31/persona.html/talks/2013-07-31-persona/
/2013/05/29/jruby/talks/2013-05-29-jruby/
/2013/05/29/jruby.html/talks/2013-05-29-jruby/
/2013/03/27/nxt_lego/talks/2013-03-27-nxt_lego/
/2013/03/27/nxt_lego.html/talks/2013-03-27-nxt_lego/
/2012/11/28/javafx2/talks/2012-11-28-javafx2/
/2012/11/28/javafx2.html/talks/2012-11-28-javafx2/
/2012/09/26/bean_validation/talks/2012-09-26-bean_validation/
/2012/09/26/bean_validation.html/talks/2012-09-26-bean_validation/
/2012/07/25/selenium_praxis/talks/2012-07-25-selenium_praxis/
/2012/07/25/selenium_praxis.html/talks/2012-07-25-selenium_praxis/
/2012/06/27/gridgain/talks/2012-06-27-gridgain/
/2012/06/27/gridgain.html/talks/2012-06-27-gridgain/
/2012/05/30/jmonkey-engine3/talks/2012-05-30-jmonkey-engine3/
/2012/05/30/jmonkey-engine3.html/talks/2012-05-30-jmonkey-engine3/
/2012/04/25/maven/talks/2012-04-25-maven/
/2012/04/25/maven.html/talks/2012-04-25-maven/
/2012/03/28/webtests/talks/2012-03-28-webtests/
/2012/03/28/webtests.html/talks/2012-03-28-webtests/
/2012/02/29/scala_webapps/talks/2012-02-29-scala_webapps/
/2012/02/29/scala_webapps.html/talks/2012-02-29-scala_webapps/
/2012/01/25/jsf_cdi_advanced/talks/2012-01-25-jsf_cdi_advanced/
/2012/01/25/jsf_cdi_advanced.html/talks/2012-01-25-jsf_cdi_advanced/
/2012/01/04/hibernate/talks/2012-01-01-hibernate/
/2012/01/04/hibernate.html/talks/2012-01-01-hibernate/
/2011/11/30/jsf-cdi/talks/2011-11-30-jsf-cdi/
/2011/11/30/jsf-cdi.html/talks/2011-11-30-jsf-cdi/
/2011/10/26/android/talks/2011-10-26-android/
/2011/10/26/android.html/talks/2011-10-26-android/
/2011/09/28/jdom/talks/2011-09-28-jdom/
/2011/09/28/jdom.html/talks/2011-09-28-jdom/
/2011/09/28/single-sign-on/talks/2011-09-28-single-sign-on/
/2011/09/28/single-sign-on.html/talks/2011-09-28-single-sign-on/
/2011/08/31/testen/talks/2011-08-31-testen/
/2011/08/31/testen.html/talks/2011-08-31-testen/
/2011/07/27/testng/talks/2011-07-27-testng/
/2011/07/27/testng.html/talks/2011-07-27-testng/
/2011/07/27/scala/talks/2011-07-27-scala/
/2011/07/27/scala.html/talks/2011-07-27-scala/
/2011/06/29/javaee_jboss/talks/2011-06-29-javaee_jboss/
/2011/06/29/javaee_jboss.html/talks/2011-06-29-javaee_jboss/
/2011/05/27/guice/talks/2011-05-27-guice/
/2011/05/27/guice.html/talks/2011-05-27-guice/
/2011/04/27/gwt/talks/2011-04-27-gwt/
/2011/04/27/gwt.html/talks/2011-04-27-gwt/
/2011/04/27/osgi_springdm/talks/2011-04-27-osgi_springdm/
/2011/04/27/osgi_springdm.html/talks/2011-04-27-osgi_springdm/
/2011/03/22/easymock/talks/2011-03-22-easymock/
/2011/03/22/easymock.html/talks/2011-03-22-easymock/
/2011/03/22/jenkins/talks/2011-03-22-jenkins/
/2011/03/22/jenkins.html/talks/2011-03-22-jenkins/
+ */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}*,:after,:before{box-sizing:border-box}html{-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent;font-family:sans-serif;line-height:1.15}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{background-color:#fff;color:#212529;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,Liberation Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-size:1rem;font-weight:400;line-height:1.5;margin:0;text-align:left}[tabindex="-1"]:focus:not(:focus-visible){outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;margin-top:0}p{margin-bottom:1rem;margin-top:0}abbr[data-original-title],abbr[title]{border-bottom:0;cursor:help;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{font-style:normal;line-height:inherit}address,dl,ol,ul{margin-bottom:1rem}dl,ol,ul{margin-top:0}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{background-color:transparent;color:#007bff}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}pre{-ms-overflow-style:scrollbar;margin-bottom:1rem;margin-top:0;overflow:auto}figure{margin:0 0 1rem}img{border-style:none}img,svg{vertical-align:middle}svg{overflow:hidden}table{border-collapse:collapse}caption{caption-side:bottom;color:#6c757d;padding-bottom:.75rem;padding-top:.75rem;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit;margin:0}button,input{overflow:visible}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}textarea{overflow:auto;resize:vertical}fieldset{border:0;margin:0;min-width:0;padding:0}legend{color:inherit;display:block;font-size:1.5rem;line-height:inherit;margin-bottom:.5rem;max-width:100%;padding:0;white-space:normal;width:100%}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:none;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}output{display:inline-block}summary{cursor:pointer;display:list-item}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-weight:500;line-height:1.2;margin-bottom:.5rem}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem}.display-1,.display-2{font-weight:300;line-height:1.2}.display-2{font-size:5.5rem}.display-3{font-size:4.5rem}.display-3,.display-4{font-weight:300;line-height:1.2}.display-4{font-size:3.5rem}hr{border:0;border-top:1px solid rgba(0,0,0,.1);margin-bottom:1rem;margin-top:1rem}.small,small{font-size:.875em;font-weight:400}.mark,mark{background-color:#fcf8e3;padding:.2em}.list-inline,.list-unstyled{list-style:none;padding-left:0}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{font-size:1.25rem;margin-bottom:1rem}.blockquote-footer{color:#6c757d;display:block;font-size:.875em}.blockquote-footer:before{content:"\2014\00A0"}.img-fluid,.img-thumbnail{height:auto;max-width:100%}.img-thumbnail{background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;padding:.25rem}.figure{display:inline-block}.figure-img{line-height:1;margin-bottom:.5rem}.figure-caption{color:#6c757d;font-size:90%}code{word-wrap:break-word;color:#e83e8c;font-size:87.5%}a>code{color:inherit}kbd{background-color:#212529;border-radius:.2rem;color:#fff;font-size:87.5%;padding:.2rem .4rem}kbd kbd{font-size:100%;font-weight:700;padding:0}pre{color:#212529;display:block;font-size:87.5%}pre code{color:inherit;font-size:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container,.container-fluid,.container-lg,.container-md,.container-sm,.container-xl{margin-left:auto;margin-right:auto;padding-left:15px;padding-right:15px;width:100%}@media (min-width:576px){.container,.container-sm{max-width:540px}}@media (min-width:768px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px}}.row{display:flex;flex-wrap:wrap;margin-left:-15px;margin-right:-15px}.no-gutters{margin-left:0;margin-right:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-left:0;padding-right:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{padding-left:15px;padding-right:15px;position:relative;width:100%}.col{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-1>*{flex:0 0 100%;max-width:100%}.row-cols-2>*{flex:0 0 50%;max-width:50%}.row-cols-3>*{flex:0 0 33.333333%;max-width:33.333333%}.row-cols-4>*{flex:0 0 25%;max-width:25%}.row-cols-5>*{flex:0 0 20%;max-width:20%}.row-cols-6>*{flex:0 0 16.666667%;max-width:16.666667%}.col-auto{flex:0 0 auto;max-width:100%;width:auto}.col-1{flex:0 0 8.333333%;max-width:8.333333%}.col-2{flex:0 0 16.666667%;max-width:16.666667%}.col-3{flex:0 0 25%;max-width:25%}.col-4{flex:0 0 33.333333%;max-width:33.333333%}.col-5{flex:0 0 41.666667%;max-width:41.666667%}.col-6{flex:0 0 50%;max-width:50%}.col-7{flex:0 0 58.333333%;max-width:58.333333%}.col-8{flex:0 0 66.666667%;max-width:66.666667%}.col-9{flex:0 0 75%;max-width:75%}.col-10{flex:0 0 83.333333%;max-width:83.333333%}.col-11{flex:0 0 91.666667%;max-width:91.666667%}.col-12{flex:0 0 100%;max-width:100%}.order-first{order:-1}.order-last{order:13}.order-0{order:0}.order-1{order:1}.order-2{order:2}.order-3{order:3}.order-4{order:4}.order-5{order:5}.order-6{order:6}.order-7{order:7}.order-8{order:8}.order-9{order:9}.order-10{order:10}.order-11{order:11}.order-12{order:12}.offset-1{margin-left:8.333333%}.offset-2{margin-left:16.666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.333333%}.offset-5{margin-left:41.666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.333333%}.offset-8{margin-left:66.666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.333333%}.offset-11{margin-left:91.666667%}@media (min-width:576px){.col-sm{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-sm-1>*{flex:0 0 100%;max-width:100%}.row-cols-sm-2>*{flex:0 0 50%;max-width:50%}.row-cols-sm-3>*{flex:0 0 33.333333%;max-width:33.333333%}.row-cols-sm-4>*{flex:0 0 25%;max-width:25%}.row-cols-sm-5>*{flex:0 0 20%;max-width:20%}.row-cols-sm-6>*{flex:0 0 16.666667%;max-width:16.666667%}.col-sm-auto{flex:0 0 auto;max-width:100%;width:auto}.col-sm-1{flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{flex:0 0 25%;max-width:25%}.col-sm-4{flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{flex:0 0 50%;max-width:50%}.col-sm-7{flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{flex:0 0 75%;max-width:75%}.col-sm-10{flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{flex:0 0 100%;max-width:100%}.order-sm-first{order:-1}.order-sm-last{order:13}.order-sm-0{order:0}.order-sm-1{order:1}.order-sm-2{order:2}.order-sm-3{order:3}.order-sm-4{order:4}.order-sm-5{order:5}.order-sm-6{order:6}.order-sm-7{order:7}.order-sm-8{order:8}.order-sm-9{order:9}.order-sm-10{order:10}.order-sm-11{order:11}.order-sm-12{order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}}@media (min-width:768px){.col-md{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-md-1>*{flex:0 0 100%;max-width:100%}.row-cols-md-2>*{flex:0 0 50%;max-width:50%}.row-cols-md-3>*{flex:0 0 33.333333%;max-width:33.333333%}.row-cols-md-4>*{flex:0 0 25%;max-width:25%}.row-cols-md-5>*{flex:0 0 20%;max-width:20%}.row-cols-md-6>*{flex:0 0 16.666667%;max-width:16.666667%}.col-md-auto{flex:0 0 auto;max-width:100%;width:auto}.col-md-1{flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{flex:0 0 25%;max-width:25%}.col-md-4{flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{flex:0 0 50%;max-width:50%}.col-md-7{flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{flex:0 0 75%;max-width:75%}.col-md-10{flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{flex:0 0 100%;max-width:100%}.order-md-first{order:-1}.order-md-last{order:13}.order-md-0{order:0}.order-md-1{order:1}.order-md-2{order:2}.order-md-3{order:3}.order-md-4{order:4}.order-md-5{order:5}.order-md-6{order:6}.order-md-7{order:7}.order-md-8{order:8}.order-md-9{order:9}.order-md-10{order:10}.order-md-11{order:11}.order-md-12{order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.333333%}.offset-md-2{margin-left:16.666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.333333%}.offset-md-5{margin-left:41.666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.333333%}.offset-md-8{margin-left:66.666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.333333%}.offset-md-11{margin-left:91.666667%}}@media (min-width:992px){.col-lg{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-lg-1>*{flex:0 0 100%;max-width:100%}.row-cols-lg-2>*{flex:0 0 50%;max-width:50%}.row-cols-lg-3>*{flex:0 0 33.333333%;max-width:33.333333%}.row-cols-lg-4>*{flex:0 0 25%;max-width:25%}.row-cols-lg-5>*{flex:0 0 20%;max-width:20%}.row-cols-lg-6>*{flex:0 0 16.666667%;max-width:16.666667%}.col-lg-auto{flex:0 0 auto;max-width:100%;width:auto}.col-lg-1{flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{flex:0 0 25%;max-width:25%}.col-lg-4{flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{flex:0 0 50%;max-width:50%}.col-lg-7{flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{flex:0 0 75%;max-width:75%}.col-lg-10{flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{flex:0 0 100%;max-width:100%}.order-lg-first{order:-1}.order-lg-last{order:13}.order-lg-0{order:0}.order-lg-1{order:1}.order-lg-2{order:2}.order-lg-3{order:3}.order-lg-4{order:4}.order-lg-5{order:5}.order-lg-6{order:6}.order-lg-7{order:7}.order-lg-8{order:8}.order-lg-9{order:9}.order-lg-10{order:10}.order-lg-11{order:11}.order-lg-12{order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.333333%}.offset-lg-2{margin-left:16.666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.333333%}.offset-lg-5{margin-left:41.666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.333333%}.offset-lg-8{margin-left:66.666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.333333%}.offset-lg-11{margin-left:91.666667%}}@media (min-width:1200px){.col-xl{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-xl-1>*{flex:0 0 100%;max-width:100%}.row-cols-xl-2>*{flex:0 0 50%;max-width:50%}.row-cols-xl-3>*{flex:0 0 33.333333%;max-width:33.333333%}.row-cols-xl-4>*{flex:0 0 25%;max-width:25%}.row-cols-xl-5>*{flex:0 0 20%;max-width:20%}.row-cols-xl-6>*{flex:0 0 16.666667%;max-width:16.666667%}.col-xl-auto{flex:0 0 auto;max-width:100%;width:auto}.col-xl-1{flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{flex:0 0 25%;max-width:25%}.col-xl-4{flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{flex:0 0 50%;max-width:50%}.col-xl-7{flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{flex:0 0 75%;max-width:75%}.col-xl-10{flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{flex:0 0 100%;max-width:100%}.order-xl-first{order:-1}.order-xl-last{order:13}.order-xl-0{order:0}.order-xl-1{order:1}.order-xl-2{order:2}.order-xl-3{order:3}.order-xl-4{order:4}.order-xl-5{order:5}.order-xl-6{order:6}.order-xl-7{order:7}.order-xl-8{order:8}.order-xl-9{order:9}.order-xl-10{order:10}.order-xl-11{order:11}.order-xl-12{order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.333333%}.offset-xl-2{margin-left:16.666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.333333%}.offset-xl-5{margin-left:41.666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.333333%}.offset-xl-8{margin-left:66.666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.333333%}.offset-xl-11{margin-left:91.666667%}}.table{color:#212529;margin-bottom:1rem;width:100%}.table td,.table th{border-top:1px solid #dee2e6;padding:.75rem;vertical-align:top}.table thead th{border-bottom:2px solid #dee2e6;vertical-align:bottom}.table tbody+tbody{border-top:2px solid #dee2e6}.table-sm td,.table-sm th{padding:.3rem}.table-bordered,.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{background-color:rgba(0,0,0,.075);color:#212529}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8daff}.table-primary tbody+tbody,.table-primary td,.table-primary th,.table-primary thead th{border-color:#7abaff}.table-hover .table-primary:hover,.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-secondary tbody+tbody,.table-secondary td,.table-secondary th,.table-secondary thead th{border-color:#b3b7bb}.table-hover .table-secondary:hover,.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-success tbody+tbody,.table-success td,.table-success th,.table-success thead th{border-color:#8fd19e}.table-hover .table-success:hover,.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-info tbody+tbody,.table-info td,.table-info th,.table-info thead th{border-color:#86cfda}.table-hover .table-info:hover,.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-warning tbody+tbody,.table-warning td,.table-warning th,.table-warning thead th{border-color:#ffdf7e}.table-hover .table-warning:hover,.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-danger tbody+tbody,.table-danger td,.table-danger th,.table-danger thead th{border-color:#ed969e}.table-hover .table-danger:hover,.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-light tbody+tbody,.table-light td,.table-light th,.table-light thead th{border-color:#fbfcfc}.table-hover .table-light:hover,.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#95999c}.table-hover .table-dark:hover,.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th,.table-hover .table-active:hover,.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{background-color:#343a40;border-color:#454d55;color:#fff}.table .thead-light th{background-color:#e9ecef;border-color:#dee2e6;color:#495057}.table-dark{background-color:#343a40;color:#fff}.table-dark td,.table-dark th,.table-dark thead th{border-color:#454d55}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:hsla(0,0%,100%,.05)}.table-dark.table-hover tbody tr:hover{background-color:hsla(0,0%,100%,.075);color:#fff}@media (max-width:575.98px){.table-responsive-sm{-webkit-overflow-scrolling:touch;display:block;overflow-x:auto;width:100%}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{-webkit-overflow-scrolling:touch;display:block;overflow-x:auto;width:100%}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{-webkit-overflow-scrolling:touch;display:block;overflow-x:auto;width:100%}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{-webkit-overflow-scrolling:touch;display:block;overflow-x:auto;width:100%}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{-webkit-overflow-scrolling:touch;display:block;overflow-x:auto;width:100%}.table-responsive>.table-bordered{border:0}.form-control{background-clip:padding-box;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem;color:#495057;display:block;font-size:1rem;font-weight:400;height:calc(1.5em + .75rem + 2px);line-height:1.5;padding:.375rem .75rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;width:100%}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{background-color:#fff;border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25);color:#495057;outline:0}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}input[type=date].form-control,input[type=datetime-local].form-control,input[type=month].form-control,input[type=time].form-control{-webkit-appearance:none;appearance:none}select.form-control:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}select.form-control:focus::-ms-value{background-color:#fff;color:#495057}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{font-size:inherit;line-height:1.5;margin-bottom:0;padding-bottom:calc(.375rem + 1px);padding-top:calc(.375rem + 1px)}.col-form-label-lg{font-size:1.25rem;line-height:1.5;padding-bottom:calc(.5rem + 1px);padding-top:calc(.5rem + 1px)}.col-form-label-sm{font-size:.875rem;line-height:1.5;padding-bottom:calc(.25rem + 1px);padding-top:calc(.25rem + 1px)}.form-control-plaintext{background-color:transparent;border:solid transparent;border-width:1px 0;color:#212529;display:block;font-size:1rem;line-height:1.5;margin-bottom:0;padding:.375rem 0;width:100%}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-left:0;padding-right:0}.form-control-sm{border-radius:.2rem;font-size:.875rem;height:calc(1.5em + .5rem + 2px);line-height:1.5;padding:.25rem .5rem}.form-control-lg{border-radius:.3rem;font-size:1.25rem;height:calc(1.5em + 1rem + 2px);line-height:1.5;padding:.5rem 1rem}select.form-control[multiple],select.form-control[size],textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:flex;flex-wrap:wrap;margin-left:-5px;margin-right:-5px}.form-row>.col,.form-row>[class*=col-]{padding-left:5px;padding-right:5px}.form-check{display:block;padding-left:1.25rem;position:relative}.form-check-input{margin-left:-1.25rem;margin-top:.3rem;position:absolute}.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{align-items:center;display:inline-flex;margin-right:.75rem;padding-left:0}.form-check-inline .form-check-input{margin-left:0;margin-right:.3125rem;margin-top:0;position:static}.valid-feedback{color:#28a745;display:none;font-size:.875em;margin-top:.25rem;width:100%}.valid-tooltip{background-color:rgba(40,167,69,.9);border-radius:.25rem;color:#fff;display:none;font-size:.875rem;left:0;line-height:1.5;margin-top:.1rem;max-width:100%;padding:.25rem .5rem;position:absolute;top:100%;z-index:5}.form-row>.col>.valid-tooltip,.form-row>[class*=col-]>.valid-tooltip{left:5px}.is-valid~.valid-feedback,.is-valid~.valid-tooltip,.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip{display:block}.form-control.is-valid,.was-validated .form-control:valid{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3E%3Cpath fill='%2328a745' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3E%3C/svg%3E");background-position:right calc(.375em + .1875rem) center;background-repeat:no-repeat;background-size:calc(.75em + .375rem) calc(.75em + .375rem);border-color:#28a745;padding-right:calc(1.5em + .75rem)!important}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.was-validated select.form-control:valid,select.form-control.is-valid{background-position:right 1.5rem center;padding-right:3rem!important}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem);padding-right:calc(1.5em + .75rem)}.custom-select.is-valid,.was-validated .custom-select:valid{background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3E%3Cpath fill='%23343a40' d='M2 0 0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") right .75rem center/8px 10px no-repeat,#fff url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3E%3Cpath fill='%2328a745' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3E%3C/svg%3E") center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem) no-repeat;border-color:#28a745;padding-right:calc(.75em + 2.3125rem)!important}.custom-select.is-valid:focus,.was-validated .custom-select:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label:before,.was-validated .custom-control-input:valid~.custom-control-label:before{border-color:#28a745}.custom-control-input.is-valid:checked~.custom-control-label:before,.was-validated .custom-control-input:valid:checked~.custom-control-label:before{background-color:#34ce57;border-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label:before,.was-validated .custom-control-input:valid:focus~.custom-control-label:before{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-control-input.is-valid:focus:not(:checked)~.custom-control-label:before,.was-validated .custom-control-input:valid:focus:not(:checked)~.custom-control-label:before{border-color:#28a745}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{color:#dc3545;display:none;font-size:.875em;margin-top:.25rem;width:100%}.invalid-tooltip{background-color:rgba(220,53,69,.9);border-radius:.25rem;color:#fff;display:none;font-size:.875rem;left:0;line-height:1.5;margin-top:.1rem;max-width:100%;padding:.25rem .5rem;position:absolute;top:100%;z-index:5}.form-row>.col>.invalid-tooltip,.form-row>[class*=col-]>.invalid-tooltip{left:5px}.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip,.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip{display:block}.form-control.is-invalid,.was-validated .form-control:invalid{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3E%3Ccircle cx='6' cy='6' r='4.5'/%3E%3Cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3E%3Ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3E%3C/svg%3E");background-position:right calc(.375em + .1875rem) center;background-repeat:no-repeat;background-size:calc(.75em + .375rem) calc(.75em + .375rem);border-color:#dc3545;padding-right:calc(1.5em + .75rem)!important}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.was-validated select.form-control:invalid,select.form-control.is-invalid{background-position:right 1.5rem center;padding-right:3rem!important}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem);padding-right:calc(1.5em + .75rem)}.custom-select.is-invalid,.was-validated .custom-select:invalid{background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3E%3Cpath fill='%23343a40' d='M2 0 0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") right .75rem center/8px 10px no-repeat,#fff url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3E%3Ccircle cx='6' cy='6' r='4.5'/%3E%3Cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3E%3Ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3E%3C/svg%3E") center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem) no-repeat;border-color:#dc3545;padding-right:calc(.75em + 2.3125rem)!important}.custom-select.is-invalid:focus,.was-validated .custom-select:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc3545}.custom-control-input.is-invalid~.custom-control-label:before,.was-validated .custom-control-input:invalid~.custom-control-label:before{border-color:#dc3545}.custom-control-input.is-invalid:checked~.custom-control-label:before,.was-validated .custom-control-input:invalid:checked~.custom-control-label:before{background-color:#e4606d;border-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label:before,.was-validated .custom-control-input:invalid:focus~.custom-control-label:before{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label:before,.was-validated .custom-control-input:invalid:focus:not(:checked)~.custom-control-label:before{border-color:#dc3545}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{align-items:center;display:flex;flex-flow:row wrap}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{justify-content:center}.form-inline .form-group,.form-inline label{align-items:center;display:flex;margin-bottom:0}.form-inline .form-group{flex:0 0 auto;flex-flow:row wrap}.form-inline .form-control{display:inline-block;vertical-align:middle;width:auto}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{align-items:center;display:flex;justify-content:center;padding-left:0;width:auto}.form-inline .form-check-input{flex-shrink:0;margin-left:0;margin-right:.25rem;margin-top:0;position:relative}.form-inline .custom-control{align-items:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{background-color:transparent;border:1px solid transparent;border-radius:.25rem;color:#212529;display:inline-block;font-size:1rem;font-weight:400;line-height:1.5;padding:.375rem .75rem;text-align:center;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-user-select:none;user-select:none;vertical-align:middle}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:#212529;text-decoration:none}.btn.focus,.btn:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.25);outline:0}.btn.disabled,.btn:disabled{opacity:.65}.btn:not(:disabled):not(.disabled){cursor:pointer}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{background-color:#007bff;border-color:#007bff;color:#fff}.btn-primary.focus,.btn-primary:focus,.btn-primary:hover{background-color:#0069d9;border-color:#0062cc;color:#fff}.btn-primary.focus,.btn-primary:focus{box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-primary.disabled,.btn-primary:disabled{background-color:#007bff;border-color:#007bff;color:#fff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{background-color:#0062cc;border-color:#005cbf;color:#fff}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-secondary{background-color:#6c757d;border-color:#6c757d;color:#fff}.btn-secondary.focus,.btn-secondary:focus,.btn-secondary:hover{background-color:#5a6268;border-color:#545b62;color:#fff}.btn-secondary.focus,.btn-secondary:focus{box-shadow:0 0 0 .2rem hsla(208,6%,54%,.5)}.btn-secondary.disabled,.btn-secondary:disabled{background-color:#6c757d;border-color:#6c757d;color:#fff}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{background-color:#545b62;border-color:#4e555b;color:#fff}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem hsla(208,6%,54%,.5)}.btn-success{background-color:#28a745;border-color:#28a745;color:#fff}.btn-success.focus,.btn-success:focus,.btn-success:hover{background-color:#218838;border-color:#1e7e34;color:#fff}.btn-success.focus,.btn-success:focus{box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-success.disabled,.btn-success:disabled{background-color:#28a745;border-color:#28a745;color:#fff}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{background-color:#1e7e34;border-color:#1c7430;color:#fff}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-info{background-color:#17a2b8;border-color:#17a2b8;color:#fff}.btn-info.focus,.btn-info:focus,.btn-info:hover{background-color:#138496;border-color:#117a8b;color:#fff}.btn-info.focus,.btn-info:focus{box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-info.disabled,.btn-info:disabled{background-color:#17a2b8;border-color:#17a2b8;color:#fff}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{background-color:#117a8b;border-color:#10707f;color:#fff}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-warning{background-color:#ffc107;border-color:#ffc107;color:#212529}.btn-warning.focus,.btn-warning:focus,.btn-warning:hover{background-color:#e0a800;border-color:#d39e00;color:#212529}.btn-warning.focus,.btn-warning:focus{box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-warning.disabled,.btn-warning:disabled{background-color:#ffc107;border-color:#ffc107;color:#212529}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{background-color:#d39e00;border-color:#c69500;color:#212529}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-danger{background-color:#dc3545;border-color:#dc3545;color:#fff}.btn-danger.focus,.btn-danger:focus,.btn-danger:hover{background-color:#c82333;border-color:#bd2130;color:#fff}.btn-danger.focus,.btn-danger:focus{box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-danger.disabled,.btn-danger:disabled{background-color:#dc3545;border-color:#dc3545;color:#fff}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{background-color:#bd2130;border-color:#b21f2d;color:#fff}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-light{background-color:#f8f9fa;border-color:#f8f9fa;color:#212529}.btn-light.focus,.btn-light:focus,.btn-light:hover{background-color:#e2e6ea;border-color:#dae0e5;color:#212529}.btn-light.focus,.btn-light:focus{box-shadow:0 0 0 .2rem hsla(220,4%,85%,.5)}.btn-light.disabled,.btn-light:disabled{background-color:#f8f9fa;border-color:#f8f9fa;color:#212529}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{background-color:#dae0e5;border-color:#d3d9df;color:#212529}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem hsla(220,4%,85%,.5)}.btn-dark{background-color:#343a40;border-color:#343a40;color:#fff}.btn-dark.focus,.btn-dark:focus,.btn-dark:hover{background-color:#23272b;border-color:#1d2124;color:#fff}.btn-dark.focus,.btn-dark:focus{box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-dark.disabled,.btn-dark:disabled{background-color:#343a40;border-color:#343a40;color:#fff}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{background-color:#1d2124;border-color:#171a1d;color:#fff}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-outline-primary{border-color:#007bff;color:#007bff}.btn-outline-primary:hover{background-color:#007bff;border-color:#007bff;color:#fff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{background-color:transparent;color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{background-color:#007bff;border-color:#007bff;color:#fff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-secondary{border-color:#6c757d;color:#6c757d}.btn-outline-secondary:hover{background-color:#6c757d;border-color:#6c757d;color:#fff}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem hsla(208,7%,46%,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{background-color:transparent;color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{background-color:#6c757d;border-color:#6c757d;color:#fff}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem hsla(208,7%,46%,.5)}.btn-outline-success{border-color:#28a745;color:#28a745}.btn-outline-success:hover{background-color:#28a745;border-color:#28a745;color:#fff}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{background-color:transparent;color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{background-color:#28a745;border-color:#28a745;color:#fff}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{border-color:#17a2b8;color:#17a2b8}.btn-outline-info:hover{background-color:#17a2b8;border-color:#17a2b8;color:#fff}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{background-color:transparent;color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{background-color:#17a2b8;border-color:#17a2b8;color:#fff}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{border-color:#ffc107;color:#ffc107}.btn-outline-warning:hover{background-color:#ffc107;border-color:#ffc107;color:#212529}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{background-color:transparent;color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{background-color:#ffc107;border-color:#ffc107;color:#212529}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{border-color:#dc3545;color:#dc3545}.btn-outline-danger:hover{background-color:#dc3545;border-color:#dc3545;color:#fff}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{background-color:transparent;color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{background-color:#dc3545;border-color:#dc3545;color:#fff}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-light{border-color:#f8f9fa;color:#f8f9fa}.btn-outline-light:hover{background-color:#f8f9fa;border-color:#f8f9fa;color:#212529}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{background-color:transparent;color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{background-color:#f8f9fa;border-color:#f8f9fa;color:#212529}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{border-color:#343a40;color:#343a40}.btn-outline-dark:hover{background-color:#343a40;border-color:#343a40;color:#fff}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{background-color:transparent;color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{background-color:#343a40;border-color:#343a40;color:#fff}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-link{color:#007bff;font-weight:400;text-decoration:none}.btn-link:hover{color:#0056b3}.btn-link.focus,.btn-link:focus,.btn-link:hover{text-decoration:underline}.btn-link.disabled,.btn-link:disabled{color:#6c757d;pointer-events:none}.btn-group-lg>.btn,.btn-lg{border-radius:.3rem;font-size:1.25rem;line-height:1.5;padding:.5rem 1rem}.btn-group-sm>.btn,.btn-sm{border-radius:.2rem;font-size:.875rem;line-height:1.5;padding:.25rem .5rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{height:0;overflow:hidden;position:relative;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.collapsing.width{height:auto;transition:width .35s ease;width:0}@media (prefers-reduced-motion:reduce){.collapsing.width{transition:none}}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle:after{border-bottom:0;border-left:.3em solid transparent;border-right:.3em solid transparent;border-top:.3em solid;content:"";display:inline-block;margin-left:.255em;vertical-align:.255em}.dropdown-toggle:empty:after{margin-left:0}.dropdown-menu{background-clip:padding-box;background-color:#fff;border:1px solid rgba(0,0,0,.15);border-radius:.25rem;color:#212529;display:none;float:left;font-size:1rem;left:0;list-style:none;margin:.125rem 0 0;min-width:10rem;padding:.5rem 0;position:absolute;text-align:left;top:100%;z-index:1000}.dropdown-menu-left{left:0;right:auto}.dropdown-menu-right{left:auto;right:0}@media (min-width:576px){.dropdown-menu-sm-left{left:0;right:auto}.dropdown-menu-sm-right{left:auto;right:0}}@media (min-width:768px){.dropdown-menu-md-left{left:0;right:auto}.dropdown-menu-md-right{left:auto;right:0}}@media (min-width:992px){.dropdown-menu-lg-left{left:0;right:auto}.dropdown-menu-lg-right{left:auto;right:0}}@media (min-width:1200px){.dropdown-menu-xl-left{left:0;right:auto}.dropdown-menu-xl-right{left:auto;right:0}}.dropup .dropdown-menu{bottom:100%;margin-bottom:.125rem;margin-top:0;top:auto}.dropup .dropdown-toggle:after{border-bottom:.3em solid;border-left:.3em solid transparent;border-right:.3em solid transparent;border-top:0;content:"";display:inline-block;margin-left:.255em;vertical-align:.255em}.dropup .dropdown-toggle:empty:after{margin-left:0}.dropright .dropdown-menu{left:100%;margin-left:.125rem;margin-top:0;right:auto;top:0}.dropright .dropdown-toggle:after{border-bottom:.3em solid transparent;border-left:.3em solid;border-right:0;border-top:.3em solid transparent;content:"";display:inline-block;margin-left:.255em;vertical-align:.255em}.dropright .dropdown-toggle:empty:after{margin-left:0}.dropright .dropdown-toggle:after{vertical-align:0}.dropleft .dropdown-menu{left:auto;margin-right:.125rem;margin-top:0;right:100%;top:0}.dropleft .dropdown-toggle:after{content:"";display:inline-block;display:none;margin-left:.255em;vertical-align:.255em}.dropleft .dropdown-toggle:before{border-bottom:.3em solid transparent;border-right:.3em solid;border-top:.3em solid transparent;content:"";display:inline-block;margin-right:.255em;vertical-align:.255em}.dropleft .dropdown-toggle:empty:after{margin-left:0}.dropleft .dropdown-toggle:before{vertical-align:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{bottom:auto;right:auto}.dropdown-divider{border-top:1px solid #e9ecef;height:0;margin:.5rem 0;overflow:hidden}.dropdown-item{background-color:transparent;border:0;clear:both;color:#212529;display:block;font-weight:400;padding:.25rem 1.5rem;text-align:inherit;white-space:nowrap;width:100%}.dropdown-item:focus,.dropdown-item:hover{background-color:#e9ecef;color:#16181b;text-decoration:none}.dropdown-item.active,.dropdown-item:active{background-color:#007bff;color:#fff;text-decoration:none}.dropdown-item.disabled,.dropdown-item:disabled{background-color:transparent;color:#adb5bd;pointer-events:none}.dropdown-menu.show{display:block}.dropdown-header{color:#6c757d;display:block;font-size:.875rem;margin-bottom:0;padding:.5rem 1.5rem;white-space:nowrap}.dropdown-item-text{color:#212529;display:block;padding:.25rem 1.5rem}.btn-group,.btn-group-vertical{display:inline-flex;position:relative;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{flex:1 1 auto;position:relative}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn-group:not(:first-child),.btn-group>.btn:not(:first-child){margin-left:-1px}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.dropdown-toggle-split{padding-left:.5625rem;padding-right:.5625rem}.dropdown-toggle-split:after,.dropright .dropdown-toggle-split:after,.dropup .dropdown-toggle-split:after{margin-left:0}.dropleft .dropdown-toggle-split:before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-left:.375rem;padding-right:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-left:.75rem;padding-right:.75rem}.btn-group-vertical{align-items:flex-start;flex-direction:column;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-left-radius:0;border-bottom-right-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio],.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio]{clip:rect(0,0,0,0);pointer-events:none;position:absolute}.input-group{align-items:stretch;display:flex;flex-wrap:wrap;position:relative;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control,.input-group>.form-control-plaintext{flex:1 1 auto;margin-bottom:0;min-width:0;position:relative;width:1%}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control,.input-group>.form-control-plaintext+.custom-file,.input-group>.form-control-plaintext+.custom-select,.input-group>.form-control-plaintext+.form-control{margin-left:-1px}.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.input-group>.custom-file{align-items:center;display:flex}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label:after{border-bottom-right-radius:0;border-top-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-bottom-left-radius:0;border-top-left-radius:0}.input-group.has-validation>.custom-file:nth-last-child(n+3) .custom-file-label,.input-group.has-validation>.custom-file:nth-last-child(n+3) .custom-file-label:after,.input-group.has-validation>.custom-select:nth-last-child(n+3),.input-group.has-validation>.form-control:nth-last-child(n+3),.input-group:not(.has-validation)>.custom-file:not(:last-child) .custom-file-label,.input-group:not(.has-validation)>.custom-file:not(:last-child) .custom-file-label:after,.input-group:not(.has-validation)>.custom-select:not(:last-child),.input-group:not(.has-validation)>.form-control:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.input-group-append,.input-group-prepend{display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn:focus,.input-group-prepend .btn:focus{z-index:3}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{align-items:center;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem;color:#495057;display:flex;font-size:1rem;font-weight:400;line-height:1.5;margin-bottom:0;padding:.375rem .75rem;text-align:center;white-space:nowrap}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group-lg>.custom-select,.input-group-lg>.form-control:not(textarea){height:calc(1.5em + 1rem + 2px)}.input-group-lg>.custom-select,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{border-radius:.3rem;font-size:1.25rem;line-height:1.5;padding:.5rem 1rem}.input-group-sm>.custom-select,.input-group-sm>.form-control:not(textarea){height:calc(1.5em + .5rem + 2px)}.input-group-sm>.custom-select,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{border-radius:.2rem;font-size:.875rem;line-height:1.5;padding:.25rem .5rem}.input-group-lg>.custom-select,.input-group-sm>.custom-select{padding-right:1.75rem}.input-group.has-validation>.input-group-append:nth-last-child(n+3)>.btn,.input-group.has-validation>.input-group-append:nth-last-child(n+3)>.input-group-text,.input-group:not(.has-validation)>.input-group-append:not(:last-child)>.btn,.input-group:not(.has-validation)>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-bottom-right-radius:0;border-top-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-bottom-left-radius:0;border-top-left-radius:0}.custom-control{display:block;min-height:1.5rem;padding-left:1.5rem;position:relative;-webkit-print-color-adjust:exact;print-color-adjust:exact;z-index:1}.custom-control-inline{display:inline-flex;margin-right:1rem}.custom-control-input{height:1.25rem;left:0;opacity:0;position:absolute;width:1rem;z-index:-1}.custom-control-input:checked~.custom-control-label:before{background-color:#007bff;border-color:#007bff;color:#fff}.custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-control-input:focus:not(:checked)~.custom-control-label:before{border-color:#80bdff}.custom-control-input:not(:disabled):active~.custom-control-label:before{background-color:#b3d7ff;border-color:#b3d7ff;color:#fff}.custom-control-input:disabled~.custom-control-label,.custom-control-input[disabled]~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label:before,.custom-control-input[disabled]~.custom-control-label:before{background-color:#e9ecef}.custom-control-label{margin-bottom:0;position:relative;vertical-align:top}.custom-control-label:before{background-color:#fff;border:1px solid #adb5bd;pointer-events:none}.custom-control-label:after,.custom-control-label:before{content:"";display:block;height:1rem;left:-1.5rem;position:absolute;top:.25rem;width:1rem}.custom-control-label:after{background:50%/50% 50% no-repeat}.custom-checkbox .custom-control-label:before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='m6.564.75-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label:before{background-color:#007bff;border-color:#007bff}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4' viewBox='0 0 4 4'%3E%3Cpath stroke='%23fff' d='M0 2h4'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label:before{background-color:rgba(0,123,255,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label:before{background-color:rgba(0,123,255,.5)}.custom-radio .custom-control-label:before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label:before{background-color:rgba(0,123,255,.5)}.custom-switch{padding-left:2.25rem}.custom-switch .custom-control-label:before{border-radius:.5rem;left:-2.25rem;pointer-events:all;width:1.75rem}.custom-switch .custom-control-label:after{background-color:#adb5bd;border-radius:.5rem;height:calc(1rem - 4px);left:calc(-2.25rem + 2px);top:calc(.25rem + 2px);transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;width:calc(1rem - 4px)}@media (prefers-reduced-motion:reduce){.custom-switch .custom-control-label:after{transition:none}}.custom-switch .custom-control-input:checked~.custom-control-label:after{background-color:#fff;transform:translateX(.75rem)}.custom-switch .custom-control-input:disabled:checked~.custom-control-label:before{background-color:rgba(0,123,255,.5)}.custom-select{-webkit-appearance:none;appearance:none;background:#fff url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3E%3Cpath fill='%23343a40' d='M2 0 0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") right .75rem center/8px 10px no-repeat;border:1px solid #ced4da;border-radius:.25rem;color:#495057;display:inline-block;font-size:1rem;font-weight:400;height:calc(1.5em + .75rem + 2px);line-height:1.5;padding:.375rem 1.75rem .375rem .75rem;vertical-align:middle;width:100%}.custom-select:focus{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25);outline:0}.custom-select:focus::-ms-value{background-color:#fff;color:#495057}.custom-select[multiple],.custom-select[size]:not([size="1"]){background-image:none;height:auto;padding-right:.75rem}.custom-select:disabled{background-color:#e9ecef;color:#6c757d}.custom-select::-ms-expand{display:none}.custom-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}.custom-select-sm{font-size:.875rem;height:calc(1.5em + .5rem + 2px);padding-bottom:.25rem;padding-left:.5rem;padding-top:.25rem}.custom-select-lg{font-size:1.25rem;height:calc(1.5em + 1rem + 2px);padding-bottom:.5rem;padding-left:1rem;padding-top:.5rem}.custom-file{display:inline-block;margin-bottom:0}.custom-file,.custom-file-input{height:calc(1.5em + .75rem + 2px);position:relative;width:100%}.custom-file-input{margin:0;opacity:0;overflow:hidden;z-index:2}.custom-file-input:focus~.custom-file-label{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-file-input:disabled~.custom-file-label,.custom-file-input[disabled]~.custom-file-label{background-color:#e9ecef}.custom-file-input:lang(en)~.custom-file-label:after{content:"Browse"}.custom-file-input~.custom-file-label[data-browse]:after{content:attr(data-browse)}.custom-file-label{background-color:#fff;border:1px solid #ced4da;border-radius:.25rem;font-weight:400;height:calc(1.5em + .75rem + 2px);left:0;overflow:hidden;z-index:1}.custom-file-label,.custom-file-label:after{color:#495057;line-height:1.5;padding:.375rem .75rem;position:absolute;right:0;top:0}.custom-file-label:after{background-color:#e9ecef;border-left:inherit;border-radius:0 .25rem .25rem 0;bottom:0;content:"Browse";display:block;height:calc(1.5em + .75rem);z-index:3}.custom-range{-webkit-appearance:none;appearance:none;background-color:transparent;height:1.4rem;padding:0;width:100%}.custom-range:focus{outline:0}.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;background-color:#007bff;border:0;border-radius:1rem;height:1rem;margin-top:-.25rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;width:1rem}@media (prefers-reduced-motion:reduce){.custom-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#b3d7ff}.custom-range::-webkit-slider-runnable-track{background-color:#dee2e6;border-color:transparent;border-radius:1rem;color:transparent;cursor:pointer;height:.5rem;width:100%}.custom-range::-moz-range-thumb{appearance:none;background-color:#007bff;border:0;border-radius:1rem;height:1rem;-moz-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;width:1rem}@media (prefers-reduced-motion:reduce){.custom-range::-moz-range-thumb{-moz-transition:none;transition:none}}.custom-range::-moz-range-thumb:active{background-color:#b3d7ff}.custom-range::-moz-range-track{background-color:#dee2e6;border-color:transparent;border-radius:1rem;color:transparent;cursor:pointer;height:.5rem;width:100%}.custom-range::-ms-thumb{appearance:none;background-color:#007bff;border:0;border-radius:1rem;height:1rem;margin-left:.2rem;margin-right:.2rem;margin-top:0;-ms-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;width:1rem}@media (prefers-reduced-motion:reduce){.custom-range::-ms-thumb{-ms-transition:none;transition:none}}.custom-range::-ms-thumb:active{background-color:#b3d7ff}.custom-range::-ms-track{background-color:transparent;border-color:transparent;border-width:.5rem;color:transparent;cursor:pointer;height:.5rem;width:100%}.custom-range::-ms-fill-lower,.custom-range::-ms-fill-upper{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px}.custom-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.custom-range:disabled::-webkit-slider-runnable-track{cursor:default}.custom-range:disabled::-moz-range-thumb{background-color:#adb5bd}.custom-range:disabled::-moz-range-track{cursor:default}.custom-range:disabled::-ms-thumb{background-color:#adb5bd}.custom-control-label:before,.custom-file-label,.custom-select{transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-control-label:before,.custom-file-label,.custom-select{transition:none}}.nav{display:flex;flex-wrap:wrap;list-style:none;margin-bottom:0;padding-left:0}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d;cursor:default;pointer-events:none}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-link{background-color:transparent;border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem;margin-bottom:-1px}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6;isolation:isolate}.nav-tabs .nav-link.disabled{background-color:transparent;border-color:transparent;color:#6c757d}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{background-color:#fff;border-color:#dee2e6 #dee2e6 #fff;color:#495057}.nav-tabs .dropdown-menu{border-top-left-radius:0;border-top-right-radius:0;margin-top:-1px}.nav-pills .nav-link{background:0 0;border:0;border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{background-color:#007bff;color:#fff}.nav-fill .nav-item,.nav-fill>.nav-link{flex:1 1 auto;text-align:center}.nav-justified .nav-item,.nav-justified>.nav-link{flex-basis:0;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{padding:.5rem 1rem;position:relative}.navbar,.navbar .container,.navbar .container-fluid,.navbar .container-lg,.navbar .container-md,.navbar .container-sm,.navbar .container-xl{align-items:center;display:flex;flex-wrap:wrap;justify-content:space-between}.navbar-brand{display:inline-block;font-size:1.25rem;line-height:inherit;margin-right:1rem;padding-bottom:.3125rem;padding-top:.3125rem;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:flex;flex-direction:column;list-style:none;margin-bottom:0;padding-left:0}.navbar-nav .nav-link{padding-left:0;padding-right:0}.navbar-nav .dropdown-menu{float:none;position:static}.navbar-text{display:inline-block;padding-bottom:.5rem;padding-top:.5rem}.navbar-collapse{align-items:center;flex-basis:100%;flex-grow:1}.navbar-toggler{background-color:transparent;border:1px solid transparent;border-radius:.25rem;font-size:1.25rem;line-height:1;padding:.25rem .75rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler-icon{background:50%/100% 100% no-repeat;content:"";display:inline-block;height:1.5em;vertical-align:middle;width:1.5em}.navbar-nav-scroll{max-height:75vh;overflow-y:auto}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{padding-left:0;padding-right:0}}@media (min-width:576px){.navbar-expand-sm{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-left:.5rem;padding-right:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{flex-wrap:nowrap}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{padding-left:0;padding-right:0}}@media (min-width:768px){.navbar-expand-md{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-left:.5rem;padding-right:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{flex-wrap:nowrap}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{padding-left:0;padding-right:0}}@media (min-width:992px){.navbar-expand-lg{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-left:.5rem;padding-right:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{flex-wrap:nowrap}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{padding-left:0;padding-right:0}}@media (min-width:1200px){.navbar-expand-xl{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-left:.5rem;padding-right:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{flex-wrap:nowrap}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{padding-left:0;padding-right:0}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-left:.5rem;padding-right:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{flex-wrap:nowrap}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand,.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{border-color:rgba(0,0,0,.1);color:rgba(0,0,0,.5)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a,.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand,.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:hsla(0,0%,100%,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:hsla(0,0%,100%,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:hsla(0,0%,100%,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{border-color:hsla(0,0%,100%,.1);color:hsla(0,0%,100%,.5)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3E%3Cpath stroke='rgba(255, 255, 255, 0.5)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-dark .navbar-text{color:hsla(0,0%,100%,.5)}.navbar-dark .navbar-text a,.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{word-wrap:break-word;background-clip:border-box;background-color:#fff;border:1px solid rgba(0,0,0,.125);border-radius:.25rem;display:flex;flex-direction:column;min-width:0;position:relative}.card>hr{margin-left:0;margin-right:0}.card>.list-group{border-bottom:inherit;border-top:inherit}.card>.list-group:first-child{border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px);border-top-width:0}.card>.list-group:last-child{border-bottom-left-radius:calc(.25rem - 1px);border-bottom-right-radius:calc(.25rem - 1px);border-bottom-width:0}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{flex:1 1 auto;min-height:1px;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem}.card-subtitle,.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125);margin-bottom:0;padding:.75rem 1.25rem}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-footer{background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125);padding:.75rem 1.25rem}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{border-bottom:0;margin-bottom:-.75rem}.card-header-pills,.card-header-tabs{margin-left:-.625rem;margin-right:-.625rem}.card-img-overlay{border-radius:calc(.25rem - 1px);bottom:0;left:0;padding:1.25rem;position:absolute;right:0;top:0}.card-img,.card-img-bottom,.card-img-top{flex-shrink:0;width:100%}.card-img,.card-img-top{border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom{border-bottom-left-radius:calc(.25rem - 1px);border-bottom-right-radius:calc(.25rem - 1px)}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{display:flex;flex-flow:row wrap;margin-left:-15px;margin-right:-15px}.card-deck .card{flex:1 0;margin-bottom:0;margin-left:15px;margin-right:15px}}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{display:flex;flex-flow:row wrap}.card-group>.card{flex:1 0;margin-bottom:0}.card-group>.card+.card{border-left:0;margin-left:0}.card-group>.card:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{column-count:3;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion{overflow-anchor:none}.accordion>.card{overflow:hidden}.accordion>.card:not(:last-of-type){border-bottom:0;border-bottom-left-radius:0;border-bottom-right-radius:0}.accordion>.card:not(:first-of-type){border-top-left-radius:0;border-top-right-radius:0}.accordion>.card>.card-header{border-radius:0;margin-bottom:-1px}.breadcrumb{background-color:#e9ecef;border-radius:.25rem;display:flex;flex-wrap:wrap;list-style:none;margin-bottom:1rem;padding:.75rem 1rem}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item:before{color:#6c757d;content:"/";float:left;padding-right:.5rem}.breadcrumb-item+.breadcrumb-item:hover:before{text-decoration:underline;text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{border-radius:.25rem;display:flex;list-style:none;padding-left:0}.page-link{background-color:#fff;border:1px solid #dee2e6;color:#007bff;display:block;line-height:1.25;margin-left:-1px;padding:.5rem .75rem;position:relative}.page-link:hover{background-color:#e9ecef;border-color:#dee2e6;color:#0056b3;text-decoration:none;z-index:2}.page-link:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.25);outline:0;z-index:3}.page-item:first-child .page-link{border-bottom-left-radius:.25rem;border-top-left-radius:.25rem;margin-left:0}.page-item:last-child .page-link{border-bottom-right-radius:.25rem;border-top-right-radius:.25rem}.page-item.active .page-link{background-color:#007bff;border-color:#007bff;color:#fff;z-index:3}.page-item.disabled .page-link{background-color:#fff;border-color:#dee2e6;color:#6c757d;cursor:auto;pointer-events:none}.pagination-lg .page-link{font-size:1.25rem;line-height:1.5;padding:.75rem 1.5rem}.pagination-lg .page-item:first-child .page-link{border-bottom-left-radius:.3rem;border-top-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-bottom-right-radius:.3rem;border-top-right-radius:.3rem}.pagination-sm .page-link{font-size:.875rem;line-height:1.5;padding:.25rem .5rem}.pagination-sm .page-item:first-child .page-link{border-bottom-left-radius:.2rem;border-top-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-bottom-right-radius:.2rem;border-top-right-radius:.2rem}.badge{border-radius:.25rem;display:inline-block;font-size:75%;font-weight:700;line-height:1;padding:.25em .4em;text-align:center;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;vertical-align:baseline;white-space:nowrap}@media (prefers-reduced-motion:reduce){.badge{transition:none}}a.badge:focus,a.badge:hover{text-decoration:none}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{border-radius:10rem;padding-left:.6em;padding-right:.6em}.badge-primary{background-color:#007bff;color:#fff}a.badge-primary:focus,a.badge-primary:hover{background-color:#0062cc;color:#fff}a.badge-primary.focus,a.badge-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5);outline:0}.badge-secondary{background-color:#6c757d;color:#fff}a.badge-secondary:focus,a.badge-secondary:hover{background-color:#545b62;color:#fff}a.badge-secondary.focus,a.badge-secondary:focus{box-shadow:0 0 0 .2rem hsla(208,7%,46%,.5);outline:0}.badge-success{background-color:#28a745;color:#fff}a.badge-success:focus,a.badge-success:hover{background-color:#1e7e34;color:#fff}a.badge-success.focus,a.badge-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5);outline:0}.badge-info{background-color:#17a2b8;color:#fff}a.badge-info:focus,a.badge-info:hover{background-color:#117a8b;color:#fff}a.badge-info.focus,a.badge-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5);outline:0}.badge-warning{background-color:#ffc107;color:#212529}a.badge-warning:focus,a.badge-warning:hover{background-color:#d39e00;color:#212529}a.badge-warning.focus,a.badge-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5);outline:0}.badge-danger{background-color:#dc3545;color:#fff}a.badge-danger:focus,a.badge-danger:hover{background-color:#bd2130;color:#fff}a.badge-danger.focus,a.badge-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5);outline:0}.badge-light{background-color:#f8f9fa;color:#212529}a.badge-light:focus,a.badge-light:hover{background-color:#dae0e5;color:#212529}a.badge-light.focus,a.badge-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5);outline:0}.badge-dark{background-color:#343a40;color:#fff}a.badge-dark:focus,a.badge-dark:hover{background-color:#1d2124;color:#fff}a.badge-dark.focus,a.badge-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5);outline:0}.jumbotron{background-color:#e9ecef;border-radius:.3rem;margin-bottom:2rem;padding:2rem 1rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{border-radius:0;padding-left:0;padding-right:0}.alert{border:1px solid transparent;border-radius:.25rem;margin-bottom:1rem;padding:.75rem 1.25rem;position:relative}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{color:inherit;padding:.75rem 1.25rem;position:absolute;right:0;top:0;z-index:2}.alert-primary{background-color:#cce5ff;border-color:#b8daff;color:#004085}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{background-color:#e2e3e5;border-color:#d6d8db;color:#383d41}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{background-color:#d4edda;border-color:#c3e6cb;color:#155724}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{background-color:#d1ecf1;border-color:#bee5eb;color:#0c5460}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{background-color:#fff3cd;border-color:#ffeeba;color:#856404}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{background-color:#f8d7da;border-color:#f5c6cb;color:#721c24}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{background-color:#fefefe;border-color:#fdfdfe;color:#818182}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{background-color:#d6d8d9;border-color:#c6c8ca;color:#1b1e21}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@keyframes progress-bar-stripes{0%{background-position:1rem 0}to{background-position:0 0}}.progress{background-color:#e9ecef;border-radius:.25rem;font-size:.75rem;height:1rem;line-height:0}.progress,.progress-bar{display:flex;overflow:hidden}.progress-bar{background-color:#007bff;color:#fff;flex-direction:column;justify-content:center;text-align:center;transition:width .6s ease;white-space:nowrap}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent);background-size:1rem 1rem}.progress-bar-animated{animation:progress-bar-stripes 1s linear infinite}@media (prefers-reduced-motion:reduce){.progress-bar-animated{animation:none}}.media{align-items:flex-start;display:flex}.media-body{flex:1 1}.list-group{border-radius:.25rem;display:flex;flex-direction:column;margin-bottom:0;padding-left:0}.list-group-item-action{color:#495057;text-align:inherit;width:100%}.list-group-item-action:focus,.list-group-item-action:hover{background-color:#f8f9fa;color:#495057;text-decoration:none;z-index:1}.list-group-item-action:active{background-color:#e9ecef;color:#212529}.list-group-item{background-color:#fff;border:1px solid rgba(0,0,0,.125);display:block;padding:.75rem 1.25rem;position:relative}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-left-radius:inherit;border-bottom-right-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{background-color:#fff;color:#6c757d;pointer-events:none}.list-group-item.active{background-color:#007bff;border-color:#007bff;color:#fff;z-index:2}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{border-top-width:1px;margin-top:-1px}.list-group-horizontal{flex-direction:row}.list-group-horizontal>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child{border-bottom-left-radius:0;border-top-right-radius:.25rem}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-left-width:0;border-top-width:1px}.list-group-horizontal>.list-group-item+.list-group-item.active{border-left-width:1px;margin-left:-1px}@media (min-width:576px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child{border-bottom-left-radius:0;border-top-right-radius:.25rem}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-left-width:0;border-top-width:1px}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{border-left-width:1px;margin-left:-1px}}@media (min-width:768px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child{border-bottom-left-radius:0;border-top-right-radius:.25rem}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-left-width:0;border-top-width:1px}.list-group-horizontal-md>.list-group-item+.list-group-item.active{border-left-width:1px;margin-left:-1px}}@media (min-width:992px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child{border-bottom-left-radius:0;border-top-right-radius:.25rem}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-left-width:0;border-top-width:1px}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{border-left-width:1px;margin-left:-1px}}@media (min-width:1200px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child{border-bottom-left-radius:0;border-top-right-radius:.25rem}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-left-width:0;border-top-width:1px}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{border-left-width:1px;margin-left:-1px}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 1px}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{background-color:#b8daff;color:#004085}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{background-color:#9fcdff;color:#004085}.list-group-item-primary.list-group-item-action.active{background-color:#004085;border-color:#004085;color:#fff}.list-group-item-secondary{background-color:#d6d8db;color:#383d41}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{background-color:#c8cbcf;color:#383d41}.list-group-item-secondary.list-group-item-action.active{background-color:#383d41;border-color:#383d41;color:#fff}.list-group-item-success{background-color:#c3e6cb;color:#155724}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{background-color:#b1dfbb;color:#155724}.list-group-item-success.list-group-item-action.active{background-color:#155724;border-color:#155724;color:#fff}.list-group-item-info{background-color:#bee5eb;color:#0c5460}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{background-color:#abdde5;color:#0c5460}.list-group-item-info.list-group-item-action.active{background-color:#0c5460;border-color:#0c5460;color:#fff}.list-group-item-warning{background-color:#ffeeba;color:#856404}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{background-color:#ffe8a1;color:#856404}.list-group-item-warning.list-group-item-action.active{background-color:#856404;border-color:#856404;color:#fff}.list-group-item-danger{background-color:#f5c6cb;color:#721c24}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{background-color:#f1b0b7;color:#721c24}.list-group-item-danger.list-group-item-action.active{background-color:#721c24;border-color:#721c24;color:#fff}.list-group-item-light{background-color:#fdfdfe;color:#818182}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{background-color:#ececf6;color:#818182}.list-group-item-light.list-group-item-action.active{background-color:#818182;border-color:#818182;color:#fff}.list-group-item-dark{background-color:#c6c8ca;color:#1b1e21}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{background-color:#b9bbbe;color:#1b1e21}.list-group-item-dark.list-group-item-action.active{background-color:#1b1e21;border-color:#1b1e21;color:#fff}.close{color:#000;float:right;font-size:1.5rem;font-weight:700;line-height:1;opacity:.5;text-shadow:0 1px 0 #fff}.close:hover{color:#000;text-decoration:none}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover{opacity:.75}button.close{background-color:transparent;border:0;padding:0}a.close.disabled{pointer-events:none}.toast{background-clip:padding-box;background-color:hsla(0,0%,100%,.85);border:1px solid rgba(0,0,0,.1);border-radius:.25rem;box-shadow:0 .25rem .75rem rgba(0,0,0,.1);flex-basis:350px;font-size:.875rem;max-width:350px;opacity:0}.toast:not(:last-child){margin-bottom:.75rem}.toast.showing{opacity:1}.toast.show{display:block;opacity:1}.toast.hide{display:none}.toast-header{align-items:center;background-clip:padding-box;background-color:hsla(0,0%,100%,.85);border-bottom:1px solid rgba(0,0,0,.05);border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px);color:#6c757d;display:flex;padding:.25rem .75rem}.toast-body{padding:.75rem}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{display:none;height:100%;left:0;outline:0;overflow:hidden;position:fixed;top:0;width:100%;z-index:1050}.modal-dialog{margin:.5rem;pointer-events:none;position:relative;width:auto}.modal.fade .modal-dialog{transform:translateY(-50px);transition:transform .3s ease-out}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal.modal-static .modal-dialog{transform:scale(1.02)}.modal-dialog-scrollable{display:flex;max-height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.modal-dialog-scrollable .modal-footer,.modal-dialog-scrollable .modal-header{flex-shrink:0}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{align-items:center;display:flex;min-height:calc(100% - 1rem)}.modal-dialog-centered:before{content:"";display:block;height:calc(100vh - 1rem);height:min-content}.modal-dialog-centered.modal-dialog-scrollable{flex-direction:column;height:100%;justify-content:center}.modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}.modal-dialog-centered.modal-dialog-scrollable:before{content:none}.modal-content{background-clip:padding-box;background-color:#fff;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;display:flex;flex-direction:column;outline:0;pointer-events:auto;position:relative;width:100%}.modal-backdrop{background-color:#000;height:100vh;left:0;position:fixed;top:0;width:100vw;z-index:1040}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{align-items:flex-start;border-bottom:1px solid #dee2e6;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px);display:flex;justify-content:space-between;padding:1rem}.modal-header .close{margin:-1rem -1rem -1rem auto;padding:1rem}.modal-title{line-height:1.5;margin-bottom:0}.modal-body{flex:1 1 auto;padding:1rem;position:relative}.modal-footer{align-items:center;border-bottom-left-radius:calc(.3rem - 1px);border-bottom-right-radius:calc(.3rem - 1px);border-top:1px solid #dee2e6;display:flex;flex-wrap:wrap;justify-content:flex-end;padding:.75rem}.modal-footer>*{margin:.25rem}.modal-scrollbar-measure{height:50px;overflow:scroll;position:absolute;top:-9999px;width:50px}@media (min-width:576px){.modal-dialog{margin:1.75rem auto;max-width:500px}.modal-dialog-scrollable{max-height:calc(100% - 3.5rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-dialog-centered:before{height:calc(100vh - 3.5rem);height:min-content}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width:1200px){.modal-xl{max-width:1140px}}.tooltip{word-wrap:break-word;display:block;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,Liberation Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-size:.875rem;font-style:normal;font-weight:400;letter-spacing:normal;line-break:auto;line-height:1.5;margin:0;opacity:0;position:absolute;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;z-index:1070}.tooltip.show{opacity:.9}.tooltip .arrow{display:block;height:.4rem;position:absolute;width:.8rem}.tooltip .arrow:before{border-color:transparent;border-style:solid;content:"";position:absolute}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow:before,.bs-tooltip-top .arrow:before{border-top-color:#000;border-width:.4rem .4rem 0;top:0}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{height:.8rem;left:0;width:.4rem}.bs-tooltip-auto[x-placement^=right] .arrow:before,.bs-tooltip-right .arrow:before{border-right-color:#000;border-width:.4rem .4rem .4rem 0;right:0}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow:before,.bs-tooltip-bottom .arrow:before{border-bottom-color:#000;border-width:0 .4rem .4rem;bottom:0}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{height:.8rem;right:0;width:.4rem}.bs-tooltip-auto[x-placement^=left] .arrow:before,.bs-tooltip-left .arrow:before{border-left-color:#000;border-width:.4rem 0 .4rem .4rem;left:0}.tooltip-inner{background-color:#000;border-radius:.25rem;color:#fff;max-width:200px;padding:.25rem .5rem;text-align:center}.popover{word-wrap:break-word;background-clip:padding-box;background-color:#fff;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,Liberation Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-size:.875rem;font-style:normal;font-weight:400;left:0;letter-spacing:normal;line-break:auto;line-height:1.5;max-width:276px;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;top:0;white-space:normal;word-break:normal;word-spacing:normal;z-index:1060}.popover,.popover .arrow{display:block;position:absolute}.popover .arrow{height:.5rem;margin:0 .3rem;width:1rem}.popover .arrow:after,.popover .arrow:before{border-color:transparent;border-style:solid;content:"";display:block;position:absolute}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top]>.arrow,.bs-popover-top>.arrow{bottom:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=top]>.arrow:before,.bs-popover-top>.arrow:before{border-top-color:rgba(0,0,0,.25);border-width:.5rem .5rem 0;bottom:0}.bs-popover-auto[x-placement^=top]>.arrow:after,.bs-popover-top>.arrow:after{border-top-color:#fff;border-width:.5rem .5rem 0;bottom:1px}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right]>.arrow,.bs-popover-right>.arrow{height:1rem;left:calc(-.5rem - 1px);margin:.3rem 0;width:.5rem}.bs-popover-auto[x-placement^=right]>.arrow:before,.bs-popover-right>.arrow:before{border-right-color:rgba(0,0,0,.25);border-width:.5rem .5rem .5rem 0;left:0}.bs-popover-auto[x-placement^=right]>.arrow:after,.bs-popover-right>.arrow:after{border-right-color:#fff;border-width:.5rem .5rem .5rem 0;left:1px}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom]>.arrow,.bs-popover-bottom>.arrow{top:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=bottom]>.arrow:before,.bs-popover-bottom>.arrow:before{border-bottom-color:rgba(0,0,0,.25);border-width:0 .5rem .5rem;top:0}.bs-popover-auto[x-placement^=bottom]>.arrow:after,.bs-popover-bottom>.arrow:after{border-bottom-color:#fff;border-width:0 .5rem .5rem;top:1px}.bs-popover-auto[x-placement^=bottom] .popover-header:before,.bs-popover-bottom .popover-header:before{border-bottom:1px solid #f7f7f7;content:"";display:block;left:50%;margin-left:-.5rem;position:absolute;top:0;width:1rem}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left]>.arrow,.bs-popover-left>.arrow{height:1rem;margin:.3rem 0;right:calc(-.5rem - 1px);width:.5rem}.bs-popover-auto[x-placement^=left]>.arrow:before,.bs-popover-left>.arrow:before{border-left-color:rgba(0,0,0,.25);border-width:.5rem 0 .5rem .5rem;right:0}.bs-popover-auto[x-placement^=left]>.arrow:after,.bs-popover-left>.arrow:after{border-left-color:#fff;border-width:.5rem 0 .5rem .5rem;right:1px}.popover-header{background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px);font-size:1rem;margin-bottom:0;padding:.5rem .75rem}.popover-header:empty{display:none}.popover-body{color:#212529;padding:.5rem .75rem}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y}.carousel-inner{overflow:hidden;position:relative;width:100%}.carousel-inner:after{clear:both;content:"";display:block}.carousel-item{backface-visibility:hidden;display:none;float:left;margin-right:-100%;position:relative;transition:transform .6s ease-in-out;width:100%}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-right,.carousel-item-next:not(.carousel-item-left){transform:translateX(100%)}.active.carousel-item-left,.carousel-item-prev:not(.carousel-item-right){transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transform:none;transition-property:opacity}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{opacity:1;z-index:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{opacity:0;transition:opacity 0s .6s;z-index:0}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{transition:none}}.carousel-control-next,.carousel-control-prev{align-items:center;background:0 0;border:0;bottom:0;color:#fff;display:flex;justify-content:center;opacity:.5;padding:0;position:absolute;text-align:center;top:0;transition:opacity .15s ease;width:15%;z-index:1}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;opacity:.9;outline:0;text-decoration:none}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{background:50%/100% 100% no-repeat;display:inline-block;height:20px;width:20px}.carousel-control-prev-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='m5.25 0-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3E%3C/svg%3E")}.carousel-control-next-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='m2.75 0-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3E%3C/svg%3E")}.carousel-indicators{bottom:0;display:flex;justify-content:center;left:0;list-style:none;margin-left:15%;margin-right:15%;padding-left:0;position:absolute;right:0;z-index:15}.carousel-indicators li{background-clip:padding-box;background-color:#fff;border-bottom:10px solid transparent;border-top:10px solid transparent;box-sizing:content-box;cursor:pointer;flex:0 1 auto;height:3px;margin-left:3px;margin-right:3px;opacity:.5;text-indent:-999px;transition:opacity .6s ease;width:30px}@media (prefers-reduced-motion:reduce){.carousel-indicators li{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{bottom:20px;color:#fff;left:15%;padding-bottom:20px;padding-top:20px;position:absolute;right:15%;text-align:center;z-index:10}@keyframes spinner-border{to{transform:rotate(1turn)}}.spinner-border{animation:spinner-border .75s linear infinite;border:.25em solid;border-radius:50%;border-right:.25em solid transparent;display:inline-block;height:2rem;vertical-align:-.125em;width:2rem}.spinner-border-sm{border-width:.2em;height:1rem;width:1rem}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}.spinner-grow{animation:spinner-grow .75s linear infinite;background-color:currentcolor;border-radius:50%;display:inline-block;height:2rem;opacity:0;vertical-align:-.125em;width:2rem}.spinner-grow-sm{height:1rem;width:1rem}@media (prefers-reduced-motion:reduce){.spinner-border,.spinner-grow{animation-duration:1.5s}}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#007bff!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0062cc!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#007bff!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded-sm{border-radius:.2rem!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important}.rounded-right,.rounded-top{border-top-right-radius:.25rem!important}.rounded-bottom,.rounded-right{border-bottom-right-radius:.25rem!important}.rounded-bottom,.rounded-left{border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important}.rounded-lg{border-radius:.3rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-0{border-radius:0!important}.clearfix:after{clear:both;content:"";display:block}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:flex!important}.d-inline-flex{display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}}.embed-responsive{display:block;overflow:hidden;padding:0;position:relative;width:100%}.embed-responsive:before{content:"";display:block}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{border:0;bottom:0;height:100%;left:0;position:absolute;top:0;width:100%}.embed-responsive-21by9:before{padding-top:42.857143%}.embed-responsive-16by9:before{padding-top:56.25%}.embed-responsive-4by3:before{padding-top:75%}.embed-responsive-1by1:before{padding-top:100%}.flex-row{flex-direction:row!important}.flex-column{flex-direction:column!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-column-reverse{flex-direction:column-reverse!important}.flex-wrap{flex-wrap:wrap!important}.flex-nowrap{flex-wrap:nowrap!important}.flex-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-fill{flex:1 1 auto!important}.flex-grow-0{flex-grow:0!important}.flex-grow-1{flex-grow:1!important}.flex-shrink-0{flex-shrink:0!important}.flex-shrink-1{flex-shrink:1!important}.justify-content-start{justify-content:flex-start!important}.justify-content-end{justify-content:flex-end!important}.justify-content-center{justify-content:center!important}.justify-content-between{justify-content:space-between!important}.justify-content-around{justify-content:space-around!important}.align-items-start{align-items:flex-start!important}.align-items-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.align-items-baseline{align-items:baseline!important}.align-items-stretch{align-items:stretch!important}.align-content-start{align-content:flex-start!important}.align-content-end{align-content:flex-end!important}.align-content-center{align-content:center!important}.align-content-between{align-content:space-between!important}.align-content-around{align-content:space-around!important}.align-content-stretch{align-content:stretch!important}.align-self-auto{align-self:auto!important}.align-self-start{align-self:flex-start!important}.align-self-end{align-self:flex-end!important}.align-self-center{align-self:center!important}.align-self-baseline{align-self:baseline!important}.align-self-stretch{align-self:stretch!important}@media (min-width:576px){.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-sm-fill{flex:1 1 auto!important}.flex-sm-grow-0{flex-grow:0!important}.flex-sm-grow-1{flex-grow:1!important}.flex-sm-shrink-0{flex-shrink:0!important}.flex-sm-shrink-1{flex-shrink:1!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}}@media (min-width:768px){.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-md-fill{flex:1 1 auto!important}.flex-md-grow-0{flex-grow:0!important}.flex-md-grow-1{flex-grow:1!important}.flex-md-shrink-0{flex-shrink:0!important}.flex-md-shrink-1{flex-shrink:1!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-lg-fill{flex:1 1 auto!important}.flex-lg-grow-0{flex-grow:0!important}.flex-lg-grow-1{flex-grow:1!important}.flex-lg-shrink-0{flex-shrink:0!important}.flex-lg-shrink-1{flex-shrink:1!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-xl-fill{flex:1 1 auto!important}.flex-xl-grow-0{flex-grow:0!important}.flex-xl-grow-1{flex-grow:1!important}.flex-xl-shrink-0{flex-shrink:0!important}.flex-xl-shrink-1{flex-shrink:1!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.user-select-all{-webkit-user-select:all!important;user-select:all!important}.user-select-auto{-webkit-user-select:auto!important;user-select:auto!important}.user-select-none{-webkit-user-select:none!important;user-select:none!important}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:sticky!important}.fixed-top{top:0}.fixed-bottom,.fixed-top{left:0;position:fixed;right:0;z-index:1030}.fixed-bottom{bottom:0}@supports (position:sticky){.sticky-top{position:sticky;top:0;z-index:1020}}.sr-only{clip:rect(0,0,0,0);border:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;overflow:visible;position:static;white-space:normal;width:auto}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.min-vw-100{min-width:100vw!important}.min-vh-100{min-height:100vh!important}.vw-100{width:100vw!important}.vh-100{height:100vh!important}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-n1{margin:-.25rem!important}.mt-n1,.my-n1{margin-top:-.25rem!important}.mr-n1,.mx-n1{margin-right:-.25rem!important}.mb-n1,.my-n1{margin-bottom:-.25rem!important}.ml-n1,.mx-n1{margin-left:-.25rem!important}.m-n2{margin:-.5rem!important}.mt-n2,.my-n2{margin-top:-.5rem!important}.mr-n2,.mx-n2{margin-right:-.5rem!important}.mb-n2,.my-n2{margin-bottom:-.5rem!important}.ml-n2,.mx-n2{margin-left:-.5rem!important}.m-n3{margin:-1rem!important}.mt-n3,.my-n3{margin-top:-1rem!important}.mr-n3,.mx-n3{margin-right:-1rem!important}.mb-n3,.my-n3{margin-bottom:-1rem!important}.ml-n3,.mx-n3{margin-left:-1rem!important}.m-n4{margin:-1.5rem!important}.mt-n4,.my-n4{margin-top:-1.5rem!important}.mr-n4,.mx-n4{margin-right:-1.5rem!important}.mb-n4,.my-n4{margin-bottom:-1.5rem!important}.ml-n4,.mx-n4{margin-left:-1.5rem!important}.m-n5{margin:-3rem!important}.mt-n5,.my-n5{margin-top:-3rem!important}.mr-n5,.mx-n5{margin-right:-3rem!important}.mb-n5,.my-n5{margin-bottom:-3rem!important}.ml-n5,.mx-n5{margin-left:-3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-n1{margin:-.25rem!important}.mt-sm-n1,.my-sm-n1{margin-top:-.25rem!important}.mr-sm-n1,.mx-sm-n1{margin-right:-.25rem!important}.mb-sm-n1,.my-sm-n1{margin-bottom:-.25rem!important}.ml-sm-n1,.mx-sm-n1{margin-left:-.25rem!important}.m-sm-n2{margin:-.5rem!important}.mt-sm-n2,.my-sm-n2{margin-top:-.5rem!important}.mr-sm-n2,.mx-sm-n2{margin-right:-.5rem!important}.mb-sm-n2,.my-sm-n2{margin-bottom:-.5rem!important}.ml-sm-n2,.mx-sm-n2{margin-left:-.5rem!important}.m-sm-n3{margin:-1rem!important}.mt-sm-n3,.my-sm-n3{margin-top:-1rem!important}.mr-sm-n3,.mx-sm-n3{margin-right:-1rem!important}.mb-sm-n3,.my-sm-n3{margin-bottom:-1rem!important}.ml-sm-n3,.mx-sm-n3{margin-left:-1rem!important}.m-sm-n4{margin:-1.5rem!important}.mt-sm-n4,.my-sm-n4{margin-top:-1.5rem!important}.mr-sm-n4,.mx-sm-n4{margin-right:-1.5rem!important}.mb-sm-n4,.my-sm-n4{margin-bottom:-1.5rem!important}.ml-sm-n4,.mx-sm-n4{margin-left:-1.5rem!important}.m-sm-n5{margin:-3rem!important}.mt-sm-n5,.my-sm-n5{margin-top:-3rem!important}.mr-sm-n5,.mx-sm-n5{margin-right:-3rem!important}.mb-sm-n5,.my-sm-n5{margin-bottom:-3rem!important}.ml-sm-n5,.mx-sm-n5{margin-left:-3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-n1{margin:-.25rem!important}.mt-md-n1,.my-md-n1{margin-top:-.25rem!important}.mr-md-n1,.mx-md-n1{margin-right:-.25rem!important}.mb-md-n1,.my-md-n1{margin-bottom:-.25rem!important}.ml-md-n1,.mx-md-n1{margin-left:-.25rem!important}.m-md-n2{margin:-.5rem!important}.mt-md-n2,.my-md-n2{margin-top:-.5rem!important}.mr-md-n2,.mx-md-n2{margin-right:-.5rem!important}.mb-md-n2,.my-md-n2{margin-bottom:-.5rem!important}.ml-md-n2,.mx-md-n2{margin-left:-.5rem!important}.m-md-n3{margin:-1rem!important}.mt-md-n3,.my-md-n3{margin-top:-1rem!important}.mr-md-n3,.mx-md-n3{margin-right:-1rem!important}.mb-md-n3,.my-md-n3{margin-bottom:-1rem!important}.ml-md-n3,.mx-md-n3{margin-left:-1rem!important}.m-md-n4{margin:-1.5rem!important}.mt-md-n4,.my-md-n4{margin-top:-1.5rem!important}.mr-md-n4,.mx-md-n4{margin-right:-1.5rem!important}.mb-md-n4,.my-md-n4{margin-bottom:-1.5rem!important}.ml-md-n4,.mx-md-n4{margin-left:-1.5rem!important}.m-md-n5{margin:-3rem!important}.mt-md-n5,.my-md-n5{margin-top:-3rem!important}.mr-md-n5,.mx-md-n5{margin-right:-3rem!important}.mb-md-n5,.my-md-n5{margin-bottom:-3rem!important}.ml-md-n5,.mx-md-n5{margin-left:-3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-n1{margin:-.25rem!important}.mt-lg-n1,.my-lg-n1{margin-top:-.25rem!important}.mr-lg-n1,.mx-lg-n1{margin-right:-.25rem!important}.mb-lg-n1,.my-lg-n1{margin-bottom:-.25rem!important}.ml-lg-n1,.mx-lg-n1{margin-left:-.25rem!important}.m-lg-n2{margin:-.5rem!important}.mt-lg-n2,.my-lg-n2{margin-top:-.5rem!important}.mr-lg-n2,.mx-lg-n2{margin-right:-.5rem!important}.mb-lg-n2,.my-lg-n2{margin-bottom:-.5rem!important}.ml-lg-n2,.mx-lg-n2{margin-left:-.5rem!important}.m-lg-n3{margin:-1rem!important}.mt-lg-n3,.my-lg-n3{margin-top:-1rem!important}.mr-lg-n3,.mx-lg-n3{margin-right:-1rem!important}.mb-lg-n3,.my-lg-n3{margin-bottom:-1rem!important}.ml-lg-n3,.mx-lg-n3{margin-left:-1rem!important}.m-lg-n4{margin:-1.5rem!important}.mt-lg-n4,.my-lg-n4{margin-top:-1.5rem!important}.mr-lg-n4,.mx-lg-n4{margin-right:-1.5rem!important}.mb-lg-n4,.my-lg-n4{margin-bottom:-1.5rem!important}.ml-lg-n4,.mx-lg-n4{margin-left:-1.5rem!important}.m-lg-n5{margin:-3rem!important}.mt-lg-n5,.my-lg-n5{margin-top:-3rem!important}.mr-lg-n5,.mx-lg-n5{margin-right:-3rem!important}.mb-lg-n5,.my-lg-n5{margin-bottom:-3rem!important}.ml-lg-n5,.mx-lg-n5{margin-left:-3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-n1{margin:-.25rem!important}.mt-xl-n1,.my-xl-n1{margin-top:-.25rem!important}.mr-xl-n1,.mx-xl-n1{margin-right:-.25rem!important}.mb-xl-n1,.my-xl-n1{margin-bottom:-.25rem!important}.ml-xl-n1,.mx-xl-n1{margin-left:-.25rem!important}.m-xl-n2{margin:-.5rem!important}.mt-xl-n2,.my-xl-n2{margin-top:-.5rem!important}.mr-xl-n2,.mx-xl-n2{margin-right:-.5rem!important}.mb-xl-n2,.my-xl-n2{margin-bottom:-.5rem!important}.ml-xl-n2,.mx-xl-n2{margin-left:-.5rem!important}.m-xl-n3{margin:-1rem!important}.mt-xl-n3,.my-xl-n3{margin-top:-1rem!important}.mr-xl-n3,.mx-xl-n3{margin-right:-1rem!important}.mb-xl-n3,.my-xl-n3{margin-bottom:-1rem!important}.ml-xl-n3,.mx-xl-n3{margin-left:-1rem!important}.m-xl-n4{margin:-1.5rem!important}.mt-xl-n4,.my-xl-n4{margin-top:-1.5rem!important}.mr-xl-n4,.mx-xl-n4{margin-right:-1.5rem!important}.mb-xl-n4,.my-xl-n4{margin-bottom:-1.5rem!important}.ml-xl-n4,.mx-xl-n4{margin-left:-1.5rem!important}.m-xl-n5{margin:-3rem!important}.mt-xl-n5,.my-xl-n5{margin-top:-3rem!important}.mr-xl-n5,.mx-xl-n5{margin-right:-3rem!important}.mb-xl-n5,.my-xl-n5{margin-bottom:-3rem!important}.ml-xl-n5,.mx-xl-n5{margin-left:-3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.stretched-link:after{background-color:transparent;bottom:0;content:"";left:0;pointer-events:auto;position:absolute;right:0;top:0;z-index:1}.text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace!important}.text-justify{text-align:justify!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-lighter{font-weight:lighter!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-weight-bolder{font-weight:bolder!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#007bff!important}a.text-primary:focus,a.text-primary:hover{color:#0056b3!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#494f54!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#19692c!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#0f6674!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#ba8b00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#a71d2a!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#cbd3da!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#121416!important}.text-body{color:#212529!important}.text-muted{color:#6c757d!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:hsla(0,0%,100%,.5)!important}.text-hide{background-color:transparent;border:0;color:transparent;font:0/0 a;text-shadow:none}.text-decoration-none{text-decoration:none!important}.text-break{word-wrap:break-word!important;word-break:break-word!important}.text-reset{color:inherit!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,:after,:before{box-shadow:none!important;text-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]:after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #adb5bd}blockquote,img,pre,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}.container,body{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #dee2e6!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#dee2e6}.table .thead-dark th{border-color:#dee2e6;color:inherit}}body{font-family:Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif}h2{margin-bottom:.5rem}.navbar{border:solid #e7e7e7;border-width:0 0 1px}.navbar a,.navbar a:hover{background-image:none}.navbar li{margin-bottom:0}.sidebar strong{display:block;font-size:1.3em;margin-bottom:1em}.sidebar p{font-size:1.2em;margin-bottom:.5em}.sidebar ul{font-size:1.1em}.sidebar li{margin-bottom:.2em}.sidebar li>ul{margin-top:0}.sidebar .banner a{display:block}.sidebar .banner a:hover,a{background-image:none;text-decoration:none}a{color:#337ab7}a:hover{background-image:linear-gradient(0deg,transparent,transparent 1px,#23527c 0,#23527c 2px,transparent 0);color:#23527c;text-decoration:none}.about-organizer-image{max-width:200px}a.supporter-page-image{display:block;max-width:400px}.supporter-page-image>a>span{margin-left:unset;margin-right:auto}.talk-content hr{margin-bottom:2rem;margin-top:2rem}.all-talks{margin:.5em}.all-talks li{display:flex;gap:1em;list-style:none;margin-left:0}.all-talks li .talk-number{display:block}

Debug: Redirects

This page lists all redirects that are present in the website

FromTo
/2018/06/27/immutable-data/talks/2018-06-27-immutable-data/
/2018/06/27/immutable-data.html/talks/2018-06-27-immutable-data/
/2018/05/30/graphql/talks/2018-05-30-graphql/
/2018/05/30/graphql.html/talks/2018-05-30-graphql/
/2018/04/25/kotlin/talks/2018-04-25-kotlin/
/2018/04/25/kotlin.html/talks/2018-04-25-kotlin/
/2018/03/20/mikro_vs_makroarchitektur/talks/2018-03-20-mikro_vs_makroarchitektur/
/2018/03/20/mikro_vs_makroarchitektur.html/talks/2018-03-20-mikro_vs_makroarchitektur/
/2018/02/28/java_auf_sap_cloud/talks/2018-02-28-java_auf_sap_cloud/
/2018/02/28/java_auf_sap_cloud.html/talks/2018-02-28-java_auf_sap_cloud/
/2018/01/31/system_of_systems/talks/2018-01-31-system_of_systems/
/2018/01/31/system_of_systems.html/talks/2018-01-31-system_of_systems/
/2017/11/29/neo4j/talks/2017-11-29-neo4j/
/2017/11/29/neo4j.html/talks/2017-11-29-neo4j/
/2017/10/25/serverless/talks/2017-10-25-serverless/
/2017/10/25/serverless.html/talks/2017-10-25-serverless/
/2017/08/30/alexa/talks/2017-08-30-alexa/
/2017/08/30/alexa.html/talks/2017-08-30-alexa/
/2017/05/31/react/talks/2017-05-31-react/
/2017/05/31/react.html/talks/2017-05-31-react/
/2017/04/25/jdk9/talks/2017-04-26-jdk9/
/2017/04/25/jdk9.html/talks/2017-04-26-jdk9/
/2017/03/22/angular/talks/2017-03-22-angular/
/2017/03/22/angular.html/talks/2017-03-22-angular/
/2017/02/22/css/talks/2017-02-22-css/
/2017/02/22/css.html/talks/2017-02-22-css/
/2017/01/25/junit5/talks/2017-01-25-junit5/
/2017/01/25/junit5.html/talks/2017-01-25-junit5/
/2016/11/30/inside_jvm/talks/2016-11-30-inside_jvm/
/2016/11/30/inside_jvm.html/talks/2016-11-30-inside_jvm/
/2016/09/21/kommunikationskultur/talks/2016-09-21-kommunikationskultur/
/2016/09/21/kommunikationskultur.html/talks/2016-09-21-kommunikationskultur/
/2016/07/27/testwerkzeuge_javafx/talks/2016-07-27-testwerkzeuge_javafx/
/2016/07/27/testwerkzeuge_javafx.html/talks/2016-07-27-testwerkzeuge_javafx/
/2016/05/25/performance-analyse-inspectit/talks/2016-05-25-performance-analyse-inspectit/
/2016/05/25/performance-analyse-inspectit.html/talks/2016-05-25-performance-analyse-inspectit/
/2016/03/30/haskell_frege/talks/2016-03-30-haskell_frege/
/2016/03/30/haskell_frege.html/talks/2016-03-30-haskell_frege/
/2016/01/27/functional_java/talks/2016-01-27-functional_java/
/2016/01/27/functional_java.html/talks/2016-01-27-functional_java/
/2015/11/25/javafx-mobile/talks/2015-11-25-javafx-mobile/
/2015/11/25/javafx-mobile.html/talks/2015-11-25-javafx-mobile/
/2015/09/30/guava/talks/2015-09-30-guava/
/2015/09/30/guava.html/talks/2015-09-30-guava/
/2015/07/29/drools/talks/2015-07-29-drools/
/2015/07/29/drools.html/talks/2015-07-29-drools/
/2015/05/27/advanced-android/talks/2015-05-27-advanced-android/
/2015/05/27/advanced-android.html/talks/2015-05-27-advanced-android/
/2015/03/25/android/talks/2015-03-25-android/
/2015/03/25/android.html/talks/2015-03-25-android/
/2015/01/28/moskito/talks/2015-01-28-moskito/
/2015/01/28/moskito.html/talks/2015-01-28-moskito/
/2014/12/03/model-view-star/talks/2014-12-03-model-view-star/
/2014/12/03/model-view-star.html/talks/2014-12-03-model-view-star/
/2014/10/29/infrastructure_as_code/talks/2014-10-29-infrastructure_as_code/
/2014/10/29/infrastructure_as_code.html/talks/2014-10-29-infrastructure_as_code/
/2014/09/24/solr/talks/2014-09-24-solr/
/2014/09/24/solr.html/talks/2014-09-24-solr/
/2014/07/30/java8-streams/talks/2014-07-30-java8-streams/
/2014/07/30/java8-streams.html/talks/2014-07-30-java8-streams/
/2014/05/28/hazelcast/talks/2014-05-28-hazelcast/
/2014/05/28/hazelcast.html/talks/2014-05-28-hazelcast/
/2014/04/02/assertj/talks/2014-04-02-assertj/
/2014/04/02/assertj.html/talks/2014-04-02-assertj/
/2014/01/29/opendip/talks/2014-01-29-opendip/
/2014/01/29/opendip.html/talks/2014-01-29-opendip/
/2013/11/27/web-performance/talks/2013-11-27-web-performance/
/2013/11/27/web-performance.html/talks/2013-11-27-web-performance/
/2013/10/30/app-design/talks/2013-10-30-app-design/
/2013/10/30/app-design.html/talks/2013-10-30-app-design/
/2013/07/31/persona/talks/2013-07-31-persona/
/2013/07/31/persona.html/talks/2013-07-31-persona/
/2013/05/29/jruby/talks/2013-05-29-jruby/
/2013/05/29/jruby.html/talks/2013-05-29-jruby/
/2013/03/27/nxt_lego/talks/2013-03-27-nxt_lego/
/2013/03/27/nxt_lego.html/talks/2013-03-27-nxt_lego/
/2012/11/28/javafx2/talks/2012-11-28-javafx2/
/2012/11/28/javafx2.html/talks/2012-11-28-javafx2/
/2012/09/26/bean_validation/talks/2012-09-26-bean_validation/
/2012/09/26/bean_validation.html/talks/2012-09-26-bean_validation/
/2012/07/25/selenium_praxis/talks/2012-07-25-selenium_praxis/
/2012/07/25/selenium_praxis.html/talks/2012-07-25-selenium_praxis/
/2012/06/27/gridgain/talks/2012-06-27-gridgain/
/2012/06/27/gridgain.html/talks/2012-06-27-gridgain/
/2012/05/30/jmonkey-engine3/talks/2012-05-30-jmonkey-engine3/
/2012/05/30/jmonkey-engine3.html/talks/2012-05-30-jmonkey-engine3/
/2012/04/25/maven/talks/2012-04-25-maven/
/2012/04/25/maven.html/talks/2012-04-25-maven/
/2012/03/28/webtests/talks/2012-03-28-webtests/
/2012/03/28/webtests.html/talks/2012-03-28-webtests/
/2012/02/29/scala_webapps/talks/2012-02-29-scala_webapps/
/2012/02/29/scala_webapps.html/talks/2012-02-29-scala_webapps/
/2012/01/25/jsf_cdi_advanced/talks/2012-01-25-jsf_cdi_advanced/
/2012/01/25/jsf_cdi_advanced.html/talks/2012-01-25-jsf_cdi_advanced/
/2012/01/04/hibernate/talks/2012-01-01-hibernate/
/2012/01/04/hibernate.html/talks/2012-01-01-hibernate/
/2011/11/30/jsf-cdi/talks/2011-11-30-jsf-cdi/
/2011/11/30/jsf-cdi.html/talks/2011-11-30-jsf-cdi/
/2011/10/26/android/talks/2011-10-26-android/
/2011/10/26/android.html/talks/2011-10-26-android/
/2011/09/28/jdom/talks/2011-09-28-jdom/
/2011/09/28/jdom.html/talks/2011-09-28-jdom/
/2011/09/28/single-sign-on/talks/2011-09-28-single-sign-on/
/2011/09/28/single-sign-on.html/talks/2011-09-28-single-sign-on/
/2011/08/31/testen/talks/2011-08-31-testen/
/2011/08/31/testen.html/talks/2011-08-31-testen/
/2011/07/27/scala/talks/2011-07-27-scala/
/2011/07/27/scala.html/talks/2011-07-27-scala/
/2011/07/27/testng/talks/2011-07-27-testng/
/2011/07/27/testng.html/talks/2011-07-27-testng/
/2011/06/29/javaee_jboss/talks/2011-06-29-javaee_jboss/
/2011/06/29/javaee_jboss.html/talks/2011-06-29-javaee_jboss/
/2011/05/27/guice/talks/2011-05-27-guice/
/2011/05/27/guice.html/talks/2011-05-27-guice/
/2011/04/27/gwt/talks/2011-04-27-gwt/
/2011/04/27/gwt.html/talks/2011-04-27-gwt/
/2011/04/27/osgi_springdm/talks/2011-04-27-osgi_springdm/
/2011/04/27/osgi_springdm.html/talks/2011-04-27-osgi_springdm/
/2011/03/22/easymock/talks/2011-03-22-easymock/
/2011/03/22/easymock.html/talks/2011-03-22-easymock/
/2011/03/22/jenkins/talks/2011-03-22-jenkins/
/2011/03/22/jenkins.html/talks/2011-03-22-jenkins/
- \ No newline at end of file + \ No newline at end of file diff --git a/feed.json b/feed.json index eb08eb6a6..234266c17 100644 --- a/feed.json +++ b/feed.json @@ -9,7 +9,7 @@ "content_html": "

Der aktuelle Stand der JavaFX-UI-Entwicklung wird aus der Sicht von Oracle erläutert, mit einer Bestandsaufnahme der\nvorhandenen Entwicklungsressourcen und der Fortführung von JavaFX in einem freien Ökosystem. JavaFX ist vom JDK\nentkoppelt, sodass es separat entwickelt werden kann und alle davon profitieren. Gemeinsam mit Oracle Engineering wurde\nein JavaFX-Ökosystem aufgebaut, dass die langfristige technologische Lebensfähigkeit von JavaFX sicherstellt. Die\norganisatorische Beteiligung der Entwickler erfolgt über das OpenJDK und von dort aus kann die Open-Source-Software\nweiterverteilt werden. Oracle entwickelt und veröffentlicht JavaFX als eigenständige Module über das OpenJFX-Projekt im\nOpenJDK. Oracle plant, diese kostenlosen und Open-Source-OpenJFX-Builds weiterhin mit den neuesten Java-Versionen\nbereitzustellen, wie derzeit JavaFX 22 auf Oracle JDK 22, dann JavaFX 23 für Oracle JDK 23 im September 2024 und sie,\nwie seit vielen Jahren regelmäßig auf jdk.java.net verfügbar zu machen.

", "url": "https://jug-gr.de/talks/2024-09-25-javafx-state-of-the-technology/", "title": "JavaFX State of the Technology", - "summary": "\n

JavaFX State of the Technology

\n

Date: September 25, 2024, 19:00 Uhr

\n

Speakers: Wolfgang Weigend

\n

Location:

\n
\n Carl Zeiss Digital Innovation\n
\n Berliner Straße 63\n
\n 02826 Görlitz\n
\n ", + "summary": "\n

JavaFX State of the Technology

\n

Date: September 25, 2024, 19:00 Uhr

\n

Speakers: Christian Heilmann, Wolfgang Weigend

\n

Location:

\n
\n Carl Zeiss Digital Innovation\n
\n Berliner Straße 63\n
\n 02826 Görlitz\n
\n ", "date_modified": "2024-09-25T00:00:00.000Z" }, { @@ -684,14 +684,6 @@ "summary": "\n

Testen - Patterns und Best Practices

\n

Date: August 31, 2011, 19:00 Uhr

\n

Speakers: Marko Modsching

\n

Location:

\n
\n DSER\n
\n Steinstraße 11\n
\n 02826 Görlitz\n
\n ", "date_modified": "2011-08-31T00:00:00.000Z" }, - { - "id": "https://jug-gr.de/talks/2011-07-27-testng/", - "content_html": "

TestNG (Marcus Döring)

", - "url": "https://jug-gr.de/talks/2011-07-27-testng/", - "title": "TestNG", - "summary": "\n

TestNG

\n

Date: July 27, 2011, 19:00 Uhr

\n

Speakers: Marcus Döring

\n

Location:

\n
\n DSER\n
\n Steinstraße 11\n
\n 02826 Görlitz\n
\n ", - "date_modified": "2011-07-27T00:00:00.000Z" - }, { "id": "https://jug-gr.de/talks/2011-07-27-scala/", "content_html": "

Scala - Vorstellung der Sprache, Demo und das Testen (Stefan Bradl)

\n

Materialien:

\n", @@ -700,6 +692,14 @@ "summary": "\n

Scala

\n

Date: July 27, 2011, 19:00 Uhr

\n

Speakers: Stefan Bradl

\n

Location:

\n
\n DSER\n
\n Steinstraße 11\n
\n 02826 Görlitz\n
\n ", "date_modified": "2011-07-27T00:00:00.000Z" }, + { + "id": "https://jug-gr.de/talks/2011-07-27-testng/", + "content_html": "

TestNG (Marcus Döring)

", + "url": "https://jug-gr.de/talks/2011-07-27-testng/", + "title": "TestNG", + "summary": "\n

TestNG

\n

Date: July 27, 2011, 19:00 Uhr

\n

Speakers: Marcus Döring

\n

Location:

\n
\n DSER\n
\n Steinstraße 11\n
\n 02826 Görlitz\n
\n ", + "date_modified": "2011-07-27T00:00:00.000Z" + }, { "id": "https://jug-gr.de/talks/2011-06-29-javaee_jboss/", "content_html": "

Diesmal stellt Michael Förster Java EE vor. Es wird sowohl Einblicke in Theorie, wie auch wieder praktische Beispiele\ngeben.

", diff --git a/impressum/index.html b/impressum/index.html index 6560c5691..6579932f2 100644 --- a/impressum/index.html +++ b/impressum/index.html @@ -357,6 +357,6 @@

Kontakt:

- \ No newline at end of file + \ No newline at end of file diff --git a/index.html b/index.html index eab1ebbe4..465aba890 100644 --- a/index.html +++ b/index.html @@ -344,7 +344,7 @@ overflow: visible; position: static; width: auto; } -

JavaFX State of the Technology

von Wolfgang Weigend | 25. September 2024

javafx, frontend

Der aktuelle Stand der JavaFX-UI-Entwicklung wird aus der Sicht von Oracle erläutert, mit einer Bestandsaufnahme der +

JavaFX State of the Technology

von Christian Heilmann, Wolfgang Weigend | 25. September 2024

javafx, frontend

Der aktuelle Stand der JavaFX-UI-Entwicklung wird aus der Sicht von Oracle erläutert, mit einer Bestandsaufnahme der vorhandenen Entwicklungsressourcen und der Fortführung von JavaFX in einem freien Ökosystem. JavaFX ist vom JDK entkoppelt, sodass es separat entwickelt werden kann und alle davon profitieren. Gemeinsam mit Oracle Engineering wurde ein JavaFX-Ökosystem aufgebaut, dass die langfristige technologische Lebensfähigkeit von JavaFX sicherstellt. Die @@ -352,12 +352,12 @@ weiterverteilt werden. Oracle entwickelt und veröffentlicht JavaFX als eigenständige Module über das OpenJFX-Projekt im OpenJDK. Oracle plant, diese kostenlosen und Open-Source-OpenJFX-Builds weiterhin mit den neuesten Java-Versionen bereitzustellen, wie derzeit JavaFX 22 auf Oracle JDK 22, dann JavaFX 23 für Oracle JDK 23 im September 2024 und sie, -wie seit vielen Jahren regelmäßig auf jdk.java.net verfügbar zu machen.

Poster: Jürgen ist hat eine 3D-Brille auf und isst Popcorn.

Wolfgang Weigend arbeitet als Master Principal Solution Engineer bei der ORACLE Global Services Germany GmbH im +wie seit vielen Jahren regelmäßig auf jdk.java.net verfügbar zu machen.

Poster: Jürgen ist hat eine 3D-Brille auf und isst Popcorn.



Die Veranstaltung wird durch die Java User Group Görlitz (im iJUG Verband) organisiert.
Die Java User Group Görlitz ist ein Projekt des Digitale Oberlausitz e.V.

- \ No newline at end of file + \ No newline at end of file diff --git a/jug-goerlitz.ics b/jug-goerlitz.ics index 577e273f2..26fa65716 100644 --- a/jug-goerlitz.ics +++ b/jug-goerlitz.ics @@ -7,12 +7,13 @@ X-WR-CALNAME:JUG Görlitz TIMEZONE-ID:Europe/Berlin X-WR-TIMEZONE:Europe/Berlin BEGIN:VEVENT -UID:99180868-e1cd-4b6b-827e-3da05fd8c9d1 +UID:7f38dc1a-0e48-47ad-a771-7e16964bb2e8 SEQUENCE:0 -DTSTAMP:20240904T171816 +DTSTAMP:20240911T185530 DTSTART;TZID=Europe/Berlin:20240925T190000 DTEND;TZID=Europe/Berlin:20240925T220000 -SUMMARY:Vortrag "JavaFX State of the Technology" - Wolfgang Weigend +SUMMARY:Vortrag "JavaFX State of the Technology" - Christian Heilmann\, Wo + lfgang Weigend LOCATION:Carl Zeiss Digital Innovation\nBerliner Straße 63\,02826 Görlit z DESCRIPTION:Der aktuelle Stand der JavaFX-UI-Entwicklung wird aus der Sich @@ -34,9 +35,9 @@ X-ALT-DESC;FMTTYPE=text/html:

Der aktuelle Stand der JavaFX-UI-Entwicklu .net verfügbar zu machen.

END:VEVENT BEGIN:VEVENT -UID:75224024-d905-409b-b6eb-73d34586348f +UID:1f38ca62-9de4-4895-827d-90b8e3793352 SEQUENCE:0 -DTSTAMP:20240904T171816 +DTSTAMP:20240911T185530 DTSTART;TZID=Europe/Berlin:20240529T190000 DTEND;TZID=Europe/Berlin:20240529T220000 SUMMARY:Vortrag "Parallele Programmiermodelle für Supercomputer" - Dr. An @@ -64,9 +65,9 @@ X-ALT-DESC;FMTTYPE=text/html:

Das "Supercomputing" beschäftigt sich mit glich gewesen wären.

END:VEVENT BEGIN:VEVENT -UID:3e7944a4-b4b8-4637-89c6-59c7d0168b62 +UID:e1f3ca07-17d7-4e99-9be2-e704ebaefb2a SEQUENCE:0 -DTSTAMP:20240904T171816 +DTSTAMP:20240911T185530 DTSTART;TZID=Europe/Berlin:20240424T190000 DTEND;TZID=Europe/Berlin:20240424T220000 SUMMARY:Vortrag "Rust (Teil 2)" - Konstantin Eger @@ -86,9 +87,9 @@ X-ALT-DESC;FMTTYPE=text/html:

Im zweiten Teil der Vortragsreihe zu Rust ust zu erhalten.

END:VEVENT BEGIN:VEVENT -UID:65dc24cb-f302-4efd-a048-691f271f2fce +UID:e45e2154-b9c8-4e73-8828-d18ddc9d4782 SEQUENCE:0 -DTSTAMP:20240904T171816 +DTSTAMP:20240911T185530 DTSTART;TZID=Europe/Berlin:20240320T190000 DTEND;TZID=Europe/Berlin:20240320T220000 SUMMARY:Vortrag "Rust (Teil 1): Einführung in die Sprache" - Manuel Mauky @@ -120,9 +121,9 @@ X-ALT-DESC;FMTTYPE=text/html:

Rust ist eine relativ neue Programmierspra \n END:VEVENT BEGIN:VEVENT -UID:0dd8cdf1-afeb-4c07-9a4e-097c0e9f77dd +UID:5060b1f4-1088-4a20-8bef-45bf0de24081 SEQUENCE:0 -DTSTAMP:20240904T171816 +DTSTAMP:20240911T185530 DTSTART;TZID=Europe/Berlin:20240228T190000 DTEND;TZID=Europe/Berlin:20240228T220000 SUMMARY:Vortrag "Schlanke Architektur-Reviews" - Stefan Zörner @@ -146,9 +147,9 @@ X-ALT-DESC;FMTTYPE=text/html:

Mit Architekturbewertungen ist es möglich idenz im Bewertungsergebnis.

END:VEVENT BEGIN:VEVENT -UID:67f261e3-ac4e-48ce-adf0-f61bc5194c82 +UID:52526e30-19e2-441e-9a10-d4d2d1135894 SEQUENCE:0 -DTSTAMP:20240904T171816 +DTSTAMP:20240911T185530 DTSTART;TZID=Europe/Berlin:20240131T190000 DTEND;TZID=Europe/Berlin:20240131T220000 SUMMARY:Vortrag "Flutter\, der heilige Gral der Cross-Plattform-Entwicklun @@ -173,9 +174,9 @@ X-ALT-DESC;FMTTYPE=text/html:

Wenn sich Google einem Thema widmet\, dann zum Vortrag\n END:VEVENT BEGIN:VEVENT -UID:bfa70987-c101-45e5-904b-3f124551cc35 +UID:9bc1f611-5f78-4b87-b016-582390baa35d SEQUENCE:0 -DTSTAMP:20240904T171816 +DTSTAMP:20240911T185530 DTSTART;TZID=Europe/Berlin:20231129T190000 DTEND;TZID=Europe/Berlin:20231129T220000 SUMMARY:Vortrag "What the CRaC - Superfast JVM startup" - Gerrit Grunwald @@ -205,9 +206,9 @@ X-ALT-DESC;FMTTYPE=text/html:

In einer Welt\, in der Microservices mehr nloads/juggr_What_The_CRaC.pdf">Folien zum Vortrag\n END:VEVENT BEGIN:VEVENT -UID:2ac1971c-dfcb-44cc-9e9f-5c4ef584abf8 +UID:cd15cab6-2135-4388-9d19-87b752519ec5 SEQUENCE:0 -DTSTAMP:20240904T171816 +DTSTAMP:20240911T185530 DTSTART;TZID=Europe/Berlin:20231025T190000 DTEND;TZID=Europe/Berlin:20231025T220000 SUMMARY:Vortrag "AWS-Infrastruktur mit Java erstellen - CDK in Action" - D @@ -243,9 +244,9 @@ X-ALT-DESC;FMTTYPE=text/html:

Heutzutage gibt es viele Möglichkeiten\, nn.

END:VEVENT BEGIN:VEVENT -UID:3e4354ad-f528-436e-b544-e1a531b662dc +UID:c6ccfdd7-b853-44ea-a049-431a7a333d8d SEQUENCE:0 -DTSTAMP:20240904T171816 +DTSTAMP:20240911T185530 DTSTART;TZID=Europe/Berlin:20230927T190000 DTEND;TZID=Europe/Berlin:20230927T220000 SUMMARY:Vortrag "Java 21: Virtuelle Threads" - Patryk Lewandowski @@ -265,9 +266,9 @@ X-ALT-DESC;FMTTYPE=text/html:

Erkunden Sie das aufregende Feature von Ja anzuschließen.

END:VEVENT BEGIN:VEVENT -UID:3219386d-42ce-4ba5-8775-135662a808c5 +UID:a0ff5e33-914f-410e-a822-7bc6fe5bf8f4 SEQUENCE:0 -DTSTAMP:20240904T171816 +DTSTAMP:20240911T185530 DTSTART;TZID=Europe/Berlin:20230628T190000 DTEND;TZID=Europe/Berlin:20230628T220000 SUMMARY:Vortrag "GraalVM 23 – Konzepte und Features" - Wolfgang Weigend @@ -295,9 +296,9 @@ X-ALT-DESC;FMTTYPE=text/html:

Die GraalVM ist eine Virtuelle Maschine (V ng Boot und Microservices-Frameworks verwendet werden.

END:VEVENT BEGIN:VEVENT -UID:e95949be-fd16-4b26-89b9-101c63749bd1 +UID:7b8e1c2e-cdd7-4fdf-865b-b0c8650ccd48 SEQUENCE:0 -DTSTAMP:20240904T171816 +DTSTAMP:20240911T185530 DTSTART;TZID=Europe/Berlin:20230531T190000 DTEND;TZID=Europe/Berlin:20230531T220000 SUMMARY:Vortrag "Accessibility in the Wild" - Dániel Sulyok @@ -316,9 +317,9 @@ X-ALT-DESC;FMTTYPE=text/html:

Dániel Sulyok von der Tallence AG stellt gr_a11y.pdf">Folien zum Vortrag\n END:VEVENT BEGIN:VEVENT -UID:be1934c0-9d25-4ef5-9120-2f59dfe74eb4 +UID:49a4f655-4a01-48ba-b9a1-7e91fd862741 SEQUENCE:0 -DTSTAMP:20240904T171816 +DTSTAMP:20240911T185530 DTSTART;TZID=Europe/Berlin:20230426T190000 DTEND;TZID=Europe/Berlin:20230426T220000 SUMMARY:Vortrag "ArchUnit: Unit-Tests für deine Java-Architektur" - Rolan @@ -339,9 +340,9 @@ X-ALT-DESC;FMTTYPE=text/html:

Architektur und Code driften immer weiter rekt im Code abbilden können.

END:VEVENT BEGIN:VEVENT -UID:dd8abe28-14e0-4c79-a129-b93128e25997 +UID:b56a47a0-2815-490a-85e9-1d3631163fa8 SEQUENCE:0 -DTSTAMP:20240904T171816 +DTSTAMP:20240911T185530 DTSTART;TZID=Europe/Berlin:20230329T183000 DTEND;TZID=Europe/Berlin:20230329T213000 SUMMARY:Vortrag "Spring für architekturinteressierte Entwickler:innen" - @@ -376,9 +377,9 @@ X-ALT-DESC;FMTTYPE=text/html:

Die Architektur und das Design einer Appli te der Digitalen Oberlausitz e. V. nachlesen.

END:VEVENT BEGIN:VEVENT -UID:5b1d207c-c9ea-4da4-9de4-c7ae84880b3d +UID:7fa52dbc-68ad-4d98-aaf2-8384541ea388 SEQUENCE:0 -DTSTAMP:20240904T171816 +DTSTAMP:20240911T185530 DTSTART;TZID=Europe/Berlin:20230222T190000 DTEND;TZID=Europe/Berlin:20230222T220000 SUMMARY:Vortrag "Exception First – Stabilisiere deinen Code mit mehr Exc @@ -405,9 +406,9 @@ X-ALT-DESC;FMTTYPE=text/html:

Fehler sind ein fester Bestandteil unserer nst.

END:VEVENT BEGIN:VEVENT -UID:5b1f5703-8d4e-4aef-afbd-59a860e518ef +UID:878e7ede-e4c1-46fa-b600-18e013679d2f SEQUENCE:0 -DTSTAMP:20240904T171816 +DTSTAMP:20240911T185530 DTSTART;TZID=Europe/Berlin:20230125T190000 DTEND;TZID=Europe/Berlin:20230125T220000 SUMMARY:Vortrag "Content Management neu gedacht mit Contentlab" - Markus W @@ -426,9 +427,9 @@ X-ALT-DESC;FMTTYPE=text/html:

Die Mehrheit aktueller Content Management Instanz zum Verwalten von Veranstaltungen.

END:VEVENT BEGIN:VEVENT -UID:75a62174-a1a7-481d-9081-afc8989972ed +UID:02321bc4-1194-4985-b35c-98a07c4e3c01 SEQUENCE:0 -DTSTAMP:20240904T171816 +DTSTAMP:20240911T185530 DTSTART;TZID=Europe/Berlin:20221130T190000 DTEND;TZID=Europe/Berlin:20221130T220000 SUMMARY:Vortrag "Kundenspezifisches IAM mit Keycloak" - Daniel Fesenmeyer @@ -447,9 +448,9 @@ X-ALT-DESC;FMTTYPE=text/html:

Keycloak ist ein Open Source IAM (Identity en.

END:VEVENT BEGIN:VEVENT -UID:6a7adc24-5029-4fc1-b058-0b35a2dc0a03 +UID:f6b3860d-a576-4bd3-b89c-af9ffd50a106 SEQUENCE:0 -DTSTAMP:20240904T171816 +DTSTAMP:20240911T185530 DTSTART;TZID=Europe/Berlin:20221012T190000 DTEND;TZID=Europe/Berlin:20221012T220000 SUMMARY:Vortrag "Industrie 4.0? Das JUGt mich!" - Marco Gotthans @@ -522,9 +523,9 @@ X-ALT-DESC;FMTTYPE=text/html:

Mit der fischertechnik Lernfabrik t überschritten werden darf.

END:VEVENT BEGIN:VEVENT -UID:f659ae9a-6cef-40f8-9c2b-b4b4e6153d63 +UID:4cc9bbeb-7046-4f97-8754-0d974f5572e6 SEQUENCE:0 -DTSTAMP:20240904T171816 +DTSTAMP:20240911T185530 DTSTART;TZID=Europe/Berlin:20220622T190000 DTEND;TZID=Europe/Berlin:20220622T220000 SUMMARY:Vortrag "Hebe deine IoT-Infrastruktur auf das Serverless-Level an" @@ -549,9 +550,9 @@ X-ALT-DESC;FMTTYPE=text/html:

Die Persistenz von IoT Daten sowie die Ste ten werden darf.

END:VEVENT BEGIN:VEVENT -UID:29dd881c-047e-4b69-99ac-8873cfd3b00b +UID:3a40f2eb-b21f-4a73-b539-aa091e51cc91 SEQUENCE:0 -DTSTAMP:20240904T171816 +DTSTAMP:20240911T185530 DTSTART;TZID=Europe/Berlin:20210630T190000 DTEND;TZID=Europe/Berlin:20210630T220000 SUMMARY:Vortrag "Ultraschnelle Java In-Memory Datenbank-Anwendungen & Micr @@ -592,9 +593,9 @@ X-ALT-DESC;FMTTYPE=text/html:

MicroStream ist ein fundamental neues Pers oberlausitz.eu/jug

END:VEVENT BEGIN:VEVENT -UID:91874a91-734b-4763-b78b-6ad9d569a3fa +UID:34c50b64-063e-4e98-8335-e4b8baa367d3 SEQUENCE:0 -DTSTAMP:20240904T171816 +DTSTAMP:20240911T185530 DTSTART;TZID=Europe/Berlin:20210127T190000 DTEND;TZID=Europe/Berlin:20210127T220000 SUMMARY:Vortrag "Web Components" - Manuel Mauky @@ -615,9 +616,9 @@ X-ALT-DESC;FMTTYPE=text/html:

Web-Components sind eine Möglichkeit\, au tz.eu/jug">https://meet.digitale-oberlausitz.eu/jug

END:VEVENT BEGIN:VEVENT -UID:3cb10028-ad83-4eec-9978-97b3e1c2ab43 +UID:aff0631d-41fd-43e4-aa49-584dfe83b2bc SEQUENCE:0 -DTSTAMP:20240904T171816 +DTSTAMP:20240911T185530 DTSTART;TZID=Europe/Berlin:20201125T190000 DTEND;TZID=Europe/Berlin:20201125T220000 SUMMARY:Vortrag "Java Secure Coding in der Praxis" - Nico Förster @@ -640,9 +641,9 @@ X-ALT-DESC;FMTTYPE=text/html:

Durch die Veröffentlichung von immer neue ale-oberlausitz.eu/jug

END:VEVENT BEGIN:VEVENT -UID:044cb5de-80fc-42e2-adb3-cf2f16db5ddb +UID:c661bb04-ee9c-40c3-bd4f-08227b8d960e SEQUENCE:0 -DTSTAMP:20240904T171816 +DTSTAMP:20240911T185530 DTSTART;TZID=Europe/Berlin:20200722T190000 DTEND;TZID=Europe/Berlin:20200722T220000 SUMMARY:Vortrag "Branching-Modelle" - Hannes Kretschmer @@ -667,9 +668,9 @@ X-ALT-DESC;FMTTYPE=text/html:

Als Softwareentwickler ist man auf die Ver oberlausitz.eu/jug">https://meet.digitale-oberlausitz.eu/jug

END:VEVENT BEGIN:VEVENT -UID:a17695d7-9d4f-43c6-ad4b-90073c3b4a46 +UID:855a5b54-77ee-428f-8d5d-767c21ebc8d1 SEQUENCE:0 -DTSTAMP:20240904T171816 +DTSTAMP:20240911T185530 DTSTART;TZID=Europe/Berlin:20200429T180000 DTEND;TZID=Europe/Berlin:20200429T210000 SUMMARY:Vortrag "JDK 14 und GraalVM im Java Ökosystem" - Wolfgang Weigend @@ -702,9 +703,9 @@ X-ALT-DESC;FMTTYPE=text/html:

Nach der Freigabe vom JDK 14 werden die ak ses Mal geht es schon 18:00 Uhr los.

END:VEVENT BEGIN:VEVENT -UID:ed60d99f-3549-44bf-855b-3ef54939b877 +UID:bb065edf-66b4-4c72-b04c-ec4ac50998ea SEQUENCE:0 -DTSTAMP:20240904T171816 +DTSTAMP:20240911T185530 DTSTART;TZID=Europe/Berlin:20200129T190000 DTEND;TZID=Europe/Berlin:20200129T220000 SUMMARY:Vortrag "Innovationsmotor Cloud Foundry!?" - Simon Roloff @@ -719,9 +720,9 @@ X-ALT-DESC;FMTTYPE=text/html:

"Create Apps\, Not the Platform" - Cloud F Foundry überhaupt? Und hält sie\, was sie verspricht?

END:VEVENT BEGIN:VEVENT -UID:b5311ca1-9b26-4112-9438-4e601b78636f +UID:557b3b04-344b-4911-81fd-f82d85ffb08d SEQUENCE:0 -DTSTAMP:20240904T171816 +DTSTAMP:20240911T185530 DTSTART;TZID=Europe/Berlin:20191128T190000 DTEND;TZID=Europe/Berlin:20191128T220000 SUMMARY:Vortrag "Advanced BDD Tests" - Maik Wagner @@ -735,9 +736,9 @@ X-ALT-DESC;FMTTYPE=text/html:

Hattest du auch schon mal das Problem\, da en.

END:VEVENT BEGIN:VEVENT -UID:c68f4fd3-483d-479f-ac2d-d88d79b25e1c +UID:a1a7f979-b5f2-4603-a369-b358325a2c65 SEQUENCE:0 -DTSTAMP:20240904T171816 +DTSTAMP:20240911T185530 DTSTART;TZID=Europe/Berlin:20190626T190000 DTEND;TZID=Europe/Berlin:20190626T220000 SUMMARY:Vortrag "Wie gut kennst Du das Collections Framework?" - Thilo Fro @@ -761,9 +762,9 @@ X-ALT-DESC;FMTTYPE=text/html:

HashMap und ArrayList kennt jeder\, na kla ions.pdf">Folien zum Vortrag\n END:VEVENT BEGIN:VEVENT -UID:fcd243fe-9ceb-42f2-9387-fcf7c2968130 +UID:8b654bcb-e5c7-465f-89e7-3f77f0456dce SEQUENCE:0 -DTSTAMP:20240904T171816 +DTSTAMP:20240911T185530 DTSTART;TZID=Europe/Berlin:20190529T190000 DTEND;TZID=Europe/Berlin:20190529T220000 SUMMARY:Vortrag "OAuth 2.0/OpenIDConnect mit Keycloak" - Denny Israel @@ -778,9 +779,9 @@ X-ALT-DESC;FMTTYPE=text/html:

Der Vortrag erläutert zunächst die Grund Anwendung einbinden kann.

END:VEVENT BEGIN:VEVENT -UID:ef21b579-7f63-4e62-ab54-6f86c4255949 +UID:5cd975eb-1cd1-4bff-a54e-abce4b48c2bd SEQUENCE:0 -DTSTAMP:20240904T171816 +DTSTAMP:20240911T185530 DTSTART;TZID=Europe/Berlin:20190424T190000 DTEND;TZID=Europe/Berlin:20190424T220000 SUMMARY:Vortrag "It's a JDK jungle out there - oder wie es mit den neuen J @@ -814,9 +815,9 @@ X-ALT-DESC;FMTTYPE=text/html:

Mit dem JDK-Enhancement-Proposal (JEP 322)

END:VEVENT BEGIN:VEVENT -UID:31fa46f6-f30e-448e-b428-a2fd7bafee38 +UID:7a5b407b-84dd-474e-94d7-f099c0cd36d7 SEQUENCE:0 -DTSTAMP:20240904T171816 +DTSTAMP:20240911T185530 DTSTART;TZID=Europe/Berlin:20190327T190000 DTEND;TZID=Europe/Berlin:20190327T220000 SUMMARY:Vortrag "Static-Site-Generators" - Manuel Mauky @@ -850,9 +851,9 @@ X-ALT-DESC;FMTTYPE=text/html:

Die Website der JUG Görlitz läuft fast < Folien zum Vortrag\n END:VEVENT BEGIN:VEVENT -UID:c37c45ff-2ac8-4f0a-8a3d-5ca507c2c6c8 +UID:6f263f69-bbfc-4da9-8b9e-07c3243769b2 SEQUENCE:0 -DTSTAMP:20240904T171816 +DTSTAMP:20240911T185530 DTSTART;TZID=Europe/Berlin:20190227T190000 DTEND;TZID=Europe/Berlin:20190227T220000 SUMMARY:Vortrag "Java Reflection: Classes behind the scenes" - Erik Jähne @@ -873,9 +874,9 @@ X-ALT-DESC;FMTTYPE=text/html:

Java Reflections sind ein Feature der Java ors werden diese Möglichkeiten in dem Vortrag näher\nbetrachtet.

END:VEVENT BEGIN:VEVENT -UID:46b5ecc8-c9a6-4e70-aa13-fa313650eaf0 +UID:f297fba2-3437-49fa-a58f-03ffe50d06ab SEQUENCE:0 -DTSTAMP:20240904T171816 +DTSTAMP:20240911T185530 DTSTART;TZID=Europe/Berlin:20190131T190000 DTEND;TZID=Europe/Berlin:20190131T220000 SUMMARY:Vortrag "Java APIs - the missing manual" - Hendrik Ebbers @@ -897,9 +898,9 @@ X-ALT-DESC;FMTTYPE=text/html:

Anstelle über Microservices\, NO-SQL Lös hreibe\nich nebenläufigen Code der trotzdem wartbar ist?

END:VEVENT BEGIN:VEVENT -UID:5d20c0a7-2bf5-44cd-8f7c-bc94012aaea6 +UID:fb5603a8-38dd-4d30-aa7a-fd8132d2b0e8 SEQUENCE:0 -DTSTAMP:20240904T171816 +DTSTAMP:20240911T185530 DTSTART;TZID=Europe/Berlin:20181123T190000 DTEND;TZID=Europe/Berlin:20181123T220000 SUMMARY:Vortrag "Monadische Transaktionen" - Gregor Trefs @@ -921,9 +922,9 @@ X-ALT-DESC;FMTTYPE=text/html:

Spätestens seit Java 8 gibt es monadische adic_transactions.pdf">Folien zum Vortrag\n END:VEVENT BEGIN:VEVENT -UID:92f0d884-3469-4a22-a00d-05ee9d165cb6 +UID:ca619f28-af90-4b89-857e-c844a2b9f67d SEQUENCE:0 -DTSTAMP:20240904T171816 +DTSTAMP:20240911T185530 DTSTART;TZID=Europe/Berlin:20180627T190000 DTEND;TZID=Europe/Berlin:20180627T220000 SUMMARY:Vortrag "Immutable Data - Unveränderliche Daten im Griff" - Manue @@ -952,9 +953,9 @@ X-ALT-DESC;FMTTYPE=text/html:

Unveränderliche Datenstrukturen sind ein Vortrag\n END:VEVENT BEGIN:VEVENT -UID:a8aa56b7-27cb-48a3-9db1-80a896d7ef83 +UID:1725f18f-453e-493c-916a-5c8fc40820fc SEQUENCE:0 -DTSTAMP:20240904T171816 +DTSTAMP:20240911T185530 DTSTART;TZID=Europe/Berlin:20180530T190000 DTEND;TZID=Europe/Berlin:20180530T220000 SUMMARY:Vortrag "GraphQL" - Stephan Strehler @@ -979,9 +980,9 @@ X-ALT-DESC;FMTTYPE=text/html:

Die RESTful-Architektur ist eine etabliert \n END:VEVENT BEGIN:VEVENT -UID:f36cde4b-ba08-4707-a509-ba0192a995f4 +UID:82f72662-7f5f-4f08-b992-b1bc0a42999c SEQUENCE:0 -DTSTAMP:20240904T171816 +DTSTAMP:20240911T185530 DTSTART;TZID=Europe/Berlin:20180425T190000 DTEND;TZID=Europe/Berlin:20180425T220000 SUMMARY:Vortrag "Kotlin" - Tobias Blaschke @@ -1003,9 +1004,9 @@ X-ALT-DESC;FMTTYPE=text/html:

Die Ankündigung der Unterstützung von Ko >Code auf Github\n END:VEVENT BEGIN:VEVENT -UID:dfa9514c-b695-48bc-894d-61ab3c06c485 +UID:19ea5ef7-1803-40aa-9600-4e4d26792369 SEQUENCE:0 -DTSTAMP:20240904T171816 +DTSTAMP:20240911T185530 DTSTART;TZID=Europe/Berlin:20180320T190000 DTEND;TZID=Europe/Berlin:20180320T220000 SUMMARY:Vortrag "Mikro- vs. Makroarchitektur – Spielraum und Spielregeln @@ -1026,9 +1027,9 @@ X-ALT-DESC;FMTTYPE=text/html:

Während in einer klassischen Konzern-IT S und\nDomänenorientierung in das Entwurfsdoppel Makro und Mikro ein.

END:VEVENT BEGIN:VEVENT -UID:439c9d2c-e1a5-407f-91f9-945cbeff96a4 +UID:878a416e-acc8-4350-a3ba-12df0577049b SEQUENCE:0 -DTSTAMP:20240904T171816 +DTSTAMP:20240911T185530 DTSTART;TZID=Europe/Berlin:20180228T190000 DTEND;TZID=Europe/Berlin:20180228T220000 SUMMARY:Vortrag "Entwicklung von Java Applikationen auf der SAP Cloud Plat @@ -1052,9 +1053,9 @@ X-ALT-DESC;FMTTYPE=text/html:

Die SAP Cloud Platform (SCP) beschreibt ei zum Vortrag\n END:VEVENT BEGIN:VEVENT -UID:aa1db78e-617c-4ada-80c0-17f7d60fbe84 +UID:8d04ff70-d48b-4afa-bf53-1c9673055f23 SEQUENCE:0 -DTSTAMP:20240904T171816 +DTSTAMP:20240911T185530 DTSTART;TZID=Europe/Berlin:20180131T190000 DTEND;TZID=Europe/Berlin:20180131T220000 SUMMARY:Vortrag "Refactoring to a System of Systems" - Oliver Drotbohm @@ -1078,9 +1079,9 @@ X-ALT-DESC;FMTTYPE=text/html:

Beim Bauen monolithischer Systeme nutzen E -to-a-system-of-systems">Folien zum Vortrag\n END:VEVENT BEGIN:VEVENT -UID:f1cf2307-5d7b-42d4-a326-e95985c7da76 +UID:7c55d2d4-990a-4482-be1e-3b4989164bc9 SEQUENCE:0 -DTSTAMP:20240904T171816 +DTSTAMP:20240911T185530 DTSTART;TZID=Europe/Berlin:20171129T190000 DTEND;TZID=Europe/Berlin:20171129T220000 SUMMARY:Vortrag "Neo4j: Panama Papers" - Michael Hunger @@ -1098,9 +1099,9 @@ X-ALT-DESC;FMTTYPE=text/html:

Im letzten Jahr waren die Panama Papers in tlich verfügbar sind\, kann jetzt jeder zum Journalisten werden.

END:VEVENT BEGIN:VEVENT -UID:a0bfb78b-6a58-46bf-9e0f-9e4c996738ab +UID:c011a603-8cf9-4da9-87db-c9c849871441 SEQUENCE:0 -DTSTAMP:20240904T171816 +DTSTAMP:20240911T185530 DTSTART;TZID=Europe/Berlin:20171025T190000 DTEND;TZID=Europe/Berlin:20171025T220000 SUMMARY:Vortrag "Serverless Application - Who the heck needs a Server?" - @@ -1125,9 +1126,9 @@ X-ALT-DESC;FMTTYPE=text/html:

Kaum haben wir uns von dem klassischen Mon Media GmbH.

END:VEVENT BEGIN:VEVENT -UID:86e81ecc-018f-4f5f-ae54-b68b1491f98d +UID:9145b632-d9b5-4a3e-b842-0244f116d24c SEQUENCE:0 -DTSTAMP:20240904T171816 +DTSTAMP:20240911T185530 DTSTART;TZID=Europe/Berlin:20170830T190000 DTEND;TZID=Europe/Berlin:20170830T220000 SUMMARY:Vortrag "Spracherkennung mit Amazon Alexa" - Andre Tepper\, Maik W @@ -1145,9 +1146,9 @@ X-ALT-DESC;FMTTYPE=text/html:

Amazon Alexa ist eine Smart-Home-Technolog > END:VEVENT BEGIN:VEVENT -UID:22568423-79cb-471c-a659-d6b0f8bd1105 +UID:bde3b08a-7273-4819-9aa7-14a1e2f8c380 SEQUENCE:0 -DTSTAMP:20240904T171816 +DTSTAMP:20240911T185530 DTSTART;TZID=Europe/Berlin:20170531T190000 DTEND;TZID=Europe/Berlin:20170531T220000 SUMMARY:Vortrag "React und React-Native: Functional UI Development für Br @@ -1172,9 +1173,9 @@ X-ALT-DESC;FMTTYPE=text/html:

React ist eine von Facebook entwickelte Ja ammierung eingehen\, die React\nmeines Erachtens so besonders machen.

END:VEVENT BEGIN:VEVENT -UID:3551f421-8fc9-4d6a-b410-6953cb7f8ec1 +UID:b127433c-fae9-4cce-b2cd-0c2943a97da4 SEQUENCE:0 -DTSTAMP:20240904T171816 +DTSTAMP:20240911T185530 DTSTART;TZID=Europe/Berlin:20170425T190000 DTEND;TZID=Europe/Berlin:20170425T220000 SUMMARY:Vortrag "JDK 9" - Wolfgang Weigend @@ -1207,9 +1208,9 @@ X-ALT-DESC;FMTTYPE=text/html:

Nach der Ausdehnung vom JDK 9 Feature-Comp /a>\n END:VEVENT BEGIN:VEVENT -UID:6cf7b691-7b45-4c7a-8db4-65900738a00e +UID:ac246e81-b741-4a36-9448-73336c066297 SEQUENCE:0 -DTSTAMP:20240904T171816 +DTSTAMP:20240911T185530 DTSTART;TZID=Europe/Berlin:20170322T190000 DTEND;TZID=Europe/Berlin:20170322T220000 SUMMARY:Vortrag "Angular 2 für Java Entwickler" - Sven Hoffmann @@ -1232,9 +1233,9 @@ X-ALT-DESC;FMTTYPE=text/html:

Mit Angular bietet Google ein komponenten- downloads/juggr_angular.pdf">Folien zum Vortrag\n END:VEVENT BEGIN:VEVENT -UID:0055010c-cc7c-46d1-9500-e780485d635d +UID:2cf486f5-2cef-4294-bd8d-c6eecf25efff SEQUENCE:0 -DTSTAMP:20240904T171816 +DTSTAMP:20240911T185530 DTSTART;TZID=Europe/Berlin:20170222T190000 DTEND;TZID=Europe/Berlin:20170222T220000 SUMMARY:Vortrag "CSS\, Aha-Effekte und Perspektiven" - Uwe Manteuffel @@ -1252,9 +1253,9 @@ X-ALT-DESC;FMTTYPE=text/html:

CSS ist verwirrend\, entbehrt jeglicher Lo nDa wird selbst JavaScript blass vor Neid.

END:VEVENT BEGIN:VEVENT -UID:88e16f8a-abff-4074-9e2b-916899660238 +UID:fb1d08e2-7e79-490a-92a1-cf03d7f10e16 SEQUENCE:0 -DTSTAMP:20240904T171816 +DTSTAMP:20240911T185530 DTSTART;TZID=Europe/Berlin:20170125T190000 DTEND;TZID=Europe/Berlin:20170125T220000 SUMMARY:Vortrag "JUnit 5" - Stefan Bley @@ -1272,9 +1273,9 @@ X-ALT-DESC;FMTTYPE=text/html:

Unit Testing in Java - dafür ist JUnit da -gr.de/downloads/juggr_jUnit5.pdf">Folien zum Vortrag\n END:VEVENT BEGIN:VEVENT -UID:df516b8f-f5f5-4b24-a6b9-e676fe67eacb +UID:f4834912-fd8b-490a-8117-f324ff7b05c1 SEQUENCE:0 -DTSTAMP:20240904T171816 +DTSTAMP:20240911T185530 DTSTART;TZID=Europe/Berlin:20161130T190000 DTEND;TZID=Europe/Berlin:20161130T220000 SUMMARY:Vortrag "Inside JVM" - Michael Wiedeking @@ -1288,9 +1289,9 @@ X-ALT-DESC;FMTTYPE=text/html:

Wie funktioniert die virtuelle Maschine? W inem Blick unter die Haube der Java Virtual\nMachine.

END:VEVENT BEGIN:VEVENT -UID:7a5066f9-1ccd-4979-9820-fab8627f7e71 +UID:4a7d8ede-6f00-4c8e-9f89-19aba219fd97 SEQUENCE:0 -DTSTAMP:20240904T171816 +DTSTAMP:20240911T185530 DTSTART;TZID=Europe/Berlin:20160921T190000 DTEND;TZID=Europe/Berlin:20160921T220000 SUMMARY:Vortrag "Kommunikationskultur im Softwareentwicklungsprozess" - Da @@ -1308,9 +1309,9 @@ X-ALT-DESC;FMTTYPE=text/html:

Im Vortrag von Daniel Sernow wird die Komm ranstaltungsort einweihen - siehe unten.

END:VEVENT BEGIN:VEVENT -UID:0939ab7a-3ad8-47f4-b08b-c5db268b271e +UID:5939a26f-5f95-437f-ac50-b2c230058d48 SEQUENCE:0 -DTSTAMP:20240904T171816 +DTSTAMP:20240911T185530 DTSTART;TZID=Europe/Berlin:20160727T190000 DTEND;TZID=Europe/Berlin:20160727T220000 SUMMARY:Vortrag "Testwerkzeuge für JavaFX" - Kay Grebenstein @@ -1330,9 +1331,9 @@ X-ALT-DESC;FMTTYPE=text/html:

Softwareentwicklungsprojekte leben vom Ein >Wie werden die Testwerkzeuge in meine Toolkette eingebunden?\n END:VEVENT BEGIN:VEVENT -UID:a30c6dc6-377c-4a2a-8fdf-7dfb2a524272 +UID:8d8b23e6-1539-4f02-941e-4491a1039050 SEQUENCE:0 -DTSTAMP:20240904T171816 +DTSTAMP:20240911T185530 DTSTART;TZID=Europe/Berlin:20160525T190000 DTEND;TZID=Europe/Berlin:20160525T220000 SUMMARY:Vortrag "Performance-Analyse mit inspectIT" - Mario Mann @@ -1363,9 +1364,9 @@ X-ALT-DESC;FMTTYPE=text/html:

In vielen Software-Projekten wissen häufi lay/HOME/inspectIT+Home

END:VEVENT BEGIN:VEVENT -UID:bab27200-8cb2-4f3d-8e99-0ab95409ae33 +UID:7b81e02b-ea48-4a82-8302-04692ea8a61c SEQUENCE:0 -DTSTAMP:20240904T171816 +DTSTAMP:20240911T185530 DTSTART;TZID=Europe/Berlin:20160330T190000 DTEND;TZID=Europe/Berlin:20160330T220000 SUMMARY:Vortrag "Haskell und Frege" - Manuel Mauky @@ -1388,9 +1389,9 @@ X-ALT-DESC;FMTTYPE=text/html:

Haskell ist eine funktionale Programmiersp r JVM eine rein funktionale Sprache\nbereit.

END:VEVENT BEGIN:VEVENT -UID:9cf6cb9e-816a-4c72-9a50-9ebe0f2c56bd +UID:4419a2eb-b91d-4570-a3e0-5c09cb8bc2af SEQUENCE:0 -DTSTAMP:20240904T171816 +DTSTAMP:20240911T185530 DTSTART;TZID=Europe/Berlin:20160127T190000 DTEND;TZID=Europe/Berlin:20160127T220000 SUMMARY:Vortrag "Funktionale Programmierung mit Java" - Manuel Mauky\, Max @@ -1431,9 +1432,9 @@ X-ALT-DESC;FMTTYPE=text/html:

Mit Java 8 wurden einige Features in die S Y-Combinator in Java\n END:VEVENT BEGIN:VEVENT -UID:cfb96cf5-69fb-4f04-82fd-ad25f064d4f9 +UID:fd4c1dad-603b-44a9-a310-e186a28d4587 SEQUENCE:0 -DTSTAMP:20240904T171816 +DTSTAMP:20240911T185530 DTSTART;TZID=Europe/Berlin:20151125T190000 DTEND;TZID=Europe/Berlin:20151125T220000 SUMMARY:Vortrag "JavaFX auf Mobile" - Stefan Barth\, Stefan Heinze @@ -1461,9 +1462,9 @@ X-ALT-DESC;FMTTYPE=text/html:

JavaFX ist die neue Java-Technologie im De avafx_on_mobile.pdf">Vortragsfolien\n END:VEVENT BEGIN:VEVENT -UID:853a244b-573c-4aeb-bb1c-fae1b119a1c5 +UID:2eff572d-a6df-411b-8a92-a2e4e77f3d99 SEQUENCE:0 -DTSTAMP:20240904T171816 +DTSTAMP:20240911T185530 DTSTART;TZID=Europe/Berlin:20150930T190000 DTEND;TZID=Europe/Berlin:20150930T220000 SUMMARY:Vortrag "Guava" - Steffen Seidler @@ -1497,9 +1498,9 @@ X-ALT-DESC;FMTTYPE=text/html:

Das Framework Drools ist ein Business-Rules-Mangement-Sy en\n END:VEVENT BEGIN:VEVENT -UID:a8dc814f-f073-4070-b9bc-1bd16c256013 +UID:bb16ead7-d784-4064-b7ae-85ab40d352a8 SEQUENCE:0 -DTSTAMP:20240904T171816 +DTSTAMP:20240911T185530 DTSTART;TZID=Europe/Berlin:20150527T190000 DTEND;TZID=Europe/Berlin:20150527T220000 SUMMARY:Vortrag "Fortgeschrittene Android-Entwicklung" - Max Wielsch @@ -1540,9 +1541,9 @@ X-ALT-DESC;FMTTYPE=text/html:

Aufbauend auf dem letzten Beitrag der Java /muxmax/JugGrNotesApp">Beispiel-Code\n END:VEVENT BEGIN:VEVENT -UID:1bc7a26d-21e4-45d3-b892-ff1a3e88f940 +UID:f487fa3c-50bf-42e3-8868-d1868372a796 SEQUENCE:0 -DTSTAMP:20240904T171816 +DTSTAMP:20240911T185530 DTSTART;TZID=Europe/Berlin:20150325T190000 DTEND;TZID=Europe/Berlin:20150325T220000 SUMMARY:Vortrag "Einstieg in die Android-App-Entwicklung" - Max Wielsch @@ -1567,9 +1568,9 @@ X-ALT-DESC;FMTTYPE=text/html:

Smartphones und Apps sind für viele Mensc -Code\n END:VEVENT BEGIN:VEVENT -UID:6661cd9a-2602-42c5-a12f-f6d74cb833a2 +UID:69b7e87f-2f21-4a9c-baf7-f35c8f4d0817 SEQUENCE:0 -DTSTAMP:20240904T171816 +DTSTAMP:20240911T185530 DTSTART;TZID=Europe/Berlin:20150128T190000 DTEND;TZID=Europe/Berlin:20150128T220000 SUMMARY:Vortrag "MoSKito - Monitoring Framework" - Steffen Seidler @@ -1596,9 +1597,9 @@ X-ALT-DESC;FMTTYPE=text/html:

Es wird immer wichtiger WebAnwendungen üb interessant sein.

END:VEVENT BEGIN:VEVENT -UID:e93a5607-ce26-4539-b55f-68185b1deb0d +UID:26c9175a-6162-41e5-b811-cd5c72b7338a SEQUENCE:0 -DTSTAMP:20240904T171816 +DTSTAMP:20240911T185530 DTSTART;TZID=Europe/Berlin:20141203T190000 DTEND;TZID=Europe/Berlin:20141203T220000 SUMMARY:Vortrag "Model-View-*: UI-Design-Patterns im Detail" - Manuel Mauk @@ -1633,9 +1634,9 @@ X-ALT-DESC;FMTTYPE=text/html:

Die meisten Softwareentwickler haben irgen github.com/lestard/juggr_model-view-star">Code auf Github\n END:VEVENT BEGIN:VEVENT -UID:c993b610-199b-43c2-8572-12a7dfcda84a +UID:4ba17f26-1b64-4412-be30-a46c803222fc SEQUENCE:0 -DTSTAMP:20240904T171816 +DTSTAMP:20240911T185530 DTSTART;TZID=Europe/Berlin:20141029T190000 DTEND;TZID=Europe/Berlin:20141029T220000 SUMMARY:Vortrag "Infrastructure as Code" - Bruno Devic @@ -1664,9 +1665,9 @@ X-ALT-DESC;FMTTYPE=text/html:

Infrastructure as Code is one of the impor emo.zip">Demos\n END:VEVENT BEGIN:VEVENT -UID:bd86ea89-6e24-4296-a34b-dba76308b1f2 +UID:1c0fff6f-293c-4a43-9674-c03b3784a85c SEQUENCE:0 -DTSTAMP:20240904T171816 +DTSTAMP:20240911T185530 DTSTART;TZID=Europe/Berlin:20140924T190000 DTEND;TZID=Europe/Berlin:20140924T220000 SUMMARY:Vortrag "Solr - Eine Enterprise-Suchmaschine" - Steffen Seidler @@ -1691,9 +1692,9 @@ X-ALT-DESC;FMTTYPE=text/html:

Solr ist ein mächtiges Werkzeug um strukt rden.

END:VEVENT BEGIN:VEVENT -UID:c18ffa38-d929-40be-86b5-b34ef5720990 +UID:28a19b02-03a9-4c9f-b607-230720bc0278 SEQUENCE:0 -DTSTAMP:20240904T171816 +DTSTAMP:20240911T185530 DTSTART;TZID=Europe/Berlin:20140730T190000 DTEND;TZID=Europe/Berlin:20140730T220000 SUMMARY:Vortrag "Java8 - Streams und Lambdas" - Paul Weinhold @@ -1717,9 +1718,9 @@ X-ALT-DESC;FMTTYPE=text/html:

Seit April ist die neue Version 8 von Java loads/juggr_java8.pdf">Vortragsfolien\n END:VEVENT BEGIN:VEVENT -UID:a02c530e-5cbb-4be6-9534-83a3f060a287 +UID:75085a88-2b7e-482e-8fc3-4c1b8766e552 SEQUENCE:0 -DTSTAMP:20240904T171816 +DTSTAMP:20240911T185530 DTSTART;TZID=Europe/Berlin:20140528T190000 DTEND;TZID=Europe/Berlin:20140528T220000 SUMMARY:Vortrag "Hazelcast - Synchronisation von In-Memory-Daten" - Steffe @@ -1739,9 +1740,9 @@ X-ALT-DESC;FMTTYPE=text/html:

Hazelcast ist ein vielseitiges Framework z weiterer (Backup-)Knoten steigern.

END:VEVENT BEGIN:VEVENT -UID:eef0dc07-5bca-4de9-a53b-fd004705dbd2 +UID:58dfcf9c-b7e5-408f-80eb-da2bca2c0d93 SEQUENCE:0 -DTSTAMP:20240904T171816 +DTSTAMP:20240911T185530 DTSTART;TZID=Europe/Berlin:20140402T190000 DTEND;TZID=Europe/Berlin:20140402T220000 SUMMARY:Vortrag "Besser lesbare Unittests mit AssertJ" - Manuel Mauky @@ -1778,9 +1779,9 @@ X-ALT-DESC;FMTTYPE=text/html:

Damit Testgetriebene Entwicklung in der Pr arke Unittests schreiben zu können.

END:VEVENT BEGIN:VEVENT -UID:d57f6ac9-ed95-40e0-a3e7-90499ed9b7d8 +UID:c41693c9-933e-49ed-8348-c6c58aa71a68 SEQUENCE:0 -DTSTAMP:20240904T171816 +DTSTAMP:20240911T185530 DTSTART;TZID=Europe/Berlin:20140129T190000 DTEND;TZID=Europe/Berlin:20140129T220000 SUMMARY:Vortrag "Tool-Integration im Softwareentwicklungsprozess" - Max Wi @@ -1810,9 +1811,9 @@ X-ALT-DESC;FMTTYPE=text/html:

Tool-Integration im Softwareentwicklungspr Architektur\nausgehend von einem Fallbeispiel erläutert wird.

END:VEVENT BEGIN:VEVENT -UID:a57f47ec-2e82-4fb8-8e86-0cd619b562a6 +UID:03fc85cf-c0e0-49b0-b88b-c22766267986 SEQUENCE:0 -DTSTAMP:20240904T171816 +DTSTAMP:20240911T185530 DTSTART;TZID=Europe/Berlin:20131127T190000 DTEND;TZID=Europe/Berlin:20131127T220000 SUMMARY:Vortrag "Performance-Optimierung im Web" - Maik Wagner @@ -1828,9 +1829,9 @@ X-ALT-DESC;FMTTYPE=text/html:

Google und Microsoft haben Studien zum The nt sich also\, in die\nPerformance einer Webanwendung zu investieren.

END:VEVENT BEGIN:VEVENT -UID:0281013a-fa8c-495f-837e-c8ae3cdee8e2 +UID:ba9e15cc-3f15-4e97-b5b8-3d992720fec2 SEQUENCE:0 -DTSTAMP:20240904T171816 +DTSTAMP:20240911T185530 DTSTART;TZID=Europe/Berlin:20131030T190000 DTEND;TZID=Europe/Berlin:20131030T220000 SUMMARY:Vortrag "Modernes App-Design am Beispiel von Android" - Max Wielsc @@ -1851,9 +1852,9 @@ X-ALT-DESC;FMTTYPE=text/html:

Die Android-Plattform hat sich in den letz endbar sind.

END:VEVENT BEGIN:VEVENT -UID:8fa6f0a5-9fc4-43a1-8a95-813c9b9b1e25 +UID:bb384258-4c0e-4be4-bfef-115311299251 SEQUENCE:0 -DTSTAMP:20240904T171816 +DTSTAMP:20240911T185530 DTSTART;TZID=Europe/Berlin:20130731T190000 DTEND;TZID=Europe/Berlin:20130731T220000 SUMMARY:Vortrag "Persona - Werkzeug für die GUI-Entwicklung" - Marlene Kn @@ -1870,9 +1871,9 @@ X-ALT-DESC;FMTTYPE=text/html:

In diesem Vortrag von Marlene Knoc li>Vortragsfolien\n END:VEVENT BEGIN:VEVENT -UID:baa39907-73cd-4b3f-bd24-7225e165922a +UID:28840971-391a-400e-9012-a23e970f0879 SEQUENCE:0 -DTSTAMP:20240904T171816 +DTSTAMP:20240911T185530 DTSTART;TZID=Europe/Berlin:20130529T190000 DTEND;TZID=Europe/Berlin:20130529T220000 SUMMARY:Vortrag "JRuby - Ruby auf der Java VM" - Sebastian Schmeck @@ -1893,9 +1894,9 @@ X-ALT-DESC;FMTTYPE=text/html:

Sebastian Schmeck von der > END:VEVENT BEGIN:VEVENT -UID:26e9dbf5-aa5b-4dbe-ae90-edeaa057f37c +UID:d3aea6ad-8172-4af1-ba1e-d75e1e6d5bc0 SEQUENCE:0 -DTSTAMP:20240904T171816 +DTSTAMP:20240911T185530 DTSTART;TZID=Europe/Berlin:20130327T190000 DTEND;TZID=Europe/Berlin:20130327T220000 SUMMARY:Vortrag "Lego NXT-Roboter mit Java programmieren" - Erik Jähne @@ -1913,9 +1914,9 @@ X-ALT-DESC;FMTTYPE=text/html:

Dieses Mal dreht sich alles um Roboter. https://www.youtube.com/watch?v=1oIQh48fBDI\n END:VEVENT BEGIN:VEVENT -UID:10161252-4d44-4634-8e64-16a0c6d82a72 +UID:490ceb73-a906-4387-9929-8cdba61e1b55 SEQUENCE:0 -DTSTAMP:20240904T171816 +DTSTAMP:20240911T185530 DTSTART;TZID=Europe/Berlin:20121128T190000 DTEND;TZID=Europe/Berlin:20121128T220000 SUMMARY:Vortrag "JavaFX 2" - Alexander Casall\, Michael Thiele @@ -1935,9 +1936,9 @@ X-ALT-DESC;FMTTYPE=text/html:

Als Vortragende konnten wir Alexander Casa https://github.com/sialcasa/jfxusergroup)\n END:VEVENT BEGIN:VEVENT -UID:d3b884f0-f0bd-47fe-acee-2d30568a853b +UID:062dbdf0-1390-47a4-b5dc-daa4d24bbe09 SEQUENCE:0 -DTSTAMP:20240904T171816 +DTSTAMP:20240911T185530 DTSTART;TZID=Europe/Berlin:20120926T190000 DTEND;TZID=Europe/Berlin:20120926T220000 SUMMARY:Vortrag "JSR-303 BeanValidation" - Manuel Mauky @@ -1962,9 +1963,9 @@ X-ALT-DESC;FMTTYPE=text/html:

Manuel Mauky stellt in se d/juggr_BeanValidation">Beispiel-Code\n END:VEVENT BEGIN:VEVENT -UID:57536258-179f-4eb9-ae27-88b995175609 +UID:f5552ff8-7822-4ccb-adeb-3a90d6586a50 SEQUENCE:0 -DTSTAMP:20240904T171816 +DTSTAMP:20240911T185530 DTSTART;TZID=Europe/Berlin:20120725T190000 DTEND;TZID=Europe/Berlin:20120725T220000 SUMMARY:Vortrag "Selenium/Webdriver in der Praxis" - Maik Wagner @@ -1976,9 +1977,9 @@ X-ALT-DESC;FMTTYPE=text/html:

Selenium/webdriver - In Ergänzung zu der it praktischen\nBeispielen von Maik Wagner

END:VEVENT BEGIN:VEVENT -UID:f2a2879e-2a7d-4e17-b44c-07cff32eeffd +UID:d248e5bd-c7aa-4d17-a958-9de80c0e8dd3 SEQUENCE:0 -DTSTAMP:20240904T171816 +DTSTAMP:20240911T185530 DTSTART;TZID=Europe/Berlin:20120627T190000 DTEND;TZID=Europe/Berlin:20120627T220000 SUMMARY:Vortrag "GridGain - Parallel Computing und Data Grid Anwendungen" @@ -1990,9 +1991,9 @@ X-ALT-DESC;FMTTYPE=text/html:

GridGain - ein Java-Framework für Paralle l Computing und Data Grid Anwendungen von Mario Reichel

END:VEVENT BEGIN:VEVENT -UID:8574df2b-2ea3-47db-a063-1d336bb5c7df +UID:3086abe1-87db-43eb-a8a9-4e0fa0820e50 SEQUENCE:0 -DTSTAMP:20240904T171816 +DTSTAMP:20240911T185530 DTSTART;TZID=Europe/Berlin:20120530T190000 DTEND;TZID=Europe/Berlin:20120530T220000 SUMMARY:Vortrag "JMonkeyEngine 3 - 3D-Applikationen in Java" - Hans Markwa @@ -2004,9 +2005,9 @@ X-ALT-DESC;FMTTYPE=text/html:

JMonkeyEngine3 und im Allgemeinen 3D-Appli kationen in Java von Hans Markwart

END:VEVENT BEGIN:VEVENT -UID:28e72f2f-f28b-4ba7-8476-25c86c6ee817 +UID:6e8abc17-b9e3-43ae-9130-dda07e002542 SEQUENCE:0 -DTSTAMP:20240904T171816 +DTSTAMP:20240911T185530 DTSTART;TZID=Europe/Berlin:20120425T190000 DTEND;TZID=Europe/Berlin:20120425T220000 SUMMARY:Vortrag "Maven" - Thomas Storch @@ -2017,9 +2018,9 @@ X-ALT-DESC;FMTTYPE=text/html:

maven von Thomas StorchBeispiel-Code

END:VEVENT BEGIN:VEVENT -UID:960fda75-1eae-4db0-8e5b-ae032390ed5e +UID:50dd99ba-2a1c-4333-9416-a7fa8cb490ab SEQUENCE:0 -DTSTAMP:20240904T171816 +DTSTAMP:20240911T185530 DTSTART;TZID=Europe/Berlin:20120328T190000 DTEND;TZID=Europe/Berlin:20120328T220000 SUMMARY:Vortrag "Webtests mit Selenium" - Marcus Döring @@ -2029,9 +2030,9 @@ X-ALT-DESC;FMTTYPE=text/html:

Webtests mit Selenium von Marcus Döring

END:VEVENT BEGIN:VEVENT -UID:bee28edb-9991-43fb-88c5-a2b07f5a9fcc +UID:b28f288e-064e-48c7-a307-fe3befb5a563 SEQUENCE:0 -DTSTAMP:20240904T171816 +DTSTAMP:20240911T185530 DTSTART;TZID=Europe/Berlin:20120229T190000 DTEND;TZID=Europe/Berlin:20120229T220000 SUMMARY:Vortrag "Webentwicklung mit Scala" - Stefan Bradl @@ -2041,9 +2042,9 @@ X-ALT-DESC;FMTTYPE=text/html:

Webentwicklung mit Scala von Stefan Bradl

END:VEVENT BEGIN:VEVENT -UID:5e86dc9c-9cb1-49f2-a059-6515d25b597b +UID:7e476d26-eef0-4991-9857-8f0d2900a629 SEQUENCE:0 -DTSTAMP:20240904T171816 +DTSTAMP:20240911T185530 DTSTART;TZID=Europe/Berlin:20120125T190000 DTEND;TZID=Europe/Berlin:20120125T220000 SUMMARY:Vortrag "Advanced JSF und CDI" - Manuel Mauky @@ -2064,9 +2065,9 @@ X-ALT-DESC;FMTTYPE=text/html:

Dieser Vortrag baut auf den Vortrag zur END:VEVENT BEGIN:VEVENT -UID:bd9fef25-a596-4175-b1eb-893762781fbd +UID:64570c38-979d-4849-81d2-03e84b50cb3f SEQUENCE:0 -DTSTAMP:20240904T171816 +DTSTAMP:20240911T185530 DTSTART;TZID=Europe/Berlin:20120104T190000 DTEND;TZID=Europe/Berlin:20120104T220000 SUMMARY:Vortrag "JPA - Hibernate" - Marko Modsching @@ -2079,9 +2080,9 @@ X-ALT-DESC;FMTTYPE=text/html:

JPA - Hibernate von Marko downloads/code_hibernate.zip">Beispiel-Code\n END:VEVENT BEGIN:VEVENT -UID:7088a639-fabb-4be5-9ce6-6aa7b59d1e24 +UID:0c00a210-d936-4fb3-a808-f5fcac78be5a SEQUENCE:0 -DTSTAMP:20240904T171816 +DTSTAMP:20240911T185530 DTSTART;TZID=Europe/Berlin:20111130T190000 DTEND;TZID=Europe/Berlin:20111130T220000 SUMMARY:Vortrag "JavaServer Faces 2 und CDI" - Manuel Mauky @@ -2105,9 +2106,9 @@ X-ALT-DESC;FMTTYPE=text/html:

Der Vortrag bietet eine Einführung in Code auf github\n END:VEVENT BEGIN:VEVENT -UID:af46fe71-ca3d-4ed6-9d80-b84b36d16ffb +UID:cf1e1ebf-7a79-4de9-82aa-eb62183a7f72 SEQUENCE:0 -DTSTAMP:20240904T171816 +DTSTAMP:20240911T185530 DTSTART;TZID=Europe/Berlin:20111026T190000 DTEND;TZID=Europe/Berlin:20111026T220000 SUMMARY:Vortrag "Android" - Max Wielsch @@ -2127,9 +2128,9 @@ X-ALT-DESC;FMTTYPE=text/html:

Mit einem Vortrag und der Programmierung e -vortrag-in-der-java-user.html">Blog heruntergeladen werden.

END:VEVENT BEGIN:VEVENT -UID:91d7d062-27c1-4f31-a475-c2aebd77b2fa +UID:9a2602d0-001b-4773-af4e-266489e71008 SEQUENCE:0 -DTSTAMP:20240904T171816 +DTSTAMP:20240911T185530 DTSTART;TZID=Europe/Berlin:20110928T190000 DTEND;TZID=Europe/Berlin:20110928T220000 SUMMARY:Vortrag "JDOM" - Mark Ziener @@ -2140,9 +2141,9 @@ X-ALT-DESC;FMTTYPE=text/html:

JDOM- Einlesen\, Verändern und Erzeugen v on XML-Dokumenten (Mark Ziener)

END:VEVENT BEGIN:VEVENT -UID:3a00e54a-b3db-4be8-9b34-4ad45ea899f0 +UID:4763ee09-ea17-4146-8cba-a479f70e55d9 SEQUENCE:0 -DTSTAMP:20240904T171816 +DTSTAMP:20240911T185530 DTSTART;TZID=Europe/Berlin:20110928T190000 DTEND;TZID=Europe/Berlin:20110928T220000 SUMMARY:Vortrag "Single Sign-On mit JAAS und JGSS" - Mario Reichel @@ -2153,9 +2154,9 @@ X-ALT-DESC;FMTTYPE=text/html:

Vom Single Sign-On zum sicheren Kanal - Au thentifizierung und Autorisierung mit JAAS und JGSS (Mario Reichel)

END:VEVENT BEGIN:VEVENT -UID:315b0307-4c66-4690-b4c5-2557998aa34e +UID:11a96a1a-f5fb-46af-8e56-a3cb1736811e SEQUENCE:0 -DTSTAMP:20240904T171816 +DTSTAMP:20240911T185530 DTSTART;TZID=Europe/Berlin:20110831T190000 DTEND;TZID=Europe/Berlin:20110831T220000 SUMMARY:Vortrag "Testen - Patterns und Best Practices" - Marko Modsching @@ -2166,20 +2167,9 @@ X-ALT-DESC;FMTTYPE=text/html:

Das Thema wird diesmal Testen sein. Marko Modsching wird Testpatterns und Best Practices vorstellen

END:VEVENT BEGIN:VEVENT -UID:dfb6e4a2-af7d-4d36-b45e-6c980100eba9 +UID:53d05be8-d52b-4ae1-a340-a608d84ed742 SEQUENCE:0 -DTSTAMP:20240904T171816 -DTSTART;TZID=Europe/Berlin:20110727T190000 -DTEND;TZID=Europe/Berlin:20110727T220000 -SUMMARY:Vortrag "TestNG" - Marcus Döring -LOCATION:DSER\nSteinstraße 11\,02826 Görlitz -DESCRIPTION:TestNG (Marcus Döring) -X-ALT-DESC;FMTTYPE=text/html:

TestNG (Marcus Döring)

-END:VEVENT -BEGIN:VEVENT -UID:8b4c7a46-4a7f-4010-b274-2b03981f6d73 -SEQUENCE:0 -DTSTAMP:20240904T171816 +DTSTAMP:20240911T185530 DTSTART;TZID=Europe/Berlin:20110727T190000 DTEND;TZID=Europe/Berlin:20110727T220000 SUMMARY:Vortrag "Scala" - Stefan Bradl @@ -2192,9 +2182,20 @@ X-ALT-DESC;FMTTYPE=text/html:

Scala - Vorstellung der Sprache\, Demo und href="/downloads/code_scala.zip">Beispiel-Code\n END:VEVENT BEGIN:VEVENT -UID:4deda02f-fd41-46c1-b3b2-3f7fac27cd06 +UID:fa5285b0-47c6-45b3-8ae1-ccec53e83dc1 +SEQUENCE:0 +DTSTAMP:20240911T185530 +DTSTART;TZID=Europe/Berlin:20110727T190000 +DTEND;TZID=Europe/Berlin:20110727T220000 +SUMMARY:Vortrag "TestNG" - Marcus Döring +LOCATION:DSER\nSteinstraße 11\,02826 Görlitz +DESCRIPTION:TestNG (Marcus Döring) +X-ALT-DESC;FMTTYPE=text/html:

TestNG (Marcus Döring)

+END:VEVENT +BEGIN:VEVENT +UID:466cc40c-6de7-410b-9f44-b3c907f1ab48 SEQUENCE:0 -DTSTAMP:20240904T171816 +DTSTAMP:20240911T185530 DTSTART;TZID=Europe/Berlin:20110629T190000 DTEND;TZID=Europe/Berlin:20110629T220000 SUMMARY:Vortrag "JavaEE und JBoss" - Michael Förster @@ -2206,9 +2207,9 @@ X-ALT-DESC;FMTTYPE=text/html:

Diesmal stellt Michael Förster Java EE vo ele\ngeben.

END:VEVENT BEGIN:VEVENT -UID:636acdf3-6437-4cb3-b55c-cfe2a374cf63 +UID:967563e8-eb76-4a3b-9f4b-a0101e7f16e9 SEQUENCE:0 -DTSTAMP:20240904T171816 +DTSTAMP:20240911T185530 DTSTART;TZID=Europe/Berlin:20110527T190000 DTEND;TZID=Europe/Berlin:20110527T220000 SUMMARY:Vortrag "Google Guice" - Robert Wirbs @@ -2219,9 +2220,9 @@ X-ALT-DESC;FMTTYPE=text/html:

Google Guice - Dependency Injection (DI) u nd Aspect-Orientierte Programmierung (AOP) von Robert Wirbs

END:VEVENT BEGIN:VEVENT -UID:d76d7083-e6e8-40ad-b744-6289b9c45bea +UID:0361f448-7784-4194-bcef-85ff9465f30e SEQUENCE:0 -DTSTAMP:20240904T171816 +DTSTAMP:20240911T185530 DTSTART;TZID=Europe/Berlin:20110427T190000 DTEND;TZID=Europe/Berlin:20110427T220000 SUMMARY:Vortrag "GWT - Google Web Toolkit" - Ingo Körner @@ -2231,9 +2232,9 @@ X-ALT-DESC;FMTTYPE=text/html:

GWT - Google Web Toolkit (Ingo Körner)

END:VEVENT BEGIN:VEVENT -UID:b8d8bc26-4ac2-4a2c-8d74-63fabae2ef44 +UID:b5b81a70-b946-4759-a4ba-2853cc474fd0 SEQUENCE:0 -DTSTAMP:20240904T171816 +DTSTAMP:20240911T185530 DTSTART;TZID=Europe/Berlin:20110427T190000 DTEND;TZID=Europe/Berlin:20110427T220000 SUMMARY:Vortrag "OSGi mit SpringDM" - Manuel Mauky @@ -2255,9 +2256,9 @@ X-ALT-DESC;FMTTYPE=text/html:

Die OSGi beschreibt eine spezifikation\, a ing_dm.pdf">Vortragsfolien\n END:VEVENT BEGIN:VEVENT -UID:3b48b764-117b-422a-99ea-1f1ad5a16032 +UID:906beff6-4b72-4450-a307-b834aaad3bfb SEQUENCE:0 -DTSTAMP:20240904T171816 +DTSTAMP:20240911T185530 DTSTART;TZID=Europe/Berlin:20110322T190000 DTEND;TZID=Europe/Berlin:20110322T220000 SUMMARY:Vortrag "EasyMock" - Richard Hauswald @@ -2270,9 +2271,9 @@ X-ALT-DESC;FMTTYPE=text/html:

EasyMock END:VEVENT BEGIN:VEVENT -UID:e1e6a7e1-1edb-49bd-9e07-8ea2fd2d38a4 +UID:3695c6ef-88d1-4cc3-88f6-cba2f3071f78 SEQUENCE:0 -DTSTAMP:20240904T171816 +DTSTAMP:20240911T185530 DTSTART;TZID=Europe/Berlin:20110322T190000 DTEND;TZID=Europe/Berlin:20110322T220000 SUMMARY:Vortrag "Jenkins/Hudson" - Stefan Scheumann diff --git a/locations/casus/index.html b/locations/casus/index.html index b487bd475..6c8e46ffd 100644 --- a/locations/casus/index.html +++ b/locations/casus/index.html @@ -348,6 +348,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/locations/cideon/index.html b/locations/cideon/index.html index 592cd863f..7c60748aa 100644 --- a/locations/cideon/index.html +++ b/locations/cideon/index.html @@ -348,6 +348,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/locations/dser_elisabethstrasse/index.html b/locations/dser_elisabethstrasse/index.html index f87ac7081..e3afe12aa 100644 --- a/locations/dser_elisabethstrasse/index.html +++ b/locations/dser_elisabethstrasse/index.html @@ -348,6 +348,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/locations/dser_steinstrasse/index.html b/locations/dser_steinstrasse/index.html index 0e3ffc1fe..66ae98092 100644 --- a/locations/dser_steinstrasse/index.html +++ b/locations/dser_steinstrasse/index.html @@ -344,10 +344,10 @@ overflow: visible; position: static; width: auto; } -

+ - \ No newline at end of file + \ No newline at end of file diff --git a/locations/expleo/index.html b/locations/expleo/index.html index 3178a6f04..444afea6b 100644 --- a/locations/expleo/index.html +++ b/locations/expleo/index.html @@ -348,6 +348,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/locations/fraunhofer/index.html b/locations/fraunhofer/index.html index 01300ac5e..c27962b19 100644 --- a/locations/fraunhofer/index.html +++ b/locations/fraunhofer/index.html @@ -348,6 +348,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/locations/hochschule_campus/index.html b/locations/hochschule_campus/index.html index e74252659..73a9d9ff5 100644 --- a/locations/hochschule_campus/index.html +++ b/locations/hochschule_campus/index.html @@ -348,6 +348,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/locations/hochschule_obermarkt/index.html b/locations/hochschule_obermarkt/index.html index 0d45d7430..9f3b3a5cc 100644 --- a/locations/hochschule_obermarkt/index.html +++ b/locations/hochschule_obermarkt/index.html @@ -348,6 +348,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/locations/index.html b/locations/index.html index c0323763b..e308876d9 100644 --- a/locations/index.html +++ b/locations/index.html @@ -348,6 +348,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/locations/innolabs/index.html b/locations/innolabs/index.html index 26ce3aef6..9ee234553 100644 --- a/locations/innolabs/index.html +++ b/locations/innolabs/index.html @@ -348,6 +348,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/locations/saxsys/index.html b/locations/saxsys/index.html index 3a08705a7..bf9fab372 100644 --- a/locations/saxsys/index.html +++ b/locations/saxsys/index.html @@ -348,6 +348,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/locations/sqs/index.html b/locations/sqs/index.html index 65bd0275b..5abb89398 100644 --- a/locations/sqs/index.html +++ b/locations/sqs/index.html @@ -348,6 +348,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/locations/tallence/index.html b/locations/tallence/index.html index a1fb2da36..88d5e6307 100644 --- a/locations/tallence/index.html +++ b/locations/tallence/index.html @@ -348,6 +348,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/locations/zeiss/index.html b/locations/zeiss/index.html index e1e8c459e..64759fab8 100644 --- a/locations/zeiss/index.html +++ b/locations/zeiss/index.html @@ -348,6 +348,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/mitmachen/index.html b/mitmachen/index.html index 7c060f6ef..6bad800b9 100644 --- a/mitmachen/index.html +++ b/mitmachen/index.html @@ -375,6 +375,6 @@

Veranstalte das nächste Treffen bei dir

- \ No newline at end of file + \ No newline at end of file diff --git a/page-data/app-data.json b/page-data/app-data.json index 42e842fbb..44b5360a8 100644 --- a/page-data/app-data.json +++ b/page-data/app-data.json @@ -1 +1 @@ -{"webpackCompilationHash":"824ffc1c618fa534dab0"} +{"webpackCompilationHash":"bbf04d3434405b7ac41d"} diff --git a/page-data/debug/redirects/page-data.json b/page-data/debug/redirects/page-data.json index 8a82e6e5c..70835d2a0 100644 --- a/page-data/debug/redirects/page-data.json +++ b/page-data/debug/redirects/page-data.json @@ -1 +1 @@ -{"componentChunkName":"component---src-pages-debug-redirects-tsx","path":"/debug/redirects/","result":{"data":{"talks":{"edges":[{"node":{"id":"f17a3451-b9a5-5b42-b740-3c15fe9268f5","fields":{"slug":"/talks/2018-06-27-immutable-data/","legacySlug":"/2018/06/27/immutable-data"},"frontmatter":{"title":"Immutable Data - Unveränderliche Daten im Griff"}}},{"node":{"id":"bba11502-e73b-5c5e-9ce7-f4102b1daed5","fields":{"slug":"/talks/2018-05-30-graphql/","legacySlug":"/2018/05/30/graphql"},"frontmatter":{"title":"GraphQL"}}},{"node":{"id":"1b2f3079-33fa-52a7-8f63-17ed40feb17e","fields":{"slug":"/talks/2018-04-25-kotlin/","legacySlug":"/2018/04/25/kotlin"},"frontmatter":{"title":"Kotlin"}}},{"node":{"id":"dad0ee9f-ea34-5ce1-b7fe-a0e45b09e845","fields":{"slug":"/talks/2018-03-20-mikro_vs_makroarchitektur/","legacySlug":"/2018/03/20/mikro_vs_makroarchitektur"},"frontmatter":{"title":"Mikro- vs. Makroarchitektur – Spielraum und Spielregeln"}}},{"node":{"id":"67f5c805-4443-51af-9f87-0a9aff577dce","fields":{"slug":"/talks/2018-02-28-java_auf_sap_cloud/","legacySlug":"/2018/02/28/java_auf_sap_cloud"},"frontmatter":{"title":"Entwicklung von Java Applikationen auf der SAP Cloud Platform"}}},{"node":{"id":"259289d0-862c-5044-bdb1-38c8d853780d","fields":{"slug":"/talks/2018-01-31-system_of_systems/","legacySlug":"/2018/01/31/system_of_systems"},"frontmatter":{"title":"Refactoring to a System of Systems"}}},{"node":{"id":"92f30cfa-20d5-5aba-8db4-e6e1de091225","fields":{"slug":"/talks/2017-11-29-neo4j/","legacySlug":"/2017/11/29/neo4j"},"frontmatter":{"title":"Neo4j: Panama Papers"}}},{"node":{"id":"fd607630-d7dd-503a-8da0-25a963df4df3","fields":{"slug":"/talks/2017-10-25-serverless/","legacySlug":"/2017/10/25/serverless"},"frontmatter":{"title":"Serverless Application - Who the heck needs a Server?"}}},{"node":{"id":"29eb8b61-615f-5f82-afc0-25abdc540af7","fields":{"slug":"/talks/2017-08-30-alexa/","legacySlug":"/2017/08/30/alexa"},"frontmatter":{"title":"Spracherkennung mit Amazon Alexa"}}},{"node":{"id":"935f30df-c07e-5cfa-9188-3564b4e0fab7","fields":{"slug":"/talks/2017-05-31-react/","legacySlug":"/2017/05/31/react"},"frontmatter":{"title":"React und React-Native: Functional UI Development für Browser und mobile Endgeräte"}}},{"node":{"id":"9ba71f6c-f0dd-5c4e-b70f-3d7ac1ec19ca","fields":{"slug":"/talks/2017-04-26-jdk9/","legacySlug":"/2017/04/25/jdk9"},"frontmatter":{"title":"JDK 9"}}},{"node":{"id":"d7528a15-3b10-587c-9543-5c372945763a","fields":{"slug":"/talks/2017-03-22-angular/","legacySlug":"/2017/03/22/angular"},"frontmatter":{"title":"Angular 2 für Java Entwickler"}}},{"node":{"id":"f009504d-3327-52e9-8948-6cd4d3ba952e","fields":{"slug":"/talks/2017-02-22-css/","legacySlug":"/2017/02/22/css"},"frontmatter":{"title":"CSS, Aha-Effekte und Perspektiven"}}},{"node":{"id":"cf0f1947-1449-5df5-b546-aa31d25046a7","fields":{"slug":"/talks/2017-01-25-junit5/","legacySlug":"/2017/01/25/junit5"},"frontmatter":{"title":"JUnit 5"}}},{"node":{"id":"c67796c2-6477-5658-a163-1de4870f548e","fields":{"slug":"/talks/2016-11-30-inside_jvm/","legacySlug":"/2016/11/30/inside_jvm"},"frontmatter":{"title":"Inside JVM"}}},{"node":{"id":"a4cfc466-b5f6-5b10-be7e-13c92d3ab2f7","fields":{"slug":"/talks/2016-09-21-kommunikationskultur/","legacySlug":"/2016/09/21/kommunikationskultur"},"frontmatter":{"title":"Kommunikationskultur im Softwareentwicklungsprozess"}}},{"node":{"id":"e14cd50a-435a-5855-ae06-c0d1eb30d8af","fields":{"slug":"/talks/2016-07-27-testwerkzeuge_javafx/","legacySlug":"/2016/07/27/testwerkzeuge_javafx"},"frontmatter":{"title":"Testwerkzeuge für JavaFX"}}},{"node":{"id":"4dc84ec4-23f6-5438-a2e6-b5944dc868c9","fields":{"slug":"/talks/2016-05-25-performance-analyse-inspectit/","legacySlug":"/2016/05/25/performance-analyse-inspectit"},"frontmatter":{"title":"Performance-Analyse mit inspectIT"}}},{"node":{"id":"7d996009-4040-5330-a46c-5877cc5668af","fields":{"slug":"/talks/2016-03-30-haskell_frege/","legacySlug":"/2016/03/30/haskell_frege"},"frontmatter":{"title":"Haskell und Frege"}}},{"node":{"id":"79835d68-651b-57a2-8c75-042baeba5b30","fields":{"slug":"/talks/2016-01-27-functional_java/","legacySlug":"/2016/01/27/functional_java"},"frontmatter":{"title":"Funktionale Programmierung mit Java"}}},{"node":{"id":"43538367-514c-5009-b9eb-0f730f52bfd9","fields":{"slug":"/talks/2015-11-25-javafx-mobile/","legacySlug":"/2015/11/25/javafx-mobile"},"frontmatter":{"title":"JavaFX auf Mobile"}}},{"node":{"id":"eff228ab-8f49-5773-905c-fee144de429f","fields":{"slug":"/talks/2015-09-30-guava/","legacySlug":"/2015/09/30/guava"},"frontmatter":{"title":"Guava"}}},{"node":{"id":"a3c8bbba-0df8-503b-a702-21589e288614","fields":{"slug":"/talks/2015-07-29-drools/","legacySlug":"/2015/07/29/drools"},"frontmatter":{"title":"Regelbasierte Systeme mit JBoss Drools"}}},{"node":{"id":"1faa8cf7-10f9-54d5-a480-6d2e44896011","fields":{"slug":"/talks/2015-05-27-advanced-android/","legacySlug":"/2015/05/27/advanced-android"},"frontmatter":{"title":"Fortgeschrittene Android-Entwicklung"}}},{"node":{"id":"d853656a-6dac-5d38-b25a-c241c13cbadb","fields":{"slug":"/talks/2015-03-25-android/","legacySlug":"/2015/03/25/android"},"frontmatter":{"title":"Einstieg in die Android-App-Entwicklung"}}},{"node":{"id":"d88d92c2-cf39-5768-b424-1b211f08c8e8","fields":{"slug":"/talks/2015-01-28-moskito/","legacySlug":"/2015/01/28/moskito"},"frontmatter":{"title":"MoSKito - Monitoring Framework"}}},{"node":{"id":"2fdb9675-dfcf-55b8-899d-8e6d04242b4a","fields":{"slug":"/talks/2014-12-03-model-view-star/","legacySlug":"/2014/12/03/model-view-star"},"frontmatter":{"title":"Model-View-*: UI-Design-Patterns im Detail"}}},{"node":{"id":"5840ef2b-08af-57a6-81b0-7a69c1d1beb0","fields":{"slug":"/talks/2014-10-29-infrastructure_as_code/","legacySlug":"/2014/10/29/infrastructure_as_code"},"frontmatter":{"title":"Infrastructure as Code"}}},{"node":{"id":"ded25abd-db1f-5b9b-9cd2-8c905bc15ab0","fields":{"slug":"/talks/2014-09-24-solr/","legacySlug":"/2014/09/24/solr"},"frontmatter":{"title":"Solr - Eine Enterprise-Suchmaschine"}}},{"node":{"id":"bd5b8775-c069-521b-803e-4a62493c8247","fields":{"slug":"/talks/2014-07-30-java8-streams/","legacySlug":"/2014/07/30/java8-streams"},"frontmatter":{"title":"Java8 - Streams und Lambdas"}}},{"node":{"id":"09dfae71-65f1-52de-81a7-e0746238f502","fields":{"slug":"/talks/2014-05-28-hazelcast/","legacySlug":"/2014/05/28/hazelcast"},"frontmatter":{"title":"Hazelcast - Synchronisation von In-Memory-Daten"}}},{"node":{"id":"27050ce5-4d13-504b-90e0-8a4c3f2e6514","fields":{"slug":"/talks/2014-04-02-assertj/","legacySlug":"/2014/04/02/assertj"},"frontmatter":{"title":"Besser lesbare Unittests mit AssertJ"}}},{"node":{"id":"f39e922a-28fe-514b-838c-4b89e4ec981e","fields":{"slug":"/talks/2014-01-29-opendip/","legacySlug":"/2014/01/29/opendip"},"frontmatter":{"title":"Tool-Integration im Softwareentwicklungsprozess"}}},{"node":{"id":"a8a6dc9d-ed19-56f9-9fd3-8c83531f61d0","fields":{"slug":"/talks/2013-11-27-web-performance/","legacySlug":"/2013/11/27/web-performance"},"frontmatter":{"title":"Performance-Optimierung im Web"}}},{"node":{"id":"fb329b7c-5599-55bf-85c5-54a1a6b821bb","fields":{"slug":"/talks/2013-10-30-app-design/","legacySlug":"/2013/10/30/app-design"},"frontmatter":{"title":"Modernes App-Design am Beispiel von Android"}}},{"node":{"id":"6cde30c0-930e-5a8f-9a80-e0bfc34878a6","fields":{"slug":"/talks/2013-07-31-persona/","legacySlug":"/2013/07/31/persona"},"frontmatter":{"title":"Persona - Werkzeug für die GUI-Entwicklung"}}},{"node":{"id":"df78a5f7-4e2e-5f4d-83dd-6ad6432ef93e","fields":{"slug":"/talks/2013-05-29-jruby/","legacySlug":"/2013/05/29/jruby"},"frontmatter":{"title":"JRuby - Ruby auf der Java VM"}}},{"node":{"id":"a13fb811-969f-5eb3-91f8-c71970bff046","fields":{"slug":"/talks/2013-03-27-nxt_lego/","legacySlug":"/2013/03/27/nxt_lego"},"frontmatter":{"title":"Lego NXT-Roboter mit Java programmieren"}}},{"node":{"id":"90157438-0e03-57ef-870f-701aac0b6210","fields":{"slug":"/talks/2012-11-28-javafx2/","legacySlug":"/2012/11/28/javafx2"},"frontmatter":{"title":"JavaFX 2"}}},{"node":{"id":"c044b319-accb-5fca-8339-9f01293583e6","fields":{"slug":"/talks/2012-09-26-bean_validation/","legacySlug":"/2012/09/26/bean_validation"},"frontmatter":{"title":"JSR-303 BeanValidation"}}},{"node":{"id":"09982d70-f13f-5626-8a14-2d8d92abf724","fields":{"slug":"/talks/2012-07-25-selenium_praxis/","legacySlug":"/2012/07/25/selenium_praxis"},"frontmatter":{"title":"Selenium/Webdriver in der Praxis"}}},{"node":{"id":"5e4ab94f-157d-5292-864d-57606942e1ff","fields":{"slug":"/talks/2012-06-27-gridgain/","legacySlug":"/2012/06/27/gridgain"},"frontmatter":{"title":"GridGain - Parallel Computing und Data Grid Anwendungen"}}},{"node":{"id":"88119287-b9a3-5745-bd33-a7735cb39b4b","fields":{"slug":"/talks/2012-05-30-jmonkey-engine3/","legacySlug":"/2012/05/30/jmonkey-engine3"},"frontmatter":{"title":"JMonkeyEngine 3 - 3D-Applikationen in Java"}}},{"node":{"id":"fa3c70d9-f376-541d-be0b-ca24e0ac6b89","fields":{"slug":"/talks/2012-04-25-maven/","legacySlug":"/2012/04/25/maven"},"frontmatter":{"title":"Maven"}}},{"node":{"id":"bd3b256f-6609-52bb-9d05-5a57482e4f42","fields":{"slug":"/talks/2012-03-28-webtests/","legacySlug":"/2012/03/28/webtests"},"frontmatter":{"title":"Webtests mit Selenium"}}},{"node":{"id":"7881a4dc-ab76-5124-b9b1-dc13c982a250","fields":{"slug":"/talks/2012-02-29-scala_webapps/","legacySlug":"/2012/02/29/scala_webapps"},"frontmatter":{"title":"Webentwicklung mit Scala"}}},{"node":{"id":"67e2091a-15eb-56f9-bb65-586c4b2a809d","fields":{"slug":"/talks/2012-01-25-jsf_cdi_advanced/","legacySlug":"/2012/01/25/jsf_cdi_advanced"},"frontmatter":{"title":"Advanced JSF und CDI"}}},{"node":{"id":"e3831714-860d-5867-9952-89ecfe8b81dd","fields":{"slug":"/talks/2012-01-01-hibernate/","legacySlug":"/2012/01/04/hibernate"},"frontmatter":{"title":"JPA - Hibernate"}}},{"node":{"id":"11771522-730a-5373-b0f8-585c9c4f52c1","fields":{"slug":"/talks/2011-11-30-jsf-cdi/","legacySlug":"/2011/11/30/jsf-cdi"},"frontmatter":{"title":"JavaServer Faces 2 und CDI"}}},{"node":{"id":"c40cc73f-d2be-5960-b15f-87e4b39429c8","fields":{"slug":"/talks/2011-10-26-android/","legacySlug":"/2011/10/26/android"},"frontmatter":{"title":"Android"}}},{"node":{"id":"9bcc98b0-826d-5513-b828-008dbf11c915","fields":{"slug":"/talks/2011-09-28-jdom/","legacySlug":"/2011/09/28/jdom"},"frontmatter":{"title":"JDOM"}}},{"node":{"id":"6cca53f4-9edd-55ac-a225-75c94aa0dd8b","fields":{"slug":"/talks/2011-09-28-single-sign-on/","legacySlug":"/2011/09/28/single-sign-on"},"frontmatter":{"title":"Single Sign-On mit JAAS und JGSS"}}},{"node":{"id":"67828855-f7d8-5d6d-9d90-7c3760bb7705","fields":{"slug":"/talks/2011-08-31-testen/","legacySlug":"/2011/08/31/testen"},"frontmatter":{"title":"Testen - Patterns und Best Practices"}}},{"node":{"id":"4bb73d33-af61-5eac-a5fa-d075fa8660f5","fields":{"slug":"/talks/2011-07-27-testng/","legacySlug":"/2011/07/27/testng"},"frontmatter":{"title":"TestNG"}}},{"node":{"id":"603cc23a-9840-5867-b78d-99fbd489d472","fields":{"slug":"/talks/2011-07-27-scala/","legacySlug":"/2011/07/27/scala"},"frontmatter":{"title":"Scala"}}},{"node":{"id":"5c110017-4815-5ac0-a4e3-a75e759080ac","fields":{"slug":"/talks/2011-06-29-javaee_jboss/","legacySlug":"/2011/06/29/javaee_jboss"},"frontmatter":{"title":"JavaEE und JBoss"}}},{"node":{"id":"54c98b64-64a8-515b-a02c-8a54c51dcca1","fields":{"slug":"/talks/2011-05-27-guice/","legacySlug":"/2011/05/27/guice"},"frontmatter":{"title":"Google Guice"}}},{"node":{"id":"6d1edf0b-d32b-5274-baa2-34c7f27786b8","fields":{"slug":"/talks/2011-04-27-gwt/","legacySlug":"/2011/04/27/gwt"},"frontmatter":{"title":"GWT - Google Web Toolkit"}}},{"node":{"id":"2d5fb6de-57a5-54c0-9485-b2ea5bb67a81","fields":{"slug":"/talks/2011-04-27-osgi_springdm/","legacySlug":"/2011/04/27/osgi_springdm"},"frontmatter":{"title":"OSGi mit SpringDM"}}},{"node":{"id":"b0252f0d-2a16-5085-913a-7fb7bf5364a6","fields":{"slug":"/talks/2011-03-22-easymock/","legacySlug":"/2011/03/22/easymock"},"frontmatter":{"title":"EasyMock"}}},{"node":{"id":"c92b2d55-0d33-50f7-a73c-de8f55b7d75e","fields":{"slug":"/talks/2011-03-22-jenkins/","legacySlug":"/2011/03/22/jenkins"},"frontmatter":{"title":"Jenkins/Hudson"}}}]}},"pageContext":{}},"staticQueryHashes":[],"slicesMap":{}} \ No newline at end of file +{"componentChunkName":"component---src-pages-debug-redirects-tsx","path":"/debug/redirects/","result":{"data":{"talks":{"edges":[{"node":{"id":"f17a3451-b9a5-5b42-b740-3c15fe9268f5","fields":{"slug":"/talks/2018-06-27-immutable-data/","legacySlug":"/2018/06/27/immutable-data"},"frontmatter":{"title":"Immutable Data - Unveränderliche Daten im Griff"}}},{"node":{"id":"bba11502-e73b-5c5e-9ce7-f4102b1daed5","fields":{"slug":"/talks/2018-05-30-graphql/","legacySlug":"/2018/05/30/graphql"},"frontmatter":{"title":"GraphQL"}}},{"node":{"id":"1b2f3079-33fa-52a7-8f63-17ed40feb17e","fields":{"slug":"/talks/2018-04-25-kotlin/","legacySlug":"/2018/04/25/kotlin"},"frontmatter":{"title":"Kotlin"}}},{"node":{"id":"dad0ee9f-ea34-5ce1-b7fe-a0e45b09e845","fields":{"slug":"/talks/2018-03-20-mikro_vs_makroarchitektur/","legacySlug":"/2018/03/20/mikro_vs_makroarchitektur"},"frontmatter":{"title":"Mikro- vs. Makroarchitektur – Spielraum und Spielregeln"}}},{"node":{"id":"67f5c805-4443-51af-9f87-0a9aff577dce","fields":{"slug":"/talks/2018-02-28-java_auf_sap_cloud/","legacySlug":"/2018/02/28/java_auf_sap_cloud"},"frontmatter":{"title":"Entwicklung von Java Applikationen auf der SAP Cloud Platform"}}},{"node":{"id":"259289d0-862c-5044-bdb1-38c8d853780d","fields":{"slug":"/talks/2018-01-31-system_of_systems/","legacySlug":"/2018/01/31/system_of_systems"},"frontmatter":{"title":"Refactoring to a System of Systems"}}},{"node":{"id":"92f30cfa-20d5-5aba-8db4-e6e1de091225","fields":{"slug":"/talks/2017-11-29-neo4j/","legacySlug":"/2017/11/29/neo4j"},"frontmatter":{"title":"Neo4j: Panama Papers"}}},{"node":{"id":"fd607630-d7dd-503a-8da0-25a963df4df3","fields":{"slug":"/talks/2017-10-25-serverless/","legacySlug":"/2017/10/25/serverless"},"frontmatter":{"title":"Serverless Application - Who the heck needs a Server?"}}},{"node":{"id":"29eb8b61-615f-5f82-afc0-25abdc540af7","fields":{"slug":"/talks/2017-08-30-alexa/","legacySlug":"/2017/08/30/alexa"},"frontmatter":{"title":"Spracherkennung mit Amazon Alexa"}}},{"node":{"id":"935f30df-c07e-5cfa-9188-3564b4e0fab7","fields":{"slug":"/talks/2017-05-31-react/","legacySlug":"/2017/05/31/react"},"frontmatter":{"title":"React und React-Native: Functional UI Development für Browser und mobile Endgeräte"}}},{"node":{"id":"9ba71f6c-f0dd-5c4e-b70f-3d7ac1ec19ca","fields":{"slug":"/talks/2017-04-26-jdk9/","legacySlug":"/2017/04/25/jdk9"},"frontmatter":{"title":"JDK 9"}}},{"node":{"id":"d7528a15-3b10-587c-9543-5c372945763a","fields":{"slug":"/talks/2017-03-22-angular/","legacySlug":"/2017/03/22/angular"},"frontmatter":{"title":"Angular 2 für Java Entwickler"}}},{"node":{"id":"f009504d-3327-52e9-8948-6cd4d3ba952e","fields":{"slug":"/talks/2017-02-22-css/","legacySlug":"/2017/02/22/css"},"frontmatter":{"title":"CSS, Aha-Effekte und Perspektiven"}}},{"node":{"id":"cf0f1947-1449-5df5-b546-aa31d25046a7","fields":{"slug":"/talks/2017-01-25-junit5/","legacySlug":"/2017/01/25/junit5"},"frontmatter":{"title":"JUnit 5"}}},{"node":{"id":"c67796c2-6477-5658-a163-1de4870f548e","fields":{"slug":"/talks/2016-11-30-inside_jvm/","legacySlug":"/2016/11/30/inside_jvm"},"frontmatter":{"title":"Inside JVM"}}},{"node":{"id":"a4cfc466-b5f6-5b10-be7e-13c92d3ab2f7","fields":{"slug":"/talks/2016-09-21-kommunikationskultur/","legacySlug":"/2016/09/21/kommunikationskultur"},"frontmatter":{"title":"Kommunikationskultur im Softwareentwicklungsprozess"}}},{"node":{"id":"e14cd50a-435a-5855-ae06-c0d1eb30d8af","fields":{"slug":"/talks/2016-07-27-testwerkzeuge_javafx/","legacySlug":"/2016/07/27/testwerkzeuge_javafx"},"frontmatter":{"title":"Testwerkzeuge für JavaFX"}}},{"node":{"id":"4dc84ec4-23f6-5438-a2e6-b5944dc868c9","fields":{"slug":"/talks/2016-05-25-performance-analyse-inspectit/","legacySlug":"/2016/05/25/performance-analyse-inspectit"},"frontmatter":{"title":"Performance-Analyse mit inspectIT"}}},{"node":{"id":"7d996009-4040-5330-a46c-5877cc5668af","fields":{"slug":"/talks/2016-03-30-haskell_frege/","legacySlug":"/2016/03/30/haskell_frege"},"frontmatter":{"title":"Haskell und Frege"}}},{"node":{"id":"79835d68-651b-57a2-8c75-042baeba5b30","fields":{"slug":"/talks/2016-01-27-functional_java/","legacySlug":"/2016/01/27/functional_java"},"frontmatter":{"title":"Funktionale Programmierung mit Java"}}},{"node":{"id":"43538367-514c-5009-b9eb-0f730f52bfd9","fields":{"slug":"/talks/2015-11-25-javafx-mobile/","legacySlug":"/2015/11/25/javafx-mobile"},"frontmatter":{"title":"JavaFX auf Mobile"}}},{"node":{"id":"eff228ab-8f49-5773-905c-fee144de429f","fields":{"slug":"/talks/2015-09-30-guava/","legacySlug":"/2015/09/30/guava"},"frontmatter":{"title":"Guava"}}},{"node":{"id":"a3c8bbba-0df8-503b-a702-21589e288614","fields":{"slug":"/talks/2015-07-29-drools/","legacySlug":"/2015/07/29/drools"},"frontmatter":{"title":"Regelbasierte Systeme mit JBoss Drools"}}},{"node":{"id":"1faa8cf7-10f9-54d5-a480-6d2e44896011","fields":{"slug":"/talks/2015-05-27-advanced-android/","legacySlug":"/2015/05/27/advanced-android"},"frontmatter":{"title":"Fortgeschrittene Android-Entwicklung"}}},{"node":{"id":"d853656a-6dac-5d38-b25a-c241c13cbadb","fields":{"slug":"/talks/2015-03-25-android/","legacySlug":"/2015/03/25/android"},"frontmatter":{"title":"Einstieg in die Android-App-Entwicklung"}}},{"node":{"id":"d88d92c2-cf39-5768-b424-1b211f08c8e8","fields":{"slug":"/talks/2015-01-28-moskito/","legacySlug":"/2015/01/28/moskito"},"frontmatter":{"title":"MoSKito - Monitoring Framework"}}},{"node":{"id":"2fdb9675-dfcf-55b8-899d-8e6d04242b4a","fields":{"slug":"/talks/2014-12-03-model-view-star/","legacySlug":"/2014/12/03/model-view-star"},"frontmatter":{"title":"Model-View-*: UI-Design-Patterns im Detail"}}},{"node":{"id":"5840ef2b-08af-57a6-81b0-7a69c1d1beb0","fields":{"slug":"/talks/2014-10-29-infrastructure_as_code/","legacySlug":"/2014/10/29/infrastructure_as_code"},"frontmatter":{"title":"Infrastructure as Code"}}},{"node":{"id":"ded25abd-db1f-5b9b-9cd2-8c905bc15ab0","fields":{"slug":"/talks/2014-09-24-solr/","legacySlug":"/2014/09/24/solr"},"frontmatter":{"title":"Solr - Eine Enterprise-Suchmaschine"}}},{"node":{"id":"bd5b8775-c069-521b-803e-4a62493c8247","fields":{"slug":"/talks/2014-07-30-java8-streams/","legacySlug":"/2014/07/30/java8-streams"},"frontmatter":{"title":"Java8 - Streams und Lambdas"}}},{"node":{"id":"09dfae71-65f1-52de-81a7-e0746238f502","fields":{"slug":"/talks/2014-05-28-hazelcast/","legacySlug":"/2014/05/28/hazelcast"},"frontmatter":{"title":"Hazelcast - Synchronisation von In-Memory-Daten"}}},{"node":{"id":"27050ce5-4d13-504b-90e0-8a4c3f2e6514","fields":{"slug":"/talks/2014-04-02-assertj/","legacySlug":"/2014/04/02/assertj"},"frontmatter":{"title":"Besser lesbare Unittests mit AssertJ"}}},{"node":{"id":"f39e922a-28fe-514b-838c-4b89e4ec981e","fields":{"slug":"/talks/2014-01-29-opendip/","legacySlug":"/2014/01/29/opendip"},"frontmatter":{"title":"Tool-Integration im Softwareentwicklungsprozess"}}},{"node":{"id":"a8a6dc9d-ed19-56f9-9fd3-8c83531f61d0","fields":{"slug":"/talks/2013-11-27-web-performance/","legacySlug":"/2013/11/27/web-performance"},"frontmatter":{"title":"Performance-Optimierung im Web"}}},{"node":{"id":"fb329b7c-5599-55bf-85c5-54a1a6b821bb","fields":{"slug":"/talks/2013-10-30-app-design/","legacySlug":"/2013/10/30/app-design"},"frontmatter":{"title":"Modernes App-Design am Beispiel von Android"}}},{"node":{"id":"6cde30c0-930e-5a8f-9a80-e0bfc34878a6","fields":{"slug":"/talks/2013-07-31-persona/","legacySlug":"/2013/07/31/persona"},"frontmatter":{"title":"Persona - Werkzeug für die GUI-Entwicklung"}}},{"node":{"id":"df78a5f7-4e2e-5f4d-83dd-6ad6432ef93e","fields":{"slug":"/talks/2013-05-29-jruby/","legacySlug":"/2013/05/29/jruby"},"frontmatter":{"title":"JRuby - Ruby auf der Java VM"}}},{"node":{"id":"a13fb811-969f-5eb3-91f8-c71970bff046","fields":{"slug":"/talks/2013-03-27-nxt_lego/","legacySlug":"/2013/03/27/nxt_lego"},"frontmatter":{"title":"Lego NXT-Roboter mit Java programmieren"}}},{"node":{"id":"90157438-0e03-57ef-870f-701aac0b6210","fields":{"slug":"/talks/2012-11-28-javafx2/","legacySlug":"/2012/11/28/javafx2"},"frontmatter":{"title":"JavaFX 2"}}},{"node":{"id":"c044b319-accb-5fca-8339-9f01293583e6","fields":{"slug":"/talks/2012-09-26-bean_validation/","legacySlug":"/2012/09/26/bean_validation"},"frontmatter":{"title":"JSR-303 BeanValidation"}}},{"node":{"id":"09982d70-f13f-5626-8a14-2d8d92abf724","fields":{"slug":"/talks/2012-07-25-selenium_praxis/","legacySlug":"/2012/07/25/selenium_praxis"},"frontmatter":{"title":"Selenium/Webdriver in der Praxis"}}},{"node":{"id":"5e4ab94f-157d-5292-864d-57606942e1ff","fields":{"slug":"/talks/2012-06-27-gridgain/","legacySlug":"/2012/06/27/gridgain"},"frontmatter":{"title":"GridGain - Parallel Computing und Data Grid Anwendungen"}}},{"node":{"id":"88119287-b9a3-5745-bd33-a7735cb39b4b","fields":{"slug":"/talks/2012-05-30-jmonkey-engine3/","legacySlug":"/2012/05/30/jmonkey-engine3"},"frontmatter":{"title":"JMonkeyEngine 3 - 3D-Applikationen in Java"}}},{"node":{"id":"fa3c70d9-f376-541d-be0b-ca24e0ac6b89","fields":{"slug":"/talks/2012-04-25-maven/","legacySlug":"/2012/04/25/maven"},"frontmatter":{"title":"Maven"}}},{"node":{"id":"bd3b256f-6609-52bb-9d05-5a57482e4f42","fields":{"slug":"/talks/2012-03-28-webtests/","legacySlug":"/2012/03/28/webtests"},"frontmatter":{"title":"Webtests mit Selenium"}}},{"node":{"id":"7881a4dc-ab76-5124-b9b1-dc13c982a250","fields":{"slug":"/talks/2012-02-29-scala_webapps/","legacySlug":"/2012/02/29/scala_webapps"},"frontmatter":{"title":"Webentwicklung mit Scala"}}},{"node":{"id":"67e2091a-15eb-56f9-bb65-586c4b2a809d","fields":{"slug":"/talks/2012-01-25-jsf_cdi_advanced/","legacySlug":"/2012/01/25/jsf_cdi_advanced"},"frontmatter":{"title":"Advanced JSF und CDI"}}},{"node":{"id":"e3831714-860d-5867-9952-89ecfe8b81dd","fields":{"slug":"/talks/2012-01-01-hibernate/","legacySlug":"/2012/01/04/hibernate"},"frontmatter":{"title":"JPA - Hibernate"}}},{"node":{"id":"11771522-730a-5373-b0f8-585c9c4f52c1","fields":{"slug":"/talks/2011-11-30-jsf-cdi/","legacySlug":"/2011/11/30/jsf-cdi"},"frontmatter":{"title":"JavaServer Faces 2 und CDI"}}},{"node":{"id":"c40cc73f-d2be-5960-b15f-87e4b39429c8","fields":{"slug":"/talks/2011-10-26-android/","legacySlug":"/2011/10/26/android"},"frontmatter":{"title":"Android"}}},{"node":{"id":"9bcc98b0-826d-5513-b828-008dbf11c915","fields":{"slug":"/talks/2011-09-28-jdom/","legacySlug":"/2011/09/28/jdom"},"frontmatter":{"title":"JDOM"}}},{"node":{"id":"6cca53f4-9edd-55ac-a225-75c94aa0dd8b","fields":{"slug":"/talks/2011-09-28-single-sign-on/","legacySlug":"/2011/09/28/single-sign-on"},"frontmatter":{"title":"Single Sign-On mit JAAS und JGSS"}}},{"node":{"id":"67828855-f7d8-5d6d-9d90-7c3760bb7705","fields":{"slug":"/talks/2011-08-31-testen/","legacySlug":"/2011/08/31/testen"},"frontmatter":{"title":"Testen - Patterns und Best Practices"}}},{"node":{"id":"603cc23a-9840-5867-b78d-99fbd489d472","fields":{"slug":"/talks/2011-07-27-scala/","legacySlug":"/2011/07/27/scala"},"frontmatter":{"title":"Scala"}}},{"node":{"id":"4bb73d33-af61-5eac-a5fa-d075fa8660f5","fields":{"slug":"/talks/2011-07-27-testng/","legacySlug":"/2011/07/27/testng"},"frontmatter":{"title":"TestNG"}}},{"node":{"id":"5c110017-4815-5ac0-a4e3-a75e759080ac","fields":{"slug":"/talks/2011-06-29-javaee_jboss/","legacySlug":"/2011/06/29/javaee_jboss"},"frontmatter":{"title":"JavaEE und JBoss"}}},{"node":{"id":"54c98b64-64a8-515b-a02c-8a54c51dcca1","fields":{"slug":"/talks/2011-05-27-guice/","legacySlug":"/2011/05/27/guice"},"frontmatter":{"title":"Google Guice"}}},{"node":{"id":"6d1edf0b-d32b-5274-baa2-34c7f27786b8","fields":{"slug":"/talks/2011-04-27-gwt/","legacySlug":"/2011/04/27/gwt"},"frontmatter":{"title":"GWT - Google Web Toolkit"}}},{"node":{"id":"2d5fb6de-57a5-54c0-9485-b2ea5bb67a81","fields":{"slug":"/talks/2011-04-27-osgi_springdm/","legacySlug":"/2011/04/27/osgi_springdm"},"frontmatter":{"title":"OSGi mit SpringDM"}}},{"node":{"id":"b0252f0d-2a16-5085-913a-7fb7bf5364a6","fields":{"slug":"/talks/2011-03-22-easymock/","legacySlug":"/2011/03/22/easymock"},"frontmatter":{"title":"EasyMock"}}},{"node":{"id":"c92b2d55-0d33-50f7-a73c-de8f55b7d75e","fields":{"slug":"/talks/2011-03-22-jenkins/","legacySlug":"/2011/03/22/jenkins"},"frontmatter":{"title":"Jenkins/Hudson"}}}]}},"pageContext":{}},"staticQueryHashes":[],"slicesMap":{}} \ No newline at end of file diff --git a/page-data/index/page-data.json b/page-data/index/page-data.json index d871c758a..49ccfd325 100644 --- a/page-data/index/page-data.json +++ b/page-data/index/page-data.json @@ -1 +1 @@ -{"componentChunkName":"component---src-pages-index-tsx","path":"/","result":{"data":{"talks":{"edges":[{"node":{"id":"b0252f0d-2a16-5085-913a-7fb7bf5364a6","html":"

EasyMock - Was ist ein Mock?, Warum sollte ich mocken? Was ist EasyMock? Wie kann ich es\nbenutzen? All diese Fragen werden in der Präsentation beantwortet.

","frontmatter":{"title":"EasyMock","date":"2011-03-22T00:00:00.000Z","time":null,"speaker":["richard_hauswald"],"location":"hochschule_obermarkt","virtual":null,"poster":null,"poster_alt":null,"tags":["testen"]},"fields":{"slug":"/talks/2011-03-22-easymock/","sourceName":"talks"}}},{"node":{"id":"6d1edf0b-d32b-5274-baa2-34c7f27786b8","html":"

GWT - Google Web Toolkit (Ingo Körner)

","frontmatter":{"title":"GWT - Google Web Toolkit","date":"2011-04-27T00:00:00.000Z","time":null,"speaker":["ingo_koerner"],"location":"dser_steinstrasse","virtual":null,"poster":null,"poster_alt":null,"tags":["web","frontend"]},"fields":{"slug":"/talks/2011-04-27-gwt/","sourceName":"talks"}}},{"node":{"id":"2d5fb6de-57a5-54c0-9485-b2ea5bb67a81","html":"

Die OSGi beschreibt eine spezifikation, auf deren Basis Software Modular entwickelt werden kann. Die einzelnen Module\nsind in sich geschlossene Einheiten mit einem klaren Interface, welches einerseits ihre angebotene Funktionalität inf\nForm von Services beschreibt und andererseits die Abhängigkeiten auf Services anderer Module enthält.

\n

Spring-DM (DM steht für Dynamic Modules) ist eine auf OSGi basierende Plattform, die OSGi mit den Vorteilen von Spring,\nallen voran Dependency Injection, verbindet.

\n

Im Vortrag wird neben den theoretischen Grundlagen vor allem an praktischen Beispielen inklusive Live-Coding gezeigt,\nwie mit Spring-DM und OSGi lose gekoppelte Module erstellt und diese dynamisch zur Laufzeit getauscht werden können.

\n

Materialien:

\n","frontmatter":{"title":"OSGi mit SpringDM","date":"2011-04-27T00:00:00.000Z","time":null,"speaker":["manuel_mauky"],"location":"dser_steinstrasse","virtual":null,"poster":null,"poster_alt":null,"tags":null},"fields":{"slug":"/talks/2011-04-27-osgi_springdm/","sourceName":"talks"}}},{"node":{"id":"c92b2d55-0d33-50f7-a73c-de8f55b7d75e","html":"

Hudson bzw. Jenkins ist ein Build-Server, der für\nContinuous Integration eingesetzt wird. Darunter versteht\nman das Vorgehen, nach jeder Code-Änderung einen Build-Vorgang (inklusive Kompilieren des Codes und Ausführen der Tests)\ndurchzuführen. Damit kann sichergestellt werden, dass Fehlerhafte Änderungen sofort auffallen und behoben werden können.

\n

Im Vortrag werden die Begriffe \"Build Management\" und \"Continuous Integration\" näher erleutert und am konkreten Beispiel\nvon Jenkins gezeigt, wie dies in der Praxis umgesetzt werden kann.

","frontmatter":{"title":"Jenkins/Hudson","date":"2011-03-22T00:00:00.000Z","time":null,"speaker":["stefan_scheumann"],"location":"hochschule_obermarkt","virtual":null,"poster":null,"poster_alt":null,"tags":["build-management"]},"fields":{"slug":"/talks/2011-03-22-jenkins/","sourceName":"talks"}}},{"node":{"id":"54c98b64-64a8-515b-a02c-8a54c51dcca1","html":"

Google Guice - Dependency Injection (DI) und Aspect-Orientierte Programmierung (AOP) von Robert Wirbs

","frontmatter":{"title":"Google Guice","date":"2011-05-27T00:00:00.000Z","time":null,"speaker":["robert_wirbs"],"location":"dser_steinstrasse","virtual":null,"poster":null,"poster_alt":null,"tags":["patterns"]},"fields":{"slug":"/talks/2011-05-27-guice/","sourceName":"talks"}}},{"node":{"id":"4bb73d33-af61-5eac-a5fa-d075fa8660f5","html":"

TestNG (Marcus Döring)

","frontmatter":{"title":"TestNG","date":"2011-07-27T00:00:00.000Z","time":null,"speaker":["marcus_doering"],"location":"dser_steinstrasse","virtual":null,"poster":null,"poster_alt":null,"tags":["testen"]},"fields":{"slug":"/talks/2011-07-27-testng/","sourceName":"talks"}}},{"node":{"id":"603cc23a-9840-5867-b78d-99fbd489d472","html":"

Scala - Vorstellung der Sprache, Demo und das Testen (Stefan Bradl)

\n

Materialien:

\n","frontmatter":{"title":"Scala","date":"2011-07-27T00:00:00.000Z","time":null,"speaker":["stefan_bradl"],"location":"dser_steinstrasse","virtual":null,"poster":null,"poster_alt":null,"tags":["programmiersprachen"]},"fields":{"slug":"/talks/2011-07-27-scala/","sourceName":"talks"}}},{"node":{"id":"5c110017-4815-5ac0-a4e3-a75e759080ac","html":"

Diesmal stellt Michael Förster Java EE vor. Es wird sowohl Einblicke in Theorie, wie auch wieder praktische Beispiele\ngeben.

","frontmatter":{"title":"JavaEE und JBoss","date":"2011-06-29T00:00:00.000Z","time":null,"speaker":["michael_foerster"],"location":"dser_steinstrasse","virtual":null,"poster":null,"poster_alt":null,"tags":["javaee"]},"fields":{"slug":"/talks/2011-06-29-javaee_jboss/","sourceName":"talks"}}},{"node":{"id":"67828855-f7d8-5d6d-9d90-7c3760bb7705","html":"

Das Thema wird diesmal Testen sein. Marko Modsching wird Testpatterns und Best Practices vorstellen

","frontmatter":{"title":"Testen - Patterns und Best Practices","date":"2011-08-31T00:00:00.000Z","time":null,"speaker":["marko_modsching"],"location":"dser_steinstrasse","virtual":null,"poster":null,"poster_alt":null,"tags":["testen","patterns"]},"fields":{"slug":"/talks/2011-08-31-testen/","sourceName":"talks"}}},{"node":{"id":"9bcc98b0-826d-5513-b828-008dbf11c915","html":"

JDOM- Einlesen, Verändern und Erzeugen von XML-Dokumenten (Mark Ziener)

","frontmatter":{"title":"JDOM","date":"2011-09-28T00:00:00.000Z","time":null,"speaker":["mark_ziener"],"location":"dser_steinstrasse","virtual":null,"poster":null,"poster_alt":null,"tags":["xml"]},"fields":{"slug":"/talks/2011-09-28-jdom/","sourceName":"talks"}}},{"node":{"id":"6cca53f4-9edd-55ac-a225-75c94aa0dd8b","html":"

Vom Single Sign-On zum sicheren Kanal - Authentifizierung und Autorisierung mit JAAS und JGSS (Mario Reichel)

","frontmatter":{"title":"Single Sign-On mit JAAS und JGSS","date":"2011-09-28T00:00:00.000Z","time":null,"speaker":["mario_reichel"],"location":"dser_steinstrasse","virtual":null,"poster":null,"poster_alt":null,"tags":["security"]},"fields":{"slug":"/talks/2011-09-28-single-sign-on/","sourceName":"talks"}}},{"node":{"id":"c40cc73f-d2be-5960-b15f-87e4b39429c8","html":"

Mit einem Vortrag und der Programmierung einer Biepsiel-App für Notitzen führte Max Wielsch in die\nAndroid-Programmierung ein. Im Vortrag ging es zunächst um die Motivation, eine App für die Android-Plattform zu\nentwickeln. Darauffolgend wurden die grundlegeneden Konzepte und Systemmerkmale erläutert. Nach der Theorie folgte die\nPraxis. Max Wielsch programmierte Schritt für Schritte eine \"kleine\" Notitz-App wobei die theoretischen Konzepte in der\nPraxis erläutert wurden.

\n

Die Präsentation und das Beispielprojekt können auf seinem\nBlog heruntergeladen werden.

","frontmatter":{"title":"Android","date":"2011-10-26T00:00:00.000Z","time":null,"speaker":["max_wielsch"],"location":"dser_steinstrasse","virtual":null,"poster":null,"poster_alt":null,"tags":["mobile","android"]},"fields":{"slug":"/talks/2011-10-26-android/","sourceName":"talks"}}},{"node":{"id":"11771522-730a-5373-b0f8-585c9c4f52c1","html":"

Der Vortrag bietet eine Einführung in JavaServer Faces 2 und Beleuchtet unter anderem folgende Aspekte:

\n\n

Ausserdem wird kurz Contexts and Dependency Injection (CDI) vorgestellt und dessen Kombination mit JSF\nhervorgehoben.

\n

Diese theoretischen Aspekte werden anschließend anhand eines praktischen Beispiels inklusive Live-Coding gezeigt und\nerklärt.

\n

Materialien:

\n","frontmatter":{"title":"JavaServer Faces 2 und CDI","date":"2011-11-30T00:00:00.000Z","time":null,"speaker":["manuel_mauky"],"location":"saxsys","virtual":null,"poster":null,"poster_alt":null,"tags":["frontend","web","javaee","jsf"]},"fields":{"slug":"/talks/2011-11-30-jsf-cdi/","sourceName":"talks"}}},{"node":{"id":"e3831714-860d-5867-9952-89ecfe8b81dd","html":"

JPA - Hibernate von Marko Modsching

\n

Materialien:

\n","frontmatter":{"title":"JPA - Hibernate","date":"2012-01-04T00:00:00.000Z","time":null,"speaker":["marko_modsching"],"location":"dser_steinstrasse","virtual":null,"poster":null,"poster_alt":null,"tags":["database","javaee"]},"fields":{"slug":"/talks/2012-01-01-hibernate/","sourceName":"talks"}}},{"node":{"id":"67e2091a-15eb-56f9-bb65-586c4b2a809d","html":"

Dieser Vortrag baut auf den Vortrag zur \"Einführung in JavaServer Faces 2\" auf. Es werden\nfortgeschrittene Techniken aus dem Bereich JSF vorgestellt:

\n
    \n
  • Navigation mit JSF
  • \n
  • Templates und Wiederverwendung von Facelets
  • \n
  • Ajax
  • \n
  • PrimeFaces
  • \n
\n

Im Bereich CDI wird zunächst das Konzept der CDI-Producer beleuchtet, mit welchem der Entwickler Einfluss auf die\nDependency Injection nehmen kann. Anschließend wird das Design Pattern \"Observer\" mit den Techniken von CDI\nimplementiert und gezeigt, wie damit (im Gegensatz zur klassischen Observer-Implementierung) der Beobachter und die\nbeobachtete Klasse komplett von einander entkoppelt werden können.

","frontmatter":{"title":"Advanced JSF und CDI","date":"2012-01-25T00:00:00.000Z","time":null,"speaker":["manuel_mauky"],"location":"hochschule_obermarkt","virtual":null,"poster":null,"poster_alt":null,"tags":["frontend","web","javaee","jsf"]},"fields":{"slug":"/talks/2012-01-25-jsf_cdi_advanced/","sourceName":"talks"}}},{"node":{"id":"7881a4dc-ab76-5124-b9b1-dc13c982a250","html":"

Webentwicklung mit Scala von Stefan Bradl

","frontmatter":{"title":"Webentwicklung mit Scala","date":"2012-02-29T00:00:00.000Z","time":null,"speaker":["stefan_bradl"],"location":"hochschule_obermarkt","virtual":null,"poster":null,"poster_alt":null,"tags":["frontend","web","programmiersprachen"]},"fields":{"slug":"/talks/2012-02-29-scala_webapps/","sourceName":"talks"}}},{"node":{"id":"fa3c70d9-f376-541d-be0b-ca24e0ac6b89","html":"

maven von Thomas Storch

\n

Folien

\n

Beispiel-Code

","frontmatter":{"title":"Maven","date":"2012-04-25T00:00:00.000Z","time":null,"speaker":["thomas_storch"],"location":"dser_steinstrasse","virtual":null,"poster":null,"poster_alt":null,"tags":["build-management"]},"fields":{"slug":"/talks/2012-04-25-maven/","sourceName":"talks"}}},{"node":{"id":"88119287-b9a3-5745-bd33-a7735cb39b4b","html":"

JMonkeyEngine3 und im Allgemeinen 3D-Applikationen in Java von Hans Markwart

","frontmatter":{"title":"JMonkeyEngine 3 - 3D-Applikationen in Java","date":"2012-05-30T00:00:00.000Z","time":null,"speaker":["hans_markwart"],"location":"hochschule_obermarkt","virtual":null,"poster":null,"poster_alt":null,"tags":["frontend"]},"fields":{"slug":"/talks/2012-05-30-jmonkey-engine3/","sourceName":"talks"}}},{"node":{"id":"bd3b256f-6609-52bb-9d05-5a57482e4f42","html":"

Webtests mit Selenium von Marcus Döring

","frontmatter":{"title":"Webtests mit Selenium","date":"2012-03-28T00:00:00.000Z","time":null,"speaker":["marcus_doering"],"location":"saxsys","virtual":null,"poster":null,"poster_alt":null,"tags":["frontend","web","testen"]},"fields":{"slug":"/talks/2012-03-28-webtests/","sourceName":"talks"}}},{"node":{"id":"5e4ab94f-157d-5292-864d-57606942e1ff","html":"

GridGain - ein Java-Framework für Parallel Computing und Data Grid Anwendungen von Mario Reichel

","frontmatter":{"title":"GridGain - Parallel Computing und Data Grid Anwendungen","date":"2012-06-27T00:00:00.000Z","time":null,"speaker":["mario_reichel"],"location":"dser_steinstrasse","virtual":null,"poster":null,"poster_alt":null,"tags":["cluster"]},"fields":{"slug":"/talks/2012-06-27-gridgain/","sourceName":"talks"}}},{"node":{"id":"09982d70-f13f-5626-8a14-2d8d92abf724","html":"

Selenium/webdriver - In Ergänzung zu der Vorstellung von Marcus Döring mit praktischen\nBeispielen von Maik Wagner

","frontmatter":{"title":"Selenium/Webdriver in der Praxis","date":"2012-07-25T00:00:00.000Z","time":null,"speaker":["maik_wagner"],"location":"dser_steinstrasse","virtual":null,"poster":null,"poster_alt":null,"tags":["web","frontend","testen"]},"fields":{"slug":"/talks/2012-07-25-selenium_praxis/","sourceName":"talks"}}},{"node":{"id":"c044b319-accb-5fca-8339-9f01293583e6","html":"

Manuel Mauky stellt in seinem Vortrag den zu JavaEE 6 gehörenden Standard BeanValidation vor.

\n

Dabei wird mittels Annotationen im Java-Code bestimmt, welche Werte für bestimmte Felder valide sind, z.B. @NotNull\nfür einen Wert, der nicht null sein darf oder @Size(min=1, max=20) für einen String, der mindestens 1 und maximal 10\nZeichen lang sein darf. Ein Validator kann dann anhand dieser Metainformationen prüfen, ob der Zustand eines Objekts\nvalide ist oder nicht.

\n

Im Vortrag wird zunächst allgemein auf das Thema Validierung eingegangen und anschließend Beispiele für\nBeanValidation-Annotationen gezeigt. Ebenfalls behandelt wird, wie BeanValidation im Frontend mit JavaServer Faces und\nim Backend mit JPA kombiniert werden kann.

\n

Materialien:

\n","frontmatter":{"title":"JSR-303 BeanValidation","date":"2012-09-26T00:00:00.000Z","time":null,"speaker":["manuel_mauky"],"location":"saxsys","virtual":null,"poster":null,"poster_alt":null,"tags":["javaee"]},"fields":{"slug":"/talks/2012-09-26-bean_validation/","sourceName":"talks"}}},{"node":{"id":"90157438-0e03-57ef-870f-701aac0b6210","html":"

Als Vortragende konnten wir Alexander Casall und Michael Thiele, zwei Mittarbeiter der Saxonia Systems AG aus Dresden\ngewinnen, die zum Thema JavaFX 2 sprechen werden.

\n

Sie werden über das neue UI-Framework von Oracle berichten, welches angetreten ist, um das etwas angestaubte Swing\nabzulösen und neuen Schwung in das Thema Java+Desktop zu bringen. Dabei werden sie speziell auf die Touch-Fähigkeiten\nvon JavaFX 2 eingehen und diese an einem großen Touchscreen live vorführen.

\n

Materialien:

\n","frontmatter":{"title":"JavaFX 2","date":"2012-11-28T00:00:00.000Z","time":null,"speaker":["alexander_casall","michael_thiele"],"location":"saxsys","virtual":null,"poster":null,"poster_alt":null,"tags":["frontend","javafx"]},"fields":{"slug":"/talks/2012-11-28-javafx2/","sourceName":"talks"}}},{"node":{"id":"a13fb811-969f-5eb3-91f8-c71970bff046","html":"

Dieses Mal dreht sich alles um Roboter. Erik Jähne beschäftigt sich in seinem Studium mit NXT-Robotern von Lego\nund wird in seinem Vortrag die Programmierung dieser Roboter mit Java vorstellen. Natürlich wird es dabei auch eine\nLive-Vorführung der Roboter geben.

\n

Videos:

\n","frontmatter":{"title":"Lego NXT-Roboter mit Java programmieren","date":"2013-03-27T00:00:00.000Z","time":null,"speaker":["erik_jaehne"],"location":"dser_steinstrasse","virtual":null,"poster":null,"poster_alt":null,"tags":["hardware","roboter"]},"fields":{"slug":"/talks/2013-03-27-nxt_lego/","sourceName":"talks"}}},{"node":{"id":"6cde30c0-930e-5a8f-9a80-e0bfc34878a6","html":"

In diesem Vortrag von Marlene Knoche geht es um Usability, genauer um so genannte Persona. Personas sind Modelle\nvon Usern. Sie personifizieren eine bestimmte (Ziel-)Gruppe von Benutzern einer Software. Ziel ist es, Entwickler und\n(Usability-)Tester in die Lage zuversetzen, sich besser in Nutzer hinein denken zu können.

\n

Materialien:

\n","frontmatter":{"title":"Persona - Werkzeug für die GUI-Entwicklung","date":"2013-07-31T00:00:00.000Z","time":null,"speaker":["marlene_knoche"],"location":"dser_steinstrasse","virtual":null,"poster":null,"poster_alt":null,"tags":["frontend","softwareentwicklung"]},"fields":{"slug":"/talks/2013-07-31-persona/","sourceName":"talks"}}},{"node":{"id":"fb329b7c-5599-55bf-85c5-54a1a6b821bb","html":"

Die Android-Plattform hat sich in den letzten 2 Jahren sehr stark weiterentwickelt. Sie wurde nicht nur um\nFunktionalitäten erweitert, sondern hat seit der Android-Version 4.0 eine attraktive und sehr gut dokumentierte\nDesign-Sprache erhalten. Die Bedeutung eines konsistenten und funktionalen Designs ist damit ein kritischer\nErfolgsfaktor für eine App. Dies ist die Motivation sich intensiver mit dem Thema UI und UX-Design auseinandersetzen. In\neinem Vortrag wird dies zwar auf die Entwicklung von Android-Apps bezogen, jedoch werden auch allgemeine Konzepte\nvorgestellt, die auf das App-Design plattformübergreifend anwendbar sind.

","frontmatter":{"title":"Modernes App-Design am Beispiel von Android","date":"2013-10-30T00:00:00.000Z","time":null,"speaker":["max_wielsch"],"location":"hochschule_campus","virtual":null,"poster":null,"poster_alt":null,"tags":["frontend","mobile","android"]},"fields":{"slug":"/talks/2013-10-30-app-design/","sourceName":"talks"}}},{"node":{"id":"df78a5f7-4e2e-5f4d-83dd-6ad6432ef93e","html":"

Sebastian Schmeck von der Saxonia Systems AG aus Dresden wird in diesem Vortrag die Programmiersprache Ruby\nvorstellen und anschließend genauer auf die Implementierung JRuby eingehen. Damit lassen sich Ruby-Programme auf der\nJava VM ausführen, was einige konkrete Vorteile gegenüber der Standard-Implementierung bietet.

\n

Ausserdem wird er zeigen, wie die Integration von Java und Ruby in beiden Richtungen funktioniert, d.h. wie man\nRuby-Code in Java benutzt und wie von Ruby aus auf Java-Klassen zugegriffen werden kann.

\n

Materialien:

\n","frontmatter":{"title":"JRuby - Ruby auf der Java VM","date":"2013-05-29T00:00:00.000Z","time":null,"speaker":["sebastian_schmeck"],"location":"hochschule_campus","virtual":null,"poster":null,"poster_alt":null,"tags":["programmiersprachen"]},"fields":{"slug":"/talks/2013-05-29-jruby/","sourceName":"talks"}}},{"node":{"id":"a8a6dc9d-ed19-56f9-9fd3-8c83531f61d0","html":"

Google und Microsoft haben Studien zum Thema \"Ladezeiten von Webseiten\" durchgeführt. Kurzgefasst: Schnelle Websites\nhaben eine bessere User Experience, Nutzer bleiben länger, und auch die Konversionsraten sind besser. Ab einer halben\nSekunde gingen die Umsätze pro Nutzer messbar zurück, ab 2 Sekunden waren es über 4%. Es lohnt sich also, in die\nPerformance einer Webanwendung zu investieren.

","frontmatter":{"title":"Performance-Optimierung im Web","date":"2013-11-27T00:00:00.000Z","time":null,"speaker":["maik_wagner"],"location":"dser_steinstrasse","virtual":null,"poster":null,"poster_alt":null,"tags":["web","performance"]},"fields":{"slug":"/talks/2013-11-27-web-performance/","sourceName":"talks"}}},{"node":{"id":"f39e922a-28fe-514b-838c-4b89e4ec981e","html":"

Tool-Integration im Softwareentwicklungsprozess ist kein neues Thema. Dennoch gibt es immer noch Bedarf, die Integration\nvon Tools und Systemen zu verbessern. Je nach konkretem Entwicklungsvorgehen bzw. -prozess werden weitere ergänzende\nFunktionalitäten und Daten benötigt, die wenige Tools allein nicht liefern können. Das heißt, es ist notwendig,\nIntegration zwischen Tools und Systemen verschiedener Hersteller zu schaffen, sodass diese so verwendet werden können,\nwie es nötig ist. Ziel ist dabei, Daten und Funktionalitäten unabhängig von konkreten Tools oder Systemen dynamisch\nverwenden zu können. Neue und bestehende Tools und kleine Skripte sollen genau an den Entwicklungsprozess und die\nMenschen in diesem Prozess anpassbar sein. Einmal entwickelte Funktionalität soll frei wiederverwendbar sein. Unter\nanderem für diese Ziele wurde OpenDIP, eine offene Platform für die Integration im Entwicklungsprozess, entworfen. Über\ndie Konzepte und die Realisierung dieser Platform wurden zwei Masterarbeiten und ein Paper\nhttp://arxiv.org/find/all/1/all:+AND+Max+Wielsch/0/1/0/all/0/1\ngeschrieben. Im Vortrag wird auf die Motivation und die Verwendung der Platform eingangen, wobei die Architektur\nausgehend von einem Fallbeispiel erläutert wird.

","frontmatter":{"title":"Tool-Integration im Softwareentwicklungsprozess","date":"2014-01-29T00:00:00.000Z","time":null,"speaker":["max_wielsch"],"location":"hochschule_obermarkt","virtual":null,"poster":null,"poster_alt":null,"tags":["integration","platform","softwareentwicklung"]},"fields":{"slug":"/talks/2014-01-29-opendip/","sourceName":"talks"}}},{"node":{"id":"27050ce5-4d13-504b-90e0-8a4c3f2e6514","html":"

Damit Testgetriebene Entwicklung in der Praxis funktionieren kann, müssen sich Tests möglichst einfach und trotzdem\nausdrucksstark schreiben lassen und gut lesbar sein. Auch die (Neben-)Aufgabe von Unittests, eine lebendige\nEntwicklerdokumentation zu bilden, kann nur erfüllt werden, wenn die Tests gut lesbar sind.

\n

Die klassischen Assertions von JUnit lassen hier teilweise zu wünschen übrig. Neben assertTrue und assertNotNull\nbestehen viele Unittests nur aus unzähligen assertEquals-Anweisungen, was in der Regel sehr weit weg von natürlicher\nSprache ist. Diese Lücke versucht das Hamcrest-Projekt zu schließen, welches mittlerweile teilweise in JUnit\neingeflossen ist. Hamcrest ist jedoch ebenfalls nicht unproblematisch und bietet durch seinen Aufbau aus statischen\nMethoden in der Praxis zahlreiche Schwächen und Nachteile.

\n

Einen moderneren Ansatz verfolgt das Framework AssertJ bzw. FEST-Assert. Auf den ersten Blick sehen die\nAssertions denen von Hamcrest zwar sehr ähnlich, jedoch wurde für die Implementierung statt statischer Methoden der\nmodernere Ansatz einer Fluent-API gewählt, wodurch sich einige Vorteile ergeben, wie z.B. bessere IDE-Integration.

\n

Im Vortrag wird das eigentliche Problem und die bisherige Lösung mit Hamcrest gezeigt. Dem wird anschließend das\nFramework AssertJ gegenüber gestellt. Anhand von zahlreichen Core-Beispielen soll gezeigt werden, wie einfach sich\nlesbare Unittests formulieren lassen, wenn man die richtigen Werkzeuge zur Hand hat. Anschließend wird ebenfalls darauf\neingegangen, wie mit AssertJ eigene, domänenspezifische Assertions erstellt werden können. Damit kann sich der Anwender\nseine eigenen Werkzeuge erstellen, um in seiner Domäne gut lesbare und ausdrucksstarke Unittests schreiben zu können.

","frontmatter":{"title":"Besser lesbare Unittests mit AssertJ","date":"2014-04-02T00:00:00.000Z","time":null,"speaker":["manuel_mauky"],"location":"saxsys","virtual":null,"poster":null,"poster_alt":null,"tags":["junit","testen"]},"fields":{"slug":"/talks/2014-04-02-assertj/","sourceName":"talks"}}},{"node":{"id":"bd5b8775-c069-521b-803e-4a62493c8247","html":"

Seit April ist die neue Version 8 von Java offiziell verfügbar. Dieses Update ist sicherlich das bedeutendste Update\nseit Java 5, da zahlreiche interessante Neuerungen Einzug in die Sprache und das JDK gehalten haben.

\n

Die am meisten diskutierte Neuerung stellt sicherlich die Einführung von Lambda-Ausdrücken dar, mit denen Java nun auch\nfunktionale Eigenschaften bekommt.

\n

Im Vortrag wird Paul Weinhold die praktische Anwendung von Lambdas vorstellen und dabei vor allem auch auf die neue\nStreams-API von Java eingehen, da diese ganz besonders von Lambda-Ausdrücken profitiert.

\n

Paul Weinhold ist Master-Student im Studiengang Informatik an der Hochschule in Görlitz. Daneben arbeitet er als\nWerksstudent bei der Deutschen Bahn AG und setzt dort seit einiger Zeit aktiv die neuen Möglichkeiten von Java 8 ein.

\n

Materialien:

\n","frontmatter":{"title":"Java8 - Streams und Lambdas","date":"2014-07-30T00:00:00.000Z","time":null,"speaker":["paul_weinhold"],"location":"hochschule_obermarkt","virtual":null,"poster":null,"poster_alt":null,"tags":["java","functional-programming"]},"fields":{"slug":"/talks/2014-07-30-java8-streams/","sourceName":"talks"}}},{"node":{"id":"ded25abd-db1f-5b9b-9cd2-8c905bc15ab0","html":"

Solr ist ein mächtiges Werkzeug um strukturierte Dokumente durchsuchbar zu machen. Solr kann als ein Aufsatz für Apache\nLucene verstanden werden und wartet mit zahlreichen Erweiterungen auf.

\n

Unter Anderem kann Solr in einem Apache Tomcat laufen und kommuniziert über HTTP. Dabei können nicht nur mittels HTTP\nGET Suchanfragen auf den indizierten Datenbestand ausgelöst werden, sondern mittels HTTP POST auch neue Dokumente\nhinzugefügt werden.

\n

Dabei können verschiedene Datequellen (Filesystem, Datenbanken, REST-Services, ...) angebunden werden, um den\nDatenbestand des Suchindex zu füllen. Dabei besteht ein großer Vorteil bei den vielen Erweiterung bei der Indizierung\nder Daten. Z.B. Silbentrennung, Wortstammbildung, ...

\n

Zur eigentlichen Suche existiert eine leicht zu erlernende Syntax. Insbesondere lassen sich mehrere Felder der\nstrukturierten Dokumente gleichzeitig abfragen und durch ein Ranking können die Suchergebnisse noch weiter verfeinert\nwerden.

","frontmatter":{"title":"Solr - Eine Enterprise-Suchmaschine","date":"2014-09-24T00:00:00.000Z","time":null,"speaker":["steffen_seidler"],"location":"dser_steinstrasse","virtual":null,"poster":null,"poster_alt":null,"tags":["database"]},"fields":{"slug":"/talks/2014-09-24-solr/","sourceName":"talks"}}},{"node":{"id":"09dfae71-65f1-52de-81a7-e0746238f502","html":"

Hazelcast ist ein vielseitiges Framework zur einfachen Synchronization von Daten, die sich In-Memory innerhalb einer\nApplikation befinden. Damit ist es für Anwendungen gedacht, bei denen eine Synchronization durch eine \"externe\"\nTechnologie wie Datenbanken zu einem erheblichen Performanceverlust führt.

\n

Durch die Verteilung der Daten auf mehrere Knoten ist es ein gutes Mittel zur horizontalen Skalierbarkeit bei\nSynchronität der Daten innerhalb des Clusters. Zusätzlich lässt sich die Verfügbarkeit/Ausfallsicherheit durch die\nHinzunahme weiterer (Backup-)Knoten steigern.

","frontmatter":{"title":"Hazelcast - Synchronisation von In-Memory-Daten","date":"2014-05-28T00:00:00.000Z","time":null,"speaker":["steffen_seidler"],"location":"dser_steinstrasse","virtual":null,"poster":null,"poster_alt":null,"tags":["cluster"]},"fields":{"slug":"/talks/2014-05-28-hazelcast/","sourceName":"talks"}}},{"node":{"id":"5840ef2b-08af-57a6-81b0-7a69c1d1beb0","html":"

Infrastructure as Code is one of the important cornerstones of continuous delivery. The concept that infrastructure\nshould be treated as code is really powerful. Server configuration, services, installed packages, relationships with\nother servers etc...should be modeled as code to be automated and have a predictable outcome, removing manual steps\nprone to errors and decreasing the cycle time.

\n

Spinning up a new virtual environment or a new version of the environment then becomes a matter of executing a script\nthat can create and provision an image or set of images – from the barebone operating system to the complete application\nstack installed and configured.

\n

This concept is increasingly important today when the number of environments and their instances has gone up by orders\nof magnitudes and the release frequency has moved from monthly to weekly or even daily releases.

\n

In this session we will showcase a few popular tools used to implement this concept: Vagrant, Puppet and Docker.

\n

Materialien:

\n","frontmatter":{"title":"Infrastructure as Code","date":"2014-10-29T00:00:00.000Z","time":null,"speaker":["bruno_devic"],"location":"hochschule_obermarkt","virtual":null,"poster":null,"poster_alt":null,"tags":["devops"]},"fields":{"slug":"/talks/2014-10-29-infrastructure_as_code/","sourceName":"talks"}}},{"node":{"id":"2fdb9675-dfcf-55b8-899d-8e6d04242b4a","html":"

Die meisten Softwareentwickler haben irgendwann einmal Model-View-Controller als Design-Pattern gelernt. In der\nPraxis existieren aber viele verschiedene Ansichten darüber, was MVC eigentlich genau bedeutet und wie es implementiert\nwird. Darüber hinaus haben sich mit der Zeit auch neue, eigenständige UI-Design-Patterns entwickelt, die aber oft noch\ngewissen Gemeinsamkeiten mit dem klassischen MVC aufweisen. Dazu gehören z.B. Model-View-Presenter,\nPresentation-Model und Model-View-ViewModel.

\n

In diesem Vortrag soll zum einen ein Überblick über UI-Design-Patterns gegeben werden, zum anderen aber auch ein\ntieferer Eindruck über die tatsächliche Umsetzung und der praktischen Konsequenzen dieser Patterns gegeben werden. Dabei\nsollen weniger UML-Diagramme als viel mehr Code-Beispiele im Vordergrund stehen. Es wird dabei auch auf Aspekte wie\nTestbarkeit, Koppelung und Wiederverwendung eingegangen.

\n

Der Vortragende ist Softwareentwickler bei der Saxonia Systems AG und ist dort vor allem im UI-Bereich tätig. Er hat\nErfahrungen gesammelt mit JavaServer-Faces, HTML(5)+JavaScript sowie im Bereich Desktop-Oberflächen mit JavaFX.\nAktuell arbeitet er als Hauptentwickler an dem OpenSource-Framework MvvmFX,\nwelches Komponenten zur Umsetzung des Design-Patterns Model-View-ViewModel für JavaFX bereitstellt.

\n","frontmatter":{"title":"Model-View-*: UI-Design-Patterns im Detail","date":"2014-12-03T00:00:00.000Z","time":null,"speaker":["manuel_mauky"],"location":"saxsys","virtual":null,"poster":null,"poster_alt":null,"tags":["frontend","patterns"]},"fields":{"slug":"/talks/2014-12-03-model-view-star/","sourceName":"talks"}}},{"node":{"id":"d88d92c2-cf39-5768-b424-1b211f08c8e8","html":"

Es wird immer wichtiger WebAnwendungen überwachen zu können, um Probleme frühzeitig zu erkennen und Gegenmaßnahmen\neinleiten zu können. Hierfür wurde MoSKito geschaffen. Ursprünglich wurde es für Parship entwickelt, aber inzwischen ist\nes in ein eigenständiges Projekt auf GitHub ausgegliedert und steht nun allen Interessierten zur Verfügung.

\n

In dem Vortrag werden wir die einzelnen Komponenten der MoSKito-Toolbox anhand einer simplen Beispiel-Anwendung\nvorstellen. Dazu zählen die Datenerhebung für das Monitoring technischer Auffälligkeiten, die Visualisierung über eine\nintegriertes oder standalone WebUI, zentrale Persistierung zur späteren Auswertung, sowie ein Kontrollzentrum, welches\ndurchaus auch als Wall-Monitor eignet.

\n

Desweiteren werden wir die einfache Integration, sowie Möglichkeiten zur Erweiterung näher beleuchten. Denn in MoSKito\nkann man nicht nur Informationen technischer Natur sammeln, die für Entwickler relevant sind (Verarbeitungszeiten,\nSystemlast, etc.), sondern auch Daten mit Businessvalue (Verkaufszahlen, etc.). So kann MoSKito auch für Management und\nMarketing interessant sein.

","frontmatter":{"title":"MoSKito - Monitoring Framework","date":"2015-01-28T00:00:00.000Z","time":null,"speaker":["steffen_seidler"],"location":"dser_steinstrasse","virtual":null,"poster":null,"poster_alt":null,"tags":["web","monitoring"]},"fields":{"slug":"/talks/2015-01-28-moskito/","sourceName":"talks"}}},{"node":{"id":"d853656a-6dac-5d38-b25a-c241c13cbadb","html":"

Smartphones und Apps sind für viele Menschen mittlerweile unentbehrlich. Nahezu für jeden Aspekt des Alltags und auch in\nder Geschäftswelt gibt es Anwendungen. Bei diesem JUG-Treffen werden wir in einer Praxisveranstaltung den Start eines\nApp-Entwicklungsprojekts mit Android betrachten. Die Veranstaltung richtet sich vor allem auch an\nProgrammier-Einsteiger, die einen Einblick in die Android-App-Entwicklung bekommen wollen.

\n
\n

These days mobile phones and apps are indispensable to people. Nearly for every aspect of life and also in the business\nworld there are applications. In this JUG meeting we will take a look at how to start an app development project in\npractice. The session is especially addressed to programming beginners who like to get started with Android app\ndevelopment.

\n

Materialien:

\n","frontmatter":{"title":"Einstieg in die Android-App-Entwicklung","date":"2015-03-25T00:00:00.000Z","time":null,"speaker":["max_wielsch"],"location":"hochschule_campus","virtual":null,"poster":null,"poster_alt":null,"tags":["android","mobile"]},"fields":{"slug":"/talks/2015-03-25-android/","sourceName":"talks"}}},{"node":{"id":"1faa8cf7-10f9-54d5-a480-6d2e44896011","html":"

Aufbauend auf dem letzten Beitrag der Java User Group Görlitz\n(Einstieg in die Android-App-Entwicklung) soll das Beispiel der Notiz\nApp live weiterentwickelt werden, um Konzepte und deren Umsetzung für die fortgeschrittene Android-Programmierung zu\nzeigen.

\n

Mit dem Ziel, eine testbare und entkoppelte Applikationsarchitektur zu erreichen wird der Einsatz geeigneter Patterns\nund Frameworks diskutiert.

\n

Materialien:

\n","frontmatter":{"title":"Fortgeschrittene Android-Entwicklung","date":"2015-05-27T00:00:00.000Z","time":null,"speaker":["max_wielsch"],"location":"saxsys","virtual":null,"poster":null,"poster_alt":null,"tags":["mobile","android"]},"fields":{"slug":"/talks/2015-05-27-advanced-android/","sourceName":"talks"}}},{"node":{"id":"a3c8bbba-0df8-503b-a702-21589e288614","html":"

Drools ist ein Business-Rules-Mangement-System, mit dem sich Regelbasierte Systeme entwickeln lassen. Dazu stellt es\neine Domainen-Spezifische Sprache zur Verfügung, mit der Regeln definiert und anschließend durch die Rule-Engine\nverarbeitet werden können.

\n

Paul Weinhold ist Student im Masterstudiengang Informatik der Hochschule Zittau/Görlitz. Daneben arbeitet er bei der\nDB-Netz AG und setzt dort u.a. auch Drools ein. Im Vortrag stellt er die Technik vor und gibt einen Einblick anhand\npraktischer Beispiele.

\n

Materialien:

\n","frontmatter":{"title":"Regelbasierte Systeme mit JBoss Drools","date":"2015-07-29T00:00:00.000Z","time":null,"speaker":["paul_weinhold"],"location":"hochschule_obermarkt","virtual":null,"poster":null,"poster_alt":null,"tags":["dsl"]},"fields":{"slug":"/talks/2015-07-29-drools/","sourceName":"talks"}}},{"node":{"id":"eff228ab-8f49-5773-905c-fee144de429f","html":"

Das Framework Guava wurde von Google geschaffen, um eine einheitliche und einfach zu\nhandhabende Lösung für verschiedenste alltäglich wiederkehrende Probleme anzubieten. Insbesondere für die Codebasis von\nGoogle selbst. Dabei wurde großen Wert darauf gelegt ältere JDK-Versionen 5+ (ab Release 12 inzwischen JDK 6+) zu\nunterstützen. Damit ist Guava ein Framework, mit dem sich jeder JAVA-Entwickler näher beschäftigen sollte, um sich die\neigene Arbeit zu erleichtern.

\n

Auch wenn inzwischen einige Features mit JDK 7 (wie bspw. die Klasse Objects) und JDK 8 (wie bspw. Funktionale Ansätze)\nin ähnlicher Form inzwischen auch direkt in JAVA nutzbar sind, lohnt die Verwendung von Guava immernoch. Zudem ist Guava\nnicht als Konkurrenz zu Lösungen des JDKs oder ähnlicher Libaries wie Apache Commons zu verstehen, sondern als\nsymbiotische Ergänzung.

\n

Zu einer solchen Ergänzung zählt definitiv die umfangreiche Erweiterung der JDK-Collection-Vielfalt um viele weitere\nnützliche Typen zu den Vozügen von Guava. Insbesondere kann der spezielle Ansatz bei deren Verarbeitung immernoch\nVorteile gegenüber Streams bieten. Andersherum lassen viele Dinge in Guava mit Lambdas inzwischen noch komfortabler\nbedienen.

\n

In dem Vortrag wird ein Überblick über die zahlreichen Möglichkeiten von Guava gegeben. Auch unter dem Gesichtspunkt der\nneuen Möglichkeiten unter JDK 7/8. Die genannte Collection-Erweiterung ist dabei nur ein Bruchteil dessen was Guava\nbietet. (Object- und StringUtils, Orderings, Comparisons, Preconditions, ExceptionHandler, neue Collections und ihr\nHandling, Funktionale Ansätze, Ranges, ReflectionUtils)

","frontmatter":{"title":"Guava","date":"2015-09-30T00:00:00.000Z","time":null,"speaker":["steffen_seidler"],"location":"dser_elisabethstrasse","virtual":null,"poster":null,"poster_alt":null,"tags":["java"]},"fields":{"slug":"/talks/2015-09-30-guava/","sourceName":"talks"}}},{"node":{"id":"43538367-514c-5009-b9eb-0f730f52bfd9","html":"

JavaFX ist die neue Java-Technologie im Desktop-Bereich und somit die Ablösung von Swing. Damit ist es möglich\nJava-Anwendungen für Desktop, Browser und mobile Geräte zu entwickeln. Allerdings bietet Oracle keinen direkten Support\nfür mobile Endgeräte an, sondern überlässt dies der Community.

\n

In dem Vortrag geht es um den Aktuellen Stand der Entwicklung in diesem Bereich. Was muss gemacht werden, um eine\nJavaFX-Anwendung auf einem Smartphone zum laufen zu bekommen und welche Grenzen hat dieser Ansatz für die Entwicklung\nvon mobilen Anwendungen mit JavaFX.

\n

Einen weiteren Ansatz verfolgt die Firma Gluon zum Erstellen von mobilen Anwendungen auf JavaFX.\nEine gemeinsame Code-Basis für IOS- und Android-Anwendungen basierend auf JavaFX. Was derzeit damit möglich ist wird\nebenfalls Inhalt des Vortrages sein.

\n

Abschließend wird unser Ansatz für mobile Anwendungen in JavaFX vorgestellt. Mittels des MVVM-Pattern in Kombination mit\nJavaFX-Ports. Vorgestellt wird der aktuelle Entwicklungsstand mit einer offenen Diskussion über Vor- und Nachteile des\nAnsatzes.

\n

Materialien:

\n","frontmatter":{"title":"JavaFX auf Mobile","date":"2015-11-25T00:00:00.000Z","time":null,"speaker":["stefan_heinze","stefan_barth"],"location":"saxsys","virtual":null,"poster":null,"poster_alt":null,"tags":["frontend","javafx","mobile","android"]},"fields":{"slug":"/talks/2015-11-25-javafx-mobile/","sourceName":"talks"}}},{"node":{"id":"79835d68-651b-57a2-8c75-042baeba5b30","html":"

Mit Java 8 wurden einige Features in die Sprache integriert, die von funktionaler Programmierung inspiriert sind. Im\nVortrag Java 8: Lambdas und Streams im Juli 2014 hat Paul uns die\ntechnischen Möglichkeiten dazu bereits vorgestellt. Doch ist Java damit nun auch eine Funktionale Sprache? Gibt es\nüberhaupt noch Gründe, andere funktionale Sprachen zu beachten?

\n

In diesem Vortrag möchten wir tiefer in die Materie der funktionalen Programmierung eintauchen und die Konzepte dieses\nParadigmas betrachten. Wir werden sehen, wie Java-Programmierer von funktionalen Konzepten profitieren können. Dabei\ngehen wir unter anderem auf Dinge wie Rekursion, Pure Funktionen, Immutable Datenstrukturen, Monaden und\nFunktionskomposition ein.

\n

Wir werden aber auch zeigen, wo die Grenzen von Java liegen und warum wir der Meinung sind, dass Java letztlich doch\nkeine wirklich funktionale Sprache ist und weshalb wir unbedingt empfehlen, sich mit funktionalen Sprachen zu\nbeschäftigen. In diesem Sinne werden wir beim darauf folgenden JUG-Treffen die funktionale Sprache \"Haskell\" vorstellen\nund dabei viele der hier vorgestellten Konzepte wiederfinden. Außerdem werden wir die Haskell-Variante \"Frege\"\nbesprechen, die auch auf der JVM läuft.

\n

Materialien:

\n\n

Links:

\n","frontmatter":{"title":"Funktionale Programmierung mit Java","date":"2016-01-27T00:00:00.000Z","time":null,"speaker":["manuel_mauky","max_wielsch"],"location":"hochschule_campus","virtual":null,"poster":{"childImageSharp":{"id":"627917ce-c50f-59e9-98d8-4897b4f220c5","gatsbyImageData":{"layout":"fullWidth","backgroundColor":"#d86838","images":{"fallback":{"src":"/static/1c76b19b6896e55dd13bb48cd2313b20/b6707/plakat_2016_01.png","srcSet":"/static/1c76b19b6896e55dd13bb48cd2313b20/0e3b9/plakat_2016_01.png 750w,\n/static/1c76b19b6896e55dd13bb48cd2313b20/7aaf4/plakat_2016_01.png 1080w,\n/static/1c76b19b6896e55dd13bb48cd2313b20/006ba/plakat_2016_01.png 1366w,\n/static/1c76b19b6896e55dd13bb48cd2313b20/b6707/plakat_2016_01.png 1920w","sizes":"100vw"},"sources":[{"srcSet":"/static/1c76b19b6896e55dd13bb48cd2313b20/ebc34/plakat_2016_01.webp 750w,\n/static/1c76b19b6896e55dd13bb48cd2313b20/47da9/plakat_2016_01.webp 1080w,\n/static/1c76b19b6896e55dd13bb48cd2313b20/659f9/plakat_2016_01.webp 1366w,\n/static/1c76b19b6896e55dd13bb48cd2313b20/c86cf/plakat_2016_01.webp 1920w","type":"image/webp","sizes":"100vw"}]},"width":1,"height":1.4145833333333333}}},"poster_alt":"Poster: Jürgen trägt einen Anzug und grinst. Er hält eine Tasse Kaffee in der Hand. Auf der Tasse ist das griechische Zeichen Lambda zu sehen.","tags":["java","functional-programming"]},"fields":{"slug":"/talks/2016-01-27-functional_java/","sourceName":"talks"}}},{"node":{"id":"7d996009-4040-5330-a46c-5877cc5668af","html":"

Haskell ist eine funktionale Programmiersprache, die das Paradigma der funktionalen Programmierung so konsequent\numsetzt, wie kaum eine andere Sprache. Beispielsweise sind Funktionen in Haskell standardmäßig \"pure\", können also keine\nSeiteneffekte besitzen, was durch das statische Typ-System sichergestellt wird. Eine weitere Eigenschaft, die Haskell\nvon den meisten anderen Sprachen unterscheidet, ist die nicht-strikte Auswertung von Ausdrücken, was im allgemeinen\ndurch Lazy-Evaluation umgesetzt wird. Dadurch kann Haskell beispielsweise ohne weiteres mit unendlichen Listen umgehen,\nohne dafür besondere Sprachkonstrukte zu benötigen.

\n

Haskell selbst läuft nicht auf der Java-VM, allerdings existiert mit der Programmiersprache \"Frege\" eine\nHaskell-Variante, die zu Java-Sourcecode kompiliert. Damit steht nun auch auf der JVM eine rein funktionale Sprache\nbereit.

","frontmatter":{"title":"Haskell und Frege","date":"2016-03-30T00:00:00.000Z","time":null,"speaker":["manuel_mauky"],"location":"hochschule_campus","virtual":null,"poster":{"childImageSharp":{"id":"5c9d56a7-72a3-5960-83a9-42dc599be063","gatsbyImageData":{"layout":"fullWidth","backgroundColor":"#588888","images":{"fallback":{"src":"/static/64acc764c3779735c4ad382e9f9c0e6e/5ffd7/plakat_2016_03.png","srcSet":"/static/64acc764c3779735c4ad382e9f9c0e6e/5ffd7/plakat_2016_03.png 744w","sizes":"100vw"},"sources":[{"srcSet":"/static/64acc764c3779735c4ad382e9f9c0e6e/874d1/plakat_2016_03.webp 744w","type":"image/webp","sizes":"100vw"}]},"width":1,"height":1.4139784946236558}}},"poster_alt":"Poster: Jürgen sitzt auf einem Sessel und liest ein Buch. Er trägt eine Lese-Brille und schaut konzentriert aus. Auf dem Buch ist das Haskell-Logo, ein Lambda-Symbol, zusehen","tags":["programmiersprachen","functional-programming","non-jvm-language"]},"fields":{"slug":"/talks/2016-03-30-haskell_frege/","sourceName":"talks"}}},{"node":{"id":"4dc84ec4-23f6-5438-a2e6-b5944dc868c9","html":"

In vielen Software-Projekten wissen häufig nicht nur Anwender sondern auch Entwickler nicht, warum sich ihre Anwendung\nverhält wie sie sich eben verhält. Wieso ist meine Anwendung so langsam? An Performance-Tests wurde während der\nEntwicklung nicht gespart. Was kann also das Problem sein? Abhilfe kann in solchen Fällen ein Application Performance\nManagement Werkzeug schaffen, wie beispielsweise das Open Source-Werkzeug inspectIT.

\n

inspectIT ist ein leistungsstarkes Werkzeug, dass dazu dient, die Leistung von Software-Anwendungen sowohl zu überwachen\nals auch zu analysieren. Mithilfe verschiedener Sensoren erfasst inspectIT Informationen über Abfragen des Endnutzers\nund die Verarbeitung im Business-Layer bis hin zum Backend. Mit der Nutzung von inspectIT sind Informationen über die\nSoftware-Anwendung verfügbar, um jedes potenzielle Funktions-, Leistungs- oder Zuverlässigkeitsproblem mühelos\nanalysieren zu können. Dieser Vortrag wird das Open Source Projekt inspectIT vorstellen und einen einfachen Einstieg in\ndie Performance-Analyse mit inspectIT bieten.

\n

Website: http://inspectit.rocks

\n

Git: https://github.com/inspectIT/inspectIT

\n

Dokumentation:\nhttps://inspectit-performance.atlassian.net/wiki/display/HOME/inspectIT+Home

","frontmatter":{"title":"Performance-Analyse mit inspectIT","date":"2016-05-25T00:00:00.000Z","time":null,"speaker":["mario_mann"],"location":"saxsys","virtual":null,"poster":{"childImageSharp":{"id":"34708531-529f-5d8b-9a4f-7e69705d60db","gatsbyImageData":{"layout":"fullWidth","backgroundColor":"#880818","images":{"fallback":{"src":"/static/db7f178be40d0c331569338538d31bac/5ffd7/plakat_2016_05.png","srcSet":"/static/db7f178be40d0c331569338538d31bac/5ffd7/plakat_2016_05.png 744w","sizes":"100vw"},"sources":[{"srcSet":"/static/db7f178be40d0c331569338538d31bac/874d1/plakat_2016_05.webp 744w","type":"image/webp","sizes":"100vw"}]},"width":1,"height":1.4139784946236558}}},"poster_alt":"Poster: Jürgen hält sich eine Lupe vor das Gesicht. In der Lupe erscheint sein Auge vergrößert.","tags":["performance","monitoring"]},"fields":{"slug":"/talks/2016-05-25-performance-analyse-inspectit/","sourceName":"talks"}}},{"node":{"id":"e14cd50a-435a-5855-ae06-c0d1eb30d8af","html":"

Softwareentwicklungsprojekte leben vom Einsatz von modernen Werkzeugen, die die Projektbeteiligten bei ihrer Arbeit\nunterstützen. JavaFX-Entwicklungsprojekte haben hier eine besondere Herausforderung. Die „neue“ Technologie stellt eine\nHerausforderung an die Testwerkzeuge, speziell an die Werkzeuge zur Testautomatisierung. Viele Hersteller werben mit\nJavaFX-Unterstützung, aber nicht immer wird JavaFX vollständig unterstützt.

\n

Der Vortrag geht den Fragen nach:

\n
    \n
  • Welche Kategorien von Testwerkzeugen für JavaFX gibt es?
  • \n
  • Welche Unterschiede gibt es zwischen den Testwerkzeugen?
  • \n
  • Wie werden die Testwerkzeuge in meine Toolkette eingebunden?
  • \n
","frontmatter":{"title":"Testwerkzeuge für JavaFX","date":"2016-07-27T00:00:00.000Z","time":null,"speaker":["kay_grebenstein"],"location":"hochschule_obermarkt","virtual":null,"poster":null,"poster_alt":null,"tags":["javafx","testen"]},"fields":{"slug":"/talks/2016-07-27-testwerkzeuge_javafx/","sourceName":"talks"}}},{"node":{"id":"a4cfc466-b5f6-5b10-be7e-13c92d3ab2f7","html":"

Im Vortrag von Daniel Sernow wird die Kommunikation in Software-Projekten und mit den Projekt-Partnern thematisiert. Er\nwird uns an seinen Erfahrungen und Erkenntnissen aus langjähriger Praxis im Projektgeschäft teilhaben lassen. Für\nEntwickler dürfte dabei vor allem auch die Perspektive der Qualitätssicherung interessante neue Einblicke bereithalten.

\n

Eine Besonderheit: Wir werden eine neuen Veranstaltungsort einweihen - siehe unten.

","frontmatter":{"title":"Kommunikationskultur im Softwareentwicklungsprozess","date":"2016-09-21T00:00:00.000Z","time":null,"speaker":["daniel_sernow"],"location":"sqs","virtual":null,"poster":{"childImageSharp":{"id":"d76f475f-a8c8-5319-96d2-a1474885f516","gatsbyImageData":{"layout":"fullWidth","backgroundColor":"#788818","images":{"fallback":{"src":"/static/614b8174b903933ed9c7392c29039be7/b6707/plakat_2016_09.png","srcSet":"/static/614b8174b903933ed9c7392c29039be7/0e3b9/plakat_2016_09.png 750w,\n/static/614b8174b903933ed9c7392c29039be7/7aaf4/plakat_2016_09.png 1080w,\n/static/614b8174b903933ed9c7392c29039be7/006ba/plakat_2016_09.png 1366w,\n/static/614b8174b903933ed9c7392c29039be7/b6707/plakat_2016_09.png 1920w","sizes":"100vw"},"sources":[{"srcSet":"/static/614b8174b903933ed9c7392c29039be7/ebc34/plakat_2016_09.webp 750w,\n/static/614b8174b903933ed9c7392c29039be7/47da9/plakat_2016_09.webp 1080w,\n/static/614b8174b903933ed9c7392c29039be7/659f9/plakat_2016_09.webp 1366w,\n/static/614b8174b903933ed9c7392c29039be7/c86cf/plakat_2016_09.webp 1920w","type":"image/webp","sizes":"100vw"}]},"width":1,"height":1.4145833333333333}}},"poster_alt":"Poster: Jürgen benutzt ein uraltes Telefon mit separatem Hörer und Mikrofon. Er hält sich den kabelgebundenen Hörer ans Ohr und hält das Mikrofon vor sich in der Hand","tags":["testen","softwareentwicklung"]},"fields":{"slug":"/talks/2016-09-21-kommunikationskultur/","sourceName":"talks"}}},{"node":{"id":"cf0f1947-1449-5df5-b546-aa31d25046a7","html":"

Unit Testing in Java - dafür ist JUnit das Werkzeug der Wahl. Die letzte Version JUnit 4 tat dabei viele Jahre ihre\nDienste und wurde kontinuierlich weiterentwickelt, stieß allerdings nun doch an ihre Grenzen. Der Nachfolger JUnit 5 ist\neine komplette Neuentwicklung und steht kurz vor dem Release. Wir wollen uns ansehen, welche Neuerungen JUnit 5 mit sich\nbringt und was es beim Umstieg zu beachten gilt.

\n

Materialien:

\n","frontmatter":{"title":"JUnit 5","date":"2017-01-25T00:00:00.000Z","time":null,"speaker":["stefan_bley"],"location":"hochschule_campus","virtual":null,"poster":{"childImageSharp":{"id":"389f1a05-558e-58a8-a8f2-8f0f783fbb5f","gatsbyImageData":{"layout":"fullWidth","backgroundColor":"#3868c8","images":{"fallback":{"src":"/static/c46109cdd380f6d96989746b9b268b59/84817/plakat_2017_01.png","srcSet":"/static/c46109cdd380f6d96989746b9b268b59/0e3b9/plakat_2017_01.png 750w,\n/static/c46109cdd380f6d96989746b9b268b59/e5839/plakat_2017_01.png 1080w,\n/static/c46109cdd380f6d96989746b9b268b59/006ba/plakat_2017_01.png 1366w,\n/static/c46109cdd380f6d96989746b9b268b59/84817/plakat_2017_01.png 1920w","sizes":"100vw"},"sources":[{"srcSet":"/static/c46109cdd380f6d96989746b9b268b59/ebc34/plakat_2017_01.webp 750w,\n/static/c46109cdd380f6d96989746b9b268b59/0671f/plakat_2017_01.webp 1080w,\n/static/c46109cdd380f6d96989746b9b268b59/659f9/plakat_2017_01.webp 1366w,\n/static/c46109cdd380f6d96989746b9b268b59/e2c0d/plakat_2017_01.webp 1920w","type":"image/webp","sizes":"100vw"}]},"width":1,"height":1.4140625}}},"poster_alt":"Poster: Jürgen trägt einen roten Bauarbeiter-Helm zu seinem Anzug. In der Hand hält er ein Klemmbrett mit dem Logo von JUnit 5 darauf","tags":["testen","junit"]},"fields":{"slug":"/talks/2017-01-25-junit5/","sourceName":"talks"}}},{"node":{"id":"c67796c2-6477-5658-a163-1de4870f548e","html":"

Wie funktioniert die virtuelle Maschine? Wo kommt der Just-in-Time-Compiler ins Spiel und was hat es mit InvokeDynamic\nauf sich? Diese und weitere Fragen beantwortet Michael Wiedeking bei einem Blick unter die Haube der Java Virtual\nMachine.

","frontmatter":{"title":"Inside JVM","date":"2016-11-30T00:00:00.000Z","time":null,"speaker":["michael_wiedeking"],"location":"saxsys","virtual":null,"poster":{"childImageSharp":{"id":"d5ac0466-71cb-5950-ad4c-692645dec780","gatsbyImageData":{"layout":"fullWidth","backgroundColor":"#185818","images":{"fallback":{"src":"/static/df12c15a6674e50adc8ef8427b49c6e7/84817/plakat_2016_11.png","srcSet":"/static/df12c15a6674e50adc8ef8427b49c6e7/0e3b9/plakat_2016_11.png 750w,\n/static/df12c15a6674e50adc8ef8427b49c6e7/e5839/plakat_2016_11.png 1080w,\n/static/df12c15a6674e50adc8ef8427b49c6e7/006ba/plakat_2016_11.png 1366w,\n/static/df12c15a6674e50adc8ef8427b49c6e7/84817/plakat_2016_11.png 1920w","sizes":"100vw"},"sources":[{"srcSet":"/static/df12c15a6674e50adc8ef8427b49c6e7/ebc34/plakat_2016_11.webp 750w,\n/static/df12c15a6674e50adc8ef8427b49c6e7/0671f/plakat_2016_11.webp 1080w,\n/static/df12c15a6674e50adc8ef8427b49c6e7/659f9/plakat_2016_11.webp 1366w,\n/static/df12c15a6674e50adc8ef8427b49c6e7/e2c0d/plakat_2016_11.webp 1920w","type":"image/webp","sizes":"100vw"}]},"width":1,"height":1.4140625}}},"poster_alt":"Poster: Jürgen grinst und trägt eine Weihnachtsmütze zu seinem üblichen Anzug. Er hält einen Teller mit Keksen vor sich.","tags":["java","jvm"]},"fields":{"slug":"/talks/2016-11-30-inside_jvm/","sourceName":"talks"}}},{"node":{"id":"f009504d-3327-52e9-8948-6cd4d3ba952e","html":"

CSS ist verwirrend, entbehrt jeglicher Logik und rendert mein HTML völlig willkürlich. Ziel von CSS ist es, den Alltag\neines Webentwicklers möglichst qualvoll zu gestalten. FALSCH Mit Live-Coding gehen wir CSS auf den Grund und werden\neinige Aha-Effekte erzielen. Dafür erklären wir Grundlagen, welche vielen Entwicklern unbekannt sind, und zeigen den\nMehrwert von Präprozessoren. Um euch dann vollends von CSS zu überzeugen, haben wir als Special Guest CSS3 eingeladen.\nDa wird selbst JavaScript blass vor Neid.

","frontmatter":{"title":"CSS, Aha-Effekte und Perspektiven","date":"2017-02-22T00:00:00.000Z","time":null,"speaker":["uwe_manteuffel"],"location":"hochschule_obermarkt","virtual":null,"poster":{"childImageSharp":{"id":"f98f07d3-05f0-5b44-a8c4-f59df52e978d","gatsbyImageData":{"layout":"fullWidth","backgroundColor":"#087868","images":{"fallback":{"src":"/static/17a163b60d0c34cbe1f0cc72f8380225/84817/plakat_2017_02.png","srcSet":"/static/17a163b60d0c34cbe1f0cc72f8380225/0e3b9/plakat_2017_02.png 750w,\n/static/17a163b60d0c34cbe1f0cc72f8380225/e5839/plakat_2017_02.png 1080w,\n/static/17a163b60d0c34cbe1f0cc72f8380225/006ba/plakat_2017_02.png 1366w,\n/static/17a163b60d0c34cbe1f0cc72f8380225/84817/plakat_2017_02.png 1920w","sizes":"100vw"},"sources":[{"srcSet":"/static/17a163b60d0c34cbe1f0cc72f8380225/ebc34/plakat_2017_02.webp 750w,\n/static/17a163b60d0c34cbe1f0cc72f8380225/0671f/plakat_2017_02.webp 1080w,\n/static/17a163b60d0c34cbe1f0cc72f8380225/659f9/plakat_2017_02.webp 1366w,\n/static/17a163b60d0c34cbe1f0cc72f8380225/e2c0d/plakat_2017_02.webp 1920w","type":"image/webp","sizes":"100vw"}]},"width":1,"height":1.4140625}}},"poster_alt":"Poster: Jürgen trägt eine Künstler-Mütze zu seinem Anzug. In der Hand hält er eine Maler-Palette und einen Pinsel.","tags":["frontend","web"]},"fields":{"slug":"/talks/2017-02-22-css/","sourceName":"talks"}}},{"node":{"id":"d7528a15-3b10-587c-9543-5c372945763a","html":"

Mit Angular bietet Google ein komponenten-basiertes Webframework an, welches den Anspruch erhebt, die Anforderungen an\nzeitgemäße Softwareentwicklung ganzheitlich zu unterstützen.

\n

Seit dem Release von Angular 2 war es für gestandene Java Entwickler noch nie so einfach in die Webentwicklung\neinzusteigen. Mit Klassen, Dependency Injection, Annotations und Data-Binding bietet Angular dem versierten Desktop\nEntwickler ein vertrautes Umfeld, in dem man sich schnell zurecht findet.

\n

In dieser Veranstaltung möchte ich am lebenden Beispiel zeigen, wie es sich heutzutage anfühlt eine Webanwendung,\nkonkret mit Angular 2, zu erstellen.

\n

Materialien:

\n","frontmatter":{"title":"Angular 2 für Java Entwickler","date":"2017-03-22T00:00:00.000Z","time":null,"speaker":["sven_hoffmann"],"location":"hochschule_campus","virtual":null,"poster":{"childImageSharp":{"id":"eddd4dc5-4156-509b-bf5c-e09b0c5c330e","gatsbyImageData":{"layout":"fullWidth","backgroundColor":"#084858","images":{"fallback":{"src":"/static/402904640aadf345c0f4e136c31ec42a/84817/plakat_2017_03.png","srcSet":"/static/402904640aadf345c0f4e136c31ec42a/0e3b9/plakat_2017_03.png 750w,\n/static/402904640aadf345c0f4e136c31ec42a/e5839/plakat_2017_03.png 1080w,\n/static/402904640aadf345c0f4e136c31ec42a/006ba/plakat_2017_03.png 1366w,\n/static/402904640aadf345c0f4e136c31ec42a/84817/plakat_2017_03.png 1920w","sizes":"100vw"},"sources":[{"srcSet":"/static/402904640aadf345c0f4e136c31ec42a/ebc34/plakat_2017_03.webp 750w,\n/static/402904640aadf345c0f4e136c31ec42a/0671f/plakat_2017_03.webp 1080w,\n/static/402904640aadf345c0f4e136c31ec42a/659f9/plakat_2017_03.webp 1366w,\n/static/402904640aadf345c0f4e136c31ec42a/e2c0d/plakat_2017_03.webp 1920w","type":"image/webp","sizes":"100vw"}]},"width":1,"height":1.4140625}}},"poster_alt":"Poster: Jürgen schaut ernst. Er trägt ein Schwert in der Hand und ein Schild mit dem einem großen A darauf. Das Schild ist eine Referenz auf das Angular-Logo, welches ebenfalls wie ein Schild aussieht.","tags":["frontend","web","javascript"]},"fields":{"slug":"/talks/2017-03-22-angular/","sourceName":"talks"}}},{"node":{"id":"9ba71f6c-f0dd-5c4e-b70f-3d7ac1ec19ca","html":"

Nach der Ausdehnung vom JDK 9 Feature-Complete-Status, begann die Fehlerbereinigung, mit allen notwendigen Vorarbeiten,\num den finalen Release-Candidate für das JDK 9 bereitzustellen. Der Schwerpunkt vom JDK 9 liegt bei der neuen\nPlattformmodularisierung mit dem Projekt Jigsaw. Über die JDK-Enhancement-Vorschläge JEP 200 (Modulares JDK), JEP 201\n(Modularer Source-Code) und JEP 220 (Modulare Laufzeit-Images) gelangen die technischen Vorschläge ins JDK 9. Der JSR\n376 (Java Platform Module System) schafft die Grundlage für die Referenzimplementierung vom OpenJDK Projekt Jigsaw.\nDiese Veränderungen lassen es zu, mit dem JDK 9 die gewünschte technische Paketierung von ausgewählter\nJava-Funktionalität selbst zu bestimmen. Das Projekt Jigsaw hat die primäre Aufgabe, das Design und die Implementierung\neines Standard-Modulsystems für die Java-Plattform und für das JDK 9 bereitzustellen. Dabei soll die durchgängige,\ndynamische und einfache Anpassbarkeit der Java-SE-Plattform & dem JDK, auch für kleine Endgeräte berücksichtigt werden,\nsowie die Verbesserung von Sicherheit und Wartbarkeit von Java-SE-Plattform-Implementierungen, speziell vom JDK,\nverwirklicht werden. Im Vortrag werden Demo-Beispiele gezeigt, die eine Erstellung von individueller Java Runtime mit\nAnwendung anhand der JDK 9-Werkzeuge verdeutlichen. Die geplante Verfügbarkeit vom JDK 9 ist für Ende Juli 2017\nvorgesehen.

\n

Materialien:

\n","frontmatter":{"title":"JDK 9","date":"2017-04-25T00:00:00.000Z","time":null,"speaker":["wolfgang_weigend"],"location":"saxsys","virtual":null,"poster":{"childImageSharp":{"id":"2573407c-9387-55d4-81ac-f02dffdbfe14","gatsbyImageData":{"layout":"fullWidth","backgroundColor":"#38a838","images":{"fallback":{"src":"/static/68885bd1bc71b7c02926be143e289b72/84817/plakat_2017_04.png","srcSet":"/static/68885bd1bc71b7c02926be143e289b72/0e3b9/plakat_2017_04.png 750w,\n/static/68885bd1bc71b7c02926be143e289b72/e5839/plakat_2017_04.png 1080w,\n/static/68885bd1bc71b7c02926be143e289b72/006ba/plakat_2017_04.png 1366w,\n/static/68885bd1bc71b7c02926be143e289b72/84817/plakat_2017_04.png 1920w","sizes":"100vw"},"sources":[{"srcSet":"/static/68885bd1bc71b7c02926be143e289b72/ebc34/plakat_2017_04.webp 750w,\n/static/68885bd1bc71b7c02926be143e289b72/0671f/plakat_2017_04.webp 1080w,\n/static/68885bd1bc71b7c02926be143e289b72/659f9/plakat_2017_04.webp 1366w,\n/static/68885bd1bc71b7c02926be143e289b72/e2c0d/plakat_2017_04.webp 1920w","type":"image/webp","sizes":"100vw"}]},"width":1,"height":1.4140625}}},"poster_alt":"Poster: Jürgen sitzt am Tisch vor einem Puzzle. Er überlegt, wo er das nächste Puzzle-Teil einsetzen soll. Man erkennt bereits, dass das Puzzle ein Java-Duke darstellt, das Maskottchen von Java.","tags":["java","jdk"]},"fields":{"slug":"/talks/2017-04-26-jdk9/","sourceName":"talks"}}},{"node":{"id":"29eb8b61-615f-5f82-afc0-25abdc540af7","html":"

Amazon Alexa ist eine Smart-Home-Technologie, die vor allem als Lösung für Spracherkennung bekannt ist. Für Entwickler\nist dabei vor allem die Möglichkeit interessant, eigene Anwendungen mit Spracherkennung erstellen zu können.

\n

Andre und Maik beleuchten in ihrem Vortrag die Theorie hinter Spracherkennung und zeigen am Beispiel von Amazon Alexa,\nwie damit Anwendungen gebaut werden können.

","frontmatter":{"title":"Spracherkennung mit Amazon Alexa","date":"2017-08-30T00:00:00.000Z","time":null,"speaker":["andre_tepper","maik_wagner"],"location":"dser_elisabethstrasse","virtual":null,"poster":null,"poster_alt":null,"tags":["ki"]},"fields":{"slug":"/talks/2017-08-30-alexa/","sourceName":"talks"}}},{"node":{"id":"fd607630-d7dd-503a-8da0-25a963df4df3","html":"

Kaum haben wir uns von dem klassischen Monolithen und der zugehörigen Ablaufumgebung namens Application Server,\nzugunsten von Microservices und Embedded Runtimes, verabschiedet, taucht am Horizont mit Serverless Applications bzw.\nArchitectures schon die nächste Evolutionsstufe auf. Was bitte ist das jetzt schon wieder? Und wer braucht so etwas? Die\nSession zeigt, wie sich dank BaaS, FaaS und einiger anderer Akronyme, Mobile und Enterpriese Anwendungen implementieren\nlassen - ganz ohne Server! Ganz ohne? Naja, fast.

\n

Materialien:

\n\n
\n

Bei bei diesem Treffen verlosen wir unter den Teilnehmern ein Tutorial von\nhttps://tutorials.entwickler.de/. Mit freundlicher Unterstützung durch Software &\nSupport Media GmbH.

","frontmatter":{"title":"Serverless Application - Who the heck needs a Server?","date":"2017-10-25T00:00:00.000Z","time":null,"speaker":["lars_roewekamp"],"location":"hochschule_campus","virtual":null,"poster":{"childImageSharp":{"id":"754076b2-57c3-5796-89f2-711200e78c58","gatsbyImageData":{"layout":"fullWidth","backgroundColor":"#389858","images":{"fallback":{"src":"/static/2d68f12104a5e2d317ff8ac24a6467cc/b2ce9/plakat_2017_10.png","srcSet":"/static/2d68f12104a5e2d317ff8ac24a6467cc/b2ce9/plakat_2017_10.png 661w","sizes":"100vw"},"sources":[{"srcSet":"/static/2d68f12104a5e2d317ff8ac24a6467cc/fa5c8/plakat_2017_10.webp 661w","type":"image/webp","sizes":"100vw"}]},"width":1,"height":1.4145234493192134}}},"poster_alt":"Poster: Jürgen grinst und hält eine Tasse Kaffee in der Hand.","tags":["architektur","serverless"]},"fields":{"slug":"/talks/2017-10-25-serverless/","sourceName":"talks"}}},{"node":{"id":"935f30df-c07e-5cfa-9188-3564b4e0fab7","html":"

React ist eine von Facebook entwickelte JavaScript-Bibliothek zur Entwicklung von UI-Komponenten. Dabei macht React\neiniges anders als andere Web-Frameworks, beispielsweise der Verzicht auf Templates und die Limitierung auf\nunidirektionalen Datenfluss. Interessant ist auch der vollständig deklarative Ansatz, der es u.a. ermöglicht,\nUI-Komponenten als Funktionen zu entwickeln.

\n

React ist aber nicht auf den Browser beschränkt: Mit React-Native können darüber hinaus auf die gleiche Art und Weise\nauch native Mobile-Apps entwickelt werden. Aber anders die meisten HTML5-Hybrid-Frameworks ist bei React-Native kein\nHTML im Spiel. Stattdessen werden tatsächlich native UI-Controls gerendert.

\n

In diesem Vortrag möchte ich React und auch React-Native vorstellen und mittels Live-Coding einen Eindruck von dem\nFramework vermitteln. Dabei möchte ich aber auch auf die Ansätze aus der funktionalen Programmierung eingehen, die React\nmeines Erachtens so besonders machen.

","frontmatter":{"title":"React und React-Native: Functional UI Development für Browser und mobile Endgeräte","date":"2017-05-31T00:00:00.000Z","time":null,"speaker":["manuel_mauky"],"location":"hochschule_campus","virtual":null,"poster":{"childImageSharp":{"id":"6b8717ce-a995-58f6-82e5-62fb5ef3cca9","gatsbyImageData":{"layout":"fullWidth","backgroundColor":"#58c8d8","images":{"fallback":{"src":"/static/fa2d3177d3e90a7f1a2b98a6f02b90b5/a2ae3/plakat_2017_05.png","srcSet":"/static/fa2d3177d3e90a7f1a2b98a6f02b90b5/f1722/plakat_2017_05.png 750w,\n/static/fa2d3177d3e90a7f1a2b98a6f02b90b5/3e58d/plakat_2017_05.png 1080w,\n/static/fa2d3177d3e90a7f1a2b98a6f02b90b5/8b6fa/plakat_2017_05.png 1366w,\n/static/fa2d3177d3e90a7f1a2b98a6f02b90b5/a2ae3/plakat_2017_05.png 1920w","sizes":"100vw"},"sources":[{"srcSet":"/static/fa2d3177d3e90a7f1a2b98a6f02b90b5/55786/plakat_2017_05.webp 750w,\n/static/fa2d3177d3e90a7f1a2b98a6f02b90b5/8631a/plakat_2017_05.webp 1080w,\n/static/fa2d3177d3e90a7f1a2b98a6f02b90b5/9b1f9/plakat_2017_05.webp 1366w,\n/static/fa2d3177d3e90a7f1a2b98a6f02b90b5/fc882/plakat_2017_05.webp 1920w","type":"image/webp","sizes":"100vw"}]},"width":1,"height":1.4119791666666668}}},"poster_alt":"Poster: Jürgen hält einen Kasten in der Hand, welcher oben und unten Trichter-Öffnungen besitzt. In den oberen Trichter gibt er zwei Dokumente hinein, während beim unteren Trichter das Bild einer Webseite herausfällt. Auf der Box ist das Logo von React zu sehen.","tags":["frontend","javascript","web","mobile","functional-programming"]},"fields":{"slug":"/talks/2017-05-31-react/","sourceName":"talks"}}},{"node":{"id":"92f30cfa-20d5-5aba-8db4-e6e1de091225","html":"

Im letzten Jahr waren die Panama Papers in aller Munde, die Journalisten der Süddeutschen Zeitung und des ICIJ\nuntersuchten und publizierten die breite Nutzung von Briefkastenfirmen durch Politiker, Geschäftsleute, Banken usw. Für\ndie Untersuchung des größten Leaks einer Geldwäschefirma wurde unter anderem auch Neo4j genutzt. Heute werde ich\ndemonstrieren, wie solche Daten in einem Graph modelliert, importiert und abgefragt werden können. Da die Informationen\nöffentlich verfügbar sind, kann jetzt jeder zum Journalisten werden.

","frontmatter":{"title":"Neo4j: Panama Papers","date":"2017-11-29T00:00:00.000Z","time":null,"speaker":["michael_hunger"],"location":"sqs","virtual":null,"poster":{"childImageSharp":{"id":"0d8148d9-9587-5da3-aaf0-f92c5603d344","gatsbyImageData":{"layout":"fullWidth","backgroundColor":"#587828","images":{"fallback":{"src":"/static/b722dd1b2e5bde00c9706fb3bb19bd30/84817/plakat_2017_11.png","srcSet":"/static/b722dd1b2e5bde00c9706fb3bb19bd30/0e3b9/plakat_2017_11.png 750w,\n/static/b722dd1b2e5bde00c9706fb3bb19bd30/e5839/plakat_2017_11.png 1080w,\n/static/b722dd1b2e5bde00c9706fb3bb19bd30/006ba/plakat_2017_11.png 1366w,\n/static/b722dd1b2e5bde00c9706fb3bb19bd30/84817/plakat_2017_11.png 1920w","sizes":"100vw"},"sources":[{"srcSet":"/static/b722dd1b2e5bde00c9706fb3bb19bd30/ebc34/plakat_2017_11.webp 750w,\n/static/b722dd1b2e5bde00c9706fb3bb19bd30/0671f/plakat_2017_11.webp 1080w,\n/static/b722dd1b2e5bde00c9706fb3bb19bd30/659f9/plakat_2017_11.webp 1366w,\n/static/b722dd1b2e5bde00c9706fb3bb19bd30/e2c0d/plakat_2017_11.webp 1920w","type":"image/webp","sizes":"100vw"}]},"width":1,"height":1.4140625}}},"poster_alt":"Poster: Jürgen sitzt im Sessel mit seiner Lesebrille und liest ein Buch. Auf dem Buch ist der Neo4J-Schriftzug zu lesen und darunter der Titel 'Graf Datenbankula' als Anspielung auf Graf Drakula. Entsprechend sieht man bei Jurgen spitze Schneidezähne, wie bei einem Vampir.","tags":["database"]},"fields":{"slug":"/talks/2017-11-29-neo4j/","sourceName":"talks"}}},{"node":{"id":"259289d0-862c-5044-bdb1-38c8d853780d","html":"

Beim Bauen monolithischer Systeme nutzen Entwicklerteams eine Reihe typischer Muster um die Interaktion verschiedener\nSystemteile zu implementieren. Behält man diese Interaktionsmuster bei, während man ein System in verschiedene aufteilt,\nergeben sich oft große Komplexität und architektonische Nachteile, die oft die ursprüngliche Idee, die hinter der\nAufteilung stand, konterkarieren.

\n

Der Vortrag betrachtet ein konkretes Beispiel von Modulinteraktion in einem monolithischen System und identifiziert die\nProblemstellungen die sich ergeben, wenn man dieses System in exakt dem gleichen Interaktionsstil aufteilt. Danach wird\neine alternative Implementierungsstrategie für das monolithische System diskutiert, die die Modularität des\nUrsprungssystems stark verbessert und im Falle einer Aufteilung in unabhängige Teilsysteme zu einer besseren Architektur\nführt.

\n

Materialien:

\n","frontmatter":{"title":"Refactoring to a System of Systems","date":"2018-01-31T00:00:00.000Z","time":null,"speaker":["oliver_drotbohm"],"location":"saxsys","virtual":null,"poster":{"childImageSharp":{"id":"9685adbf-d27b-5f98-934a-54d7dc3fcdb8","gatsbyImageData":{"layout":"fullWidth","backgroundColor":"#383898","images":{"fallback":{"src":"/static/88afeee4b9b4d069f5896633d252a8d6/242cd/plakat_2018_01.png","srcSet":"/static/88afeee4b9b4d069f5896633d252a8d6/0e3b9/plakat_2018_01.png 750w,\n/static/88afeee4b9b4d069f5896633d252a8d6/e5839/plakat_2018_01.png 1080w,\n/static/88afeee4b9b4d069f5896633d252a8d6/242cd/plakat_2018_01.png 1241w","sizes":"100vw"},"sources":[{"srcSet":"/static/88afeee4b9b4d069f5896633d252a8d6/ebc34/plakat_2018_01.webp 750w,\n/static/88afeee4b9b4d069f5896633d252a8d6/0671f/plakat_2018_01.webp 1080w,\n/static/88afeee4b9b4d069f5896633d252a8d6/cbc2f/plakat_2018_01.webp 1241w","type":"image/webp","sizes":"100vw"}]},"width":1,"height":1.4141821112006447}}},"poster_alt":"Poster: Wir sehen Jürgen über die Schulter, wie er einen Bauplan in der Hand hält und mit einer Schere in kleinere Stücke zerschneidet.","tags":["architektur"]},"fields":{"slug":"/talks/2018-01-31-system_of_systems/","sourceName":"talks"}}},{"node":{"id":"67f5c805-4443-51af-9f87-0a9aff577dce","html":"

Die SAP Cloud Platform (SCP) beschreibt ein „Platform as a Service“ (PaaS) Angebot der SAP. Mit der SCP liefert SAP\nsowohl die Entwicklungsumgebung als auch die Laufzeitumgebung zur Realisierung kundenindividueller Erweiterungen von\nCloud- und On-Premise-Lösungen (z.B. SAP S/4HANA). Basierend auf der In-Memory-Plattform SAP HANA stellt die SCP eine\nVielzahl an Datenbank- und Cloud-Services zur Verfügung, welche das PaaS Angebot erweitern und die Integration von SAP-\nund Non-SAP-Lösungen ermöglichen. Im Vortrag wird illustriert, wie die Verbindung aus einer Java EE Applikation zu einem\nSAP On-Premise System hergestellt und dessen Funktionalität in der Cloud genutzt wird.

\n

Materialien:

\n","frontmatter":{"title":"Entwicklung von Java Applikationen auf der SAP Cloud Platform","date":"2018-02-28T00:00:00.000Z","time":null,"speaker":["jens_leuschner","mariusz_zienkiewicz"],"location":"cideon","virtual":null,"poster":{"childImageSharp":{"id":"65d7329c-3fb6-5a77-8b25-3984a599f9e8","gatsbyImageData":{"layout":"fullWidth","backgroundColor":"#78b8b8","images":{"fallback":{"src":"/static/55c9a31f3c453bcd2592f54f307655df/84817/plakat_2018_02.png","srcSet":"/static/55c9a31f3c453bcd2592f54f307655df/0e3b9/plakat_2018_02.png 750w,\n/static/55c9a31f3c453bcd2592f54f307655df/e5839/plakat_2018_02.png 1080w,\n/static/55c9a31f3c453bcd2592f54f307655df/006ba/plakat_2018_02.png 1366w,\n/static/55c9a31f3c453bcd2592f54f307655df/84817/plakat_2018_02.png 1920w","sizes":"100vw"},"sources":[{"srcSet":"/static/55c9a31f3c453bcd2592f54f307655df/ebc34/plakat_2018_02.webp 750w,\n/static/55c9a31f3c453bcd2592f54f307655df/0671f/plakat_2018_02.webp 1080w,\n/static/55c9a31f3c453bcd2592f54f307655df/659f9/plakat_2018_02.webp 1366w,\n/static/55c9a31f3c453bcd2592f54f307655df/e2c0d/plakat_2018_02.webp 1920w","type":"image/webp","sizes":"100vw"}]},"width":1,"height":1.4140625}}},"poster_alt":"Poster: Jürgen hält einige kleine Programm-Fenster in der Hand. Er hebt die Programme in eine Wolke, die sich hinter ihm befindet. Die Wolke sieht aus wie das Cloud-Symbol.","tags":["cloud"]},"fields":{"slug":"/talks/2018-02-28-java_auf_sap_cloud/","sourceName":"talks"}}},{"node":{"id":"dad0ee9f-ea34-5ce1-b7fe-a0e45b09e845","html":"

Während in einer klassischen Konzern-IT Standards und Blaupausen für immer gleiche Anwendungsarchitekturen sorgen,\nbetonen Microservice-Ansätze die technologische Freiheit. Zwei extreme Spielarten der Ausgestaltung von Makro- und\nMikroarchitektur. In diesem Vortrag lernt Ihr neben dem Konzept selbst auch die auf Eure Ziele abgestimmte Richtung, die\nIhr in dieser Fragestellung einschlagen solltet. Wie sieht in Eurem Kontext die Balance aus -- was gebt Ihr für alle\nElemente Eurer Anwendung(slandschaft) vor, wo lasst Ihr bewusst Spielraum? Und gibt es auch noch etwas dazwischen? Zu\ndiesem Zweck passen wir organisatorische und technologische Trends wie 2-Speed/Bimodale Architekturen, Cloud und\nDomänenorientierung in das Entwurfsdoppel Makro und Mikro ein.

","frontmatter":{"title":"Mikro- vs. Makroarchitektur – Spielraum und Spielregeln","date":"2018-03-20T00:00:00.000Z","time":null,"speaker":["stefan_zoerner"],"location":"hochschule_campus","virtual":null,"poster":{"childImageSharp":{"id":"96d1873a-e218-5bea-9d77-8dc2e42dbbc6","gatsbyImageData":{"layout":"fullWidth","backgroundColor":"#082868","images":{"fallback":{"src":"/static/6067d1db118af9c9218894cda3ecec37/84817/plakat_2018_03.png","srcSet":"/static/6067d1db118af9c9218894cda3ecec37/0e3b9/plakat_2018_03.png 750w,\n/static/6067d1db118af9c9218894cda3ecec37/e5839/plakat_2018_03.png 1080w,\n/static/6067d1db118af9c9218894cda3ecec37/006ba/plakat_2018_03.png 1366w,\n/static/6067d1db118af9c9218894cda3ecec37/84817/plakat_2018_03.png 1920w","sizes":"100vw"},"sources":[{"srcSet":"/static/6067d1db118af9c9218894cda3ecec37/ebc34/plakat_2018_03.webp 750w,\n/static/6067d1db118af9c9218894cda3ecec37/0671f/plakat_2018_03.webp 1080w,\n/static/6067d1db118af9c9218894cda3ecec37/659f9/plakat_2018_03.webp 1366w,\n/static/6067d1db118af9c9218894cda3ecec37/e2c0d/plakat_2018_03.webp 1920w","type":"image/webp","sizes":"100vw"}]},"width":1,"height":1.4140625}}},"poster_alt":"Poster: Jürgen freut sich und hält einen Bauplan in der Hand.","tags":["architektur"]},"fields":{"slug":"/talks/2018-03-20-mikro_vs_makroarchitektur/","sourceName":"talks"}}},{"node":{"id":"1b2f3079-33fa-52a7-8f63-17ed40feb17e","html":"

Die Ankündigung der Unterstützung von Kotlin für die Android-Entwicklung auf der Google I/O Keynote 2017 bewirkte\nspontan kräftigen Applaus. Kotlin ist nur eine weitere Programmiersprache für die JVM. Warum also bewirkt die\nverhältnismäßig dröge Ankündigung zur Unterstützung einer JVM-Sprache solche Begeisterung? Was ist das Besondere an\nKotlin gegenüber Java? Der Vortrag gibt einen ersten allgemeinen Einblick in die Sprachfeatures von Kotlin und gibt\nKotlin-Neulingen die Möglichkeit, sich selbst einen Eindruck über die Sprache zu verschaffen.

\n

Materialien:

\n","frontmatter":{"title":"Kotlin","date":"2018-04-25T00:00:00.000Z","time":null,"speaker":["tobias_blaschke"],"location":"saxsys","virtual":null,"poster":{"childImageSharp":{"id":"1a259f6b-01d1-58d9-9813-e4fb56a34153","gatsbyImageData":{"layout":"fullWidth","backgroundColor":"#d8b808","images":{"fallback":{"src":"/static/7425eb2154d8ac0def6b6a91b1bc7b2d/84817/plakat_2018_04.png","srcSet":"/static/7425eb2154d8ac0def6b6a91b1bc7b2d/0e3b9/plakat_2018_04.png 750w,\n/static/7425eb2154d8ac0def6b6a91b1bc7b2d/e5839/plakat_2018_04.png 1080w,\n/static/7425eb2154d8ac0def6b6a91b1bc7b2d/006ba/plakat_2018_04.png 1366w,\n/static/7425eb2154d8ac0def6b6a91b1bc7b2d/84817/plakat_2018_04.png 1920w","sizes":"100vw"},"sources":[{"srcSet":"/static/7425eb2154d8ac0def6b6a91b1bc7b2d/ebc34/plakat_2018_04.webp 750w,\n/static/7425eb2154d8ac0def6b6a91b1bc7b2d/0671f/plakat_2018_04.webp 1080w,\n/static/7425eb2154d8ac0def6b6a91b1bc7b2d/659f9/plakat_2018_04.webp 1366w,\n/static/7425eb2154d8ac0def6b6a91b1bc7b2d/e2c0d/plakat_2018_04.webp 1920w","type":"image/webp","sizes":"100vw"}]},"width":1,"height":1.4140625}}},"poster_alt":"Poster: Jürgen hält einen Globus in der Hand und platziert eine kleine Fahne an die Stelle der russischen Insel 'Kotlin'. Er trägt eine russische Fell-Mütze","tags":["programmiersprachen"]},"fields":{"slug":"/talks/2018-04-25-kotlin/","sourceName":"talks"}}},{"node":{"id":"bba11502-e73b-5c5e-9ce7-f4102b1daed5","html":"

Die RESTful-Architektur ist eine etablierte Möglichkeit, Schnittstellen zwischen Client und Server zu gestalten. Dies\nbringt allerdings einige Nachteile mit sich. Als Beispiel können hier die hohe Anzahl an benötigten Requests sowie die\nnur unvollständige Dokumentation der Schnittstelle genannt werden. Mit GraphQL entwickelte Facebook eine alternative\nAbfragesprache, welche die genannten Nachteile beseitigen sollte. Dabei wird eine Abfrage ähnlich der Struktur der\nJSON-Syntax an den Server übermittelt, welcher die gewünschten Daten mit nur einer Antwort zur Verfügung stellt.

\n

Im Vortrag wird GraphQL anhand von Beispielen vorgestellt und dabei sowohl die Client- als auch Serverseite betrachtet.

\n

Materialien:

\n","frontmatter":{"title":"GraphQL","date":"2018-05-30T00:00:00.000Z","time":null,"speaker":["stephan_strehler"],"location":"hochschule_campus","virtual":null,"poster":{"childImageSharp":{"id":"90e1be0b-07fd-5977-ad85-c716671424c1","gatsbyImageData":{"layout":"fullWidth","backgroundColor":"#e838a8","images":{"fallback":{"src":"/static/70801d1cf0778b63b022c58e167483bf/84817/plakat_2018_05.png","srcSet":"/static/70801d1cf0778b63b022c58e167483bf/b8e70/plakat_2018_05.png 750w,\n/static/70801d1cf0778b63b022c58e167483bf/e5839/plakat_2018_05.png 1080w,\n/static/70801d1cf0778b63b022c58e167483bf/f51d5/plakat_2018_05.png 1366w,\n/static/70801d1cf0778b63b022c58e167483bf/84817/plakat_2018_05.png 1920w","sizes":"100vw"},"sources":[{"srcSet":"/static/70801d1cf0778b63b022c58e167483bf/e5d6f/plakat_2018_05.webp 750w,\n/static/70801d1cf0778b63b022c58e167483bf/0671f/plakat_2018_05.webp 1080w,\n/static/70801d1cf0778b63b022c58e167483bf/7e884/plakat_2018_05.webp 1366w,\n/static/70801d1cf0778b63b022c58e167483bf/e2c0d/plakat_2018_05.webp 1920w","type":"image/webp","sizes":"100vw"}]},"width":1,"height":1.4140625}}},"poster_alt":"Poster: Jürgen grinst und hält eine Tasse Kaffee in der Hand. Auf der Tasse ist das GraphQL-Logo zu sehen.","tags":["programmiersprachen","web","architektur"]},"fields":{"slug":"/talks/2018-05-30-graphql/","sourceName":"talks"}}},{"node":{"id":"f17a3451-b9a5-5b42-b740-3c15fe9268f5","html":"

Unveränderliche Datenstrukturen sind ein wichtiges Werkzeug der funktionalen Programmierung. Aber auch abseits dessen\nkönnen Immutables ungemein nützlich sein: Richtig angewandt erhöhen sie die Verständlichkeit des Codes, da\nEntwicklerInnen nicht mehr auf die mühsame Suche gehen müssen, an welcher Stelle ein Objekt möglicherweise ungewollt\nverändert wurde. Darüber hinaus sind Immutables inhärent Threadsafe und können auch hier die Nachvollziehbarkeit des\nCodes erhöhen.

\n

Da Java als Sprache aber keine besondere Unterstützung für Immutables mitbringt, müssen EntwicklerInnen auf Patterns und\nBibliotheken zurückgreifen, um in den Genuss von unveränderlichen Datenstrukturen zu kommen. Denn natürlich müssen auch\nin funktionalen Programmen letztlich Veränderungen der Daten abgebildet werden und dafür bedarf es geeigneter\nUnterstützung.

\n

Im Vortrag möchte ich neben einer grundsätzlichen Einführung in die Thematik auch einige dieser Techniken vorstellen und\nihre Vor- und Nachteile besprechen.

\n

Materialien:

\n","frontmatter":{"title":"Immutable Data - Unveränderliche Daten im Griff","date":"2018-06-27T00:00:00.000Z","time":null,"speaker":["manuel_mauky"],"location":"hochschule_campus","virtual":null,"poster":{"childImageSharp":{"id":"314ba704-f1f4-5d2c-8535-b32da028a3c9","gatsbyImageData":{"layout":"fullWidth","backgroundColor":"#780838","images":{"fallback":{"src":"/static/1fae33eb72f57d492a22e010e53219f1/84817/plakat_2018_06.png","srcSet":"/static/1fae33eb72f57d492a22e010e53219f1/b8e70/plakat_2018_06.png 750w,\n/static/1fae33eb72f57d492a22e010e53219f1/e5839/plakat_2018_06.png 1080w,\n/static/1fae33eb72f57d492a22e010e53219f1/f51d5/plakat_2018_06.png 1366w,\n/static/1fae33eb72f57d492a22e010e53219f1/84817/plakat_2018_06.png 1920w","sizes":"100vw"},"sources":[{"srcSet":"/static/1fae33eb72f57d492a22e010e53219f1/e5d6f/plakat_2018_06.webp 750w,\n/static/1fae33eb72f57d492a22e010e53219f1/0671f/plakat_2018_06.webp 1080w,\n/static/1fae33eb72f57d492a22e010e53219f1/7e884/plakat_2018_06.webp 1366w,\n/static/1fae33eb72f57d492a22e010e53219f1/e2c0d/plakat_2018_06.webp 1920w","type":"image/webp","sizes":"100vw"}]},"width":1,"height":1.4140625}}},"poster_alt":"Poster: Jürgen steht vor einem großen Steinblock, der fast aussieht wie ein Grabstein. Auf dem Stein sind lauter Nullen und Einsen eingraviert. Er hält einen Hammer und Meißel in der Hand.","tags":["programmiersprachen","functional-programming"]},"fields":{"slug":"/talks/2018-06-27-immutable-data/","sourceName":"talks"}}},{"node":{"id":"f3a5b0e9-0351-58c1-a827-a5f39196ddee","html":"

Spätestens seit Java 8 gibt es monadische Typen in Java. Aber was bedeutet das eigentlich? Was sind die Eigenschaften,\ndie Monaden ausmachen? Und wo liegen unsere Schwierigkeiten beim Verständnis von Monaden? Dieser Vortrag beschreibt, was\neine Monade ist und wie wir eine monadische Transaktion nutzen können, um in domänenspezifischer Sprache mit einer\nDatenbank zu reden. Hierbei bauen wir monadische Transaktionen in ein vorhandenes Repository ein. Weiter beleuchten wir\ndie Vor- und Nachteile dieses Ansatzes und diskutieren die Unterstützung von Monaden in Java. Voraussetzung sind erste\nErfahrungen mit funktionaler Programmierung und Lambdas.

\n

Materialien:

\n","frontmatter":{"title":"Monadische Transaktionen","date":"2018-11-23T00:00:00.000Z","time":null,"speaker":["gregor_trefs"],"location":"hochschule_campus","virtual":null,"poster":{"childImageSharp":{"id":"918002c9-e393-5b8d-a2d6-ee73c1735383","gatsbyImageData":{"layout":"fullWidth","backgroundColor":"#680838","images":{"fallback":{"src":"/static/d29473cce93e3ade3231fd7ea7b0188e/84817/plakat_2018_11.png","srcSet":"/static/d29473cce93e3ade3231fd7ea7b0188e/b8e70/plakat_2018_11.png 750w,\n/static/d29473cce93e3ade3231fd7ea7b0188e/e5839/plakat_2018_11.png 1080w,\n/static/d29473cce93e3ade3231fd7ea7b0188e/f51d5/plakat_2018_11.png 1366w,\n/static/d29473cce93e3ade3231fd7ea7b0188e/84817/plakat_2018_11.png 1920w","sizes":"100vw"},"sources":[{"srcSet":"/static/d29473cce93e3ade3231fd7ea7b0188e/e5d6f/plakat_2018_11.webp 750w,\n/static/d29473cce93e3ade3231fd7ea7b0188e/0671f/plakat_2018_11.webp 1080w,\n/static/d29473cce93e3ade3231fd7ea7b0188e/7e884/plakat_2018_11.webp 1366w,\n/static/d29473cce93e3ade3231fd7ea7b0188e/e2c0d/plakat_2018_11.webp 1920w","type":"image/webp","sizes":"100vw"}]},"width":1,"height":1.4140625}}},"poster_alt":"Poster: Jürgen grinst und hält ein Tablett in der Hand. Auf dem Tablett steht eine durchsichtige Flasche mit gelber Limo darin. Auf dem Etikett steht 'Li-Monade' geschrieben.","tags":["functional-programming"]},"fields":{"slug":"/talks/2018-11-23-monadische_transaktionen/","sourceName":"talks"}}},{"node":{"id":"6c6f82f3-26da-59ee-a8b6-8c178256b6b7","html":"

Anstelle über Microservices, NO-SQL Lösungen oder Container-Management zu reden werden im Workshop Bestandteile des\nStandard Java API vorgestellt. Diese Java Features helfen jedem Entwickler eine wartbare und zukunftssichere Anwendung\nzu entwickeln, egal ob mit Spring, JavaFX oder JavaEE. Verschiedene Sprach-Features und Konzepte der Standard Java APIs\nwerden genauer unter die Lupe genommen und deren sinnvoller Einsatz anhand von Beispielen gezeigt. Hierdurch werden\nunter anderem folgende Fragen beantwortet: Wie funktionieren eigentlich Annotations? Wie entwickle ich Plug-In\nFunktionalität ohne auf OSGI zurückgreifen zu müssen? Wie gehe ich am besten mit NullPointerExceptions um? Wie schreibe\nich nebenläufigen Code der trotzdem wartbar ist?

","frontmatter":{"title":"Java APIs - the missing manual","date":"2019-01-31T00:00:00.000Z","time":null,"speaker":["hendrik_ebbers"],"location":"cideon","virtual":null,"poster":{"childImageSharp":{"id":"8509bc59-0ad5-5d24-87e3-f253d53d68b2","gatsbyImageData":{"layout":"fullWidth","backgroundColor":"#3858b8","images":{"fallback":{"src":"/static/8c4759d0cca5ff005992863b4cbbfd0c/84817/plakat_2019_01.png","srcSet":"/static/8c4759d0cca5ff005992863b4cbbfd0c/b8e70/plakat_2019_01.png 750w,\n/static/8c4759d0cca5ff005992863b4cbbfd0c/e5839/plakat_2019_01.png 1080w,\n/static/8c4759d0cca5ff005992863b4cbbfd0c/f51d5/plakat_2019_01.png 1366w,\n/static/8c4759d0cca5ff005992863b4cbbfd0c/84817/plakat_2019_01.png 1920w","sizes":"100vw"},"sources":[{"srcSet":"/static/8c4759d0cca5ff005992863b4cbbfd0c/e5d6f/plakat_2019_01.webp 750w,\n/static/8c4759d0cca5ff005992863b4cbbfd0c/0671f/plakat_2019_01.webp 1080w,\n/static/8c4759d0cca5ff005992863b4cbbfd0c/7e884/plakat_2019_01.webp 1366w,\n/static/8c4759d0cca5ff005992863b4cbbfd0c/e2c0d/plakat_2019_01.webp 1920w","type":"image/webp","sizes":"100vw"}]},"width":1,"height":1.4140625}}},"poster_alt":"Poster: Jürgen sitzt mit seiner Lesebrille in seinem Sessel und liest ein Buch. Auf dem Buchrücken steht 'Javadoc'","tags":["java"]},"fields":{"slug":"/talks/2019-01-31_java_apis_missing_manual/","sourceName":"talks"}}},{"node":{"id":"dd2fc902-b2b3-5256-b24b-e09f17f45415","html":"

Die Website der JUG Görlitz läuft fast Serverless. Natürlich muss ein Webserver Dateien ausliefern aber ansonsten sind\nkeine Datenbank, Applicationserver, PHP oder sonstige aktive Serverkomponenten im Einsatz. Stattdessen sind alle Inhalte\nals Markdown-Textdateien in einem Git-Repository abgelegt (dieser Talk\nbeispielsweise\nhier). Ein so\ngenannter \"Static-Site-Generator\" generiert daraus HTML-, CSS- und JavaScript-Dateien, die nur noch von einem ganz\nnormalen HTTP-Server ausgeliefert werden müssen. Dieses Vorgehen vereinfacht das Hosting, beschleunigt Website-Aufrufe\nund minimiert die Angriffsfläche des Servers.

\n

Im Vortrag wird das Konzept von Static-Site-Generators erklärt und die möglichen Einsatzgebiete beschrieben. Mit dem\nTool Gatsby werden wir eine einfache Blog-Website bauen. Am Beispiel der JUG-Website wird\naber auch gezeigt, wie komplexere Daten-Modelle mit mehreren Entitäten (Vorträge, Speaker,\nVeranstaltungsorte, Tags) umgesetzt werden können. Die technische Grundlage von Gatsby stellt\nReact für Templates und GraphQL für die Daten-Organisation dar.

\n

Materialien:

\n","frontmatter":{"title":"Static-Site-Generators","date":"2019-03-27T00:00:00.000Z","time":null,"speaker":["manuel_mauky"],"location":"hochschule_campus","virtual":null,"poster":{"childImageSharp":{"id":"bffb7b05-0e58-5922-92df-21ce241ccd84","gatsbyImageData":{"layout":"fullWidth","backgroundColor":"#a8c868","images":{"fallback":{"src":"/static/a69cadfbb400620dadfb89d178c1c8db/a6b6d/plakat_2019_03.png","srcSet":"/static/a69cadfbb400620dadfb89d178c1c8db/0e3b9/plakat_2019_03.png 750w,\n/static/a69cadfbb400620dadfb89d178c1c8db/7aaf4/plakat_2019_03.png 1080w,\n/static/a69cadfbb400620dadfb89d178c1c8db/a6b6d/plakat_2019_03.png 1240w","sizes":"100vw"},"sources":[{"srcSet":"/static/a69cadfbb400620dadfb89d178c1c8db/ebc34/plakat_2019_03.webp 750w,\n/static/a69cadfbb400620dadfb89d178c1c8db/47da9/plakat_2019_03.webp 1080w,\n/static/a69cadfbb400620dadfb89d178c1c8db/5c55f/plakat_2019_03.webp 1240w","type":"image/webp","sizes":"100vw"}]},"width":1,"height":1.414516129032258}}},"poster_alt":"Poster: Jürgen hält einen Kasten in der Hand mit jeweils einem Trichter oben und unten. Oben gibt er zwei Dokumente hinein und unten fällt das Bild einer Webseite heraus. Auf dem Kasten ist das Logo von Gatsbyjs zu sehen.","tags":["web","javascript"]},"fields":{"slug":"/talks/2019-03-27-static-site-generators/","sourceName":"talks"}}},{"node":{"id":"f37a3185-cf74-5401-9461-328751a5a63e","html":"

Java Reflections sind ein Feature der Java Sprache und werden von der JVM für das interne Handling von Klassen, Feldern\nund Methoden verwendet. Intern werden darüber Methodenaufrufe, Zugriffsrechte wie public/privat oder seit Java 9 auch\ndie Modulexporte geregelt.

\n

Dieses Feature kann man sich in der normalen Java Umgebung zu Nutze machen, um auf alle Informationen einer Klasse\nzuzugreifen. So ist es möglich, auf deren Methoden und Felder zuzugreifen, selbst wenn diese privat sind. Felder können\nüberschreiben, Template-Parameter in Feldern und Methoden angezeigt, sowie auch Annotationen der Klasse, Methoden und\nFelder gelesen werden. Am Beispiel eines abstrakten Klassen-Editors werden diese Möglichkeiten in dem Vortrag näher\nbetrachtet.

","frontmatter":{"title":"Java Reflection: Classes behind the scenes","date":"2019-02-27T00:00:00.000Z","time":null,"speaker":["erik_jaehne"],"location":"saxsys","virtual":null,"poster":{"childImageSharp":{"id":"b2cb5256-0c61-5e8b-8a34-23f74562f16f","gatsbyImageData":{"layout":"fullWidth","backgroundColor":"#78b8b8","images":{"fallback":{"src":"/static/15923e5b77de857597a70091dfe03bd5/84817/plakat_2019_02.png","srcSet":"/static/15923e5b77de857597a70091dfe03bd5/b8e70/plakat_2019_02.png 750w,\n/static/15923e5b77de857597a70091dfe03bd5/e5839/plakat_2019_02.png 1080w,\n/static/15923e5b77de857597a70091dfe03bd5/f51d5/plakat_2019_02.png 1366w,\n/static/15923e5b77de857597a70091dfe03bd5/84817/plakat_2019_02.png 1920w","sizes":"100vw"},"sources":[{"srcSet":"/static/15923e5b77de857597a70091dfe03bd5/e5d6f/plakat_2019_02.webp 750w,\n/static/15923e5b77de857597a70091dfe03bd5/0671f/plakat_2019_02.webp 1080w,\n/static/15923e5b77de857597a70091dfe03bd5/7e884/plakat_2019_02.webp 1366w,\n/static/15923e5b77de857597a70091dfe03bd5/e2c0d/plakat_2019_02.webp 1920w","type":"image/webp","sizes":"100vw"}]},"width":1,"height":1.4140625}}},"poster_alt":"Poster: Jürgen grinst und hält eine Tasse Kaffee in der Hand.","tags":["java"]},"fields":{"slug":"/talks/2019-02-27_reflection/","sourceName":"talks"}}},{"node":{"id":"9a7e9567-b7fe-59cd-90fe-aec93c90f2af","html":"

Mit dem JDK-Enhancement-Proposal (JEP 322) wird die zeitbasierte Java-Release-Versionierung definiert, die auf dem\naktuellen Java SE Version-String-Schema basiert und die Namensgebung für die kommenden Versionen der Java SE Plattform\nund vom JDK vorgibt. Seit dem Jahr 2018 erscheinen die künftigen Java-Feature-Releases alle 6 Monate. Das JDK 11 wurde\nals Long-Term-Support-Release (LTS-Release) im September 2018 veröffentlicht und nach sechs Monaten folgte das OpenJDK\n12 im März 2019. Mit dem zeitlichen Abstand von sechs Monaten bekommen die Entwickler wesentlich schneller neue\nJava-Funktionsmerkmale als dies mit dem bisherigen Dreijahreszyklus der Fall war. Zwischen den\nOpenJDK/JDK-Feature-Releases sind zwei Updates geplant, bei denen es um die Wartung und Bugfixes geht, die wie gewohnt,\njeweils im Januar, April, Juli und Oktober eines Jahres als Java Critical Patch Update erscheinen werden. Die Planung\nsieht vor, jeweils alle drei Jahre ein weiteres Java-LTS-Release zu veröffentlichen, damit der Anwendungsbetrieb eine\nstabile und ausgereifte Java-Basis bekommt, die mit der nachfolgenden Versionierung $FEATURE.$INTERIM.$UPDATE.$PATCH\ngekennzeichnet wird. Im Vortrag werden Beispiele zum Version-String besprochen, sowie Empfehlungen diskutiert, wie die\nkünftige Java-Strategie mit dem OpenJDK, Oracle JDK (LTS) und der neuen Java SE Subscription (Support) für die\nEntwickler und für den Anwendungsbetrieb aussehen soll. Zudem wird die Weiterentwicklung der OpenJFX/JavaFX\nUI-Technologie mit den Aktivitäten der Developer-Community dargestellt.

","frontmatter":{"title":"It's a JDK jungle out there - oder wie es mit den neuen Java-Versionen geordnet weitergeht","date":"2019-04-24T00:00:00.000Z","time":null,"speaker":["wolfgang_weigend"],"location":"saxsys","virtual":null,"poster":{"childImageSharp":{"id":"e335d1a1-3789-5e42-9670-a3e1c361eadc","gatsbyImageData":{"layout":"fullWidth","backgroundColor":"#f8f8f8","images":{"fallback":{"src":"/static/32de550f9e63747cb85192fa0598ae2c/b6707/plakat_2019_04.png","srcSet":"/static/32de550f9e63747cb85192fa0598ae2c/0e3b9/plakat_2019_04.png 750w,\n/static/32de550f9e63747cb85192fa0598ae2c/7aaf4/plakat_2019_04.png 1080w,\n/static/32de550f9e63747cb85192fa0598ae2c/006ba/plakat_2019_04.png 1366w,\n/static/32de550f9e63747cb85192fa0598ae2c/b6707/plakat_2019_04.png 1920w","sizes":"100vw"},"sources":[{"srcSet":"/static/32de550f9e63747cb85192fa0598ae2c/ebc34/plakat_2019_04.webp 750w,\n/static/32de550f9e63747cb85192fa0598ae2c/47da9/plakat_2019_04.webp 1080w,\n/static/32de550f9e63747cb85192fa0598ae2c/659f9/plakat_2019_04.webp 1366w,\n/static/32de550f9e63747cb85192fa0598ae2c/c86cf/plakat_2019_04.webp 1920w","type":"image/webp","sizes":"100vw"}]},"width":1,"height":1.4145833333333333}}},"poster_alt":"Poster: Jürgen hält eine Schriftrolle mit offiziellen Siegel in der Hand und liest wie ein mittelalterlicher Herold daraus vor. Wir sehen leider nicht den Text auf der Schriftrolle.","tags":["java","jdk"]},"fields":{"slug":"/talks/2019-04-24_jdk_jungle/","sourceName":"talks"}}},{"node":{"id":"a5f7b4d5-03e6-588d-9778-62b4b8c44286","html":"

Der Vortrag erläutert zunächst die Grundlagen der Standards OAuth 2.0 und OpenID-Connect und geht danach auf den Einsatz\ndieser Standards mittels Keycloak ein. Dabei wird anhand einer Beispielanwendung (React, Spring Boot) gezeigt, wie man\nKeycloak in seine Anwendung einbinden kann.

","frontmatter":{"title":"OAuth 2.0/OpenIDConnect mit Keycloak","date":"2019-05-29T00:00:00.000Z","time":null,"speaker":["denny_israel"],"location":"hochschule_campus","virtual":null,"poster":{"childImageSharp":{"id":"cb4beaed-8514-5a8a-8dfe-7bec12fbdd27","gatsbyImageData":{"layout":"fullWidth","backgroundColor":"#386898","images":{"fallback":{"src":"/static/eaf6c5845a5ab5a40e0dd634a7eaed23/b6707/plakat_2019_05.png","srcSet":"/static/eaf6c5845a5ab5a40e0dd634a7eaed23/0e3b9/plakat_2019_05.png 750w,\n/static/eaf6c5845a5ab5a40e0dd634a7eaed23/7aaf4/plakat_2019_05.png 1080w,\n/static/eaf6c5845a5ab5a40e0dd634a7eaed23/006ba/plakat_2019_05.png 1366w,\n/static/eaf6c5845a5ab5a40e0dd634a7eaed23/b6707/plakat_2019_05.png 1920w","sizes":"100vw"},"sources":[{"srcSet":"/static/eaf6c5845a5ab5a40e0dd634a7eaed23/ebc34/plakat_2019_05.webp 750w,\n/static/eaf6c5845a5ab5a40e0dd634a7eaed23/47da9/plakat_2019_05.webp 1080w,\n/static/eaf6c5845a5ab5a40e0dd634a7eaed23/659f9/plakat_2019_05.webp 1366w,\n/static/eaf6c5845a5ab5a40e0dd634a7eaed23/c86cf/plakat_2019_05.webp 1920w","type":"image/webp","sizes":"100vw"}]},"width":1,"height":1.4145833333333333}}},"poster_alt":"Poster: Jürgen trägt einen komplett schwarzen Anzug, eine Sonnenbrille und einen verkabelten Ohrstöpsel. Er sieht aus wie ein Geheimagent. Er schaut streng und hält die flache Hand vor sich um uns zurückzuhalten.","tags":["java","security"]},"fields":{"slug":"/talks/2019-05-29-oauth/","sourceName":"talks"}}},{"node":{"id":"6895717e-291c-581d-8fef-3b5e73bc8369","html":"

HashMap und ArrayList kennt jeder, na klar. Aber wann stellen diese eigentlich die richtige Wahl dar? Und vor allem:\nWann nicht? Das Collections Framework enthält zahlreiche, teils recht spezialisierte Implementierungen. Doch viele\nEntwickler kennen nur einen kleinen Teil davon. Schon mal was von EnumSet oder WeakHashMap gehört? Und was ist der\nUnterschied zwischen ConcurrentSkipListMap und ConcurrentHashMap? Für jeden Java-Entwickler ist es wichtig, die Stärken\nund Schwächen der einzelnen Implementierungen zu kennen. Dieser Vortrag diskutiert Details wie Threadsicherheit,\nLaufzeitverhalten und sinnvolle Initialisierung anhand einiger ausgewählter Collection-Klassen.

\n

Materialien:

\n","frontmatter":{"title":"Wie gut kennst Du das Collections Framework?","date":"2019-06-26T00:00:00.000Z","time":null,"speaker":["thilo_frotscher"],"location":"cideon","virtual":null,"poster":{"childImageSharp":{"id":"ecc9b098-2be1-50e1-87d8-48488a256061","gatsbyImageData":{"layout":"fullWidth","backgroundColor":"#389838","images":{"fallback":{"src":"/static/359c95f2d624a1b8d7167b6ff2c5340c/b6707/plakat_2019_06.png","srcSet":"/static/359c95f2d624a1b8d7167b6ff2c5340c/0e3b9/plakat_2019_06.png 750w,\n/static/359c95f2d624a1b8d7167b6ff2c5340c/7aaf4/plakat_2019_06.png 1080w,\n/static/359c95f2d624a1b8d7167b6ff2c5340c/006ba/plakat_2019_06.png 1366w,\n/static/359c95f2d624a1b8d7167b6ff2c5340c/b6707/plakat_2019_06.png 1920w","sizes":"100vw"},"sources":[{"srcSet":"/static/359c95f2d624a1b8d7167b6ff2c5340c/ebc34/plakat_2019_06.webp 750w,\n/static/359c95f2d624a1b8d7167b6ff2c5340c/47da9/plakat_2019_06.webp 1080w,\n/static/359c95f2d624a1b8d7167b6ff2c5340c/659f9/plakat_2019_06.webp 1366w,\n/static/359c95f2d624a1b8d7167b6ff2c5340c/c86cf/plakat_2019_06.webp 1920w","type":"image/webp","sizes":"100vw"}]},"width":1,"height":1.4145833333333333}}},"poster_alt":"Poster: Jürgen trägt eine Sonnenbrille und ein buntes Hemd mit Blumen darauf. Er hält sich die Hand ans Kinn und grinst, so als würde er gerade einen Plan schmieden. An seinem Hemd hängt ein Schild mit der Aufschrift 'Sommer Collection'.","tags":["java"]},"fields":{"slug":"/talks/2019-06-26-collection-framework/","sourceName":"talks"}}},{"node":{"id":"a0f32bfb-f9fa-5c9c-a70d-ffd93be7d859","html":"

Hattest du auch schon mal das Problem, dass du deine eigenen komplizierten und unleserlichen Testfälle nicht mehr\nverstanden hast? Wir kennen das Problem und zeigen euch mögliche Lösungen.

","frontmatter":{"title":"Advanced BDD Tests","date":"2019-11-28T00:00:00.000Z","time":null,"speaker":["maik_wagner"],"location":"tallence","virtual":null,"poster":{"childImageSharp":{"id":"6f443280-7e6e-5951-ab2a-0815064e81b4","gatsbyImageData":{"layout":"fullWidth","backgroundColor":"#d86868","images":{"fallback":{"src":"/static/c5e4690e979964e9c44af61d883856f8/b6707/plakat_2019_11.png","srcSet":"/static/c5e4690e979964e9c44af61d883856f8/0e3b9/plakat_2019_11.png 750w,\n/static/c5e4690e979964e9c44af61d883856f8/7aaf4/plakat_2019_11.png 1080w,\n/static/c5e4690e979964e9c44af61d883856f8/006ba/plakat_2019_11.png 1366w,\n/static/c5e4690e979964e9c44af61d883856f8/b6707/plakat_2019_11.png 1920w","sizes":"100vw"},"sources":[{"srcSet":"/static/c5e4690e979964e9c44af61d883856f8/ebc34/plakat_2019_11.webp 750w,\n/static/c5e4690e979964e9c44af61d883856f8/47da9/plakat_2019_11.webp 1080w,\n/static/c5e4690e979964e9c44af61d883856f8/659f9/plakat_2019_11.webp 1366w,\n/static/c5e4690e979964e9c44af61d883856f8/c86cf/plakat_2019_11.webp 1920w","type":"image/webp","sizes":"100vw"}]},"width":1,"height":1.4145833333333333}}},"poster_alt":"Poster: Jürgen hält ein Klemmbrett in der Hand, auf dem ein Blatt Papier zusehen ist. Auf dem Blatt steht 'Testplan' oben und darunter sind drei Checkboxen mit angedeuteten Textzeilen daneben.","tags":["java","testen"]},"fields":{"slug":"/talks/2019-11-28-advanced-bdd-tests/","sourceName":"talks"}}},{"node":{"id":"c7067e06-b5be-50ec-83d2-9ea30dc14640","html":"

\"Create Apps, Not the Platform\" - Cloud Foundry verspricht, dass sich Entwicker voll und ganz auf die\nAnwendungsentwicklung fokussieren können, anstatt einen erheblichen Teil ihrer Zeit auf Infrastruktur, Deployment usw.\nverwenden zu müssen. Was ist Cloud Foundry überhaupt? Und hält sie, was sie verspricht?

","frontmatter":{"title":"Innovationsmotor Cloud Foundry!?","date":"2020-01-29T00:00:00.000Z","time":null,"speaker":["simon_roloff"],"location":"saxsys","virtual":null,"poster":{"childImageSharp":{"id":"abe046a7-29a3-5710-9b2b-cf4a5ff0c1a2","gatsbyImageData":{"layout":"fullWidth","backgroundColor":"#583898","images":{"fallback":{"src":"/static/5ef746b99e05db0762f96d0a28f278da/84817/plakat_2020-01.png","srcSet":"/static/5ef746b99e05db0762f96d0a28f278da/b8e70/plakat_2020-01.png 750w,\n/static/5ef746b99e05db0762f96d0a28f278da/e5839/plakat_2020-01.png 1080w,\n/static/5ef746b99e05db0762f96d0a28f278da/f51d5/plakat_2020-01.png 1366w,\n/static/5ef746b99e05db0762f96d0a28f278da/84817/plakat_2020-01.png 1920w","sizes":"100vw"},"sources":[{"srcSet":"/static/5ef746b99e05db0762f96d0a28f278da/e5d6f/plakat_2020-01.webp 750w,\n/static/5ef746b99e05db0762f96d0a28f278da/0671f/plakat_2020-01.webp 1080w,\n/static/5ef746b99e05db0762f96d0a28f278da/7e884/plakat_2020-01.webp 1366w,\n/static/5ef746b99e05db0762f96d0a28f278da/e2c0d/plakat_2020-01.webp 1920w","type":"image/webp","sizes":"100vw"}]},"width":1,"height":1.4140625}}},"poster_alt":"Wir sehen das typische Cloud-Symbol einer Wolke im Vordergrund. Jürgen stützt sich auf die Wolke, so als wäre es ein Kopfkissen. Er stützt seinen Kopf mit einem Arm ab und schaut ein bisschen verträumt. Er wirkt wie in Gedanken versunken.","tags":["cloud"]},"fields":{"slug":"/talks/2020-01-27-cloud-foundry/","sourceName":"talks"}}},{"node":{"id":"92ec8c3c-c428-5ca1-bb98-7b8ebac5cdfb","html":"

Nach der Freigabe vom JDK 14 werden die aktuellen Merkmale vorgestellt. Neben Bug-Fixes und Security-Patches, stecken im\nJDK 14 Feature-Release, Sprach- und JVM-Änderungen, Erweiterungen, zugefügte und entfernte Klassen und Methoden,\ndeprecated markierte Features und JDK-Tool-Änderungen. Bereits mit der Einführung der JDK Version 11 wurden die\ntechnischen Unterschiede bei der Gleichstellung vom Oracle JDK mit dem Oracle OpenJDK entfernt. Bei diesem\nTechnologietransfer sind alle Bestandteile vom Oracle JDK als Open-Source-Implentierungen in das OpenJDK geflossen,\nsodass das Oracle JDK 14 durch das OpenJDK 14 augetauscht werden kann. Die Anwender können ein JDK oder ein OpenJDK\nverschiedener Hersteller frei auswählen. Dazu werden die Migrationsaspekte älterer Java-Anwendungen zum JDK 14\nerläutert. Im Vortrag wird auch ein Blick auf den langfristigen Einsatz vom Java Modulsystem geworfen und dies anhand\nvon Beispielen durch Erstellung einer individueller Java Runtime mit der Anwendung verdeutlicht. Zudem wird die die\nGraalVM als universelle Virtuelle Maschine (VM) für Anwendungen im Java Ökosystem betrachtet.

\n

Materialien:

\n\n
\n

Hinweis

\n

Dieser Vortrag findet Online statt. Dazu hat Wolfgang ein Zoom-Meeting aufgesetzt. Dieser Meeting-Raum ist\nPasswortgeschützt. Bitte meldet euch vorab per E-Mail an. Wir schicken euch dann vor dem Meeting das Passwort per Mail\nzu.

\n

Dieses Mal geht es schon 18:00 Uhr los.

","frontmatter":{"title":"JDK 14 und GraalVM im Java Ökosystem","date":"2020-04-29T00:00:00.000Z","time":"18:00","speaker":["wolfgang_weigend"],"location":null,"virtual":true,"poster":{"childImageSharp":{"id":"59ef0a09-a854-5bc5-a122-2d35ddcf6987","gatsbyImageData":{"layout":"fullWidth","backgroundColor":"#486888","images":{"fallback":{"src":"/static/1b5849494114993b21e29316b4af1f35/84817/plakat_2020_04.png","srcSet":"/static/1b5849494114993b21e29316b4af1f35/b8e70/plakat_2020_04.png 750w,\n/static/1b5849494114993b21e29316b4af1f35/e5839/plakat_2020_04.png 1080w,\n/static/1b5849494114993b21e29316b4af1f35/f51d5/plakat_2020_04.png 1366w,\n/static/1b5849494114993b21e29316b4af1f35/84817/plakat_2020_04.png 1920w","sizes":"100vw"},"sources":[{"srcSet":"/static/1b5849494114993b21e29316b4af1f35/e5d6f/plakat_2020_04.webp 750w,\n/static/1b5849494114993b21e29316b4af1f35/0671f/plakat_2020_04.webp 1080w,\n/static/1b5849494114993b21e29316b4af1f35/7e884/plakat_2020_04.webp 1366w,\n/static/1b5849494114993b21e29316b4af1f35/e2c0d/plakat_2020_04.webp 1920w","type":"image/webp","sizes":"100vw"}]},"width":1,"height":1.4140625}}},"poster_alt":"Poster: Jürgen sitzt in seinem Sessel. Er trägt sein übliches Jacket, eine Schlafanzug-Hose und Latschen. Neben dem Sessel sieht man seine üblichen schicken Schnürschuhe herumliegen. Er hat ein Headset aufgesetzt und seinen Laptop im Schoß. Jürgen verfolgt den Vortrag aus dem Home-Office. Auf dem Laptop-Deckel ist eine angebissene Banane zusehen.","tags":["java","jdk","graalvm"]},"fields":{"slug":"/talks/2020-04-29-jdk14_graalvm/","sourceName":"talks"}}},{"node":{"id":"0ebf9412-38af-5831-82e8-2b0aa744f924","html":"

Als Softwareentwickler ist man auf die Verwendung von Versionsverwaltungssystemen und deren Branching- und\nMerging-Strategien angewiesen. Vorgaben, wie diese Strategien angewendet werden müssen, liefern diverse\nBranching-Modelle. Sie sollen vor Allem den Entwickleralltag erleichtern, indem sie für eine saubere Historie sorgen,\nden Softwarereleaseprozess unterstützen oder verhindern, dass man in der Merge-Hölle landet. In dem Vortrag werden\neinige Branching-Modelle vorgestellt. Dabei wird der Frage auf den Grund gegangen, welche Art von Modell zu welcher Art\nvon Softwareprojekt passt und welche allgemeingültigen Vorgehensweisen beim Branching und Merging daraus gezogen werden\nkönnen.

\n

Materialien:

\n\n
\n

Hinweis

\n

Dieser Vortrag findet Online statt. Dazu haben wir ein Jitsi-Meeting aufgesetzt:\nhttps://meet.digitale-oberlausitz.eu/jug

","frontmatter":{"title":"Branching-Modelle","date":"2020-07-22T00:00:00.000Z","time":null,"speaker":["hannes_kretschmer"],"location":null,"virtual":true,"poster":{"childImageSharp":{"id":"1908832c-2f77-598f-a24b-2bcdee954b3a","gatsbyImageData":{"layout":"fullWidth","backgroundColor":"#d86838","images":{"fallback":{"src":"/static/595b224b634a1c6694d94578a61bc06c/84817/plakat_2020_07.png","srcSet":"/static/595b224b634a1c6694d94578a61bc06c/b8e70/plakat_2020_07.png 750w,\n/static/595b224b634a1c6694d94578a61bc06c/e5839/plakat_2020_07.png 1080w,\n/static/595b224b634a1c6694d94578a61bc06c/f51d5/plakat_2020_07.png 1366w,\n/static/595b224b634a1c6694d94578a61bc06c/84817/plakat_2020_07.png 1920w","sizes":"100vw"},"sources":[{"srcSet":"/static/595b224b634a1c6694d94578a61bc06c/e5d6f/plakat_2020_07.webp 750w,\n/static/595b224b634a1c6694d94578a61bc06c/0671f/plakat_2020_07.webp 1080w,\n/static/595b224b634a1c6694d94578a61bc06c/7e884/plakat_2020_07.webp 1366w,\n/static/595b224b634a1c6694d94578a61bc06c/e2c0d/plakat_2020_07.webp 1920w","type":"image/webp","sizes":"100vw"}]},"width":1,"height":1.4140625}}},"poster_alt":"Poster: Jürgen hat einen Schaffner-Hut auf dem Kopf. Er hält ein Klemmbrett in der Hand, auf dem ein Blatt Papier mit der Überschrift 'Fahrplan' geheftet ist. Unter der Überschrift ist ein Streckenplan mit Verzweigungen angedeutet.","tags":["java","git"]},"fields":{"slug":"/talks/2020-07-22-branching_modelle/","sourceName":"talks"}}},{"node":{"id":"fee8a0ec-6360-5446-9bb0-9ecbe5695536","html":"

Durch die Veröffentlichung von immer neuen Schwachstellen in Softwareprodukten rückt das Thema Application Security\nzunehmend in den Fokus vieler Softwareentwickler. Sichere Software zu erstellen muss aber keine große Herausforderung\nsein, wenn man Best Practices befolgt und der Application Security einen festen Platz im Entwicklungszyklus einräumt.\nZiel des Vortrags ist es, einen Überblick zu Secure Coding in Java zu vermitteln und die Wichtigkeit dieses Themas\nhervorzuheben. Im Detail wird außerdem an praktischen Beispielen demonstriert, wie Sicherheitsschwachstellen im\nProgrammcode aussehen, ausgenutzt und behoben werden können.

\n
\n

Hinweis

\n

Dieser Vortrag findet Online statt. Dazu haben wir ein Jitsi-Meeting aufgesetzt:\nhttps://meet.digitale-oberlausitz.eu/jug

","frontmatter":{"title":"Java Secure Coding in der Praxis","date":"2020-11-25T00:00:00.000Z","time":null,"speaker":["nico_foerster"],"location":null,"virtual":true,"poster":{"childImageSharp":{"id":"b5a8cec9-632e-5d2d-acc3-45cfdedb6dfa","gatsbyImageData":{"layout":"fullWidth","backgroundColor":"#182838","images":{"fallback":{"src":"/static/c2b6e13c2719de1c7a0da2b790067455/84817/plakat_2020_11.png","srcSet":"/static/c2b6e13c2719de1c7a0da2b790067455/b8e70/plakat_2020_11.png 750w,\n/static/c2b6e13c2719de1c7a0da2b790067455/e5839/plakat_2020_11.png 1080w,\n/static/c2b6e13c2719de1c7a0da2b790067455/f51d5/plakat_2020_11.png 1366w,\n/static/c2b6e13c2719de1c7a0da2b790067455/84817/plakat_2020_11.png 1920w","sizes":"100vw"},"sources":[{"srcSet":"/static/c2b6e13c2719de1c7a0da2b790067455/e5d6f/plakat_2020_11.webp 750w,\n/static/c2b6e13c2719de1c7a0da2b790067455/0671f/plakat_2020_11.webp 1080w,\n/static/c2b6e13c2719de1c7a0da2b790067455/7e884/plakat_2020_11.webp 1366w,\n/static/c2b6e13c2719de1c7a0da2b790067455/e2c0d/plakat_2020_11.webp 1920w","type":"image/webp","sizes":"100vw"}]},"width":1,"height":1.4140625}}},"poster_alt":"Poster: Jürgen trägt eine schwarze Woll-Mütze und eine schwarze Maske. Er trägt Handschuhe und sieht aus wie ein Einbrecher. Im Hintergrund sieht man eine Wohnungstür, vor der Jürgen kniet. Er hat einen Dietrich in der Hand und versucht gerade, dass Schloß zu knacken. Wir sehen Jürgens Rücken und er schaut zu uns über die Schulter. Seinem Blick zu urteilen, ist er überrascht weil wir ihn beim Einbrechen erwischt haben.","tags":["java","security"]},"fields":{"slug":"/talks/2020-11-25-secure_coding/","sourceName":"talks"}}},{"node":{"id":"3c969ad0-d843-57d0-92c4-91340d71851d","html":"

Web-Components sind eine Möglichkeit, auf Basis von Web-Standards wiederverwendbare UI-Komponenten zu bauen, die sich\nbrowserübergreifend und unabhängig von JavaScript-Frameworks einsetzen lassen. Im Vortrag möchte ich die relevanten\nWeb-Standards kurz vorstellen und im Live-Coding eine Web-Componente from Scratch bauen.

\n

Dabei möchte ich auch auf die Stärken und Schwächen von Web-Components eingehen und einige Erfahrungen teilen, die ich\nbei der Entwicklung einer firmeninternen Component-Library machen konnte.

\n
\n

Hinweis

\n

Dieser Vortrag findet Online statt. Dazu haben wir ein Jitsi-Meeting aufgesetzt:\nhttps://meet.digitale-oberlausitz.eu/jug

","frontmatter":{"title":"Web Components","date":"2021-01-27T00:00:00.000Z","time":null,"speaker":["manuel_mauky"],"location":null,"virtual":true,"poster":{"childImageSharp":{"id":"9bba5bef-9d0e-50c8-b451-ffed64ad6bd4","gatsbyImageData":{"layout":"fullWidth","backgroundColor":"#981848","images":{"fallback":{"src":"/static/540abccd98049d14ae192d2ada3cbcc3/84817/plakat_2021_01.png","srcSet":"/static/540abccd98049d14ae192d2ada3cbcc3/b8e70/plakat_2021_01.png 750w,\n/static/540abccd98049d14ae192d2ada3cbcc3/e5839/plakat_2021_01.png 1080w,\n/static/540abccd98049d14ae192d2ada3cbcc3/f51d5/plakat_2021_01.png 1366w,\n/static/540abccd98049d14ae192d2ada3cbcc3/84817/plakat_2021_01.png 1920w","sizes":"100vw"},"sources":[{"srcSet":"/static/540abccd98049d14ae192d2ada3cbcc3/e5d6f/plakat_2021_01.webp 750w,\n/static/540abccd98049d14ae192d2ada3cbcc3/0671f/plakat_2021_01.webp 1080w,\n/static/540abccd98049d14ae192d2ada3cbcc3/7e884/plakat_2021_01.webp 1366w,\n/static/540abccd98049d14ae192d2ada3cbcc3/e2c0d/plakat_2021_01.webp 1920w","type":"image/webp","sizes":"100vw"}]},"width":1,"height":1.4140625}}},"poster_alt":"Poster: Wir sehen ein großes Spinnennetz, in dem Jürgen gefangen ist. Er hängt verkehrt herum im Netz und sieht ziemlich erschrocken aus.","tags":["web"]},"fields":{"slug":"/talks/2021-01-27-webcomponents/","sourceName":"talks"}}},{"node":{"id":"1249d4ab-1401-5936-92b8-3d6dee7f14bb","html":"

MicroStream ist ein fundamental neues Persistenz-Framework für die native Speicherung komplexer Java Objektgraphen.\nD.h., Objekte werden damit genau so persistent gespeichert, wie diese im Hauptspeicher von der JVM verwaltet werden.\nUmgekehrt lassen sich zu jeder Zeit einzelne Subgraphen in den RAM laden und der Objektgraph im Hauptspeicher wird\nautomatisch aktualisiert.

\n

Dadurch ergeben sich völlig neue Möglichkeiten: Objektgraphen lassen sich als In-Memory Datenbank verwenden. Ein\nObjektgraph ist dabei eine sehr mächtige Multi-Model Datenstruktur. Es lassen sich beliebige Java-Typen, Collections\nsowie Formate wie JSON verwenden und beliebig kombinieren. Passend dazu bietet Java die perfekte Abfragesprache. Mit\nJava Streams dauert das Durchsuchen selbst sehr großer und komplexer Objektgraphen nur Mikrosekunden - bis zu 1000 Mal\nschneller als vergleichbare SQL-Abfragen und sogar sehr viel schneller als das direkte Lesen von Abfrageergebnissen aus\neinem lokalen Cache. DB-spezifische Datenstrukturen oder Formate werden damit bedeutungslos für Java. Keine teuren\nMappings mehr. Keine Datentyp-Konvertierungen mehr. Keine DB-spezifischen Abfragesprachen. Nur noch ein Datenmodell:\nJava-Klassen (POJOs). Kein zusätzliches Caching-Framework mehr. Keine unkomfortablen Objektkopien mehr. Simple\nArchitektur und typsicherer Abfrage-Code. Reine Core-Java Features anstatt DB-spezifische Konzepte. Das Endresultat ist\neine ultraschnelle Java In-Memory Datenbankanwendung oder Microservice.

\n

MicroStream wird bereits seit über 5 Jahren in Unternehmensanwendung produktiv eingesetzt. Jetzt wird MicroStream Open\nSource und Teil der populären Microservice Frameworks Helidon und Open Liberty.

\n

Materialien:

\n\n
\n

Hinweis

\n

Dieser Vortrag findet Online statt. Dazu haben wir ein Jitsi-Meeting aufgesetzt:\nhttps://meet.digitale-oberlausitz.eu/jug

","frontmatter":{"title":"Ultraschnelle Java In-Memory Datenbank-Anwendungen & Microservices mit MicroStream","date":"2021-06-30T00:00:00.000Z","time":null,"speaker":["markus_kett","christian_kuemmel"],"location":null,"virtual":true,"poster":{"childImageSharp":{"id":"1567f34a-c228-511c-a368-2041cf79e3fa","gatsbyImageData":{"layout":"fullWidth","backgroundColor":"#f85838","images":{"fallback":{"src":"/static/8f427a4552cb3ca64fe96511228f5a57/84817/plakat_2021_06.png","srcSet":"/static/8f427a4552cb3ca64fe96511228f5a57/b8e70/plakat_2021_06.png 750w,\n/static/8f427a4552cb3ca64fe96511228f5a57/e5839/plakat_2021_06.png 1080w,\n/static/8f427a4552cb3ca64fe96511228f5a57/f51d5/plakat_2021_06.png 1366w,\n/static/8f427a4552cb3ca64fe96511228f5a57/84817/plakat_2021_06.png 1920w","sizes":"100vw"},"sources":[{"srcSet":"/static/8f427a4552cb3ca64fe96511228f5a57/e5d6f/plakat_2021_06.webp 750w,\n/static/8f427a4552cb3ca64fe96511228f5a57/0671f/plakat_2021_06.webp 1080w,\n/static/8f427a4552cb3ca64fe96511228f5a57/7e884/plakat_2021_06.webp 1366w,\n/static/8f427a4552cb3ca64fe96511228f5a57/e2c0d/plakat_2021_06.webp 1920w","type":"image/webp","sizes":"100vw"}]},"width":1,"height":1.4140625}}},"poster_alt":"Poster: Jürgen sitzt am Tisch und überlegt. Er spielt Memory und hat gerade eine aufgedeckte Memory-Karte mit dem Java-Duke darauf in der Hand. Auf dem Tisch sind die anderen Karten zugedeckt, bis auf eine offene Karte. Auf dieser ist ein Datenbank-Symbol zu sehen.","tags":["database","java"]},"fields":{"slug":"/talks/2021-06-30-microstream/","sourceName":"talks"}}},{"node":{"id":"2e3945a5-7de9-5188-b447-47134c218967","html":"

Die Persistenz von IoT Daten sowie die Steuerung von IoT-Endgeräten benötigt im klassischen Verständnis eine\nServereinheit. Bei den Bastlern sind das oft on-premise Raspberry-Pi-Geräte oder gehostete Linux-Maschinen. Ihre\nkorrekte Konfiguration und anschließende Wartung kann Kopfzerbrechen bereiten. Es ist jedoch möglich, diese\nVerantwortung an den Cloud-Betreiber zu übertragen und eine entsprechende Infrastruktur zu schaffen. In der\nHands-On-Session wird gezeigt, wie man mit der Erstellung der gewünschten Infrastruktur in der AWS-Cloud beginnen kann.\nDazu wird ein Mikrocontroller vom Typ ESP als physisches IoT-Gerät verwendet.

\n
\n

Hinweis: Bitte meldet euch zur Teilnahme über jug-gr(at)digitale-oberlausitz.eu an. Wir haben eine begrenzte Anzahl\nvon 25 Plätzen zur Verfügung, die nicht überschritten werden darf.

","frontmatter":{"title":"Hebe deine IoT-Infrastruktur auf das Serverless-Level an","date":"2022-06-22T00:00:00.000Z","time":null,"speaker":["pawel_adaszewski"],"location":"zeiss","virtual":null,"poster":{"childImageSharp":{"id":"fff1b9ff-e9ff-5fc3-ac26-c00c71f16bde","gatsbyImageData":{"layout":"fullWidth","backgroundColor":"#f8b838","images":{"fallback":{"src":"/static/16e022022a45fa9f5687edc16e865aec/84817/plakat_2022_06.png","srcSet":"/static/16e022022a45fa9f5687edc16e865aec/b8e70/plakat_2022_06.png 750w,\n/static/16e022022a45fa9f5687edc16e865aec/e5839/plakat_2022_06.png 1080w,\n/static/16e022022a45fa9f5687edc16e865aec/f51d5/plakat_2022_06.png 1366w,\n/static/16e022022a45fa9f5687edc16e865aec/84817/plakat_2022_06.png 1920w","sizes":"100vw"},"sources":[{"srcSet":"/static/16e022022a45fa9f5687edc16e865aec/e5d6f/plakat_2022_06.webp 750w,\n/static/16e022022a45fa9f5687edc16e865aec/0671f/plakat_2022_06.webp 1080w,\n/static/16e022022a45fa9f5687edc16e865aec/7e884/plakat_2022_06.webp 1366w,\n/static/16e022022a45fa9f5687edc16e865aec/e2c0d/plakat_2022_06.webp 1920w","type":"image/webp","sizes":"100vw"}]},"width":1,"height":1.4140625}}},"poster_alt":"Poster: Jürgen spielt eine Flöte. Hinter ihm sieht man einen Weg auf dem Jürgen gelaufen kommt. Hinter ihm ist ein Smartphone und eine Waschmaschine, jeweils mit Armen, Beinen und Gesicht. Die Gesichter der Geräte sehen aus wie paralysiert und sie halten ihre Arme wie Zombies nach Vorn. Sie folgen Jürgen, so als wäre er der Rattenfänger von Hameln.","tags":["cloud","iot","serverless","infrastructure"]},"fields":{"slug":"/talks/2022-06-22-iot-infrastruktur-serverless/","sourceName":"talks"}}},{"node":{"id":"2b8e8a71-59c4-53fb-baa2-5b6136f7efe8","html":"

Mit der fischertechnik Lernfabrik haben wir eine Fabrik im Kleinformat! Steuerung, Edge und Cloud in Einem!

\n

\n \n Beim Bauen monolithischer Systeme nutzen Entwicklerteams eine Reihe typischer Muster um die Interaktion verschiedener\nSystemteile zu implementieren. Behält man diese Interaktionsmuster bei, während man ein System in verschiedene aufteilt,\nergeben sich oft große Komplexität und architektonische Nachteile, die oft die ursprüngliche Idee, die hinter der\nAufteilung stand, konterkarieren.

\n

Der Vortrag betrachtet ein konkretes Beispiel von Modulinteraktion in einem monolithischen System und identifiziert die\nProblemstellungen die sich ergeben, wenn man dieses System in exakt dem gleichen Interaktionsstil aufteilt. Danach wird\neine alternative Implementierungsstrategie für das monolithische System diskutiert, die die Modularität des\nUrsprungssystems stark verbessert und im Falle einer Aufteilung in unabhängige Teilsysteme zu einer besseren Architektur\nführt.

\n

Materialien:

\n","frontmatter":{"title":"Refactoring to a System of Systems","date":"2018-01-31T00:00:00.000Z","time":null,"speaker":["oliver_drotbohm"],"location":"saxsys","virtual":null,"poster":{"childImageSharp":{"id":"9685adbf-d27b-5f98-934a-54d7dc3fcdb8","gatsbyImageData":{"layout":"fullWidth","backgroundColor":"#383898","images":{"fallback":{"src":"/static/88afeee4b9b4d069f5896633d252a8d6/242cd/plakat_2018_01.png","srcSet":"/static/88afeee4b9b4d069f5896633d252a8d6/0e3b9/plakat_2018_01.png 750w,\n/static/88afeee4b9b4d069f5896633d252a8d6/e5839/plakat_2018_01.png 1080w,\n/static/88afeee4b9b4d069f5896633d252a8d6/242cd/plakat_2018_01.png 1241w","sizes":"100vw"},"sources":[{"srcSet":"/static/88afeee4b9b4d069f5896633d252a8d6/ebc34/plakat_2018_01.webp 750w,\n/static/88afeee4b9b4d069f5896633d252a8d6/0671f/plakat_2018_01.webp 1080w,\n/static/88afeee4b9b4d069f5896633d252a8d6/cbc2f/plakat_2018_01.webp 1241w","type":"image/webp","sizes":"100vw"}]},"width":1,"height":1.4141821112006447}}},"poster_alt":"Poster: Wir sehen Jürgen über die Schulter, wie er einen Bauplan in der Hand hält und mit einer Schere in kleinere Stücke zerschneidet.","tags":["architektur"]},"fields":{"slug":"/talks/2018-01-31-system_of_systems/","sourceName":"talks"}}},{"node":{"id":"67f5c805-4443-51af-9f87-0a9aff577dce","html":"

Die SAP Cloud Platform (SCP) beschreibt ein „Platform as a Service“ (PaaS) Angebot der SAP. Mit der SCP liefert SAP\nsowohl die Entwicklungsumgebung als auch die Laufzeitumgebung zur Realisierung kundenindividueller Erweiterungen von\nCloud- und On-Premise-Lösungen (z.B. SAP S/4HANA). Basierend auf der In-Memory-Plattform SAP HANA stellt die SCP eine\nVielzahl an Datenbank- und Cloud-Services zur Verfügung, welche das PaaS Angebot erweitern und die Integration von SAP-\nund Non-SAP-Lösungen ermöglichen. Im Vortrag wird illustriert, wie die Verbindung aus einer Java EE Applikation zu einem\nSAP On-Premise System hergestellt und dessen Funktionalität in der Cloud genutzt wird.

\n

Materialien:

\n","frontmatter":{"title":"Entwicklung von Java Applikationen auf der SAP Cloud Platform","date":"2018-02-28T00:00:00.000Z","time":null,"speaker":["jens_leuschner","mariusz_zienkiewicz"],"location":"cideon","virtual":null,"poster":{"childImageSharp":{"id":"65d7329c-3fb6-5a77-8b25-3984a599f9e8","gatsbyImageData":{"layout":"fullWidth","backgroundColor":"#78b8b8","images":{"fallback":{"src":"/static/55c9a31f3c453bcd2592f54f307655df/84817/plakat_2018_02.png","srcSet":"/static/55c9a31f3c453bcd2592f54f307655df/0e3b9/plakat_2018_02.png 750w,\n/static/55c9a31f3c453bcd2592f54f307655df/e5839/plakat_2018_02.png 1080w,\n/static/55c9a31f3c453bcd2592f54f307655df/006ba/plakat_2018_02.png 1366w,\n/static/55c9a31f3c453bcd2592f54f307655df/84817/plakat_2018_02.png 1920w","sizes":"100vw"},"sources":[{"srcSet":"/static/55c9a31f3c453bcd2592f54f307655df/ebc34/plakat_2018_02.webp 750w,\n/static/55c9a31f3c453bcd2592f54f307655df/0671f/plakat_2018_02.webp 1080w,\n/static/55c9a31f3c453bcd2592f54f307655df/659f9/plakat_2018_02.webp 1366w,\n/static/55c9a31f3c453bcd2592f54f307655df/e2c0d/plakat_2018_02.webp 1920w","type":"image/webp","sizes":"100vw"}]},"width":1,"height":1.4140625}}},"poster_alt":"Poster: Jürgen hält einige kleine Programm-Fenster in der Hand. Er hebt die Programme in eine Wolke, die sich hinter ihm befindet. Die Wolke sieht aus wie das Cloud-Symbol.","tags":["cloud"]},"fields":{"slug":"/talks/2018-02-28-java_auf_sap_cloud/","sourceName":"talks"}}},{"node":{"id":"dad0ee9f-ea34-5ce1-b7fe-a0e45b09e845","html":"

Während in einer klassischen Konzern-IT Standards und Blaupausen für immer gleiche Anwendungsarchitekturen sorgen,\nbetonen Microservice-Ansätze die technologische Freiheit. Zwei extreme Spielarten der Ausgestaltung von Makro- und\nMikroarchitektur. In diesem Vortrag lernt Ihr neben dem Konzept selbst auch die auf Eure Ziele abgestimmte Richtung, die\nIhr in dieser Fragestellung einschlagen solltet. Wie sieht in Eurem Kontext die Balance aus -- was gebt Ihr für alle\nElemente Eurer Anwendung(slandschaft) vor, wo lasst Ihr bewusst Spielraum? Und gibt es auch noch etwas dazwischen? Zu\ndiesem Zweck passen wir organisatorische und technologische Trends wie 2-Speed/Bimodale Architekturen, Cloud und\nDomänenorientierung in das Entwurfsdoppel Makro und Mikro ein.

","frontmatter":{"title":"Mikro- vs. Makroarchitektur – Spielraum und Spielregeln","date":"2018-03-20T00:00:00.000Z","time":null,"speaker":["stefan_zoerner"],"location":"hochschule_campus","virtual":null,"poster":{"childImageSharp":{"id":"96d1873a-e218-5bea-9d77-8dc2e42dbbc6","gatsbyImageData":{"layout":"fullWidth","backgroundColor":"#082868","images":{"fallback":{"src":"/static/6067d1db118af9c9218894cda3ecec37/84817/plakat_2018_03.png","srcSet":"/static/6067d1db118af9c9218894cda3ecec37/0e3b9/plakat_2018_03.png 750w,\n/static/6067d1db118af9c9218894cda3ecec37/e5839/plakat_2018_03.png 1080w,\n/static/6067d1db118af9c9218894cda3ecec37/006ba/plakat_2018_03.png 1366w,\n/static/6067d1db118af9c9218894cda3ecec37/84817/plakat_2018_03.png 1920w","sizes":"100vw"},"sources":[{"srcSet":"/static/6067d1db118af9c9218894cda3ecec37/ebc34/plakat_2018_03.webp 750w,\n/static/6067d1db118af9c9218894cda3ecec37/0671f/plakat_2018_03.webp 1080w,\n/static/6067d1db118af9c9218894cda3ecec37/659f9/plakat_2018_03.webp 1366w,\n/static/6067d1db118af9c9218894cda3ecec37/e2c0d/plakat_2018_03.webp 1920w","type":"image/webp","sizes":"100vw"}]},"width":1,"height":1.4140625}}},"poster_alt":"Poster: Jürgen freut sich und hält einen Bauplan in der Hand.","tags":["architektur"]},"fields":{"slug":"/talks/2018-03-20-mikro_vs_makroarchitektur/","sourceName":"talks"}}},{"node":{"id":"1b2f3079-33fa-52a7-8f63-17ed40feb17e","html":"

Die Ankündigung der Unterstützung von Kotlin für die Android-Entwicklung auf der Google I/O Keynote 2017 bewirkte\nspontan kräftigen Applaus. Kotlin ist nur eine weitere Programmiersprache für die JVM. Warum also bewirkt die\nverhältnismäßig dröge Ankündigung zur Unterstützung einer JVM-Sprache solche Begeisterung? Was ist das Besondere an\nKotlin gegenüber Java? Der Vortrag gibt einen ersten allgemeinen Einblick in die Sprachfeatures von Kotlin und gibt\nKotlin-Neulingen die Möglichkeit, sich selbst einen Eindruck über die Sprache zu verschaffen.

\n

Materialien:

\n","frontmatter":{"title":"Kotlin","date":"2018-04-25T00:00:00.000Z","time":null,"speaker":["tobias_blaschke"],"location":"saxsys","virtual":null,"poster":{"childImageSharp":{"id":"1a259f6b-01d1-58d9-9813-e4fb56a34153","gatsbyImageData":{"layout":"fullWidth","backgroundColor":"#d8b808","images":{"fallback":{"src":"/static/7425eb2154d8ac0def6b6a91b1bc7b2d/84817/plakat_2018_04.png","srcSet":"/static/7425eb2154d8ac0def6b6a91b1bc7b2d/0e3b9/plakat_2018_04.png 750w,\n/static/7425eb2154d8ac0def6b6a91b1bc7b2d/e5839/plakat_2018_04.png 1080w,\n/static/7425eb2154d8ac0def6b6a91b1bc7b2d/006ba/plakat_2018_04.png 1366w,\n/static/7425eb2154d8ac0def6b6a91b1bc7b2d/84817/plakat_2018_04.png 1920w","sizes":"100vw"},"sources":[{"srcSet":"/static/7425eb2154d8ac0def6b6a91b1bc7b2d/ebc34/plakat_2018_04.webp 750w,\n/static/7425eb2154d8ac0def6b6a91b1bc7b2d/0671f/plakat_2018_04.webp 1080w,\n/static/7425eb2154d8ac0def6b6a91b1bc7b2d/659f9/plakat_2018_04.webp 1366w,\n/static/7425eb2154d8ac0def6b6a91b1bc7b2d/e2c0d/plakat_2018_04.webp 1920w","type":"image/webp","sizes":"100vw"}]},"width":1,"height":1.4140625}}},"poster_alt":"Poster: Jürgen hält einen Globus in der Hand und platziert eine kleine Fahne an die Stelle der russischen Insel 'Kotlin'. Er trägt eine russische Fell-Mütze","tags":["programmiersprachen"]},"fields":{"slug":"/talks/2018-04-25-kotlin/","sourceName":"talks"}}},{"node":{"id":"bba11502-e73b-5c5e-9ce7-f4102b1daed5","html":"

Die RESTful-Architektur ist eine etablierte Möglichkeit, Schnittstellen zwischen Client und Server zu gestalten. Dies\nbringt allerdings einige Nachteile mit sich. Als Beispiel können hier die hohe Anzahl an benötigten Requests sowie die\nnur unvollständige Dokumentation der Schnittstelle genannt werden. Mit GraphQL entwickelte Facebook eine alternative\nAbfragesprache, welche die genannten Nachteile beseitigen sollte. Dabei wird eine Abfrage ähnlich der Struktur der\nJSON-Syntax an den Server übermittelt, welcher die gewünschten Daten mit nur einer Antwort zur Verfügung stellt.

\n

Im Vortrag wird GraphQL anhand von Beispielen vorgestellt und dabei sowohl die Client- als auch Serverseite betrachtet.

\n

Materialien:

\n","frontmatter":{"title":"GraphQL","date":"2018-05-30T00:00:00.000Z","time":null,"speaker":["stephan_strehler"],"location":"hochschule_campus","virtual":null,"poster":{"childImageSharp":{"id":"90e1be0b-07fd-5977-ad85-c716671424c1","gatsbyImageData":{"layout":"fullWidth","backgroundColor":"#e838a8","images":{"fallback":{"src":"/static/70801d1cf0778b63b022c58e167483bf/84817/plakat_2018_05.png","srcSet":"/static/70801d1cf0778b63b022c58e167483bf/b8e70/plakat_2018_05.png 750w,\n/static/70801d1cf0778b63b022c58e167483bf/e5839/plakat_2018_05.png 1080w,\n/static/70801d1cf0778b63b022c58e167483bf/f51d5/plakat_2018_05.png 1366w,\n/static/70801d1cf0778b63b022c58e167483bf/84817/plakat_2018_05.png 1920w","sizes":"100vw"},"sources":[{"srcSet":"/static/70801d1cf0778b63b022c58e167483bf/e5d6f/plakat_2018_05.webp 750w,\n/static/70801d1cf0778b63b022c58e167483bf/0671f/plakat_2018_05.webp 1080w,\n/static/70801d1cf0778b63b022c58e167483bf/7e884/plakat_2018_05.webp 1366w,\n/static/70801d1cf0778b63b022c58e167483bf/e2c0d/plakat_2018_05.webp 1920w","type":"image/webp","sizes":"100vw"}]},"width":1,"height":1.4140625}}},"poster_alt":"Poster: Jürgen grinst und hält eine Tasse Kaffee in der Hand. Auf der Tasse ist das GraphQL-Logo zu sehen.","tags":["programmiersprachen","web","architektur"]},"fields":{"slug":"/talks/2018-05-30-graphql/","sourceName":"talks"}}},{"node":{"id":"f17a3451-b9a5-5b42-b740-3c15fe9268f5","html":"

Unveränderliche Datenstrukturen sind ein wichtiges Werkzeug der funktionalen Programmierung. Aber auch abseits dessen\nkönnen Immutables ungemein nützlich sein: Richtig angewandt erhöhen sie die Verständlichkeit des Codes, da\nEntwicklerInnen nicht mehr auf die mühsame Suche gehen müssen, an welcher Stelle ein Objekt möglicherweise ungewollt\nverändert wurde. Darüber hinaus sind Immutables inhärent Threadsafe und können auch hier die Nachvollziehbarkeit des\nCodes erhöhen.

\n

Da Java als Sprache aber keine besondere Unterstützung für Immutables mitbringt, müssen EntwicklerInnen auf Patterns und\nBibliotheken zurückgreifen, um in den Genuss von unveränderlichen Datenstrukturen zu kommen. Denn natürlich müssen auch\nin funktionalen Programmen letztlich Veränderungen der Daten abgebildet werden und dafür bedarf es geeigneter\nUnterstützung.

\n

Im Vortrag möchte ich neben einer grundsätzlichen Einführung in die Thematik auch einige dieser Techniken vorstellen und\nihre Vor- und Nachteile besprechen.

\n

Materialien:

\n","frontmatter":{"title":"Immutable Data - Unveränderliche Daten im Griff","date":"2018-06-27T00:00:00.000Z","time":null,"speaker":["manuel_mauky"],"location":"hochschule_campus","virtual":null,"poster":{"childImageSharp":{"id":"314ba704-f1f4-5d2c-8535-b32da028a3c9","gatsbyImageData":{"layout":"fullWidth","backgroundColor":"#780838","images":{"fallback":{"src":"/static/1fae33eb72f57d492a22e010e53219f1/84817/plakat_2018_06.png","srcSet":"/static/1fae33eb72f57d492a22e010e53219f1/b8e70/plakat_2018_06.png 750w,\n/static/1fae33eb72f57d492a22e010e53219f1/e5839/plakat_2018_06.png 1080w,\n/static/1fae33eb72f57d492a22e010e53219f1/f51d5/plakat_2018_06.png 1366w,\n/static/1fae33eb72f57d492a22e010e53219f1/84817/plakat_2018_06.png 1920w","sizes":"100vw"},"sources":[{"srcSet":"/static/1fae33eb72f57d492a22e010e53219f1/e5d6f/plakat_2018_06.webp 750w,\n/static/1fae33eb72f57d492a22e010e53219f1/0671f/plakat_2018_06.webp 1080w,\n/static/1fae33eb72f57d492a22e010e53219f1/7e884/plakat_2018_06.webp 1366w,\n/static/1fae33eb72f57d492a22e010e53219f1/e2c0d/plakat_2018_06.webp 1920w","type":"image/webp","sizes":"100vw"}]},"width":1,"height":1.4140625}}},"poster_alt":"Poster: Jürgen steht vor einem großen Steinblock, der fast aussieht wie ein Grabstein. Auf dem Stein sind lauter Nullen und Einsen eingraviert. Er hält einen Hammer und Meißel in der Hand.","tags":["programmiersprachen","functional-programming"]},"fields":{"slug":"/talks/2018-06-27-immutable-data/","sourceName":"talks"}}},{"node":{"id":"f3a5b0e9-0351-58c1-a827-a5f39196ddee","html":"

Spätestens seit Java 8 gibt es monadische Typen in Java. Aber was bedeutet das eigentlich? Was sind die Eigenschaften,\ndie Monaden ausmachen? Und wo liegen unsere Schwierigkeiten beim Verständnis von Monaden? Dieser Vortrag beschreibt, was\neine Monade ist und wie wir eine monadische Transaktion nutzen können, um in domänenspezifischer Sprache mit einer\nDatenbank zu reden. Hierbei bauen wir monadische Transaktionen in ein vorhandenes Repository ein. Weiter beleuchten wir\ndie Vor- und Nachteile dieses Ansatzes und diskutieren die Unterstützung von Monaden in Java. Voraussetzung sind erste\nErfahrungen mit funktionaler Programmierung und Lambdas.

\n

Materialien:

\n","frontmatter":{"title":"Monadische Transaktionen","date":"2018-11-23T00:00:00.000Z","time":null,"speaker":["gregor_trefs"],"location":"hochschule_campus","virtual":null,"poster":{"childImageSharp":{"id":"918002c9-e393-5b8d-a2d6-ee73c1735383","gatsbyImageData":{"layout":"fullWidth","backgroundColor":"#680838","images":{"fallback":{"src":"/static/d29473cce93e3ade3231fd7ea7b0188e/84817/plakat_2018_11.png","srcSet":"/static/d29473cce93e3ade3231fd7ea7b0188e/b8e70/plakat_2018_11.png 750w,\n/static/d29473cce93e3ade3231fd7ea7b0188e/e5839/plakat_2018_11.png 1080w,\n/static/d29473cce93e3ade3231fd7ea7b0188e/f51d5/plakat_2018_11.png 1366w,\n/static/d29473cce93e3ade3231fd7ea7b0188e/84817/plakat_2018_11.png 1920w","sizes":"100vw"},"sources":[{"srcSet":"/static/d29473cce93e3ade3231fd7ea7b0188e/e5d6f/plakat_2018_11.webp 750w,\n/static/d29473cce93e3ade3231fd7ea7b0188e/0671f/plakat_2018_11.webp 1080w,\n/static/d29473cce93e3ade3231fd7ea7b0188e/7e884/plakat_2018_11.webp 1366w,\n/static/d29473cce93e3ade3231fd7ea7b0188e/e2c0d/plakat_2018_11.webp 1920w","type":"image/webp","sizes":"100vw"}]},"width":1,"height":1.4140625}}},"poster_alt":"Poster: Jürgen grinst und hält ein Tablett in der Hand. Auf dem Tablett steht eine durchsichtige Flasche mit gelber Limo darin. Auf dem Etikett steht 'Li-Monade' geschrieben.","tags":["functional-programming"]},"fields":{"slug":"/talks/2018-11-23-monadische_transaktionen/","sourceName":"talks"}}},{"node":{"id":"6c6f82f3-26da-59ee-a8b6-8c178256b6b7","html":"

Anstelle über Microservices, NO-SQL Lösungen oder Container-Management zu reden werden im Workshop Bestandteile des\nStandard Java API vorgestellt. Diese Java Features helfen jedem Entwickler eine wartbare und zukunftssichere Anwendung\nzu entwickeln, egal ob mit Spring, JavaFX oder JavaEE. Verschiedene Sprach-Features und Konzepte der Standard Java APIs\nwerden genauer unter die Lupe genommen und deren sinnvoller Einsatz anhand von Beispielen gezeigt. Hierdurch werden\nunter anderem folgende Fragen beantwortet: Wie funktionieren eigentlich Annotations? Wie entwickle ich Plug-In\nFunktionalität ohne auf OSGI zurückgreifen zu müssen? Wie gehe ich am besten mit NullPointerExceptions um? Wie schreibe\nich nebenläufigen Code der trotzdem wartbar ist?

","frontmatter":{"title":"Java APIs - the missing manual","date":"2019-01-31T00:00:00.000Z","time":null,"speaker":["hendrik_ebbers"],"location":"cideon","virtual":null,"poster":{"childImageSharp":{"id":"8509bc59-0ad5-5d24-87e3-f253d53d68b2","gatsbyImageData":{"layout":"fullWidth","backgroundColor":"#3858b8","images":{"fallback":{"src":"/static/8c4759d0cca5ff005992863b4cbbfd0c/84817/plakat_2019_01.png","srcSet":"/static/8c4759d0cca5ff005992863b4cbbfd0c/b8e70/plakat_2019_01.png 750w,\n/static/8c4759d0cca5ff005992863b4cbbfd0c/e5839/plakat_2019_01.png 1080w,\n/static/8c4759d0cca5ff005992863b4cbbfd0c/f51d5/plakat_2019_01.png 1366w,\n/static/8c4759d0cca5ff005992863b4cbbfd0c/84817/plakat_2019_01.png 1920w","sizes":"100vw"},"sources":[{"srcSet":"/static/8c4759d0cca5ff005992863b4cbbfd0c/e5d6f/plakat_2019_01.webp 750w,\n/static/8c4759d0cca5ff005992863b4cbbfd0c/0671f/plakat_2019_01.webp 1080w,\n/static/8c4759d0cca5ff005992863b4cbbfd0c/7e884/plakat_2019_01.webp 1366w,\n/static/8c4759d0cca5ff005992863b4cbbfd0c/e2c0d/plakat_2019_01.webp 1920w","type":"image/webp","sizes":"100vw"}]},"width":1,"height":1.4140625}}},"poster_alt":"Poster: Jürgen sitzt mit seiner Lesebrille in seinem Sessel und liest ein Buch. Auf dem Buchrücken steht 'Javadoc'","tags":["java"]},"fields":{"slug":"/talks/2019-01-31_java_apis_missing_manual/","sourceName":"talks"}}},{"node":{"id":"f37a3185-cf74-5401-9461-328751a5a63e","html":"

Java Reflections sind ein Feature der Java Sprache und werden von der JVM für das interne Handling von Klassen, Feldern\nund Methoden verwendet. Intern werden darüber Methodenaufrufe, Zugriffsrechte wie public/privat oder seit Java 9 auch\ndie Modulexporte geregelt.

\n

Dieses Feature kann man sich in der normalen Java Umgebung zu Nutze machen, um auf alle Informationen einer Klasse\nzuzugreifen. So ist es möglich, auf deren Methoden und Felder zuzugreifen, selbst wenn diese privat sind. Felder können\nüberschreiben, Template-Parameter in Feldern und Methoden angezeigt, sowie auch Annotationen der Klasse, Methoden und\nFelder gelesen werden. Am Beispiel eines abstrakten Klassen-Editors werden diese Möglichkeiten in dem Vortrag näher\nbetrachtet.

","frontmatter":{"title":"Java Reflection: Classes behind the scenes","date":"2019-02-27T00:00:00.000Z","time":null,"speaker":["erik_jaehne"],"location":"saxsys","virtual":null,"poster":{"childImageSharp":{"id":"b2cb5256-0c61-5e8b-8a34-23f74562f16f","gatsbyImageData":{"layout":"fullWidth","backgroundColor":"#78b8b8","images":{"fallback":{"src":"/static/15923e5b77de857597a70091dfe03bd5/84817/plakat_2019_02.png","srcSet":"/static/15923e5b77de857597a70091dfe03bd5/b8e70/plakat_2019_02.png 750w,\n/static/15923e5b77de857597a70091dfe03bd5/e5839/plakat_2019_02.png 1080w,\n/static/15923e5b77de857597a70091dfe03bd5/f51d5/plakat_2019_02.png 1366w,\n/static/15923e5b77de857597a70091dfe03bd5/84817/plakat_2019_02.png 1920w","sizes":"100vw"},"sources":[{"srcSet":"/static/15923e5b77de857597a70091dfe03bd5/e5d6f/plakat_2019_02.webp 750w,\n/static/15923e5b77de857597a70091dfe03bd5/0671f/plakat_2019_02.webp 1080w,\n/static/15923e5b77de857597a70091dfe03bd5/7e884/plakat_2019_02.webp 1366w,\n/static/15923e5b77de857597a70091dfe03bd5/e2c0d/plakat_2019_02.webp 1920w","type":"image/webp","sizes":"100vw"}]},"width":1,"height":1.4140625}}},"poster_alt":"Poster: Jürgen grinst und hält eine Tasse Kaffee in der Hand.","tags":["java"]},"fields":{"slug":"/talks/2019-02-27_reflection/","sourceName":"talks"}}},{"node":{"id":"dd2fc902-b2b3-5256-b24b-e09f17f45415","html":"

Die Website der JUG Görlitz läuft fast Serverless. Natürlich muss ein Webserver Dateien ausliefern aber ansonsten sind\nkeine Datenbank, Applicationserver, PHP oder sonstige aktive Serverkomponenten im Einsatz. Stattdessen sind alle Inhalte\nals Markdown-Textdateien in einem Git-Repository abgelegt (dieser Talk\nbeispielsweise\nhier). Ein so\ngenannter \"Static-Site-Generator\" generiert daraus HTML-, CSS- und JavaScript-Dateien, die nur noch von einem ganz\nnormalen HTTP-Server ausgeliefert werden müssen. Dieses Vorgehen vereinfacht das Hosting, beschleunigt Website-Aufrufe\nund minimiert die Angriffsfläche des Servers.

\n

Im Vortrag wird das Konzept von Static-Site-Generators erklärt und die möglichen Einsatzgebiete beschrieben. Mit dem\nTool Gatsby werden wir eine einfache Blog-Website bauen. Am Beispiel der JUG-Website wird\naber auch gezeigt, wie komplexere Daten-Modelle mit mehreren Entitäten (Vorträge, Speaker,\nVeranstaltungsorte, Tags) umgesetzt werden können. Die technische Grundlage von Gatsby stellt\nReact für Templates und GraphQL für die Daten-Organisation dar.

\n

Materialien:

\n","frontmatter":{"title":"Static-Site-Generators","date":"2019-03-27T00:00:00.000Z","time":null,"speaker":["manuel_mauky"],"location":"hochschule_campus","virtual":null,"poster":{"childImageSharp":{"id":"bffb7b05-0e58-5922-92df-21ce241ccd84","gatsbyImageData":{"layout":"fullWidth","backgroundColor":"#a8c868","images":{"fallback":{"src":"/static/a69cadfbb400620dadfb89d178c1c8db/a6b6d/plakat_2019_03.png","srcSet":"/static/a69cadfbb400620dadfb89d178c1c8db/0e3b9/plakat_2019_03.png 750w,\n/static/a69cadfbb400620dadfb89d178c1c8db/7aaf4/plakat_2019_03.png 1080w,\n/static/a69cadfbb400620dadfb89d178c1c8db/a6b6d/plakat_2019_03.png 1240w","sizes":"100vw"},"sources":[{"srcSet":"/static/a69cadfbb400620dadfb89d178c1c8db/ebc34/plakat_2019_03.webp 750w,\n/static/a69cadfbb400620dadfb89d178c1c8db/47da9/plakat_2019_03.webp 1080w,\n/static/a69cadfbb400620dadfb89d178c1c8db/5c55f/plakat_2019_03.webp 1240w","type":"image/webp","sizes":"100vw"}]},"width":1,"height":1.414516129032258}}},"poster_alt":"Poster: Jürgen hält einen Kasten in der Hand mit jeweils einem Trichter oben und unten. Oben gibt er zwei Dokumente hinein und unten fällt das Bild einer Webseite heraus. Auf dem Kasten ist das Logo von Gatsbyjs zu sehen.","tags":["web","javascript"]},"fields":{"slug":"/talks/2019-03-27-static-site-generators/","sourceName":"talks"}}},{"node":{"id":"9a7e9567-b7fe-59cd-90fe-aec93c90f2af","html":"

Mit dem JDK-Enhancement-Proposal (JEP 322) wird die zeitbasierte Java-Release-Versionierung definiert, die auf dem\naktuellen Java SE Version-String-Schema basiert und die Namensgebung für die kommenden Versionen der Java SE Plattform\nund vom JDK vorgibt. Seit dem Jahr 2018 erscheinen die künftigen Java-Feature-Releases alle 6 Monate. Das JDK 11 wurde\nals Long-Term-Support-Release (LTS-Release) im September 2018 veröffentlicht und nach sechs Monaten folgte das OpenJDK\n12 im März 2019. Mit dem zeitlichen Abstand von sechs Monaten bekommen die Entwickler wesentlich schneller neue\nJava-Funktionsmerkmale als dies mit dem bisherigen Dreijahreszyklus der Fall war. Zwischen den\nOpenJDK/JDK-Feature-Releases sind zwei Updates geplant, bei denen es um die Wartung und Bugfixes geht, die wie gewohnt,\njeweils im Januar, April, Juli und Oktober eines Jahres als Java Critical Patch Update erscheinen werden. Die Planung\nsieht vor, jeweils alle drei Jahre ein weiteres Java-LTS-Release zu veröffentlichen, damit der Anwendungsbetrieb eine\nstabile und ausgereifte Java-Basis bekommt, die mit der nachfolgenden Versionierung $FEATURE.$INTERIM.$UPDATE.$PATCH\ngekennzeichnet wird. Im Vortrag werden Beispiele zum Version-String besprochen, sowie Empfehlungen diskutiert, wie die\nkünftige Java-Strategie mit dem OpenJDK, Oracle JDK (LTS) und der neuen Java SE Subscription (Support) für die\nEntwickler und für den Anwendungsbetrieb aussehen soll. Zudem wird die Weiterentwicklung der OpenJFX/JavaFX\nUI-Technologie mit den Aktivitäten der Developer-Community dargestellt.

","frontmatter":{"title":"It's a JDK jungle out there - oder wie es mit den neuen Java-Versionen geordnet weitergeht","date":"2019-04-24T00:00:00.000Z","time":null,"speaker":["wolfgang_weigend"],"location":"saxsys","virtual":null,"poster":{"childImageSharp":{"id":"e335d1a1-3789-5e42-9670-a3e1c361eadc","gatsbyImageData":{"layout":"fullWidth","backgroundColor":"#f8f8f8","images":{"fallback":{"src":"/static/32de550f9e63747cb85192fa0598ae2c/b6707/plakat_2019_04.png","srcSet":"/static/32de550f9e63747cb85192fa0598ae2c/0e3b9/plakat_2019_04.png 750w,\n/static/32de550f9e63747cb85192fa0598ae2c/7aaf4/plakat_2019_04.png 1080w,\n/static/32de550f9e63747cb85192fa0598ae2c/006ba/plakat_2019_04.png 1366w,\n/static/32de550f9e63747cb85192fa0598ae2c/b6707/plakat_2019_04.png 1920w","sizes":"100vw"},"sources":[{"srcSet":"/static/32de550f9e63747cb85192fa0598ae2c/ebc34/plakat_2019_04.webp 750w,\n/static/32de550f9e63747cb85192fa0598ae2c/47da9/plakat_2019_04.webp 1080w,\n/static/32de550f9e63747cb85192fa0598ae2c/659f9/plakat_2019_04.webp 1366w,\n/static/32de550f9e63747cb85192fa0598ae2c/c86cf/plakat_2019_04.webp 1920w","type":"image/webp","sizes":"100vw"}]},"width":1,"height":1.4145833333333333}}},"poster_alt":"Poster: Jürgen hält eine Schriftrolle mit offiziellen Siegel in der Hand und liest wie ein mittelalterlicher Herold daraus vor. Wir sehen leider nicht den Text auf der Schriftrolle.","tags":["java","jdk"]},"fields":{"slug":"/talks/2019-04-24_jdk_jungle/","sourceName":"talks"}}},{"node":{"id":"a5f7b4d5-03e6-588d-9778-62b4b8c44286","html":"

Der Vortrag erläutert zunächst die Grundlagen der Standards OAuth 2.0 und OpenID-Connect und geht danach auf den Einsatz\ndieser Standards mittels Keycloak ein. Dabei wird anhand einer Beispielanwendung (React, Spring Boot) gezeigt, wie man\nKeycloak in seine Anwendung einbinden kann.

","frontmatter":{"title":"OAuth 2.0/OpenIDConnect mit Keycloak","date":"2019-05-29T00:00:00.000Z","time":null,"speaker":["denny_israel"],"location":"hochschule_campus","virtual":null,"poster":{"childImageSharp":{"id":"cb4beaed-8514-5a8a-8dfe-7bec12fbdd27","gatsbyImageData":{"layout":"fullWidth","backgroundColor":"#386898","images":{"fallback":{"src":"/static/eaf6c5845a5ab5a40e0dd634a7eaed23/b6707/plakat_2019_05.png","srcSet":"/static/eaf6c5845a5ab5a40e0dd634a7eaed23/0e3b9/plakat_2019_05.png 750w,\n/static/eaf6c5845a5ab5a40e0dd634a7eaed23/7aaf4/plakat_2019_05.png 1080w,\n/static/eaf6c5845a5ab5a40e0dd634a7eaed23/006ba/plakat_2019_05.png 1366w,\n/static/eaf6c5845a5ab5a40e0dd634a7eaed23/b6707/plakat_2019_05.png 1920w","sizes":"100vw"},"sources":[{"srcSet":"/static/eaf6c5845a5ab5a40e0dd634a7eaed23/ebc34/plakat_2019_05.webp 750w,\n/static/eaf6c5845a5ab5a40e0dd634a7eaed23/47da9/plakat_2019_05.webp 1080w,\n/static/eaf6c5845a5ab5a40e0dd634a7eaed23/659f9/plakat_2019_05.webp 1366w,\n/static/eaf6c5845a5ab5a40e0dd634a7eaed23/c86cf/plakat_2019_05.webp 1920w","type":"image/webp","sizes":"100vw"}]},"width":1,"height":1.4145833333333333}}},"poster_alt":"Poster: Jürgen trägt einen komplett schwarzen Anzug, eine Sonnenbrille und einen verkabelten Ohrstöpsel. Er sieht aus wie ein Geheimagent. Er schaut streng und hält die flache Hand vor sich um uns zurückzuhalten.","tags":["java","security"]},"fields":{"slug":"/talks/2019-05-29-oauth/","sourceName":"talks"}}},{"node":{"id":"6895717e-291c-581d-8fef-3b5e73bc8369","html":"

HashMap und ArrayList kennt jeder, na klar. Aber wann stellen diese eigentlich die richtige Wahl dar? Und vor allem:\nWann nicht? Das Collections Framework enthält zahlreiche, teils recht spezialisierte Implementierungen. Doch viele\nEntwickler kennen nur einen kleinen Teil davon. Schon mal was von EnumSet oder WeakHashMap gehört? Und was ist der\nUnterschied zwischen ConcurrentSkipListMap und ConcurrentHashMap? Für jeden Java-Entwickler ist es wichtig, die Stärken\nund Schwächen der einzelnen Implementierungen zu kennen. Dieser Vortrag diskutiert Details wie Threadsicherheit,\nLaufzeitverhalten und sinnvolle Initialisierung anhand einiger ausgewählter Collection-Klassen.

\n

Materialien:

\n","frontmatter":{"title":"Wie gut kennst Du das Collections Framework?","date":"2019-06-26T00:00:00.000Z","time":null,"speaker":["thilo_frotscher"],"location":"cideon","virtual":null,"poster":{"childImageSharp":{"id":"ecc9b098-2be1-50e1-87d8-48488a256061","gatsbyImageData":{"layout":"fullWidth","backgroundColor":"#389838","images":{"fallback":{"src":"/static/359c95f2d624a1b8d7167b6ff2c5340c/b6707/plakat_2019_06.png","srcSet":"/static/359c95f2d624a1b8d7167b6ff2c5340c/0e3b9/plakat_2019_06.png 750w,\n/static/359c95f2d624a1b8d7167b6ff2c5340c/7aaf4/plakat_2019_06.png 1080w,\n/static/359c95f2d624a1b8d7167b6ff2c5340c/006ba/plakat_2019_06.png 1366w,\n/static/359c95f2d624a1b8d7167b6ff2c5340c/b6707/plakat_2019_06.png 1920w","sizes":"100vw"},"sources":[{"srcSet":"/static/359c95f2d624a1b8d7167b6ff2c5340c/ebc34/plakat_2019_06.webp 750w,\n/static/359c95f2d624a1b8d7167b6ff2c5340c/47da9/plakat_2019_06.webp 1080w,\n/static/359c95f2d624a1b8d7167b6ff2c5340c/659f9/plakat_2019_06.webp 1366w,\n/static/359c95f2d624a1b8d7167b6ff2c5340c/c86cf/plakat_2019_06.webp 1920w","type":"image/webp","sizes":"100vw"}]},"width":1,"height":1.4145833333333333}}},"poster_alt":"Poster: Jürgen trägt eine Sonnenbrille und ein buntes Hemd mit Blumen darauf. Er hält sich die Hand ans Kinn und grinst, so als würde er gerade einen Plan schmieden. An seinem Hemd hängt ein Schild mit der Aufschrift 'Sommer Collection'.","tags":["java"]},"fields":{"slug":"/talks/2019-06-26-collection-framework/","sourceName":"talks"}}},{"node":{"id":"a0f32bfb-f9fa-5c9c-a70d-ffd93be7d859","html":"

Hattest du auch schon mal das Problem, dass du deine eigenen komplizierten und unleserlichen Testfälle nicht mehr\nverstanden hast? Wir kennen das Problem und zeigen euch mögliche Lösungen.

","frontmatter":{"title":"Advanced BDD Tests","date":"2019-11-28T00:00:00.000Z","time":null,"speaker":["maik_wagner"],"location":"tallence","virtual":null,"poster":{"childImageSharp":{"id":"6f443280-7e6e-5951-ab2a-0815064e81b4","gatsbyImageData":{"layout":"fullWidth","backgroundColor":"#d86868","images":{"fallback":{"src":"/static/c5e4690e979964e9c44af61d883856f8/b6707/plakat_2019_11.png","srcSet":"/static/c5e4690e979964e9c44af61d883856f8/0e3b9/plakat_2019_11.png 750w,\n/static/c5e4690e979964e9c44af61d883856f8/7aaf4/plakat_2019_11.png 1080w,\n/static/c5e4690e979964e9c44af61d883856f8/006ba/plakat_2019_11.png 1366w,\n/static/c5e4690e979964e9c44af61d883856f8/b6707/plakat_2019_11.png 1920w","sizes":"100vw"},"sources":[{"srcSet":"/static/c5e4690e979964e9c44af61d883856f8/ebc34/plakat_2019_11.webp 750w,\n/static/c5e4690e979964e9c44af61d883856f8/47da9/plakat_2019_11.webp 1080w,\n/static/c5e4690e979964e9c44af61d883856f8/659f9/plakat_2019_11.webp 1366w,\n/static/c5e4690e979964e9c44af61d883856f8/c86cf/plakat_2019_11.webp 1920w","type":"image/webp","sizes":"100vw"}]},"width":1,"height":1.4145833333333333}}},"poster_alt":"Poster: Jürgen hält ein Klemmbrett in der Hand, auf dem ein Blatt Papier zusehen ist. Auf dem Blatt steht 'Testplan' oben und darunter sind drei Checkboxen mit angedeuteten Textzeilen daneben.","tags":["java","testen"]},"fields":{"slug":"/talks/2019-11-28-advanced-bdd-tests/","sourceName":"talks"}}},{"node":{"id":"c7067e06-b5be-50ec-83d2-9ea30dc14640","html":"

\"Create Apps, Not the Platform\" - Cloud Foundry verspricht, dass sich Entwicker voll und ganz auf die\nAnwendungsentwicklung fokussieren können, anstatt einen erheblichen Teil ihrer Zeit auf Infrastruktur, Deployment usw.\nverwenden zu müssen. Was ist Cloud Foundry überhaupt? Und hält sie, was sie verspricht?

","frontmatter":{"title":"Innovationsmotor Cloud Foundry!?","date":"2020-01-29T00:00:00.000Z","time":null,"speaker":["simon_roloff"],"location":"saxsys","virtual":null,"poster":{"childImageSharp":{"id":"abe046a7-29a3-5710-9b2b-cf4a5ff0c1a2","gatsbyImageData":{"layout":"fullWidth","backgroundColor":"#583898","images":{"fallback":{"src":"/static/5ef746b99e05db0762f96d0a28f278da/84817/plakat_2020-01.png","srcSet":"/static/5ef746b99e05db0762f96d0a28f278da/b8e70/plakat_2020-01.png 750w,\n/static/5ef746b99e05db0762f96d0a28f278da/e5839/plakat_2020-01.png 1080w,\n/static/5ef746b99e05db0762f96d0a28f278da/f51d5/plakat_2020-01.png 1366w,\n/static/5ef746b99e05db0762f96d0a28f278da/84817/plakat_2020-01.png 1920w","sizes":"100vw"},"sources":[{"srcSet":"/static/5ef746b99e05db0762f96d0a28f278da/e5d6f/plakat_2020-01.webp 750w,\n/static/5ef746b99e05db0762f96d0a28f278da/0671f/plakat_2020-01.webp 1080w,\n/static/5ef746b99e05db0762f96d0a28f278da/7e884/plakat_2020-01.webp 1366w,\n/static/5ef746b99e05db0762f96d0a28f278da/e2c0d/plakat_2020-01.webp 1920w","type":"image/webp","sizes":"100vw"}]},"width":1,"height":1.4140625}}},"poster_alt":"Wir sehen das typische Cloud-Symbol einer Wolke im Vordergrund. Jürgen stützt sich auf die Wolke, so als wäre es ein Kopfkissen. Er stützt seinen Kopf mit einem Arm ab und schaut ein bisschen verträumt. Er wirkt wie in Gedanken versunken.","tags":["cloud"]},"fields":{"slug":"/talks/2020-01-27-cloud-foundry/","sourceName":"talks"}}},{"node":{"id":"92ec8c3c-c428-5ca1-bb98-7b8ebac5cdfb","html":"

Nach der Freigabe vom JDK 14 werden die aktuellen Merkmale vorgestellt. Neben Bug-Fixes und Security-Patches, stecken im\nJDK 14 Feature-Release, Sprach- und JVM-Änderungen, Erweiterungen, zugefügte und entfernte Klassen und Methoden,\ndeprecated markierte Features und JDK-Tool-Änderungen. Bereits mit der Einführung der JDK Version 11 wurden die\ntechnischen Unterschiede bei der Gleichstellung vom Oracle JDK mit dem Oracle OpenJDK entfernt. Bei diesem\nTechnologietransfer sind alle Bestandteile vom Oracle JDK als Open-Source-Implentierungen in das OpenJDK geflossen,\nsodass das Oracle JDK 14 durch das OpenJDK 14 augetauscht werden kann. Die Anwender können ein JDK oder ein OpenJDK\nverschiedener Hersteller frei auswählen. Dazu werden die Migrationsaspekte älterer Java-Anwendungen zum JDK 14\nerläutert. Im Vortrag wird auch ein Blick auf den langfristigen Einsatz vom Java Modulsystem geworfen und dies anhand\nvon Beispielen durch Erstellung einer individueller Java Runtime mit der Anwendung verdeutlicht. Zudem wird die die\nGraalVM als universelle Virtuelle Maschine (VM) für Anwendungen im Java Ökosystem betrachtet.

\n

Materialien:

\n\n
\n

Hinweis

\n

Dieser Vortrag findet Online statt. Dazu hat Wolfgang ein Zoom-Meeting aufgesetzt. Dieser Meeting-Raum ist\nPasswortgeschützt. Bitte meldet euch vorab per E-Mail an. Wir schicken euch dann vor dem Meeting das Passwort per Mail\nzu.

\n

Dieses Mal geht es schon 18:00 Uhr los.

","frontmatter":{"title":"JDK 14 und GraalVM im Java Ökosystem","date":"2020-04-29T00:00:00.000Z","time":"18:00","speaker":["wolfgang_weigend"],"location":null,"virtual":true,"poster":{"childImageSharp":{"id":"59ef0a09-a854-5bc5-a122-2d35ddcf6987","gatsbyImageData":{"layout":"fullWidth","backgroundColor":"#486888","images":{"fallback":{"src":"/static/1b5849494114993b21e29316b4af1f35/84817/plakat_2020_04.png","srcSet":"/static/1b5849494114993b21e29316b4af1f35/b8e70/plakat_2020_04.png 750w,\n/static/1b5849494114993b21e29316b4af1f35/e5839/plakat_2020_04.png 1080w,\n/static/1b5849494114993b21e29316b4af1f35/f51d5/plakat_2020_04.png 1366w,\n/static/1b5849494114993b21e29316b4af1f35/84817/plakat_2020_04.png 1920w","sizes":"100vw"},"sources":[{"srcSet":"/static/1b5849494114993b21e29316b4af1f35/e5d6f/plakat_2020_04.webp 750w,\n/static/1b5849494114993b21e29316b4af1f35/0671f/plakat_2020_04.webp 1080w,\n/static/1b5849494114993b21e29316b4af1f35/7e884/plakat_2020_04.webp 1366w,\n/static/1b5849494114993b21e29316b4af1f35/e2c0d/plakat_2020_04.webp 1920w","type":"image/webp","sizes":"100vw"}]},"width":1,"height":1.4140625}}},"poster_alt":"Poster: Jürgen sitzt in seinem Sessel. Er trägt sein übliches Jacket, eine Schlafanzug-Hose und Latschen. Neben dem Sessel sieht man seine üblichen schicken Schnürschuhe herumliegen. Er hat ein Headset aufgesetzt und seinen Laptop im Schoß. Jürgen verfolgt den Vortrag aus dem Home-Office. Auf dem Laptop-Deckel ist eine angebissene Banane zusehen.","tags":["java","jdk","graalvm"]},"fields":{"slug":"/talks/2020-04-29-jdk14_graalvm/","sourceName":"talks"}}},{"node":{"id":"0ebf9412-38af-5831-82e8-2b0aa744f924","html":"

Als Softwareentwickler ist man auf die Verwendung von Versionsverwaltungssystemen und deren Branching- und\nMerging-Strategien angewiesen. Vorgaben, wie diese Strategien angewendet werden müssen, liefern diverse\nBranching-Modelle. Sie sollen vor Allem den Entwickleralltag erleichtern, indem sie für eine saubere Historie sorgen,\nden Softwarereleaseprozess unterstützen oder verhindern, dass man in der Merge-Hölle landet. In dem Vortrag werden\neinige Branching-Modelle vorgestellt. Dabei wird der Frage auf den Grund gegangen, welche Art von Modell zu welcher Art\nvon Softwareprojekt passt und welche allgemeingültigen Vorgehensweisen beim Branching und Merging daraus gezogen werden\nkönnen.

\n

Materialien:

\n\n
\n

Hinweis

\n

Dieser Vortrag findet Online statt. Dazu haben wir ein Jitsi-Meeting aufgesetzt:\nhttps://meet.digitale-oberlausitz.eu/jug

","frontmatter":{"title":"Branching-Modelle","date":"2020-07-22T00:00:00.000Z","time":null,"speaker":["hannes_kretschmer"],"location":null,"virtual":true,"poster":{"childImageSharp":{"id":"1908832c-2f77-598f-a24b-2bcdee954b3a","gatsbyImageData":{"layout":"fullWidth","backgroundColor":"#d86838","images":{"fallback":{"src":"/static/595b224b634a1c6694d94578a61bc06c/84817/plakat_2020_07.png","srcSet":"/static/595b224b634a1c6694d94578a61bc06c/b8e70/plakat_2020_07.png 750w,\n/static/595b224b634a1c6694d94578a61bc06c/e5839/plakat_2020_07.png 1080w,\n/static/595b224b634a1c6694d94578a61bc06c/f51d5/plakat_2020_07.png 1366w,\n/static/595b224b634a1c6694d94578a61bc06c/84817/plakat_2020_07.png 1920w","sizes":"100vw"},"sources":[{"srcSet":"/static/595b224b634a1c6694d94578a61bc06c/e5d6f/plakat_2020_07.webp 750w,\n/static/595b224b634a1c6694d94578a61bc06c/0671f/plakat_2020_07.webp 1080w,\n/static/595b224b634a1c6694d94578a61bc06c/7e884/plakat_2020_07.webp 1366w,\n/static/595b224b634a1c6694d94578a61bc06c/e2c0d/plakat_2020_07.webp 1920w","type":"image/webp","sizes":"100vw"}]},"width":1,"height":1.4140625}}},"poster_alt":"Poster: Jürgen hat einen Schaffner-Hut auf dem Kopf. Er hält ein Klemmbrett in der Hand, auf dem ein Blatt Papier mit der Überschrift 'Fahrplan' geheftet ist. Unter der Überschrift ist ein Streckenplan mit Verzweigungen angedeutet.","tags":["java","git"]},"fields":{"slug":"/talks/2020-07-22-branching_modelle/","sourceName":"talks"}}},{"node":{"id":"fee8a0ec-6360-5446-9bb0-9ecbe5695536","html":"

Durch die Veröffentlichung von immer neuen Schwachstellen in Softwareprodukten rückt das Thema Application Security\nzunehmend in den Fokus vieler Softwareentwickler. Sichere Software zu erstellen muss aber keine große Herausforderung\nsein, wenn man Best Practices befolgt und der Application Security einen festen Platz im Entwicklungszyklus einräumt.\nZiel des Vortrags ist es, einen Überblick zu Secure Coding in Java zu vermitteln und die Wichtigkeit dieses Themas\nhervorzuheben. Im Detail wird außerdem an praktischen Beispielen demonstriert, wie Sicherheitsschwachstellen im\nProgrammcode aussehen, ausgenutzt und behoben werden können.

\n
\n

Hinweis

\n

Dieser Vortrag findet Online statt. Dazu haben wir ein Jitsi-Meeting aufgesetzt:\nhttps://meet.digitale-oberlausitz.eu/jug

","frontmatter":{"title":"Java Secure Coding in der Praxis","date":"2020-11-25T00:00:00.000Z","time":null,"speaker":["nico_foerster"],"location":null,"virtual":true,"poster":{"childImageSharp":{"id":"b5a8cec9-632e-5d2d-acc3-45cfdedb6dfa","gatsbyImageData":{"layout":"fullWidth","backgroundColor":"#182838","images":{"fallback":{"src":"/static/c2b6e13c2719de1c7a0da2b790067455/84817/plakat_2020_11.png","srcSet":"/static/c2b6e13c2719de1c7a0da2b790067455/b8e70/plakat_2020_11.png 750w,\n/static/c2b6e13c2719de1c7a0da2b790067455/e5839/plakat_2020_11.png 1080w,\n/static/c2b6e13c2719de1c7a0da2b790067455/f51d5/plakat_2020_11.png 1366w,\n/static/c2b6e13c2719de1c7a0da2b790067455/84817/plakat_2020_11.png 1920w","sizes":"100vw"},"sources":[{"srcSet":"/static/c2b6e13c2719de1c7a0da2b790067455/e5d6f/plakat_2020_11.webp 750w,\n/static/c2b6e13c2719de1c7a0da2b790067455/0671f/plakat_2020_11.webp 1080w,\n/static/c2b6e13c2719de1c7a0da2b790067455/7e884/plakat_2020_11.webp 1366w,\n/static/c2b6e13c2719de1c7a0da2b790067455/e2c0d/plakat_2020_11.webp 1920w","type":"image/webp","sizes":"100vw"}]},"width":1,"height":1.4140625}}},"poster_alt":"Poster: Jürgen trägt eine schwarze Woll-Mütze und eine schwarze Maske. Er trägt Handschuhe und sieht aus wie ein Einbrecher. Im Hintergrund sieht man eine Wohnungstür, vor der Jürgen kniet. Er hat einen Dietrich in der Hand und versucht gerade, dass Schloß zu knacken. Wir sehen Jürgens Rücken und er schaut zu uns über die Schulter. Seinem Blick zu urteilen, ist er überrascht weil wir ihn beim Einbrechen erwischt haben.","tags":["java","security"]},"fields":{"slug":"/talks/2020-11-25-secure_coding/","sourceName":"talks"}}},{"node":{"id":"3c969ad0-d843-57d0-92c4-91340d71851d","html":"

Web-Components sind eine Möglichkeit, auf Basis von Web-Standards wiederverwendbare UI-Komponenten zu bauen, die sich\nbrowserübergreifend und unabhängig von JavaScript-Frameworks einsetzen lassen. Im Vortrag möchte ich die relevanten\nWeb-Standards kurz vorstellen und im Live-Coding eine Web-Componente from Scratch bauen.

\n

Dabei möchte ich auch auf die Stärken und Schwächen von Web-Components eingehen und einige Erfahrungen teilen, die ich\nbei der Entwicklung einer firmeninternen Component-Library machen konnte.

\n
\n

Hinweis

\n

Dieser Vortrag findet Online statt. Dazu haben wir ein Jitsi-Meeting aufgesetzt:\nhttps://meet.digitale-oberlausitz.eu/jug

","frontmatter":{"title":"Web Components","date":"2021-01-27T00:00:00.000Z","time":null,"speaker":["manuel_mauky"],"location":null,"virtual":true,"poster":{"childImageSharp":{"id":"9bba5bef-9d0e-50c8-b451-ffed64ad6bd4","gatsbyImageData":{"layout":"fullWidth","backgroundColor":"#981848","images":{"fallback":{"src":"/static/540abccd98049d14ae192d2ada3cbcc3/84817/plakat_2021_01.png","srcSet":"/static/540abccd98049d14ae192d2ada3cbcc3/b8e70/plakat_2021_01.png 750w,\n/static/540abccd98049d14ae192d2ada3cbcc3/e5839/plakat_2021_01.png 1080w,\n/static/540abccd98049d14ae192d2ada3cbcc3/f51d5/plakat_2021_01.png 1366w,\n/static/540abccd98049d14ae192d2ada3cbcc3/84817/plakat_2021_01.png 1920w","sizes":"100vw"},"sources":[{"srcSet":"/static/540abccd98049d14ae192d2ada3cbcc3/e5d6f/plakat_2021_01.webp 750w,\n/static/540abccd98049d14ae192d2ada3cbcc3/0671f/plakat_2021_01.webp 1080w,\n/static/540abccd98049d14ae192d2ada3cbcc3/7e884/plakat_2021_01.webp 1366w,\n/static/540abccd98049d14ae192d2ada3cbcc3/e2c0d/plakat_2021_01.webp 1920w","type":"image/webp","sizes":"100vw"}]},"width":1,"height":1.4140625}}},"poster_alt":"Poster: Wir sehen ein großes Spinnennetz, in dem Jürgen gefangen ist. Er hängt verkehrt herum im Netz und sieht ziemlich erschrocken aus.","tags":["web"]},"fields":{"slug":"/talks/2021-01-27-webcomponents/","sourceName":"talks"}}},{"node":{"id":"1249d4ab-1401-5936-92b8-3d6dee7f14bb","html":"

MicroStream ist ein fundamental neues Persistenz-Framework für die native Speicherung komplexer Java Objektgraphen.\nD.h., Objekte werden damit genau so persistent gespeichert, wie diese im Hauptspeicher von der JVM verwaltet werden.\nUmgekehrt lassen sich zu jeder Zeit einzelne Subgraphen in den RAM laden und der Objektgraph im Hauptspeicher wird\nautomatisch aktualisiert.

\n

Dadurch ergeben sich völlig neue Möglichkeiten: Objektgraphen lassen sich als In-Memory Datenbank verwenden. Ein\nObjektgraph ist dabei eine sehr mächtige Multi-Model Datenstruktur. Es lassen sich beliebige Java-Typen, Collections\nsowie Formate wie JSON verwenden und beliebig kombinieren. Passend dazu bietet Java die perfekte Abfragesprache. Mit\nJava Streams dauert das Durchsuchen selbst sehr großer und komplexer Objektgraphen nur Mikrosekunden - bis zu 1000 Mal\nschneller als vergleichbare SQL-Abfragen und sogar sehr viel schneller als das direkte Lesen von Abfrageergebnissen aus\neinem lokalen Cache. DB-spezifische Datenstrukturen oder Formate werden damit bedeutungslos für Java. Keine teuren\nMappings mehr. Keine Datentyp-Konvertierungen mehr. Keine DB-spezifischen Abfragesprachen. Nur noch ein Datenmodell:\nJava-Klassen (POJOs). Kein zusätzliches Caching-Framework mehr. Keine unkomfortablen Objektkopien mehr. Simple\nArchitektur und typsicherer Abfrage-Code. Reine Core-Java Features anstatt DB-spezifische Konzepte. Das Endresultat ist\neine ultraschnelle Java In-Memory Datenbankanwendung oder Microservice.

\n

MicroStream wird bereits seit über 5 Jahren in Unternehmensanwendung produktiv eingesetzt. Jetzt wird MicroStream Open\nSource und Teil der populären Microservice Frameworks Helidon und Open Liberty.

\n

Materialien:

\n\n
\n

Hinweis

\n

Dieser Vortrag findet Online statt. Dazu haben wir ein Jitsi-Meeting aufgesetzt:\nhttps://meet.digitale-oberlausitz.eu/jug

","frontmatter":{"title":"Ultraschnelle Java In-Memory Datenbank-Anwendungen & Microservices mit MicroStream","date":"2021-06-30T00:00:00.000Z","time":null,"speaker":["markus_kett","christian_kuemmel"],"location":null,"virtual":true,"poster":{"childImageSharp":{"id":"1567f34a-c228-511c-a368-2041cf79e3fa","gatsbyImageData":{"layout":"fullWidth","backgroundColor":"#f85838","images":{"fallback":{"src":"/static/8f427a4552cb3ca64fe96511228f5a57/84817/plakat_2021_06.png","srcSet":"/static/8f427a4552cb3ca64fe96511228f5a57/b8e70/plakat_2021_06.png 750w,\n/static/8f427a4552cb3ca64fe96511228f5a57/e5839/plakat_2021_06.png 1080w,\n/static/8f427a4552cb3ca64fe96511228f5a57/f51d5/plakat_2021_06.png 1366w,\n/static/8f427a4552cb3ca64fe96511228f5a57/84817/plakat_2021_06.png 1920w","sizes":"100vw"},"sources":[{"srcSet":"/static/8f427a4552cb3ca64fe96511228f5a57/e5d6f/plakat_2021_06.webp 750w,\n/static/8f427a4552cb3ca64fe96511228f5a57/0671f/plakat_2021_06.webp 1080w,\n/static/8f427a4552cb3ca64fe96511228f5a57/7e884/plakat_2021_06.webp 1366w,\n/static/8f427a4552cb3ca64fe96511228f5a57/e2c0d/plakat_2021_06.webp 1920w","type":"image/webp","sizes":"100vw"}]},"width":1,"height":1.4140625}}},"poster_alt":"Poster: Jürgen sitzt am Tisch und überlegt. Er spielt Memory und hat gerade eine aufgedeckte Memory-Karte mit dem Java-Duke darauf in der Hand. Auf dem Tisch sind die anderen Karten zugedeckt, bis auf eine offene Karte. Auf dieser ist ein Datenbank-Symbol zu sehen.","tags":["database","java"]},"fields":{"slug":"/talks/2021-06-30-microstream/","sourceName":"talks"}}},{"node":{"id":"2e3945a5-7de9-5188-b447-47134c218967","html":"

Die Persistenz von IoT Daten sowie die Steuerung von IoT-Endgeräten benötigt im klassischen Verständnis eine\nServereinheit. Bei den Bastlern sind das oft on-premise Raspberry-Pi-Geräte oder gehostete Linux-Maschinen. Ihre\nkorrekte Konfiguration und anschließende Wartung kann Kopfzerbrechen bereiten. Es ist jedoch möglich, diese\nVerantwortung an den Cloud-Betreiber zu übertragen und eine entsprechende Infrastruktur zu schaffen. In der\nHands-On-Session wird gezeigt, wie man mit der Erstellung der gewünschten Infrastruktur in der AWS-Cloud beginnen kann.\nDazu wird ein Mikrocontroller vom Typ ESP als physisches IoT-Gerät verwendet.

\n
\n

Hinweis: Bitte meldet euch zur Teilnahme über jug-gr(at)digitale-oberlausitz.eu an. Wir haben eine begrenzte Anzahl\nvon 25 Plätzen zur Verfügung, die nicht überschritten werden darf.

","frontmatter":{"title":"Hebe deine IoT-Infrastruktur auf das Serverless-Level an","date":"2022-06-22T00:00:00.000Z","time":null,"speaker":["pawel_adaszewski"],"location":"zeiss","virtual":null,"poster":{"childImageSharp":{"id":"fff1b9ff-e9ff-5fc3-ac26-c00c71f16bde","gatsbyImageData":{"layout":"fullWidth","backgroundColor":"#f8b838","images":{"fallback":{"src":"/static/16e022022a45fa9f5687edc16e865aec/84817/plakat_2022_06.png","srcSet":"/static/16e022022a45fa9f5687edc16e865aec/b8e70/plakat_2022_06.png 750w,\n/static/16e022022a45fa9f5687edc16e865aec/e5839/plakat_2022_06.png 1080w,\n/static/16e022022a45fa9f5687edc16e865aec/f51d5/plakat_2022_06.png 1366w,\n/static/16e022022a45fa9f5687edc16e865aec/84817/plakat_2022_06.png 1920w","sizes":"100vw"},"sources":[{"srcSet":"/static/16e022022a45fa9f5687edc16e865aec/e5d6f/plakat_2022_06.webp 750w,\n/static/16e022022a45fa9f5687edc16e865aec/0671f/plakat_2022_06.webp 1080w,\n/static/16e022022a45fa9f5687edc16e865aec/7e884/plakat_2022_06.webp 1366w,\n/static/16e022022a45fa9f5687edc16e865aec/e2c0d/plakat_2022_06.webp 1920w","type":"image/webp","sizes":"100vw"}]},"width":1,"height":1.4140625}}},"poster_alt":"Poster: Jürgen spielt eine Flöte. Hinter ihm sieht man einen Weg auf dem Jürgen gelaufen kommt. Hinter ihm ist ein Smartphone und eine Waschmaschine, jeweils mit Armen, Beinen und Gesicht. Die Gesichter der Geräte sehen aus wie paralysiert und sie halten ihre Arme wie Zombies nach Vorn. Sie folgen Jürgen, so als wäre er der Rattenfänger von Hameln.","tags":["cloud","iot","serverless","infrastructure"]},"fields":{"slug":"/talks/2022-06-22-iot-infrastruktur-serverless/","sourceName":"talks"}}},{"node":{"id":"2b8e8a71-59c4-53fb-baa2-5b6136f7efe8","html":"

Mit der fischertechnik Lernfabrik haben wir eine Fabrik im Kleinformat! Steuerung, Edge und Cloud in Einem!

\n

\n \n Der aktuelle Stand der JavaFX-UI-Entwicklung wird aus der Sicht von Oracle erläutert, mit einer Bestandsaufnahme der\nvorhandenen Entwicklungsressourcen und der Fortführung von JavaFX in einem freien Ökosystem. JavaFX ist vom JDK\nentkoppelt, sodass es separat entwickelt werden kann und alle davon profitieren. Gemeinsam mit Oracle Engineering wurde\nein JavaFX-Ökosystem aufgebaut, dass die langfristige technologische Lebensfähigkeit von JavaFX sicherstellt. Die\norganisatorische Beteiligung der Entwickler erfolgt über das OpenJDK und von dort aus kann die Open-Source-Software\nweiterverteilt werden. Oracle entwickelt und veröffentlicht JavaFX als eigenständige Module über das OpenJFX-Projekt im\nOpenJDK. Oracle plant, diese kostenlosen und Open-Source-OpenJFX-Builds weiterhin mit den neuesten Java-Versionen\nbereitzustellen, wie derzeit JavaFX 22 auf Oracle JDK 22, dann JavaFX 23 für Oracle JDK 23 im September 2024 und sie,\nwie seit vielen Jahren regelmäßig auf jdk.java.net verfügbar zu machen.

","fields":{"slug":"/talks/2024-09-25-javafx-state-of-the-technology/"},"frontmatter":{"title":"JavaFX State of the Technology","date":"2024-09-25T00:00:00.000Z","time":null,"virtual":null,"tags":["javafx","frontend"],"poster":{"childImageSharp":{"id":"8b711a6f-cb35-53ba-9a5a-f794062a782d","gatsbyImageData":{"layout":"fullWidth","backgroundColor":"#78a8c8","images":{"fallback":{"src":"/static/453fc0427c1c2be02fac11e2562f105b/84817/plakat_2024_09.png","srcSet":"/static/453fc0427c1c2be02fac11e2562f105b/b8e70/plakat_2024_09.png 750w,\n/static/453fc0427c1c2be02fac11e2562f105b/e5839/plakat_2024_09.png 1080w,\n/static/453fc0427c1c2be02fac11e2562f105b/f51d5/plakat_2024_09.png 1366w,\n/static/453fc0427c1c2be02fac11e2562f105b/84817/plakat_2024_09.png 1920w","sizes":"100vw"},"sources":[{"srcSet":"/static/453fc0427c1c2be02fac11e2562f105b/e5d6f/plakat_2024_09.webp 750w,\n/static/453fc0427c1c2be02fac11e2562f105b/0671f/plakat_2024_09.webp 1080w,\n/static/453fc0427c1c2be02fac11e2562f105b/7e884/plakat_2024_09.webp 1366w,\n/static/453fc0427c1c2be02fac11e2562f105b/e2c0d/plakat_2024_09.webp 1920w","type":"image/webp","sizes":"100vw"}]},"width":1,"height":1.4140625}}},"poster_alt":"Poster: Jürgen ist hat eine 3D-Brille auf und isst Popcorn."}},"speakers":{"edges":[{"node":{"id":"53f5069e-fb7c-5f5d-b967-b5df3c1df975","html":"

Wolfgang Weigend arbeitet als Master Principal Solution Engineer bei der ORACLE Global Services Germany GmbH im\nweltweiten Java Team. Er beschäftigt sich mit Java-Technologie, GraalVM und Architektur für unternehmensweite\nAnwendungsentwicklung.

","frontmatter":{"name":"Wolfgang Weigend","pic":{"childImageSharp":{"gatsbyImageData":{"layout":"constrained","backgroundColor":"#d8d8d8","images":{"fallback":{"src":"/static/e7f1e2b89abdf37e5204738851644d13/3272e/wolfgang_weigend.png","srcSet":"/static/e7f1e2b89abdf37e5204738851644d13/6c783/wolfgang_weigend.png 100w,\n/static/e7f1e2b89abdf37e5204738851644d13/7da25/wolfgang_weigend.png 200w,\n/static/e7f1e2b89abdf37e5204738851644d13/3272e/wolfgang_weigend.png 400w,\n/static/e7f1e2b89abdf37e5204738851644d13/a694e/wolfgang_weigend.png 800w","sizes":"(min-width: 400px) 400px, 100vw"},"sources":[{"srcSet":"/static/e7f1e2b89abdf37e5204738851644d13/cc045/wolfgang_weigend.webp 100w,\n/static/e7f1e2b89abdf37e5204738851644d13/91429/wolfgang_weigend.webp 200w,\n/static/e7f1e2b89abdf37e5204738851644d13/07cc9/wolfgang_weigend.webp 400w,\n/static/e7f1e2b89abdf37e5204738851644d13/21427/wolfgang_weigend.webp 800w","type":"image/webp","sizes":"(min-width: 400px) 400px, 100vw"}]},"width":400,"height":327}}},"twitter_name":"wolflook"},"fields":{"slug":"/speakers/wolfgang_weigend/"}}}]},"location":{"fields":{"slug":"/locations/zeiss/"},"frontmatter":{"name":"Carl Zeiss Digital Innovation","number":"63","info":null,"zip":"02826","city":"Görlitz","street":"Berliner Straße"}}},"pageContext":{"slug":"/talks/2024-09-25-javafx-state-of-the-technology/","speakerSlugs":["/speakers/wolfgang_weigend/"],"locationSlug":"/locations/zeiss/"}},"staticQueryHashes":[],"slicesMap":{}} \ No newline at end of file +{"componentChunkName":"component---src-templates-talk-page-tsx","path":"/talks/2024-09-25-javafx-state-of-the-technology/","result":{"data":{"talk":{"html":"

Der aktuelle Stand der JavaFX-UI-Entwicklung wird aus der Sicht von Oracle erläutert, mit einer Bestandsaufnahme der\nvorhandenen Entwicklungsressourcen und der Fortführung von JavaFX in einem freien Ökosystem. JavaFX ist vom JDK\nentkoppelt, sodass es separat entwickelt werden kann und alle davon profitieren. Gemeinsam mit Oracle Engineering wurde\nein JavaFX-Ökosystem aufgebaut, dass die langfristige technologische Lebensfähigkeit von JavaFX sicherstellt. Die\norganisatorische Beteiligung der Entwickler erfolgt über das OpenJDK und von dort aus kann die Open-Source-Software\nweiterverteilt werden. Oracle entwickelt und veröffentlicht JavaFX als eigenständige Module über das OpenJFX-Projekt im\nOpenJDK. Oracle plant, diese kostenlosen und Open-Source-OpenJFX-Builds weiterhin mit den neuesten Java-Versionen\nbereitzustellen, wie derzeit JavaFX 22 auf Oracle JDK 22, dann JavaFX 23 für Oracle JDK 23 im September 2024 und sie,\nwie seit vielen Jahren regelmäßig auf jdk.java.net verfügbar zu machen.

","fields":{"slug":"/talks/2024-09-25-javafx-state-of-the-technology/"},"frontmatter":{"title":"JavaFX State of the Technology","date":"2024-09-25T00:00:00.000Z","time":null,"virtual":null,"tags":["javafx","frontend"],"poster":{"childImageSharp":{"id":"8b711a6f-cb35-53ba-9a5a-f794062a782d","gatsbyImageData":{"layout":"fullWidth","backgroundColor":"#78a8c8","images":{"fallback":{"src":"/static/453fc0427c1c2be02fac11e2562f105b/84817/plakat_2024_09.png","srcSet":"/static/453fc0427c1c2be02fac11e2562f105b/b8e70/plakat_2024_09.png 750w,\n/static/453fc0427c1c2be02fac11e2562f105b/e5839/plakat_2024_09.png 1080w,\n/static/453fc0427c1c2be02fac11e2562f105b/f51d5/plakat_2024_09.png 1366w,\n/static/453fc0427c1c2be02fac11e2562f105b/84817/plakat_2024_09.png 1920w","sizes":"100vw"},"sources":[{"srcSet":"/static/453fc0427c1c2be02fac11e2562f105b/e5d6f/plakat_2024_09.webp 750w,\n/static/453fc0427c1c2be02fac11e2562f105b/0671f/plakat_2024_09.webp 1080w,\n/static/453fc0427c1c2be02fac11e2562f105b/7e884/plakat_2024_09.webp 1366w,\n/static/453fc0427c1c2be02fac11e2562f105b/e2c0d/plakat_2024_09.webp 1920w","type":"image/webp","sizes":"100vw"}]},"width":1,"height":1.4140625}}},"poster_alt":"Poster: Jürgen ist hat eine 3D-Brille auf und isst Popcorn."}},"speakers":{"edges":[{"node":{"id":"8de5b181-1c5c-5d57-9b0b-e03ba1b399e2","html":"","frontmatter":{"name":"Christian Heilmann","pic":null,"twitter_name":null},"fields":{"slug":"/speakers/christian_heilmann/"}}},{"node":{"id":"53f5069e-fb7c-5f5d-b967-b5df3c1df975","html":"

Wolfgang Weigend arbeitet als Master Principal Solution Engineer bei der ORACLE Global Services Germany GmbH im\nweltweiten Java Team. Er beschäftigt sich mit Java-Technologie, GraalVM und Architektur für unternehmensweite\nAnwendungsentwicklung.

","frontmatter":{"name":"Wolfgang Weigend","pic":{"childImageSharp":{"gatsbyImageData":{"layout":"constrained","backgroundColor":"#d8d8d8","images":{"fallback":{"src":"/static/e7f1e2b89abdf37e5204738851644d13/3272e/wolfgang_weigend.png","srcSet":"/static/e7f1e2b89abdf37e5204738851644d13/6c783/wolfgang_weigend.png 100w,\n/static/e7f1e2b89abdf37e5204738851644d13/7da25/wolfgang_weigend.png 200w,\n/static/e7f1e2b89abdf37e5204738851644d13/3272e/wolfgang_weigend.png 400w,\n/static/e7f1e2b89abdf37e5204738851644d13/a694e/wolfgang_weigend.png 800w","sizes":"(min-width: 400px) 400px, 100vw"},"sources":[{"srcSet":"/static/e7f1e2b89abdf37e5204738851644d13/cc045/wolfgang_weigend.webp 100w,\n/static/e7f1e2b89abdf37e5204738851644d13/91429/wolfgang_weigend.webp 200w,\n/static/e7f1e2b89abdf37e5204738851644d13/07cc9/wolfgang_weigend.webp 400w,\n/static/e7f1e2b89abdf37e5204738851644d13/21427/wolfgang_weigend.webp 800w","type":"image/webp","sizes":"(min-width: 400px) 400px, 100vw"}]},"width":400,"height":327}}},"twitter_name":"wolflook"},"fields":{"slug":"/speakers/wolfgang_weigend/"}}}]},"location":{"fields":{"slug":"/locations/zeiss/"},"frontmatter":{"name":"Carl Zeiss Digital Innovation","number":"63","info":null,"zip":"02826","city":"Görlitz","street":"Berliner Straße"}}},"pageContext":{"slug":"/talks/2024-09-25-javafx-state-of-the-technology/","speakerSlugs":["/speakers/wolfgang_weigend/","/speakers/christian_heilmann/"],"locationSlug":"/locations/zeiss/"}},"staticQueryHashes":[],"slicesMap":{}} \ No newline at end of file diff --git a/page-data/talks/page-data.json b/page-data/talks/page-data.json index bfa4910c5..63c6cf80b 100644 --- a/page-data/talks/page-data.json +++ b/page-data/talks/page-data.json @@ -1 +1 @@ -{"componentChunkName":"component---src-pages-talks-tsx","path":"/talks/","result":{"data":{"talks":{"edges":[{"node":{"id":"01a8772b-cb6f-5d52-bb9f-03d7e5b323ee","frontmatter":{"title":"JavaFX State of the Technology","date":"2024-09-25T00:00:00.000Z","time":null,"virtual":null,"tags":["javafx","frontend"],"speaker":["wolfgang_weigend"]},"fields":{"slug":"/talks/2024-09-25-javafx-state-of-the-technology/"}}},{"node":{"id":"c08fdc1a-573d-546d-985b-c6f5c8f2aa76","frontmatter":{"title":"Parallele Programmiermodelle für Supercomputer","date":"2024-05-29T00:00:00.000Z","time":null,"virtual":null,"tags":["programmiersprachen","parallel","non-jvm-language","supercomputer"],"speaker":["andreas_knuepfer"]},"fields":{"slug":"/talks/2024-05-29-parallele-programmiermodelle/"}}},{"node":{"id":"56c1a59c-f16a-5f43-aa33-412cf06ee342","frontmatter":{"title":"Rust (Teil 2)","date":"2024-04-24T00:00:00.000Z","time":null,"virtual":null,"tags":["programmiersprachen","performance","functional-programming","non-jvm-language","security"],"speaker":["konstantin_eger"]},"fields":{"slug":"/talks/2024-04-24-rust2/"}}},{"node":{"id":"97f4123c-3293-532b-8ea6-6b81b355fd92","frontmatter":{"title":"Rust (Teil 1): Einführung in die Sprache","date":"2024-03-20T00:00:00.000Z","time":null,"virtual":null,"tags":["programmiersprachen","performance","functional-programming","non-jvm-language","security"],"speaker":["manuel_mauky"]},"fields":{"slug":"/talks/2024-03-20-rust/"}}},{"node":{"id":"fafd1d08-20ad-5b94-8837-fc066b152f0d","frontmatter":{"title":"Schlanke Architektur-Reviews","date":"2024-02-28T00:00:00.000Z","time":null,"virtual":null,"tags":["architektur"],"speaker":["stefan_zoerner_2"]},"fields":{"slug":"/talks/2024-02-28-architektur-reviews/"}}},{"node":{"id":"cafdb0d7-7218-5608-bd6f-c033864617fe","frontmatter":{"title":"Flutter, der heilige Gral der Cross-Plattform-Entwicklung?!","date":"2024-01-31T00:00:00.000Z","time":null,"virtual":null,"tags":["mobile","frontend","non-jvm-language"],"speaker":["christoph_menzel"]},"fields":{"slug":"/talks/2024-01-31-flutter/"}}},{"node":{"id":"e583793f-bcc5-5f78-8931-3357be0f0ba5","frontmatter":{"title":"What the CRaC - Superfast JVM startup","date":"2023-11-29T00:00:00.000Z","time":null,"virtual":null,"tags":["java","performance","jdk"],"speaker":["gerrit_grunwald"]},"fields":{"slug":"/talks/2023-11-29-crac/"}}},{"node":{"id":"34d30efa-4f03-53e5-8043-fa73d75cbd58","frontmatter":{"title":"AWS-Infrastruktur mit Java erstellen - CDK in Action","date":"2023-10-25T00:00:00.000Z","time":null,"virtual":null,"tags":["java","cloud"],"speaker":["pawel_adaszewski","damian_dudziec"]},"fields":{"slug":"/talks/2023-10-25-aws_cdk_in_action/"}}},{"node":{"id":"4f2a426a-5b98-5f61-8750-46aac0c6c9f3","frontmatter":{"title":"Java 21: Virtuelle Threads","date":"2023-09-27T00:00:00.000Z","time":null,"virtual":null,"tags":["java","performance"],"speaker":["patryk_lewandowski"]},"fields":{"slug":"/talks/2023-09-27-virtual-threads/"}}},{"node":{"id":"8a2e331b-0f3c-52b6-823e-852ecfff1ba4","frontmatter":{"title":"GraalVM 23 – Konzepte und Features","date":"2023-06-28T00:00:00.000Z","time":null,"virtual":null,"tags":["java","jdk","graalvm"],"speaker":["wolfgang_weigend"]},"fields":{"slug":"/talks/2023-06-28-graalvm_23/"}}},{"node":{"id":"d1758688-b708-5de7-8e59-5646800cc19a","frontmatter":{"title":"Accessibility in the Wild","date":"2023-05-31T00:00:00.000Z","time":null,"virtual":null,"tags":["java","a11y"],"speaker":["daniel_sulyok"]},"fields":{"slug":"/talks/2023-05-31-accessibility_in_the_wild/"}}},{"node":{"id":"79b0298f-b45a-5707-a02c-37ea990349ee","frontmatter":{"title":"ArchUnit: Unit-Tests für deine Java-Architektur","date":"2023-04-26T00:00:00.000Z","time":null,"virtual":null,"tags":["architektur","testen"],"speaker":["roland_weisleder"]},"fields":{"slug":"/talks/2023-04-26-archunit_unit_tests_java_architektur/"}}},{"node":{"id":"f5233192-6039-5c35-9957-b7023ed9e701","frontmatter":{"title":"Spring für architekturinteressierte Entwickler:innen","date":"2023-03-29T00:00:00.000Z","time":"18:30","virtual":null,"tags":["architektur","spring"],"speaker":["oliver_drotbohm"]},"fields":{"slug":"/talks/2023-03-29-spring_fuer_architekturinteressierte_entwickler_innen/"}}},{"node":{"id":"8fa19a6d-7e84-5d43-a513-0644ddb362d6","frontmatter":{"title":"Exception First – Stabilisiere deinen Code mit mehr Exceptions","date":"2023-02-22T00:00:00.000Z","time":null,"virtual":null,"tags":["architektur"],"speaker":["sergej_tihonov"]},"fields":{"slug":"/talks/2023-02-22-exception_first/"}}},{"node":{"id":"5d96ee33-16f6-5b4c-aca8-557c4c24c14e","frontmatter":{"title":"Content Management neu gedacht mit Contentlab","date":"2023-01-25T00:00:00.000Z","time":null,"virtual":null,"tags":["platform","web"],"speaker":["markus_weiland"]},"fields":{"slug":"/talks/2023-01-25-contentlab/"}}},{"node":{"id":"a0820bff-9a0d-5989-b837-8f769fcc2ba6","frontmatter":{"title":"Kundenspezifisches IAM mit Keycloak","date":"2022-11-30T00:00:00.000Z","time":null,"virtual":null,"tags":["security"],"speaker":["daniel_fesenmeyer"]},"fields":{"slug":"/talks/2022-11-30-iam-keycloak/"}}},{"node":{"id":"2b8e8a71-59c4-53fb-baa2-5b6136f7efe8","frontmatter":{"title":"Industrie 4.0? Das JUGt mich!","date":"2022-10-12T00:00:00.000Z","time":null,"virtual":null,"tags":["cloud","iot","industrie4.0","infrastructure"],"speaker":["marco_gotthans"]},"fields":{"slug":"/talks/2022-10-12-indistrie_4.0/"}}},{"node":{"id":"2e3945a5-7de9-5188-b447-47134c218967","frontmatter":{"title":"Hebe deine IoT-Infrastruktur auf das Serverless-Level an","date":"2022-06-22T00:00:00.000Z","time":null,"virtual":null,"tags":["cloud","iot","serverless","infrastructure"],"speaker":["pawel_adaszewski"]},"fields":{"slug":"/talks/2022-06-22-iot-infrastruktur-serverless/"}}},{"node":{"id":"1249d4ab-1401-5936-92b8-3d6dee7f14bb","frontmatter":{"title":"Ultraschnelle Java In-Memory Datenbank-Anwendungen & Microservices mit MicroStream","date":"2021-06-30T00:00:00.000Z","time":null,"virtual":true,"tags":["database","java"],"speaker":["markus_kett","christian_kuemmel"]},"fields":{"slug":"/talks/2021-06-30-microstream/"}}},{"node":{"id":"3c969ad0-d843-57d0-92c4-91340d71851d","frontmatter":{"title":"Web Components","date":"2021-01-27T00:00:00.000Z","time":null,"virtual":true,"tags":["web"],"speaker":["manuel_mauky"]},"fields":{"slug":"/talks/2021-01-27-webcomponents/"}}},{"node":{"id":"fee8a0ec-6360-5446-9bb0-9ecbe5695536","frontmatter":{"title":"Java Secure Coding in der Praxis","date":"2020-11-25T00:00:00.000Z","time":null,"virtual":true,"tags":["java","security"],"speaker":["nico_foerster"]},"fields":{"slug":"/talks/2020-11-25-secure_coding/"}}},{"node":{"id":"0ebf9412-38af-5831-82e8-2b0aa744f924","frontmatter":{"title":"Branching-Modelle","date":"2020-07-22T00:00:00.000Z","time":null,"virtual":true,"tags":["java","git"],"speaker":["hannes_kretschmer"]},"fields":{"slug":"/talks/2020-07-22-branching_modelle/"}}},{"node":{"id":"92ec8c3c-c428-5ca1-bb98-7b8ebac5cdfb","frontmatter":{"title":"JDK 14 und GraalVM im Java Ökosystem","date":"2020-04-29T00:00:00.000Z","time":"18:00","virtual":true,"tags":["java","jdk","graalvm"],"speaker":["wolfgang_weigend"]},"fields":{"slug":"/talks/2020-04-29-jdk14_graalvm/"}}},{"node":{"id":"c7067e06-b5be-50ec-83d2-9ea30dc14640","frontmatter":{"title":"Innovationsmotor Cloud Foundry!?","date":"2020-01-29T00:00:00.000Z","time":null,"virtual":null,"tags":["cloud"],"speaker":["simon_roloff"]},"fields":{"slug":"/talks/2020-01-27-cloud-foundry/"}}},{"node":{"id":"a0f32bfb-f9fa-5c9c-a70d-ffd93be7d859","frontmatter":{"title":"Advanced BDD Tests","date":"2019-11-28T00:00:00.000Z","time":null,"virtual":null,"tags":["java","testen"],"speaker":["maik_wagner"]},"fields":{"slug":"/talks/2019-11-28-advanced-bdd-tests/"}}},{"node":{"id":"6895717e-291c-581d-8fef-3b5e73bc8369","frontmatter":{"title":"Wie gut kennst Du das Collections Framework?","date":"2019-06-26T00:00:00.000Z","time":null,"virtual":null,"tags":["java"],"speaker":["thilo_frotscher"]},"fields":{"slug":"/talks/2019-06-26-collection-framework/"}}},{"node":{"id":"a5f7b4d5-03e6-588d-9778-62b4b8c44286","frontmatter":{"title":"OAuth 2.0/OpenIDConnect mit Keycloak","date":"2019-05-29T00:00:00.000Z","time":null,"virtual":null,"tags":["java","security"],"speaker":["denny_israel"]},"fields":{"slug":"/talks/2019-05-29-oauth/"}}},{"node":{"id":"9a7e9567-b7fe-59cd-90fe-aec93c90f2af","frontmatter":{"title":"It's a JDK jungle out there - oder wie es mit den neuen Java-Versionen geordnet weitergeht","date":"2019-04-24T00:00:00.000Z","time":null,"virtual":null,"tags":["java","jdk"],"speaker":["wolfgang_weigend"]},"fields":{"slug":"/talks/2019-04-24_jdk_jungle/"}}},{"node":{"id":"dd2fc902-b2b3-5256-b24b-e09f17f45415","frontmatter":{"title":"Static-Site-Generators","date":"2019-03-27T00:00:00.000Z","time":null,"virtual":null,"tags":["web","javascript"],"speaker":["manuel_mauky"]},"fields":{"slug":"/talks/2019-03-27-static-site-generators/"}}},{"node":{"id":"f37a3185-cf74-5401-9461-328751a5a63e","frontmatter":{"title":"Java Reflection: Classes behind the scenes","date":"2019-02-27T00:00:00.000Z","time":null,"virtual":null,"tags":["java"],"speaker":["erik_jaehne"]},"fields":{"slug":"/talks/2019-02-27_reflection/"}}},{"node":{"id":"6c6f82f3-26da-59ee-a8b6-8c178256b6b7","frontmatter":{"title":"Java APIs - the missing manual","date":"2019-01-31T00:00:00.000Z","time":null,"virtual":null,"tags":["java"],"speaker":["hendrik_ebbers"]},"fields":{"slug":"/talks/2019-01-31_java_apis_missing_manual/"}}},{"node":{"id":"f3a5b0e9-0351-58c1-a827-a5f39196ddee","frontmatter":{"title":"Monadische Transaktionen","date":"2018-11-23T00:00:00.000Z","time":null,"virtual":null,"tags":["functional-programming"],"speaker":["gregor_trefs"]},"fields":{"slug":"/talks/2018-11-23-monadische_transaktionen/"}}},{"node":{"id":"f17a3451-b9a5-5b42-b740-3c15fe9268f5","frontmatter":{"title":"Immutable Data - Unveränderliche Daten im Griff","date":"2018-06-27T00:00:00.000Z","time":null,"virtual":null,"tags":["programmiersprachen","functional-programming"],"speaker":["manuel_mauky"]},"fields":{"slug":"/talks/2018-06-27-immutable-data/"}}},{"node":{"id":"bba11502-e73b-5c5e-9ce7-f4102b1daed5","frontmatter":{"title":"GraphQL","date":"2018-05-30T00:00:00.000Z","time":null,"virtual":null,"tags":["programmiersprachen","web","architektur"],"speaker":["stephan_strehler"]},"fields":{"slug":"/talks/2018-05-30-graphql/"}}},{"node":{"id":"1b2f3079-33fa-52a7-8f63-17ed40feb17e","frontmatter":{"title":"Kotlin","date":"2018-04-25T00:00:00.000Z","time":null,"virtual":null,"tags":["programmiersprachen"],"speaker":["tobias_blaschke"]},"fields":{"slug":"/talks/2018-04-25-kotlin/"}}},{"node":{"id":"dad0ee9f-ea34-5ce1-b7fe-a0e45b09e845","frontmatter":{"title":"Mikro- vs. Makroarchitektur – Spielraum und Spielregeln","date":"2018-03-20T00:00:00.000Z","time":null,"virtual":null,"tags":["architektur"],"speaker":["stefan_zoerner"]},"fields":{"slug":"/talks/2018-03-20-mikro_vs_makroarchitektur/"}}},{"node":{"id":"67f5c805-4443-51af-9f87-0a9aff577dce","frontmatter":{"title":"Entwicklung von Java Applikationen auf der SAP Cloud Platform","date":"2018-02-28T00:00:00.000Z","time":null,"virtual":null,"tags":["cloud"],"speaker":["jens_leuschner","mariusz_zienkiewicz"]},"fields":{"slug":"/talks/2018-02-28-java_auf_sap_cloud/"}}},{"node":{"id":"259289d0-862c-5044-bdb1-38c8d853780d","frontmatter":{"title":"Refactoring to a System of Systems","date":"2018-01-31T00:00:00.000Z","time":null,"virtual":null,"tags":["architektur"],"speaker":["oliver_drotbohm"]},"fields":{"slug":"/talks/2018-01-31-system_of_systems/"}}},{"node":{"id":"92f30cfa-20d5-5aba-8db4-e6e1de091225","frontmatter":{"title":"Neo4j: Panama Papers","date":"2017-11-29T00:00:00.000Z","time":null,"virtual":null,"tags":["database"],"speaker":["michael_hunger"]},"fields":{"slug":"/talks/2017-11-29-neo4j/"}}},{"node":{"id":"fd607630-d7dd-503a-8da0-25a963df4df3","frontmatter":{"title":"Serverless Application - Who the heck needs a Server?","date":"2017-10-25T00:00:00.000Z","time":null,"virtual":null,"tags":["architektur","serverless"],"speaker":["lars_roewekamp"]},"fields":{"slug":"/talks/2017-10-25-serverless/"}}},{"node":{"id":"29eb8b61-615f-5f82-afc0-25abdc540af7","frontmatter":{"title":"Spracherkennung mit Amazon Alexa","date":"2017-08-30T00:00:00.000Z","time":null,"virtual":null,"tags":["ki"],"speaker":["andre_tepper","maik_wagner"]},"fields":{"slug":"/talks/2017-08-30-alexa/"}}},{"node":{"id":"935f30df-c07e-5cfa-9188-3564b4e0fab7","frontmatter":{"title":"React und React-Native: Functional UI Development für Browser und mobile Endgeräte","date":"2017-05-31T00:00:00.000Z","time":null,"virtual":null,"tags":["frontend","javascript","web","mobile","functional-programming"],"speaker":["manuel_mauky"]},"fields":{"slug":"/talks/2017-05-31-react/"}}},{"node":{"id":"9ba71f6c-f0dd-5c4e-b70f-3d7ac1ec19ca","frontmatter":{"title":"JDK 9","date":"2017-04-25T00:00:00.000Z","time":null,"virtual":null,"tags":["java","jdk"],"speaker":["wolfgang_weigend"]},"fields":{"slug":"/talks/2017-04-26-jdk9/"}}},{"node":{"id":"d7528a15-3b10-587c-9543-5c372945763a","frontmatter":{"title":"Angular 2 für Java Entwickler","date":"2017-03-22T00:00:00.000Z","time":null,"virtual":null,"tags":["frontend","web","javascript"],"speaker":["sven_hoffmann"]},"fields":{"slug":"/talks/2017-03-22-angular/"}}},{"node":{"id":"f009504d-3327-52e9-8948-6cd4d3ba952e","frontmatter":{"title":"CSS, Aha-Effekte und Perspektiven","date":"2017-02-22T00:00:00.000Z","time":null,"virtual":null,"tags":["frontend","web"],"speaker":["uwe_manteuffel"]},"fields":{"slug":"/talks/2017-02-22-css/"}}},{"node":{"id":"cf0f1947-1449-5df5-b546-aa31d25046a7","frontmatter":{"title":"JUnit 5","date":"2017-01-25T00:00:00.000Z","time":null,"virtual":null,"tags":["testen","junit"],"speaker":["stefan_bley"]},"fields":{"slug":"/talks/2017-01-25-junit5/"}}},{"node":{"id":"c67796c2-6477-5658-a163-1de4870f548e","frontmatter":{"title":"Inside JVM","date":"2016-11-30T00:00:00.000Z","time":null,"virtual":null,"tags":["java","jvm"],"speaker":["michael_wiedeking"]},"fields":{"slug":"/talks/2016-11-30-inside_jvm/"}}},{"node":{"id":"a4cfc466-b5f6-5b10-be7e-13c92d3ab2f7","frontmatter":{"title":"Kommunikationskultur im Softwareentwicklungsprozess","date":"2016-09-21T00:00:00.000Z","time":null,"virtual":null,"tags":["testen","softwareentwicklung"],"speaker":["daniel_sernow"]},"fields":{"slug":"/talks/2016-09-21-kommunikationskultur/"}}},{"node":{"id":"e14cd50a-435a-5855-ae06-c0d1eb30d8af","frontmatter":{"title":"Testwerkzeuge für JavaFX","date":"2016-07-27T00:00:00.000Z","time":null,"virtual":null,"tags":["javafx","testen"],"speaker":["kay_grebenstein"]},"fields":{"slug":"/talks/2016-07-27-testwerkzeuge_javafx/"}}},{"node":{"id":"4dc84ec4-23f6-5438-a2e6-b5944dc868c9","frontmatter":{"title":"Performance-Analyse mit inspectIT","date":"2016-05-25T00:00:00.000Z","time":null,"virtual":null,"tags":["performance","monitoring"],"speaker":["mario_mann"]},"fields":{"slug":"/talks/2016-05-25-performance-analyse-inspectit/"}}},{"node":{"id":"7d996009-4040-5330-a46c-5877cc5668af","frontmatter":{"title":"Haskell und Frege","date":"2016-03-30T00:00:00.000Z","time":null,"virtual":null,"tags":["programmiersprachen","functional-programming","non-jvm-language"],"speaker":["manuel_mauky"]},"fields":{"slug":"/talks/2016-03-30-haskell_frege/"}}},{"node":{"id":"79835d68-651b-57a2-8c75-042baeba5b30","frontmatter":{"title":"Funktionale Programmierung mit Java","date":"2016-01-27T00:00:00.000Z","time":null,"virtual":null,"tags":["java","functional-programming"],"speaker":["manuel_mauky","max_wielsch"]},"fields":{"slug":"/talks/2016-01-27-functional_java/"}}},{"node":{"id":"43538367-514c-5009-b9eb-0f730f52bfd9","frontmatter":{"title":"JavaFX auf Mobile","date":"2015-11-25T00:00:00.000Z","time":null,"virtual":null,"tags":["frontend","javafx","mobile","android"],"speaker":["stefan_heinze","stefan_barth"]},"fields":{"slug":"/talks/2015-11-25-javafx-mobile/"}}},{"node":{"id":"eff228ab-8f49-5773-905c-fee144de429f","frontmatter":{"title":"Guava","date":"2015-09-30T00:00:00.000Z","time":null,"virtual":null,"tags":["java"],"speaker":["steffen_seidler"]},"fields":{"slug":"/talks/2015-09-30-guava/"}}},{"node":{"id":"a3c8bbba-0df8-503b-a702-21589e288614","frontmatter":{"title":"Regelbasierte Systeme mit JBoss Drools","date":"2015-07-29T00:00:00.000Z","time":null,"virtual":null,"tags":["dsl"],"speaker":["paul_weinhold"]},"fields":{"slug":"/talks/2015-07-29-drools/"}}},{"node":{"id":"1faa8cf7-10f9-54d5-a480-6d2e44896011","frontmatter":{"title":"Fortgeschrittene Android-Entwicklung","date":"2015-05-27T00:00:00.000Z","time":null,"virtual":null,"tags":["mobile","android"],"speaker":["max_wielsch"]},"fields":{"slug":"/talks/2015-05-27-advanced-android/"}}},{"node":{"id":"d853656a-6dac-5d38-b25a-c241c13cbadb","frontmatter":{"title":"Einstieg in die Android-App-Entwicklung","date":"2015-03-25T00:00:00.000Z","time":null,"virtual":null,"tags":["android","mobile"],"speaker":["max_wielsch"]},"fields":{"slug":"/talks/2015-03-25-android/"}}},{"node":{"id":"d88d92c2-cf39-5768-b424-1b211f08c8e8","frontmatter":{"title":"MoSKito - Monitoring Framework","date":"2015-01-28T00:00:00.000Z","time":null,"virtual":null,"tags":["web","monitoring"],"speaker":["steffen_seidler"]},"fields":{"slug":"/talks/2015-01-28-moskito/"}}},{"node":{"id":"2fdb9675-dfcf-55b8-899d-8e6d04242b4a","frontmatter":{"title":"Model-View-*: UI-Design-Patterns im Detail","date":"2014-12-03T00:00:00.000Z","time":null,"virtual":null,"tags":["frontend","patterns"],"speaker":["manuel_mauky"]},"fields":{"slug":"/talks/2014-12-03-model-view-star/"}}},{"node":{"id":"5840ef2b-08af-57a6-81b0-7a69c1d1beb0","frontmatter":{"title":"Infrastructure as Code","date":"2014-10-29T00:00:00.000Z","time":null,"virtual":null,"tags":["devops"],"speaker":["bruno_devic"]},"fields":{"slug":"/talks/2014-10-29-infrastructure_as_code/"}}},{"node":{"id":"ded25abd-db1f-5b9b-9cd2-8c905bc15ab0","frontmatter":{"title":"Solr - Eine Enterprise-Suchmaschine","date":"2014-09-24T00:00:00.000Z","time":null,"virtual":null,"tags":["database"],"speaker":["steffen_seidler"]},"fields":{"slug":"/talks/2014-09-24-solr/"}}},{"node":{"id":"bd5b8775-c069-521b-803e-4a62493c8247","frontmatter":{"title":"Java8 - Streams und Lambdas","date":"2014-07-30T00:00:00.000Z","time":null,"virtual":null,"tags":["java","functional-programming"],"speaker":["paul_weinhold"]},"fields":{"slug":"/talks/2014-07-30-java8-streams/"}}},{"node":{"id":"09dfae71-65f1-52de-81a7-e0746238f502","frontmatter":{"title":"Hazelcast - Synchronisation von In-Memory-Daten","date":"2014-05-28T00:00:00.000Z","time":null,"virtual":null,"tags":["cluster"],"speaker":["steffen_seidler"]},"fields":{"slug":"/talks/2014-05-28-hazelcast/"}}},{"node":{"id":"27050ce5-4d13-504b-90e0-8a4c3f2e6514","frontmatter":{"title":"Besser lesbare Unittests mit AssertJ","date":"2014-04-02T00:00:00.000Z","time":null,"virtual":null,"tags":["junit","testen"],"speaker":["manuel_mauky"]},"fields":{"slug":"/talks/2014-04-02-assertj/"}}},{"node":{"id":"f39e922a-28fe-514b-838c-4b89e4ec981e","frontmatter":{"title":"Tool-Integration im Softwareentwicklungsprozess","date":"2014-01-29T00:00:00.000Z","time":null,"virtual":null,"tags":["integration","platform","softwareentwicklung"],"speaker":["max_wielsch"]},"fields":{"slug":"/talks/2014-01-29-opendip/"}}},{"node":{"id":"a8a6dc9d-ed19-56f9-9fd3-8c83531f61d0","frontmatter":{"title":"Performance-Optimierung im Web","date":"2013-11-27T00:00:00.000Z","time":null,"virtual":null,"tags":["web","performance"],"speaker":["maik_wagner"]},"fields":{"slug":"/talks/2013-11-27-web-performance/"}}},{"node":{"id":"fb329b7c-5599-55bf-85c5-54a1a6b821bb","frontmatter":{"title":"Modernes App-Design am Beispiel von Android","date":"2013-10-30T00:00:00.000Z","time":null,"virtual":null,"tags":["frontend","mobile","android"],"speaker":["max_wielsch"]},"fields":{"slug":"/talks/2013-10-30-app-design/"}}},{"node":{"id":"6cde30c0-930e-5a8f-9a80-e0bfc34878a6","frontmatter":{"title":"Persona - Werkzeug für die GUI-Entwicklung","date":"2013-07-31T00:00:00.000Z","time":null,"virtual":null,"tags":["frontend","softwareentwicklung"],"speaker":["marlene_knoche"]},"fields":{"slug":"/talks/2013-07-31-persona/"}}},{"node":{"id":"df78a5f7-4e2e-5f4d-83dd-6ad6432ef93e","frontmatter":{"title":"JRuby - Ruby auf der Java VM","date":"2013-05-29T00:00:00.000Z","time":null,"virtual":null,"tags":["programmiersprachen"],"speaker":["sebastian_schmeck"]},"fields":{"slug":"/talks/2013-05-29-jruby/"}}},{"node":{"id":"a13fb811-969f-5eb3-91f8-c71970bff046","frontmatter":{"title":"Lego NXT-Roboter mit Java programmieren","date":"2013-03-27T00:00:00.000Z","time":null,"virtual":null,"tags":["hardware","roboter"],"speaker":["erik_jaehne"]},"fields":{"slug":"/talks/2013-03-27-nxt_lego/"}}},{"node":{"id":"90157438-0e03-57ef-870f-701aac0b6210","frontmatter":{"title":"JavaFX 2","date":"2012-11-28T00:00:00.000Z","time":null,"virtual":null,"tags":["frontend","javafx"],"speaker":["alexander_casall","michael_thiele"]},"fields":{"slug":"/talks/2012-11-28-javafx2/"}}},{"node":{"id":"c044b319-accb-5fca-8339-9f01293583e6","frontmatter":{"title":"JSR-303 BeanValidation","date":"2012-09-26T00:00:00.000Z","time":null,"virtual":null,"tags":["javaee"],"speaker":["manuel_mauky"]},"fields":{"slug":"/talks/2012-09-26-bean_validation/"}}},{"node":{"id":"09982d70-f13f-5626-8a14-2d8d92abf724","frontmatter":{"title":"Selenium/Webdriver in der Praxis","date":"2012-07-25T00:00:00.000Z","time":null,"virtual":null,"tags":["web","frontend","testen"],"speaker":["maik_wagner"]},"fields":{"slug":"/talks/2012-07-25-selenium_praxis/"}}},{"node":{"id":"5e4ab94f-157d-5292-864d-57606942e1ff","frontmatter":{"title":"GridGain - Parallel Computing und Data Grid Anwendungen","date":"2012-06-27T00:00:00.000Z","time":null,"virtual":null,"tags":["cluster"],"speaker":["mario_reichel"]},"fields":{"slug":"/talks/2012-06-27-gridgain/"}}},{"node":{"id":"88119287-b9a3-5745-bd33-a7735cb39b4b","frontmatter":{"title":"JMonkeyEngine 3 - 3D-Applikationen in Java","date":"2012-05-30T00:00:00.000Z","time":null,"virtual":null,"tags":["frontend"],"speaker":["hans_markwart"]},"fields":{"slug":"/talks/2012-05-30-jmonkey-engine3/"}}},{"node":{"id":"fa3c70d9-f376-541d-be0b-ca24e0ac6b89","frontmatter":{"title":"Maven","date":"2012-04-25T00:00:00.000Z","time":null,"virtual":null,"tags":["build-management"],"speaker":["thomas_storch"]},"fields":{"slug":"/talks/2012-04-25-maven/"}}},{"node":{"id":"bd3b256f-6609-52bb-9d05-5a57482e4f42","frontmatter":{"title":"Webtests mit Selenium","date":"2012-03-28T00:00:00.000Z","time":null,"virtual":null,"tags":["frontend","web","testen"],"speaker":["marcus_doering"]},"fields":{"slug":"/talks/2012-03-28-webtests/"}}},{"node":{"id":"7881a4dc-ab76-5124-b9b1-dc13c982a250","frontmatter":{"title":"Webentwicklung mit Scala","date":"2012-02-29T00:00:00.000Z","time":null,"virtual":null,"tags":["frontend","web","programmiersprachen"],"speaker":["stefan_bradl"]},"fields":{"slug":"/talks/2012-02-29-scala_webapps/"}}},{"node":{"id":"67e2091a-15eb-56f9-bb65-586c4b2a809d","frontmatter":{"title":"Advanced JSF und CDI","date":"2012-01-25T00:00:00.000Z","time":null,"virtual":null,"tags":["frontend","web","javaee","jsf"],"speaker":["manuel_mauky"]},"fields":{"slug":"/talks/2012-01-25-jsf_cdi_advanced/"}}},{"node":{"id":"e3831714-860d-5867-9952-89ecfe8b81dd","frontmatter":{"title":"JPA - Hibernate","date":"2012-01-04T00:00:00.000Z","time":null,"virtual":null,"tags":["database","javaee"],"speaker":["marko_modsching"]},"fields":{"slug":"/talks/2012-01-01-hibernate/"}}},{"node":{"id":"11771522-730a-5373-b0f8-585c9c4f52c1","frontmatter":{"title":"JavaServer Faces 2 und CDI","date":"2011-11-30T00:00:00.000Z","time":null,"virtual":null,"tags":["frontend","web","javaee","jsf"],"speaker":["manuel_mauky"]},"fields":{"slug":"/talks/2011-11-30-jsf-cdi/"}}},{"node":{"id":"c40cc73f-d2be-5960-b15f-87e4b39429c8","frontmatter":{"title":"Android","date":"2011-10-26T00:00:00.000Z","time":null,"virtual":null,"tags":["mobile","android"],"speaker":["max_wielsch"]},"fields":{"slug":"/talks/2011-10-26-android/"}}},{"node":{"id":"9bcc98b0-826d-5513-b828-008dbf11c915","frontmatter":{"title":"JDOM","date":"2011-09-28T00:00:00.000Z","time":null,"virtual":null,"tags":["xml"],"speaker":["mark_ziener"]},"fields":{"slug":"/talks/2011-09-28-jdom/"}}},{"node":{"id":"6cca53f4-9edd-55ac-a225-75c94aa0dd8b","frontmatter":{"title":"Single Sign-On mit JAAS und JGSS","date":"2011-09-28T00:00:00.000Z","time":null,"virtual":null,"tags":["security"],"speaker":["mario_reichel"]},"fields":{"slug":"/talks/2011-09-28-single-sign-on/"}}},{"node":{"id":"67828855-f7d8-5d6d-9d90-7c3760bb7705","frontmatter":{"title":"Testen - Patterns und Best Practices","date":"2011-08-31T00:00:00.000Z","time":null,"virtual":null,"tags":["testen","patterns"],"speaker":["marko_modsching"]},"fields":{"slug":"/talks/2011-08-31-testen/"}}},{"node":{"id":"4bb73d33-af61-5eac-a5fa-d075fa8660f5","frontmatter":{"title":"TestNG","date":"2011-07-27T00:00:00.000Z","time":null,"virtual":null,"tags":["testen"],"speaker":["marcus_doering"]},"fields":{"slug":"/talks/2011-07-27-testng/"}}},{"node":{"id":"603cc23a-9840-5867-b78d-99fbd489d472","frontmatter":{"title":"Scala","date":"2011-07-27T00:00:00.000Z","time":null,"virtual":null,"tags":["programmiersprachen"],"speaker":["stefan_bradl"]},"fields":{"slug":"/talks/2011-07-27-scala/"}}},{"node":{"id":"5c110017-4815-5ac0-a4e3-a75e759080ac","frontmatter":{"title":"JavaEE und JBoss","date":"2011-06-29T00:00:00.000Z","time":null,"virtual":null,"tags":["javaee"],"speaker":["michael_foerster"]},"fields":{"slug":"/talks/2011-06-29-javaee_jboss/"}}},{"node":{"id":"54c98b64-64a8-515b-a02c-8a54c51dcca1","frontmatter":{"title":"Google Guice","date":"2011-05-27T00:00:00.000Z","time":null,"virtual":null,"tags":["patterns"],"speaker":["robert_wirbs"]},"fields":{"slug":"/talks/2011-05-27-guice/"}}},{"node":{"id":"6d1edf0b-d32b-5274-baa2-34c7f27786b8","frontmatter":{"title":"GWT - Google Web Toolkit","date":"2011-04-27T00:00:00.000Z","time":null,"virtual":null,"tags":["web","frontend"],"speaker":["ingo_koerner"]},"fields":{"slug":"/talks/2011-04-27-gwt/"}}},{"node":{"id":"2d5fb6de-57a5-54c0-9485-b2ea5bb67a81","frontmatter":{"title":"OSGi mit SpringDM","date":"2011-04-27T00:00:00.000Z","time":null,"virtual":null,"tags":null,"speaker":["manuel_mauky"]},"fields":{"slug":"/talks/2011-04-27-osgi_springdm/"}}},{"node":{"id":"b0252f0d-2a16-5085-913a-7fb7bf5364a6","frontmatter":{"title":"EasyMock","date":"2011-03-22T00:00:00.000Z","time":null,"virtual":null,"tags":["testen"],"speaker":["richard_hauswald"]},"fields":{"slug":"/talks/2011-03-22-easymock/"}}},{"node":{"id":"c92b2d55-0d33-50f7-a73c-de8f55b7d75e","frontmatter":{"title":"Jenkins/Hudson","date":"2011-03-22T00:00:00.000Z","time":null,"virtual":null,"tags":["build-management"],"speaker":["stefan_scheumann"]},"fields":{"slug":"/talks/2011-03-22-jenkins/"}}}]},"speakers":{"edges":[{"node":{"id":"2fce745c-9aae-524d-a24b-d39e282689b0","fields":{"slug":"/speakers/andre_tepper/"},"frontmatter":{"name":"Andre Tepper"}}},{"node":{"id":"4936b97c-34e6-5ea1-a09a-70bc78822cab","fields":{"slug":"/speakers/andreas_knuepfer/"},"frontmatter":{"name":"Dr. Andreas Knüpfer"}}},{"node":{"id":"83212ced-9134-55d1-bd90-46f149e95898","fields":{"slug":"/speakers/bruno_devic/"},"frontmatter":{"name":"Bruno Devic"}}},{"node":{"id":"ff0ef063-2c62-5f5c-8e8a-3fea00727337","fields":{"slug":"/speakers/alexander_casall/"},"frontmatter":{"name":"Alexander Casall"}}},{"node":{"id":"02a5cfde-2b00-5350-a999-f314d4c0ee1e","fields":{"slug":"/speakers/christian_kuemmel/"},"frontmatter":{"name":"Christian Kümmel"}}},{"node":{"id":"7640e853-d184-5946-a052-be3b7deaa867","fields":{"slug":"/speakers/damian_dudziec/"},"frontmatter":{"name":"Damian Dudziec"}}},{"node":{"id":"78a4398b-6839-50d3-8f1e-5262def696d6","fields":{"slug":"/speakers/christoph_menzel/"},"frontmatter":{"name":"Christoph Menzel"}}},{"node":{"id":"2c287f6d-72f9-5142-8d7e-8cb0049f7898","fields":{"slug":"/speakers/daniel_sernow/"},"frontmatter":{"name":"Daniel Sernow"}}},{"node":{"id":"2adfcaf8-baac-58d8-ac17-2e9e978bea1b","fields":{"slug":"/speakers/daniel_fesenmeyer/"},"frontmatter":{"name":"Daniel Fesenmeyer"}}},{"node":{"id":"e86d9d23-67e9-58de-853e-30051fb1eabb","fields":{"slug":"/speakers/daniel_sulyok/"},"frontmatter":{"name":"Dániel Sulyok"}}},{"node":{"id":"770e92e8-4326-5909-ace2-ddfcc7deae8b","fields":{"slug":"/speakers/denny_israel/"},"frontmatter":{"name":"Denny Israel"}}},{"node":{"id":"074397e2-c590-59cc-8c29-413f81c9e045","fields":{"slug":"/speakers/erik_jaehne/"},"frontmatter":{"name":"Erik Jähne"}}},{"node":{"id":"f13237e6-5775-5e35-bc7e-7ab125cff716","fields":{"slug":"/speakers/gerrit_grunwald/"},"frontmatter":{"name":"Gerrit Grunwald"}}},{"node":{"id":"f8ac41fc-2d52-5c52-8a5b-cc148abad020","fields":{"slug":"/speakers/gregor_trefs/"},"frontmatter":{"name":"Gregor Trefs"}}},{"node":{"id":"1dd06ad5-50e3-58f4-b8a3-30ffdf3c4cc0","fields":{"slug":"/speakers/hannes_kretschmer/"},"frontmatter":{"name":"Hannes Kretschmer"}}},{"node":{"id":"93129b19-f730-5e77-879a-58c8e08a198a","fields":{"slug":"/speakers/hendrik_ebbers/"},"frontmatter":{"name":"Hendrik Ebbers"}}},{"node":{"id":"44493f6a-f9c2-527b-a086-fed0da68f1c4","fields":{"slug":"/speakers/ingo_koerner/"},"frontmatter":{"name":"Ingo Körner"}}},{"node":{"id":"35a72c9a-cbdf-5f39-8b2a-1813b7e94cc7","fields":{"slug":"/speakers/hans_markwart/"},"frontmatter":{"name":"Hans Markwart"}}},{"node":{"id":"1f477a08-7805-5bf3-984b-4afec0b2cd45","fields":{"slug":"/speakers/jens_leuschner/"},"frontmatter":{"name":"Jens Leuschner"}}},{"node":{"id":"d857c285-3a43-5120-8453-7b2f87424152","fields":{"slug":"/speakers/kay_grebenstein/"},"frontmatter":{"name":"Kay Grebenstein"}}},{"node":{"id":"184d7622-4aae-50bd-a14c-f44f4db9c575","fields":{"slug":"/speakers/lars_roewekamp/"},"frontmatter":{"name":"Lars Röwekamp"}}},{"node":{"id":"fee4bf04-1e31-54b1-b809-c3d510531b5c","fields":{"slug":"/speakers/maik_wagner/"},"frontmatter":{"name":"Maik Wagner"}}},{"node":{"id":"abafb571-eb5b-5194-818a-f2b18a1382c9","fields":{"slug":"/speakers/konstantin_eger/"},"frontmatter":{"name":"Konstantin Eger"}}},{"node":{"id":"c48b140e-258d-5030-8fcc-70fedc7dd5b4","fields":{"slug":"/speakers/manuel_mauky/"},"frontmatter":{"name":"Manuel Mauky"}}},{"node":{"id":"d0f25d9d-4106-5691-a1b2-28cbe4275e46","fields":{"slug":"/speakers/marcus_doering/"},"frontmatter":{"name":"Marcus Döring"}}},{"node":{"id":"83b497c1-a32d-5e39-a543-439154b750d9","fields":{"slug":"/speakers/marco_gotthans/"},"frontmatter":{"name":"Marco Gotthans"}}},{"node":{"id":"9e00ea79-267c-5db0-9e41-f5d872b4c595","fields":{"slug":"/speakers/mario_mann/"},"frontmatter":{"name":"Mario Mann"}}},{"node":{"id":"d08d4526-e68f-5a1d-8a78-6c5a99cbe1e4","fields":{"slug":"/speakers/mario_reichel/"},"frontmatter":{"name":"Mario Reichel"}}},{"node":{"id":"678c9f26-730c-5aff-999b-bd4eb93dc92f","fields":{"slug":"/speakers/mariusz_zienkiewicz/"},"frontmatter":{"name":"Mariusz Zienkiewicz"}}},{"node":{"id":"74ed9e96-8a2b-59cb-8642-93f5dec4d7b3","fields":{"slug":"/speakers/marko_modsching/"},"frontmatter":{"name":"Marko Modsching"}}},{"node":{"id":"5834f4d7-e0a3-505c-b1d0-81a37f5144f1","fields":{"slug":"/speakers/mark_ziener/"},"frontmatter":{"name":"Mark Ziener"}}},{"node":{"id":"b0aa71a0-d2a3-5a2a-8831-2137b43e583d","fields":{"slug":"/speakers/markus_weiland/"},"frontmatter":{"name":"Markus Weiland"}}},{"node":{"id":"af5cd69a-023f-577f-9cb1-5f5185d0848d","fields":{"slug":"/speakers/markus_kett/"},"frontmatter":{"name":"Markus Kett"}}},{"node":{"id":"2376b174-04f1-5b56-b72f-8201a1dfb2a5","fields":{"slug":"/speakers/marlene_knoche/"},"frontmatter":{"name":"Marlene Knoche"}}},{"node":{"id":"db05ced3-0480-51fe-83be-d0149d94da93","fields":{"slug":"/speakers/max_wielsch/"},"frontmatter":{"name":"Max Wielsch"}}},{"node":{"id":"f042c1af-7b71-5d8f-ab98-aa158cb2a418","fields":{"slug":"/speakers/michael_foerster/"},"frontmatter":{"name":"Michael Förster"}}},{"node":{"id":"21c7def1-78a4-52e2-bf13-b3a646e3215d","fields":{"slug":"/speakers/michael_hunger/"},"frontmatter":{"name":"Michael Hunger"}}},{"node":{"id":"fc3d2a4f-3ab8-5fc9-aa19-09fc69dd1385","fields":{"slug":"/speakers/michael_thiele/"},"frontmatter":{"name":"Michael Thiele"}}},{"node":{"id":"917f2c35-500a-5f14-bfb1-d99f287d2afe","fields":{"slug":"/speakers/michael_wiedeking/"},"frontmatter":{"name":"Michael Wiedeking"}}},{"node":{"id":"8402dc7e-d767-5b77-8ca3-ff9c967248fb","fields":{"slug":"/speakers/oliver_drotbohm/"},"frontmatter":{"name":"Oliver Drotbohm"}}},{"node":{"id":"543c0c0e-1ed8-519c-a2d3-544f86c7b5d2","fields":{"slug":"/speakers/nico_foerster/"},"frontmatter":{"name":"Nico Förster"}}},{"node":{"id":"c8fa437e-3c34-56b6-b03b-c67c1370f111","fields":{"slug":"/speakers/patryk_lewandowski/"},"frontmatter":{"name":"Patryk Lewandowski"}}},{"node":{"id":"339b9441-8737-533f-aefe-b31bbb6663f4","fields":{"slug":"/speakers/paul_weinhold/"},"frontmatter":{"name":"Paul Weinhold"}}},{"node":{"id":"e52c08b9-aaed-5384-920c-d08af9991f5b","fields":{"slug":"/speakers/pawel_adaszewski/"},"frontmatter":{"name":"Pawel Adaszewski"}}},{"node":{"id":"304f3f2c-44ca-5275-9f73-5b789038daf0","fields":{"slug":"/speakers/richard_hauswald/"},"frontmatter":{"name":"Richard Hauswald"}}},{"node":{"id":"18051d64-e79b-5ad5-bdc3-0b0f822ae644","fields":{"slug":"/speakers/robert_wirbs/"},"frontmatter":{"name":"Robert Wirbs"}}},{"node":{"id":"cb2ea0b2-b790-5204-9f7b-e1cd0f0583c1","fields":{"slug":"/speakers/sebastian_schmeck/"},"frontmatter":{"name":"Sebastian Schmeck"}}},{"node":{"id":"54a0f9fe-80ab-52ba-9aea-e3f2a5dd045f","fields":{"slug":"/speakers/roland_weisleder/"},"frontmatter":{"name":"Roland Weisleder"}}},{"node":{"id":"87a83879-1b5e-50f5-9829-2699d9a01da5","fields":{"slug":"/speakers/sergej_tihonov/"},"frontmatter":{"name":"Sergej Tihonov"}}},{"node":{"id":"4f81ccbd-2893-5804-a68a-04c6b8c20f75","fields":{"slug":"/speakers/simon_roloff/"},"frontmatter":{"name":"Simon Roloff"}}},{"node":{"id":"63ab1902-d259-53c5-99ea-3564ac4ce81a","fields":{"slug":"/speakers/stefan_bley/"},"frontmatter":{"name":"Stefan Bley"}}},{"node":{"id":"a26cc991-7e1d-5caa-8926-7a52b0fa93e6","fields":{"slug":"/speakers/stefan_barth/"},"frontmatter":{"name":"Stefan Barth"}}},{"node":{"id":"dd47473a-7d7f-54fa-9daa-e062ae1c9bef","fields":{"slug":"/speakers/stefan_bradl/"},"frontmatter":{"name":"Stefan Bradl"}}},{"node":{"id":"d4e04ddf-59bb-542f-b6bc-58e5cf77667d","fields":{"slug":"/speakers/stefan_heinze/"},"frontmatter":{"name":"Stefan Heinze"}}},{"node":{"id":"bd7c2828-9149-5013-8dca-331d23b9953f","fields":{"slug":"/speakers/stefan_scheumann/"},"frontmatter":{"name":"Stefan Scheumann"}}},{"node":{"id":"7b63d414-09ef-5e63-bda2-a3259175090c","fields":{"slug":"/speakers/stefan_zoerner/"},"frontmatter":{"name":"Stefan Zörner"}}},{"node":{"id":"09a6b265-f443-579a-ae78-9188aaeca6ca","fields":{"slug":"/speakers/stefan_zoerner_2/"},"frontmatter":{"name":"Stefan Zörner"}}},{"node":{"id":"39cc0655-cd1a-540e-9553-b9fa67e895cc","fields":{"slug":"/speakers/steffen_seidler/"},"frontmatter":{"name":"Steffen Seidler"}}},{"node":{"id":"aefd4a1f-a4ed-5e51-a713-1da570fcd2ee","fields":{"slug":"/speakers/sven_hoffmann/"},"frontmatter":{"name":"Sven Hoffmann"}}},{"node":{"id":"a8d3dca8-b87d-568d-8e70-dcac046e98d5","fields":{"slug":"/speakers/stephan_strehler/"},"frontmatter":{"name":"Stephan Strehler"}}},{"node":{"id":"9a66bc44-37f7-527c-9f45-6c0b1dd74510","fields":{"slug":"/speakers/thilo_frotscher/"},"frontmatter":{"name":"Thilo Frotscher"}}},{"node":{"id":"3cab3c25-9f08-5d29-a7c2-3e2b0d414c16","fields":{"slug":"/speakers/thomas_storch/"},"frontmatter":{"name":"Thomas Storch"}}},{"node":{"id":"9776c4f1-e686-5cf2-b042-939797958362","fields":{"slug":"/speakers/tobias_blaschke/"},"frontmatter":{"name":"Tobias Blaschke"}}},{"node":{"id":"91d3bc22-4970-51b8-90cf-7583f2dc5ff5","fields":{"slug":"/speakers/uwe_manteuffel/"},"frontmatter":{"name":"Uwe Manteuffel"}}},{"node":{"id":"53f5069e-fb7c-5f5d-b967-b5df3c1df975","fields":{"slug":"/speakers/wolfgang_weigend/"},"frontmatter":{"name":"Wolfgang Weigend"}}}]}},"pageContext":{}},"staticQueryHashes":[],"slicesMap":{}} \ No newline at end of file +{"componentChunkName":"component---src-pages-talks-tsx","path":"/talks/","result":{"data":{"talks":{"edges":[{"node":{"id":"01a8772b-cb6f-5d52-bb9f-03d7e5b323ee","frontmatter":{"title":"JavaFX State of the Technology","date":"2024-09-25T00:00:00.000Z","time":null,"virtual":null,"tags":["javafx","frontend"],"speaker":["wolfgang_weigend","christian_heilmann"]},"fields":{"slug":"/talks/2024-09-25-javafx-state-of-the-technology/"}}},{"node":{"id":"c08fdc1a-573d-546d-985b-c6f5c8f2aa76","frontmatter":{"title":"Parallele Programmiermodelle für Supercomputer","date":"2024-05-29T00:00:00.000Z","time":null,"virtual":null,"tags":["programmiersprachen","parallel","non-jvm-language","supercomputer"],"speaker":["andreas_knuepfer"]},"fields":{"slug":"/talks/2024-05-29-parallele-programmiermodelle/"}}},{"node":{"id":"56c1a59c-f16a-5f43-aa33-412cf06ee342","frontmatter":{"title":"Rust (Teil 2)","date":"2024-04-24T00:00:00.000Z","time":null,"virtual":null,"tags":["programmiersprachen","performance","functional-programming","non-jvm-language","security"],"speaker":["konstantin_eger"]},"fields":{"slug":"/talks/2024-04-24-rust2/"}}},{"node":{"id":"97f4123c-3293-532b-8ea6-6b81b355fd92","frontmatter":{"title":"Rust (Teil 1): Einführung in die Sprache","date":"2024-03-20T00:00:00.000Z","time":null,"virtual":null,"tags":["programmiersprachen","performance","functional-programming","non-jvm-language","security"],"speaker":["manuel_mauky"]},"fields":{"slug":"/talks/2024-03-20-rust/"}}},{"node":{"id":"fafd1d08-20ad-5b94-8837-fc066b152f0d","frontmatter":{"title":"Schlanke Architektur-Reviews","date":"2024-02-28T00:00:00.000Z","time":null,"virtual":null,"tags":["architektur"],"speaker":["stefan_zoerner_2"]},"fields":{"slug":"/talks/2024-02-28-architektur-reviews/"}}},{"node":{"id":"cafdb0d7-7218-5608-bd6f-c033864617fe","frontmatter":{"title":"Flutter, der heilige Gral der Cross-Plattform-Entwicklung?!","date":"2024-01-31T00:00:00.000Z","time":null,"virtual":null,"tags":["mobile","frontend","non-jvm-language"],"speaker":["christoph_menzel"]},"fields":{"slug":"/talks/2024-01-31-flutter/"}}},{"node":{"id":"e583793f-bcc5-5f78-8931-3357be0f0ba5","frontmatter":{"title":"What the CRaC - Superfast JVM startup","date":"2023-11-29T00:00:00.000Z","time":null,"virtual":null,"tags":["java","performance","jdk"],"speaker":["gerrit_grunwald"]},"fields":{"slug":"/talks/2023-11-29-crac/"}}},{"node":{"id":"34d30efa-4f03-53e5-8043-fa73d75cbd58","frontmatter":{"title":"AWS-Infrastruktur mit Java erstellen - CDK in Action","date":"2023-10-25T00:00:00.000Z","time":null,"virtual":null,"tags":["java","cloud"],"speaker":["pawel_adaszewski","damian_dudziec"]},"fields":{"slug":"/talks/2023-10-25-aws_cdk_in_action/"}}},{"node":{"id":"4f2a426a-5b98-5f61-8750-46aac0c6c9f3","frontmatter":{"title":"Java 21: Virtuelle Threads","date":"2023-09-27T00:00:00.000Z","time":null,"virtual":null,"tags":["java","performance"],"speaker":["patryk_lewandowski"]},"fields":{"slug":"/talks/2023-09-27-virtual-threads/"}}},{"node":{"id":"8a2e331b-0f3c-52b6-823e-852ecfff1ba4","frontmatter":{"title":"GraalVM 23 – Konzepte und Features","date":"2023-06-28T00:00:00.000Z","time":null,"virtual":null,"tags":["java","jdk","graalvm"],"speaker":["wolfgang_weigend"]},"fields":{"slug":"/talks/2023-06-28-graalvm_23/"}}},{"node":{"id":"d1758688-b708-5de7-8e59-5646800cc19a","frontmatter":{"title":"Accessibility in the Wild","date":"2023-05-31T00:00:00.000Z","time":null,"virtual":null,"tags":["java","a11y"],"speaker":["daniel_sulyok"]},"fields":{"slug":"/talks/2023-05-31-accessibility_in_the_wild/"}}},{"node":{"id":"79b0298f-b45a-5707-a02c-37ea990349ee","frontmatter":{"title":"ArchUnit: Unit-Tests für deine Java-Architektur","date":"2023-04-26T00:00:00.000Z","time":null,"virtual":null,"tags":["architektur","testen"],"speaker":["roland_weisleder"]},"fields":{"slug":"/talks/2023-04-26-archunit_unit_tests_java_architektur/"}}},{"node":{"id":"f5233192-6039-5c35-9957-b7023ed9e701","frontmatter":{"title":"Spring für architekturinteressierte Entwickler:innen","date":"2023-03-29T00:00:00.000Z","time":"18:30","virtual":null,"tags":["architektur","spring"],"speaker":["oliver_drotbohm"]},"fields":{"slug":"/talks/2023-03-29-spring_fuer_architekturinteressierte_entwickler_innen/"}}},{"node":{"id":"8fa19a6d-7e84-5d43-a513-0644ddb362d6","frontmatter":{"title":"Exception First – Stabilisiere deinen Code mit mehr Exceptions","date":"2023-02-22T00:00:00.000Z","time":null,"virtual":null,"tags":["architektur"],"speaker":["sergej_tihonov"]},"fields":{"slug":"/talks/2023-02-22-exception_first/"}}},{"node":{"id":"5d96ee33-16f6-5b4c-aca8-557c4c24c14e","frontmatter":{"title":"Content Management neu gedacht mit Contentlab","date":"2023-01-25T00:00:00.000Z","time":null,"virtual":null,"tags":["platform","web"],"speaker":["markus_weiland"]},"fields":{"slug":"/talks/2023-01-25-contentlab/"}}},{"node":{"id":"a0820bff-9a0d-5989-b837-8f769fcc2ba6","frontmatter":{"title":"Kundenspezifisches IAM mit Keycloak","date":"2022-11-30T00:00:00.000Z","time":null,"virtual":null,"tags":["security"],"speaker":["daniel_fesenmeyer"]},"fields":{"slug":"/talks/2022-11-30-iam-keycloak/"}}},{"node":{"id":"2b8e8a71-59c4-53fb-baa2-5b6136f7efe8","frontmatter":{"title":"Industrie 4.0? Das JUGt mich!","date":"2022-10-12T00:00:00.000Z","time":null,"virtual":null,"tags":["cloud","iot","industrie4.0","infrastructure"],"speaker":["marco_gotthans"]},"fields":{"slug":"/talks/2022-10-12-indistrie_4.0/"}}},{"node":{"id":"2e3945a5-7de9-5188-b447-47134c218967","frontmatter":{"title":"Hebe deine IoT-Infrastruktur auf das Serverless-Level an","date":"2022-06-22T00:00:00.000Z","time":null,"virtual":null,"tags":["cloud","iot","serverless","infrastructure"],"speaker":["pawel_adaszewski"]},"fields":{"slug":"/talks/2022-06-22-iot-infrastruktur-serverless/"}}},{"node":{"id":"1249d4ab-1401-5936-92b8-3d6dee7f14bb","frontmatter":{"title":"Ultraschnelle Java In-Memory Datenbank-Anwendungen & Microservices mit MicroStream","date":"2021-06-30T00:00:00.000Z","time":null,"virtual":true,"tags":["database","java"],"speaker":["markus_kett","christian_kuemmel"]},"fields":{"slug":"/talks/2021-06-30-microstream/"}}},{"node":{"id":"3c969ad0-d843-57d0-92c4-91340d71851d","frontmatter":{"title":"Web Components","date":"2021-01-27T00:00:00.000Z","time":null,"virtual":true,"tags":["web"],"speaker":["manuel_mauky"]},"fields":{"slug":"/talks/2021-01-27-webcomponents/"}}},{"node":{"id":"fee8a0ec-6360-5446-9bb0-9ecbe5695536","frontmatter":{"title":"Java Secure Coding in der Praxis","date":"2020-11-25T00:00:00.000Z","time":null,"virtual":true,"tags":["java","security"],"speaker":["nico_foerster"]},"fields":{"slug":"/talks/2020-11-25-secure_coding/"}}},{"node":{"id":"0ebf9412-38af-5831-82e8-2b0aa744f924","frontmatter":{"title":"Branching-Modelle","date":"2020-07-22T00:00:00.000Z","time":null,"virtual":true,"tags":["java","git"],"speaker":["hannes_kretschmer"]},"fields":{"slug":"/talks/2020-07-22-branching_modelle/"}}},{"node":{"id":"92ec8c3c-c428-5ca1-bb98-7b8ebac5cdfb","frontmatter":{"title":"JDK 14 und GraalVM im Java Ökosystem","date":"2020-04-29T00:00:00.000Z","time":"18:00","virtual":true,"tags":["java","jdk","graalvm"],"speaker":["wolfgang_weigend"]},"fields":{"slug":"/talks/2020-04-29-jdk14_graalvm/"}}},{"node":{"id":"c7067e06-b5be-50ec-83d2-9ea30dc14640","frontmatter":{"title":"Innovationsmotor Cloud Foundry!?","date":"2020-01-29T00:00:00.000Z","time":null,"virtual":null,"tags":["cloud"],"speaker":["simon_roloff"]},"fields":{"slug":"/talks/2020-01-27-cloud-foundry/"}}},{"node":{"id":"a0f32bfb-f9fa-5c9c-a70d-ffd93be7d859","frontmatter":{"title":"Advanced BDD Tests","date":"2019-11-28T00:00:00.000Z","time":null,"virtual":null,"tags":["java","testen"],"speaker":["maik_wagner"]},"fields":{"slug":"/talks/2019-11-28-advanced-bdd-tests/"}}},{"node":{"id":"6895717e-291c-581d-8fef-3b5e73bc8369","frontmatter":{"title":"Wie gut kennst Du das Collections Framework?","date":"2019-06-26T00:00:00.000Z","time":null,"virtual":null,"tags":["java"],"speaker":["thilo_frotscher"]},"fields":{"slug":"/talks/2019-06-26-collection-framework/"}}},{"node":{"id":"a5f7b4d5-03e6-588d-9778-62b4b8c44286","frontmatter":{"title":"OAuth 2.0/OpenIDConnect mit Keycloak","date":"2019-05-29T00:00:00.000Z","time":null,"virtual":null,"tags":["java","security"],"speaker":["denny_israel"]},"fields":{"slug":"/talks/2019-05-29-oauth/"}}},{"node":{"id":"9a7e9567-b7fe-59cd-90fe-aec93c90f2af","frontmatter":{"title":"It's a JDK jungle out there - oder wie es mit den neuen Java-Versionen geordnet weitergeht","date":"2019-04-24T00:00:00.000Z","time":null,"virtual":null,"tags":["java","jdk"],"speaker":["wolfgang_weigend"]},"fields":{"slug":"/talks/2019-04-24_jdk_jungle/"}}},{"node":{"id":"dd2fc902-b2b3-5256-b24b-e09f17f45415","frontmatter":{"title":"Static-Site-Generators","date":"2019-03-27T00:00:00.000Z","time":null,"virtual":null,"tags":["web","javascript"],"speaker":["manuel_mauky"]},"fields":{"slug":"/talks/2019-03-27-static-site-generators/"}}},{"node":{"id":"f37a3185-cf74-5401-9461-328751a5a63e","frontmatter":{"title":"Java Reflection: Classes behind the scenes","date":"2019-02-27T00:00:00.000Z","time":null,"virtual":null,"tags":["java"],"speaker":["erik_jaehne"]},"fields":{"slug":"/talks/2019-02-27_reflection/"}}},{"node":{"id":"6c6f82f3-26da-59ee-a8b6-8c178256b6b7","frontmatter":{"title":"Java APIs - the missing manual","date":"2019-01-31T00:00:00.000Z","time":null,"virtual":null,"tags":["java"],"speaker":["hendrik_ebbers"]},"fields":{"slug":"/talks/2019-01-31_java_apis_missing_manual/"}}},{"node":{"id":"f3a5b0e9-0351-58c1-a827-a5f39196ddee","frontmatter":{"title":"Monadische Transaktionen","date":"2018-11-23T00:00:00.000Z","time":null,"virtual":null,"tags":["functional-programming"],"speaker":["gregor_trefs"]},"fields":{"slug":"/talks/2018-11-23-monadische_transaktionen/"}}},{"node":{"id":"f17a3451-b9a5-5b42-b740-3c15fe9268f5","frontmatter":{"title":"Immutable Data - Unveränderliche Daten im Griff","date":"2018-06-27T00:00:00.000Z","time":null,"virtual":null,"tags":["programmiersprachen","functional-programming"],"speaker":["manuel_mauky"]},"fields":{"slug":"/talks/2018-06-27-immutable-data/"}}},{"node":{"id":"bba11502-e73b-5c5e-9ce7-f4102b1daed5","frontmatter":{"title":"GraphQL","date":"2018-05-30T00:00:00.000Z","time":null,"virtual":null,"tags":["programmiersprachen","web","architektur"],"speaker":["stephan_strehler"]},"fields":{"slug":"/talks/2018-05-30-graphql/"}}},{"node":{"id":"1b2f3079-33fa-52a7-8f63-17ed40feb17e","frontmatter":{"title":"Kotlin","date":"2018-04-25T00:00:00.000Z","time":null,"virtual":null,"tags":["programmiersprachen"],"speaker":["tobias_blaschke"]},"fields":{"slug":"/talks/2018-04-25-kotlin/"}}},{"node":{"id":"dad0ee9f-ea34-5ce1-b7fe-a0e45b09e845","frontmatter":{"title":"Mikro- vs. Makroarchitektur – Spielraum und Spielregeln","date":"2018-03-20T00:00:00.000Z","time":null,"virtual":null,"tags":["architektur"],"speaker":["stefan_zoerner"]},"fields":{"slug":"/talks/2018-03-20-mikro_vs_makroarchitektur/"}}},{"node":{"id":"67f5c805-4443-51af-9f87-0a9aff577dce","frontmatter":{"title":"Entwicklung von Java Applikationen auf der SAP Cloud Platform","date":"2018-02-28T00:00:00.000Z","time":null,"virtual":null,"tags":["cloud"],"speaker":["jens_leuschner","mariusz_zienkiewicz"]},"fields":{"slug":"/talks/2018-02-28-java_auf_sap_cloud/"}}},{"node":{"id":"259289d0-862c-5044-bdb1-38c8d853780d","frontmatter":{"title":"Refactoring to a System of Systems","date":"2018-01-31T00:00:00.000Z","time":null,"virtual":null,"tags":["architektur"],"speaker":["oliver_drotbohm"]},"fields":{"slug":"/talks/2018-01-31-system_of_systems/"}}},{"node":{"id":"92f30cfa-20d5-5aba-8db4-e6e1de091225","frontmatter":{"title":"Neo4j: Panama Papers","date":"2017-11-29T00:00:00.000Z","time":null,"virtual":null,"tags":["database"],"speaker":["michael_hunger"]},"fields":{"slug":"/talks/2017-11-29-neo4j/"}}},{"node":{"id":"fd607630-d7dd-503a-8da0-25a963df4df3","frontmatter":{"title":"Serverless Application - Who the heck needs a Server?","date":"2017-10-25T00:00:00.000Z","time":null,"virtual":null,"tags":["architektur","serverless"],"speaker":["lars_roewekamp"]},"fields":{"slug":"/talks/2017-10-25-serverless/"}}},{"node":{"id":"29eb8b61-615f-5f82-afc0-25abdc540af7","frontmatter":{"title":"Spracherkennung mit Amazon Alexa","date":"2017-08-30T00:00:00.000Z","time":null,"virtual":null,"tags":["ki"],"speaker":["andre_tepper","maik_wagner"]},"fields":{"slug":"/talks/2017-08-30-alexa/"}}},{"node":{"id":"935f30df-c07e-5cfa-9188-3564b4e0fab7","frontmatter":{"title":"React und React-Native: Functional UI Development für Browser und mobile Endgeräte","date":"2017-05-31T00:00:00.000Z","time":null,"virtual":null,"tags":["frontend","javascript","web","mobile","functional-programming"],"speaker":["manuel_mauky"]},"fields":{"slug":"/talks/2017-05-31-react/"}}},{"node":{"id":"9ba71f6c-f0dd-5c4e-b70f-3d7ac1ec19ca","frontmatter":{"title":"JDK 9","date":"2017-04-25T00:00:00.000Z","time":null,"virtual":null,"tags":["java","jdk"],"speaker":["wolfgang_weigend"]},"fields":{"slug":"/talks/2017-04-26-jdk9/"}}},{"node":{"id":"d7528a15-3b10-587c-9543-5c372945763a","frontmatter":{"title":"Angular 2 für Java Entwickler","date":"2017-03-22T00:00:00.000Z","time":null,"virtual":null,"tags":["frontend","web","javascript"],"speaker":["sven_hoffmann"]},"fields":{"slug":"/talks/2017-03-22-angular/"}}},{"node":{"id":"f009504d-3327-52e9-8948-6cd4d3ba952e","frontmatter":{"title":"CSS, Aha-Effekte und Perspektiven","date":"2017-02-22T00:00:00.000Z","time":null,"virtual":null,"tags":["frontend","web"],"speaker":["uwe_manteuffel"]},"fields":{"slug":"/talks/2017-02-22-css/"}}},{"node":{"id":"cf0f1947-1449-5df5-b546-aa31d25046a7","frontmatter":{"title":"JUnit 5","date":"2017-01-25T00:00:00.000Z","time":null,"virtual":null,"tags":["testen","junit"],"speaker":["stefan_bley"]},"fields":{"slug":"/talks/2017-01-25-junit5/"}}},{"node":{"id":"c67796c2-6477-5658-a163-1de4870f548e","frontmatter":{"title":"Inside JVM","date":"2016-11-30T00:00:00.000Z","time":null,"virtual":null,"tags":["java","jvm"],"speaker":["michael_wiedeking"]},"fields":{"slug":"/talks/2016-11-30-inside_jvm/"}}},{"node":{"id":"a4cfc466-b5f6-5b10-be7e-13c92d3ab2f7","frontmatter":{"title":"Kommunikationskultur im Softwareentwicklungsprozess","date":"2016-09-21T00:00:00.000Z","time":null,"virtual":null,"tags":["testen","softwareentwicklung"],"speaker":["daniel_sernow"]},"fields":{"slug":"/talks/2016-09-21-kommunikationskultur/"}}},{"node":{"id":"e14cd50a-435a-5855-ae06-c0d1eb30d8af","frontmatter":{"title":"Testwerkzeuge für JavaFX","date":"2016-07-27T00:00:00.000Z","time":null,"virtual":null,"tags":["javafx","testen"],"speaker":["kay_grebenstein"]},"fields":{"slug":"/talks/2016-07-27-testwerkzeuge_javafx/"}}},{"node":{"id":"4dc84ec4-23f6-5438-a2e6-b5944dc868c9","frontmatter":{"title":"Performance-Analyse mit inspectIT","date":"2016-05-25T00:00:00.000Z","time":null,"virtual":null,"tags":["performance","monitoring"],"speaker":["mario_mann"]},"fields":{"slug":"/talks/2016-05-25-performance-analyse-inspectit/"}}},{"node":{"id":"7d996009-4040-5330-a46c-5877cc5668af","frontmatter":{"title":"Haskell und Frege","date":"2016-03-30T00:00:00.000Z","time":null,"virtual":null,"tags":["programmiersprachen","functional-programming","non-jvm-language"],"speaker":["manuel_mauky"]},"fields":{"slug":"/talks/2016-03-30-haskell_frege/"}}},{"node":{"id":"79835d68-651b-57a2-8c75-042baeba5b30","frontmatter":{"title":"Funktionale Programmierung mit Java","date":"2016-01-27T00:00:00.000Z","time":null,"virtual":null,"tags":["java","functional-programming"],"speaker":["manuel_mauky","max_wielsch"]},"fields":{"slug":"/talks/2016-01-27-functional_java/"}}},{"node":{"id":"43538367-514c-5009-b9eb-0f730f52bfd9","frontmatter":{"title":"JavaFX auf Mobile","date":"2015-11-25T00:00:00.000Z","time":null,"virtual":null,"tags":["frontend","javafx","mobile","android"],"speaker":["stefan_heinze","stefan_barth"]},"fields":{"slug":"/talks/2015-11-25-javafx-mobile/"}}},{"node":{"id":"eff228ab-8f49-5773-905c-fee144de429f","frontmatter":{"title":"Guava","date":"2015-09-30T00:00:00.000Z","time":null,"virtual":null,"tags":["java"],"speaker":["steffen_seidler"]},"fields":{"slug":"/talks/2015-09-30-guava/"}}},{"node":{"id":"a3c8bbba-0df8-503b-a702-21589e288614","frontmatter":{"title":"Regelbasierte Systeme mit JBoss Drools","date":"2015-07-29T00:00:00.000Z","time":null,"virtual":null,"tags":["dsl"],"speaker":["paul_weinhold"]},"fields":{"slug":"/talks/2015-07-29-drools/"}}},{"node":{"id":"1faa8cf7-10f9-54d5-a480-6d2e44896011","frontmatter":{"title":"Fortgeschrittene Android-Entwicklung","date":"2015-05-27T00:00:00.000Z","time":null,"virtual":null,"tags":["mobile","android"],"speaker":["max_wielsch"]},"fields":{"slug":"/talks/2015-05-27-advanced-android/"}}},{"node":{"id":"d853656a-6dac-5d38-b25a-c241c13cbadb","frontmatter":{"title":"Einstieg in die Android-App-Entwicklung","date":"2015-03-25T00:00:00.000Z","time":null,"virtual":null,"tags":["android","mobile"],"speaker":["max_wielsch"]},"fields":{"slug":"/talks/2015-03-25-android/"}}},{"node":{"id":"d88d92c2-cf39-5768-b424-1b211f08c8e8","frontmatter":{"title":"MoSKito - Monitoring Framework","date":"2015-01-28T00:00:00.000Z","time":null,"virtual":null,"tags":["web","monitoring"],"speaker":["steffen_seidler"]},"fields":{"slug":"/talks/2015-01-28-moskito/"}}},{"node":{"id":"2fdb9675-dfcf-55b8-899d-8e6d04242b4a","frontmatter":{"title":"Model-View-*: UI-Design-Patterns im Detail","date":"2014-12-03T00:00:00.000Z","time":null,"virtual":null,"tags":["frontend","patterns"],"speaker":["manuel_mauky"]},"fields":{"slug":"/talks/2014-12-03-model-view-star/"}}},{"node":{"id":"5840ef2b-08af-57a6-81b0-7a69c1d1beb0","frontmatter":{"title":"Infrastructure as Code","date":"2014-10-29T00:00:00.000Z","time":null,"virtual":null,"tags":["devops"],"speaker":["bruno_devic"]},"fields":{"slug":"/talks/2014-10-29-infrastructure_as_code/"}}},{"node":{"id":"ded25abd-db1f-5b9b-9cd2-8c905bc15ab0","frontmatter":{"title":"Solr - Eine Enterprise-Suchmaschine","date":"2014-09-24T00:00:00.000Z","time":null,"virtual":null,"tags":["database"],"speaker":["steffen_seidler"]},"fields":{"slug":"/talks/2014-09-24-solr/"}}},{"node":{"id":"bd5b8775-c069-521b-803e-4a62493c8247","frontmatter":{"title":"Java8 - Streams und Lambdas","date":"2014-07-30T00:00:00.000Z","time":null,"virtual":null,"tags":["java","functional-programming"],"speaker":["paul_weinhold"]},"fields":{"slug":"/talks/2014-07-30-java8-streams/"}}},{"node":{"id":"09dfae71-65f1-52de-81a7-e0746238f502","frontmatter":{"title":"Hazelcast - Synchronisation von In-Memory-Daten","date":"2014-05-28T00:00:00.000Z","time":null,"virtual":null,"tags":["cluster"],"speaker":["steffen_seidler"]},"fields":{"slug":"/talks/2014-05-28-hazelcast/"}}},{"node":{"id":"27050ce5-4d13-504b-90e0-8a4c3f2e6514","frontmatter":{"title":"Besser lesbare Unittests mit AssertJ","date":"2014-04-02T00:00:00.000Z","time":null,"virtual":null,"tags":["junit","testen"],"speaker":["manuel_mauky"]},"fields":{"slug":"/talks/2014-04-02-assertj/"}}},{"node":{"id":"f39e922a-28fe-514b-838c-4b89e4ec981e","frontmatter":{"title":"Tool-Integration im Softwareentwicklungsprozess","date":"2014-01-29T00:00:00.000Z","time":null,"virtual":null,"tags":["integration","platform","softwareentwicklung"],"speaker":["max_wielsch"]},"fields":{"slug":"/talks/2014-01-29-opendip/"}}},{"node":{"id":"a8a6dc9d-ed19-56f9-9fd3-8c83531f61d0","frontmatter":{"title":"Performance-Optimierung im Web","date":"2013-11-27T00:00:00.000Z","time":null,"virtual":null,"tags":["web","performance"],"speaker":["maik_wagner"]},"fields":{"slug":"/talks/2013-11-27-web-performance/"}}},{"node":{"id":"fb329b7c-5599-55bf-85c5-54a1a6b821bb","frontmatter":{"title":"Modernes App-Design am Beispiel von Android","date":"2013-10-30T00:00:00.000Z","time":null,"virtual":null,"tags":["frontend","mobile","android"],"speaker":["max_wielsch"]},"fields":{"slug":"/talks/2013-10-30-app-design/"}}},{"node":{"id":"6cde30c0-930e-5a8f-9a80-e0bfc34878a6","frontmatter":{"title":"Persona - Werkzeug für die GUI-Entwicklung","date":"2013-07-31T00:00:00.000Z","time":null,"virtual":null,"tags":["frontend","softwareentwicklung"],"speaker":["marlene_knoche"]},"fields":{"slug":"/talks/2013-07-31-persona/"}}},{"node":{"id":"df78a5f7-4e2e-5f4d-83dd-6ad6432ef93e","frontmatter":{"title":"JRuby - Ruby auf der Java VM","date":"2013-05-29T00:00:00.000Z","time":null,"virtual":null,"tags":["programmiersprachen"],"speaker":["sebastian_schmeck"]},"fields":{"slug":"/talks/2013-05-29-jruby/"}}},{"node":{"id":"a13fb811-969f-5eb3-91f8-c71970bff046","frontmatter":{"title":"Lego NXT-Roboter mit Java programmieren","date":"2013-03-27T00:00:00.000Z","time":null,"virtual":null,"tags":["hardware","roboter"],"speaker":["erik_jaehne"]},"fields":{"slug":"/talks/2013-03-27-nxt_lego/"}}},{"node":{"id":"90157438-0e03-57ef-870f-701aac0b6210","frontmatter":{"title":"JavaFX 2","date":"2012-11-28T00:00:00.000Z","time":null,"virtual":null,"tags":["frontend","javafx"],"speaker":["alexander_casall","michael_thiele"]},"fields":{"slug":"/talks/2012-11-28-javafx2/"}}},{"node":{"id":"c044b319-accb-5fca-8339-9f01293583e6","frontmatter":{"title":"JSR-303 BeanValidation","date":"2012-09-26T00:00:00.000Z","time":null,"virtual":null,"tags":["javaee"],"speaker":["manuel_mauky"]},"fields":{"slug":"/talks/2012-09-26-bean_validation/"}}},{"node":{"id":"09982d70-f13f-5626-8a14-2d8d92abf724","frontmatter":{"title":"Selenium/Webdriver in der Praxis","date":"2012-07-25T00:00:00.000Z","time":null,"virtual":null,"tags":["web","frontend","testen"],"speaker":["maik_wagner"]},"fields":{"slug":"/talks/2012-07-25-selenium_praxis/"}}},{"node":{"id":"5e4ab94f-157d-5292-864d-57606942e1ff","frontmatter":{"title":"GridGain - Parallel Computing und Data Grid Anwendungen","date":"2012-06-27T00:00:00.000Z","time":null,"virtual":null,"tags":["cluster"],"speaker":["mario_reichel"]},"fields":{"slug":"/talks/2012-06-27-gridgain/"}}},{"node":{"id":"88119287-b9a3-5745-bd33-a7735cb39b4b","frontmatter":{"title":"JMonkeyEngine 3 - 3D-Applikationen in Java","date":"2012-05-30T00:00:00.000Z","time":null,"virtual":null,"tags":["frontend"],"speaker":["hans_markwart"]},"fields":{"slug":"/talks/2012-05-30-jmonkey-engine3/"}}},{"node":{"id":"fa3c70d9-f376-541d-be0b-ca24e0ac6b89","frontmatter":{"title":"Maven","date":"2012-04-25T00:00:00.000Z","time":null,"virtual":null,"tags":["build-management"],"speaker":["thomas_storch"]},"fields":{"slug":"/talks/2012-04-25-maven/"}}},{"node":{"id":"bd3b256f-6609-52bb-9d05-5a57482e4f42","frontmatter":{"title":"Webtests mit Selenium","date":"2012-03-28T00:00:00.000Z","time":null,"virtual":null,"tags":["frontend","web","testen"],"speaker":["marcus_doering"]},"fields":{"slug":"/talks/2012-03-28-webtests/"}}},{"node":{"id":"7881a4dc-ab76-5124-b9b1-dc13c982a250","frontmatter":{"title":"Webentwicklung mit Scala","date":"2012-02-29T00:00:00.000Z","time":null,"virtual":null,"tags":["frontend","web","programmiersprachen"],"speaker":["stefan_bradl"]},"fields":{"slug":"/talks/2012-02-29-scala_webapps/"}}},{"node":{"id":"67e2091a-15eb-56f9-bb65-586c4b2a809d","frontmatter":{"title":"Advanced JSF und CDI","date":"2012-01-25T00:00:00.000Z","time":null,"virtual":null,"tags":["frontend","web","javaee","jsf"],"speaker":["manuel_mauky"]},"fields":{"slug":"/talks/2012-01-25-jsf_cdi_advanced/"}}},{"node":{"id":"e3831714-860d-5867-9952-89ecfe8b81dd","frontmatter":{"title":"JPA - Hibernate","date":"2012-01-04T00:00:00.000Z","time":null,"virtual":null,"tags":["database","javaee"],"speaker":["marko_modsching"]},"fields":{"slug":"/talks/2012-01-01-hibernate/"}}},{"node":{"id":"11771522-730a-5373-b0f8-585c9c4f52c1","frontmatter":{"title":"JavaServer Faces 2 und CDI","date":"2011-11-30T00:00:00.000Z","time":null,"virtual":null,"tags":["frontend","web","javaee","jsf"],"speaker":["manuel_mauky"]},"fields":{"slug":"/talks/2011-11-30-jsf-cdi/"}}},{"node":{"id":"c40cc73f-d2be-5960-b15f-87e4b39429c8","frontmatter":{"title":"Android","date":"2011-10-26T00:00:00.000Z","time":null,"virtual":null,"tags":["mobile","android"],"speaker":["max_wielsch"]},"fields":{"slug":"/talks/2011-10-26-android/"}}},{"node":{"id":"9bcc98b0-826d-5513-b828-008dbf11c915","frontmatter":{"title":"JDOM","date":"2011-09-28T00:00:00.000Z","time":null,"virtual":null,"tags":["xml"],"speaker":["mark_ziener"]},"fields":{"slug":"/talks/2011-09-28-jdom/"}}},{"node":{"id":"6cca53f4-9edd-55ac-a225-75c94aa0dd8b","frontmatter":{"title":"Single Sign-On mit JAAS und JGSS","date":"2011-09-28T00:00:00.000Z","time":null,"virtual":null,"tags":["security"],"speaker":["mario_reichel"]},"fields":{"slug":"/talks/2011-09-28-single-sign-on/"}}},{"node":{"id":"67828855-f7d8-5d6d-9d90-7c3760bb7705","frontmatter":{"title":"Testen - Patterns und Best Practices","date":"2011-08-31T00:00:00.000Z","time":null,"virtual":null,"tags":["testen","patterns"],"speaker":["marko_modsching"]},"fields":{"slug":"/talks/2011-08-31-testen/"}}},{"node":{"id":"603cc23a-9840-5867-b78d-99fbd489d472","frontmatter":{"title":"Scala","date":"2011-07-27T00:00:00.000Z","time":null,"virtual":null,"tags":["programmiersprachen"],"speaker":["stefan_bradl"]},"fields":{"slug":"/talks/2011-07-27-scala/"}}},{"node":{"id":"4bb73d33-af61-5eac-a5fa-d075fa8660f5","frontmatter":{"title":"TestNG","date":"2011-07-27T00:00:00.000Z","time":null,"virtual":null,"tags":["testen"],"speaker":["marcus_doering"]},"fields":{"slug":"/talks/2011-07-27-testng/"}}},{"node":{"id":"5c110017-4815-5ac0-a4e3-a75e759080ac","frontmatter":{"title":"JavaEE und JBoss","date":"2011-06-29T00:00:00.000Z","time":null,"virtual":null,"tags":["javaee"],"speaker":["michael_foerster"]},"fields":{"slug":"/talks/2011-06-29-javaee_jboss/"}}},{"node":{"id":"54c98b64-64a8-515b-a02c-8a54c51dcca1","frontmatter":{"title":"Google Guice","date":"2011-05-27T00:00:00.000Z","time":null,"virtual":null,"tags":["patterns"],"speaker":["robert_wirbs"]},"fields":{"slug":"/talks/2011-05-27-guice/"}}},{"node":{"id":"6d1edf0b-d32b-5274-baa2-34c7f27786b8","frontmatter":{"title":"GWT - Google Web Toolkit","date":"2011-04-27T00:00:00.000Z","time":null,"virtual":null,"tags":["web","frontend"],"speaker":["ingo_koerner"]},"fields":{"slug":"/talks/2011-04-27-gwt/"}}},{"node":{"id":"2d5fb6de-57a5-54c0-9485-b2ea5bb67a81","frontmatter":{"title":"OSGi mit SpringDM","date":"2011-04-27T00:00:00.000Z","time":null,"virtual":null,"tags":null,"speaker":["manuel_mauky"]},"fields":{"slug":"/talks/2011-04-27-osgi_springdm/"}}},{"node":{"id":"b0252f0d-2a16-5085-913a-7fb7bf5364a6","frontmatter":{"title":"EasyMock","date":"2011-03-22T00:00:00.000Z","time":null,"virtual":null,"tags":["testen"],"speaker":["richard_hauswald"]},"fields":{"slug":"/talks/2011-03-22-easymock/"}}},{"node":{"id":"c92b2d55-0d33-50f7-a73c-de8f55b7d75e","frontmatter":{"title":"Jenkins/Hudson","date":"2011-03-22T00:00:00.000Z","time":null,"virtual":null,"tags":["build-management"],"speaker":["stefan_scheumann"]},"fields":{"slug":"/talks/2011-03-22-jenkins/"}}}]},"speakers":{"edges":[{"node":{"id":"ff0ef063-2c62-5f5c-8e8a-3fea00727337","fields":{"slug":"/speakers/alexander_casall/"},"frontmatter":{"name":"Alexander Casall"}}},{"node":{"id":"83212ced-9134-55d1-bd90-46f149e95898","fields":{"slug":"/speakers/bruno_devic/"},"frontmatter":{"name":"Bruno Devic"}}},{"node":{"id":"8de5b181-1c5c-5d57-9b0b-e03ba1b399e2","fields":{"slug":"/speakers/christian_heilmann/"},"frontmatter":{"name":"Christian Heilmann"}}},{"node":{"id":"02a5cfde-2b00-5350-a999-f314d4c0ee1e","fields":{"slug":"/speakers/christian_kuemmel/"},"frontmatter":{"name":"Christian Kümmel"}}},{"node":{"id":"2fce745c-9aae-524d-a24b-d39e282689b0","fields":{"slug":"/speakers/andre_tepper/"},"frontmatter":{"name":"Andre Tepper"}}},{"node":{"id":"78a4398b-6839-50d3-8f1e-5262def696d6","fields":{"slug":"/speakers/christoph_menzel/"},"frontmatter":{"name":"Christoph Menzel"}}},{"node":{"id":"7640e853-d184-5946-a052-be3b7deaa867","fields":{"slug":"/speakers/damian_dudziec/"},"frontmatter":{"name":"Damian Dudziec"}}},{"node":{"id":"2adfcaf8-baac-58d8-ac17-2e9e978bea1b","fields":{"slug":"/speakers/daniel_fesenmeyer/"},"frontmatter":{"name":"Daniel Fesenmeyer"}}},{"node":{"id":"2c287f6d-72f9-5142-8d7e-8cb0049f7898","fields":{"slug":"/speakers/daniel_sernow/"},"frontmatter":{"name":"Daniel Sernow"}}},{"node":{"id":"e86d9d23-67e9-58de-853e-30051fb1eabb","fields":{"slug":"/speakers/daniel_sulyok/"},"frontmatter":{"name":"Dániel Sulyok"}}},{"node":{"id":"770e92e8-4326-5909-ace2-ddfcc7deae8b","fields":{"slug":"/speakers/denny_israel/"},"frontmatter":{"name":"Denny Israel"}}},{"node":{"id":"074397e2-c590-59cc-8c29-413f81c9e045","fields":{"slug":"/speakers/erik_jaehne/"},"frontmatter":{"name":"Erik Jähne"}}},{"node":{"id":"f13237e6-5775-5e35-bc7e-7ab125cff716","fields":{"slug":"/speakers/gerrit_grunwald/"},"frontmatter":{"name":"Gerrit Grunwald"}}},{"node":{"id":"f8ac41fc-2d52-5c52-8a5b-cc148abad020","fields":{"slug":"/speakers/gregor_trefs/"},"frontmatter":{"name":"Gregor Trefs"}}},{"node":{"id":"1dd06ad5-50e3-58f4-b8a3-30ffdf3c4cc0","fields":{"slug":"/speakers/hannes_kretschmer/"},"frontmatter":{"name":"Hannes Kretschmer"}}},{"node":{"id":"93129b19-f730-5e77-879a-58c8e08a198a","fields":{"slug":"/speakers/hendrik_ebbers/"},"frontmatter":{"name":"Hendrik Ebbers"}}},{"node":{"id":"35a72c9a-cbdf-5f39-8b2a-1813b7e94cc7","fields":{"slug":"/speakers/hans_markwart/"},"frontmatter":{"name":"Hans Markwart"}}},{"node":{"id":"44493f6a-f9c2-527b-a086-fed0da68f1c4","fields":{"slug":"/speakers/ingo_koerner/"},"frontmatter":{"name":"Ingo Körner"}}},{"node":{"id":"1f477a08-7805-5bf3-984b-4afec0b2cd45","fields":{"slug":"/speakers/jens_leuschner/"},"frontmatter":{"name":"Jens Leuschner"}}},{"node":{"id":"d857c285-3a43-5120-8453-7b2f87424152","fields":{"slug":"/speakers/kay_grebenstein/"},"frontmatter":{"name":"Kay Grebenstein"}}},{"node":{"id":"184d7622-4aae-50bd-a14c-f44f4db9c575","fields":{"slug":"/speakers/lars_roewekamp/"},"frontmatter":{"name":"Lars Röwekamp"}}},{"node":{"id":"fee4bf04-1e31-54b1-b809-c3d510531b5c","fields":{"slug":"/speakers/maik_wagner/"},"frontmatter":{"name":"Maik Wagner"}}},{"node":{"id":"c48b140e-258d-5030-8fcc-70fedc7dd5b4","fields":{"slug":"/speakers/manuel_mauky/"},"frontmatter":{"name":"Manuel Mauky"}}},{"node":{"id":"83b497c1-a32d-5e39-a543-439154b750d9","fields":{"slug":"/speakers/marco_gotthans/"},"frontmatter":{"name":"Marco Gotthans"}}},{"node":{"id":"d0f25d9d-4106-5691-a1b2-28cbe4275e46","fields":{"slug":"/speakers/marcus_doering/"},"frontmatter":{"name":"Marcus Döring"}}},{"node":{"id":"9e00ea79-267c-5db0-9e41-f5d872b4c595","fields":{"slug":"/speakers/mario_mann/"},"frontmatter":{"name":"Mario Mann"}}},{"node":{"id":"d08d4526-e68f-5a1d-8a78-6c5a99cbe1e4","fields":{"slug":"/speakers/mario_reichel/"},"frontmatter":{"name":"Mario Reichel"}}},{"node":{"id":"5834f4d7-e0a3-505c-b1d0-81a37f5144f1","fields":{"slug":"/speakers/mark_ziener/"},"frontmatter":{"name":"Mark Ziener"}}},{"node":{"id":"678c9f26-730c-5aff-999b-bd4eb93dc92f","fields":{"slug":"/speakers/mariusz_zienkiewicz/"},"frontmatter":{"name":"Mariusz Zienkiewicz"}}},{"node":{"id":"74ed9e96-8a2b-59cb-8642-93f5dec4d7b3","fields":{"slug":"/speakers/marko_modsching/"},"frontmatter":{"name":"Marko Modsching"}}},{"node":{"id":"b0aa71a0-d2a3-5a2a-8831-2137b43e583d","fields":{"slug":"/speakers/markus_weiland/"},"frontmatter":{"name":"Markus Weiland"}}},{"node":{"id":"af5cd69a-023f-577f-9cb1-5f5185d0848d","fields":{"slug":"/speakers/markus_kett/"},"frontmatter":{"name":"Markus Kett"}}},{"node":{"id":"2376b174-04f1-5b56-b72f-8201a1dfb2a5","fields":{"slug":"/speakers/marlene_knoche/"},"frontmatter":{"name":"Marlene Knoche"}}},{"node":{"id":"db05ced3-0480-51fe-83be-d0149d94da93","fields":{"slug":"/speakers/max_wielsch/"},"frontmatter":{"name":"Max Wielsch"}}},{"node":{"id":"f042c1af-7b71-5d8f-ab98-aa158cb2a418","fields":{"slug":"/speakers/michael_foerster/"},"frontmatter":{"name":"Michael Förster"}}},{"node":{"id":"21c7def1-78a4-52e2-bf13-b3a646e3215d","fields":{"slug":"/speakers/michael_hunger/"},"frontmatter":{"name":"Michael Hunger"}}},{"node":{"id":"fc3d2a4f-3ab8-5fc9-aa19-09fc69dd1385","fields":{"slug":"/speakers/michael_thiele/"},"frontmatter":{"name":"Michael Thiele"}}},{"node":{"id":"917f2c35-500a-5f14-bfb1-d99f287d2afe","fields":{"slug":"/speakers/michael_wiedeking/"},"frontmatter":{"name":"Michael Wiedeking"}}},{"node":{"id":"543c0c0e-1ed8-519c-a2d3-544f86c7b5d2","fields":{"slug":"/speakers/nico_foerster/"},"frontmatter":{"name":"Nico Förster"}}},{"node":{"id":"8402dc7e-d767-5b77-8ca3-ff9c967248fb","fields":{"slug":"/speakers/oliver_drotbohm/"},"frontmatter":{"name":"Oliver Drotbohm"}}},{"node":{"id":"c8fa437e-3c34-56b6-b03b-c67c1370f111","fields":{"slug":"/speakers/patryk_lewandowski/"},"frontmatter":{"name":"Patryk Lewandowski"}}},{"node":{"id":"339b9441-8737-533f-aefe-b31bbb6663f4","fields":{"slug":"/speakers/paul_weinhold/"},"frontmatter":{"name":"Paul Weinhold"}}},{"node":{"id":"e52c08b9-aaed-5384-920c-d08af9991f5b","fields":{"slug":"/speakers/pawel_adaszewski/"},"frontmatter":{"name":"Pawel Adaszewski"}}},{"node":{"id":"18051d64-e79b-5ad5-bdc3-0b0f822ae644","fields":{"slug":"/speakers/robert_wirbs/"},"frontmatter":{"name":"Robert Wirbs"}}},{"node":{"id":"304f3f2c-44ca-5275-9f73-5b789038daf0","fields":{"slug":"/speakers/richard_hauswald/"},"frontmatter":{"name":"Richard Hauswald"}}},{"node":{"id":"54a0f9fe-80ab-52ba-9aea-e3f2a5dd045f","fields":{"slug":"/speakers/roland_weisleder/"},"frontmatter":{"name":"Roland Weisleder"}}},{"node":{"id":"87a83879-1b5e-50f5-9829-2699d9a01da5","fields":{"slug":"/speakers/sergej_tihonov/"},"frontmatter":{"name":"Sergej Tihonov"}}},{"node":{"id":"cb2ea0b2-b790-5204-9f7b-e1cd0f0583c1","fields":{"slug":"/speakers/sebastian_schmeck/"},"frontmatter":{"name":"Sebastian Schmeck"}}},{"node":{"id":"4f81ccbd-2893-5804-a68a-04c6b8c20f75","fields":{"slug":"/speakers/simon_roloff/"},"frontmatter":{"name":"Simon Roloff"}}},{"node":{"id":"a26cc991-7e1d-5caa-8926-7a52b0fa93e6","fields":{"slug":"/speakers/stefan_barth/"},"frontmatter":{"name":"Stefan Barth"}}},{"node":{"id":"63ab1902-d259-53c5-99ea-3564ac4ce81a","fields":{"slug":"/speakers/stefan_bley/"},"frontmatter":{"name":"Stefan Bley"}}},{"node":{"id":"dd47473a-7d7f-54fa-9daa-e062ae1c9bef","fields":{"slug":"/speakers/stefan_bradl/"},"frontmatter":{"name":"Stefan Bradl"}}},{"node":{"id":"d4e04ddf-59bb-542f-b6bc-58e5cf77667d","fields":{"slug":"/speakers/stefan_heinze/"},"frontmatter":{"name":"Stefan Heinze"}}},{"node":{"id":"bd7c2828-9149-5013-8dca-331d23b9953f","fields":{"slug":"/speakers/stefan_scheumann/"},"frontmatter":{"name":"Stefan Scheumann"}}},{"node":{"id":"7b63d414-09ef-5e63-bda2-a3259175090c","fields":{"slug":"/speakers/stefan_zoerner/"},"frontmatter":{"name":"Stefan Zörner"}}},{"node":{"id":"09a6b265-f443-579a-ae78-9188aaeca6ca","fields":{"slug":"/speakers/stefan_zoerner_2/"},"frontmatter":{"name":"Stefan Zörner"}}},{"node":{"id":"39cc0655-cd1a-540e-9553-b9fa67e895cc","fields":{"slug":"/speakers/steffen_seidler/"},"frontmatter":{"name":"Steffen Seidler"}}},{"node":{"id":"4936b97c-34e6-5ea1-a09a-70bc78822cab","fields":{"slug":"/speakers/andreas_knuepfer/"},"frontmatter":{"name":"Dr. Andreas Knüpfer"}}},{"node":{"id":"a8d3dca8-b87d-568d-8e70-dcac046e98d5","fields":{"slug":"/speakers/stephan_strehler/"},"frontmatter":{"name":"Stephan Strehler"}}},{"node":{"id":"aefd4a1f-a4ed-5e51-a713-1da570fcd2ee","fields":{"slug":"/speakers/sven_hoffmann/"},"frontmatter":{"name":"Sven Hoffmann"}}},{"node":{"id":"abafb571-eb5b-5194-818a-f2b18a1382c9","fields":{"slug":"/speakers/konstantin_eger/"},"frontmatter":{"name":"Konstantin Eger"}}},{"node":{"id":"9a66bc44-37f7-527c-9f45-6c0b1dd74510","fields":{"slug":"/speakers/thilo_frotscher/"},"frontmatter":{"name":"Thilo Frotscher"}}},{"node":{"id":"3cab3c25-9f08-5d29-a7c2-3e2b0d414c16","fields":{"slug":"/speakers/thomas_storch/"},"frontmatter":{"name":"Thomas Storch"}}},{"node":{"id":"9776c4f1-e686-5cf2-b042-939797958362","fields":{"slug":"/speakers/tobias_blaschke/"},"frontmatter":{"name":"Tobias Blaschke"}}},{"node":{"id":"91d3bc22-4970-51b8-90cf-7583f2dc5ff5","fields":{"slug":"/speakers/uwe_manteuffel/"},"frontmatter":{"name":"Uwe Manteuffel"}}},{"node":{"id":"53f5069e-fb7c-5f5d-b967-b5df3c1df975","fields":{"slug":"/speakers/wolfgang_weigend/"},"frontmatter":{"name":"Wolfgang Weigend"}}}]}},"pageContext":{}},"staticQueryHashes":[],"slicesMap":{}} \ No newline at end of file diff --git a/posters/index.html b/posters/index.html index 322049962..96802d47e 100644 --- a/posters/index.html +++ b/posters/index.html @@ -348,6 +348,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/posts/2013-10-30-poster/index.html b/posts/2013-10-30-poster/index.html index c1bf8166c..e5a446066 100644 --- a/posts/2013-10-30-poster/index.html +++ b/posts/2013-10-30-poster/index.html @@ -355,6 +355,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/posts/2017-07-21-grillen/index.html b/posts/2017-07-21-grillen/index.html index 176ceabfb..85d01cdc1 100644 --- a/posts/2017-07-21-grillen/index.html +++ b/posts/2017-07-21-grillen/index.html @@ -381,6 +381,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/posts/2018-07-31-grillabend/index.html b/posts/2018-07-31-grillabend/index.html index c75272077..65a0fd673 100644 --- a/posts/2018-07-31-grillabend/index.html +++ b/posts/2018-07-31-grillabend/index.html @@ -368,6 +368,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/posts/2018-09-26-coding-dojo/index.html b/posts/2018-09-26-coding-dojo/index.html index 68693a7f5..6fc457738 100644 --- a/posts/2018-09-26-coding-dojo/index.html +++ b/posts/2018-09-26-coding-dojo/index.html @@ -362,6 +362,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/posts/2018-12-30-congress-everywhere/index.html b/posts/2018-12-30-congress-everywhere/index.html index 897a4d8cb..db6e93cce 100644 --- a/posts/2018-12-30-congress-everywhere/index.html +++ b/posts/2018-12-30-congress-everywhere/index.html @@ -392,6 +392,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/posts/2019-08-16-grillen/index.html b/posts/2019-08-16-grillen/index.html index 46f98cbf6..1c36590bd 100644 --- a/posts/2019-08-16-grillen/index.html +++ b/posts/2019-08-16-grillen/index.html @@ -357,6 +357,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/posts/2020-03-24-corona/index.html b/posts/2020-03-24-corona/index.html index 2aa3b50a7..bd38a3f03 100644 --- a/posts/2020-03-24-corona/index.html +++ b/posts/2020-03-24-corona/index.html @@ -358,6 +358,6 @@

Vorerst keine Vorträge mehr

- \ No newline at end of file + \ No newline at end of file diff --git a/posts/2022-01-07-javaland/index.html b/posts/2022-01-07-javaland/index.html index 11c2add23..14e3a668b 100644 --- a/posts/2022-01-07-javaland/index.html +++ b/posts/2022-01-07-javaland/index.html @@ -363,6 +363,6 @@

JavaLand 2022

- \ No newline at end of file + \ No newline at end of file diff --git a/posts/2023-12-01-javaland/index.html b/posts/2023-12-01-javaland/index.html index 21aaaee52..0dfe97b26 100644 --- a/posts/2023-12-01-javaland/index.html +++ b/posts/2023-12-01-javaland/index.html @@ -366,6 +366,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/rss.xml b/rss.xml index e0d1f36ad..e618b54b2 100644 --- a/rss.xml +++ b/rss.xml @@ -4,7 +4,7 @@ null https://jug-gr.de/ null - Wed, 04 Sep 2024 17:18:16 GMT + Wed, 11 Sep 2024 18:55:30 GMT https://validator.w3.org/feed/docs/rss2.html https://github.com/jpmonette/feed de @@ -17,7 +17,7 @@ JavaFX State of the Technology

Date: September 25, 2024, 19:00 Uhr

-

Speakers: Wolfgang Weigend

+

Speakers: Christian Heilmann, Wolfgang Weigend

Location:

Carl Zeiss Digital Innovation @@ -2375,14 +2375,14 @@ Praxis erläutert wurden.

Das Thema wird diesmal Testen sein. Marko Modsching wird Testpatterns und Best Practices vorstellen

]]>
- <![CDATA[TestNG]]> - https://jug-gr.de/talks/2011-07-27-testng/ - https://jug-gr.de/talks/2011-07-27-testng/ + <![CDATA[Scala]]> + https://jug-gr.de/talks/2011-07-27-scala/ + https://jug-gr.de/talks/2011-07-27-scala/ Wed, 27 Jul 2011 00:00:00 GMT TestNG +

Scala

Date: July 27, 2011, 19:00 Uhr

-

Speakers: Marcus Döring

+

Speakers: Stefan Bradl

Location:

DSER @@ -2392,17 +2392,22 @@ Praxis erläutert wurden.

02826 Görlitz
]]>
- TestNG (Marcus Döring)

]]>
+ Scala - Vorstellung der Sprache, Demo und das Testen (Stefan Bradl)

+

Materialien:

+]]>
- <![CDATA[Scala]]> - https://jug-gr.de/talks/2011-07-27-scala/ - https://jug-gr.de/talks/2011-07-27-scala/ + <![CDATA[TestNG]]> + https://jug-gr.de/talks/2011-07-27-testng/ + https://jug-gr.de/talks/2011-07-27-testng/ Wed, 27 Jul 2011 00:00:00 GMT Scala +

TestNG

Date: July 27, 2011, 19:00 Uhr

-

Speakers: Stefan Bradl

+

Speakers: Marcus Döring

Location:

DSER @@ -2412,12 +2417,7 @@ Praxis erläutert wurden.

02826 Görlitz
]]>
- Scala - Vorstellung der Sprache, Demo und das Testen (Stefan Bradl)

-

Materialien:

-]]>
+ TestNG (Marcus Döring)

]]>
<![CDATA[JavaEE und JBoss]]> diff --git a/speakers/alexander_casall/index.html b/speakers/alexander_casall/index.html index 6b367887b..212ab0daa 100644 --- a/speakers/alexander_casall/index.html +++ b/speakers/alexander_casall/index.html @@ -348,6 +348,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/speakers/andre_tepper/index.html b/speakers/andre_tepper/index.html index 636a47386..0a29fb5ea 100644 --- a/speakers/andre_tepper/index.html +++ b/speakers/andre_tepper/index.html @@ -348,6 +348,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/speakers/andreas_knuepfer/index.html b/speakers/andreas_knuepfer/index.html index 3498aefde..79e30cdf4 100644 --- a/speakers/andreas_knuepfer/index.html +++ b/speakers/andreas_knuepfer/index.html @@ -348,6 +348,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/speakers/bruno_devic/index.html b/speakers/bruno_devic/index.html index 181a5f758..f8a5fefbc 100644 --- a/speakers/bruno_devic/index.html +++ b/speakers/bruno_devic/index.html @@ -348,6 +348,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/speakers/christian_heilmann/index.html b/speakers/christian_heilmann/index.html new file mode 100644 index 000000000..92cb5a581 --- /dev/null +++ b/speakers/christian_heilmann/index.html @@ -0,0 +1,353 @@ +Java User Group Görlitz + + \ No newline at end of file diff --git a/speakers/christian_kuemmel/index.html b/speakers/christian_kuemmel/index.html index f8a03a7c9..48467b8db 100644 --- a/speakers/christian_kuemmel/index.html +++ b/speakers/christian_kuemmel/index.html @@ -352,6 +352,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/speakers/christoph_menzel/index.html b/speakers/christoph_menzel/index.html index 6f2eb8aa4..9179ddb4b 100644 --- a/speakers/christoph_menzel/index.html +++ b/speakers/christoph_menzel/index.html @@ -349,6 +349,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/speakers/damian_dudziec/index.html b/speakers/damian_dudziec/index.html index 51a2dbb43..6c6c7aea9 100644 --- a/speakers/damian_dudziec/index.html +++ b/speakers/damian_dudziec/index.html @@ -348,6 +348,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/speakers/daniel_fesenmeyer/index.html b/speakers/daniel_fesenmeyer/index.html index a31325135..cd91a097a 100644 --- a/speakers/daniel_fesenmeyer/index.html +++ b/speakers/daniel_fesenmeyer/index.html @@ -350,6 +350,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/speakers/daniel_sernow/index.html b/speakers/daniel_sernow/index.html index 6540e1759..b05411803 100644 --- a/speakers/daniel_sernow/index.html +++ b/speakers/daniel_sernow/index.html @@ -355,6 +355,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/speakers/daniel_sulyok/index.html b/speakers/daniel_sulyok/index.html index 80d39a7d5..0ac4cf559 100644 --- a/speakers/daniel_sulyok/index.html +++ b/speakers/daniel_sulyok/index.html @@ -348,6 +348,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/speakers/denny_israel/index.html b/speakers/denny_israel/index.html index b6b5dcf75..5aaeb3a4d 100644 --- a/speakers/denny_israel/index.html +++ b/speakers/denny_israel/index.html @@ -350,6 +350,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/speakers/erik_jaehne/index.html b/speakers/erik_jaehne/index.html index 22e39f78d..61b1eb9d7 100644 --- a/speakers/erik_jaehne/index.html +++ b/speakers/erik_jaehne/index.html @@ -350,6 +350,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/speakers/gerrit_grunwald/index.html b/speakers/gerrit_grunwald/index.html index eba36c362..4bd745938 100644 --- a/speakers/gerrit_grunwald/index.html +++ b/speakers/gerrit_grunwald/index.html @@ -353,6 +353,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/speakers/gregor_trefs/index.html b/speakers/gregor_trefs/index.html index e678fd0ad..888d3318c 100644 --- a/speakers/gregor_trefs/index.html +++ b/speakers/gregor_trefs/index.html @@ -349,6 +349,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/speakers/hannes_kretschmer/index.html b/speakers/hannes_kretschmer/index.html index a772b8d3f..19753df7b 100644 --- a/speakers/hannes_kretschmer/index.html +++ b/speakers/hannes_kretschmer/index.html @@ -349,6 +349,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/speakers/hans_markwart/index.html b/speakers/hans_markwart/index.html index 1007bec7d..afe5224cf 100644 --- a/speakers/hans_markwart/index.html +++ b/speakers/hans_markwart/index.html @@ -348,6 +348,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/speakers/hendrik_ebbers/index.html b/speakers/hendrik_ebbers/index.html index a8d67723c..82bcdbffe 100644 --- a/speakers/hendrik_ebbers/index.html +++ b/speakers/hendrik_ebbers/index.html @@ -350,6 +350,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/speakers/index.html b/speakers/index.html index 196563d22..e7a322ae8 100644 --- a/speakers/index.html +++ b/speakers/index.html @@ -344,10 +344,10 @@ overflow: visible; position: static; width: auto; } -

Alle Speaker

+

Alle Speaker

- \ No newline at end of file + \ No newline at end of file diff --git a/speakers/ingo_koerner/index.html b/speakers/ingo_koerner/index.html index d7d6f9d04..2b64495fe 100644 --- a/speakers/ingo_koerner/index.html +++ b/speakers/ingo_koerner/index.html @@ -348,6 +348,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/speakers/jens_leuschner/index.html b/speakers/jens_leuschner/index.html index af123b636..ab6afe31a 100644 --- a/speakers/jens_leuschner/index.html +++ b/speakers/jens_leuschner/index.html @@ -351,6 +351,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/speakers/kay_grebenstein/index.html b/speakers/kay_grebenstein/index.html index 6fa2fe1c5..818f3507d 100644 --- a/speakers/kay_grebenstein/index.html +++ b/speakers/kay_grebenstein/index.html @@ -350,6 +350,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/speakers/konstantin_eger/index.html b/speakers/konstantin_eger/index.html index 3b1253c3a..a1deb2a4d 100644 --- a/speakers/konstantin_eger/index.html +++ b/speakers/konstantin_eger/index.html @@ -348,6 +348,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/speakers/lars_roewekamp/index.html b/speakers/lars_roewekamp/index.html index bd472eb78..8634071e9 100644 --- a/speakers/lars_roewekamp/index.html +++ b/speakers/lars_roewekamp/index.html @@ -354,6 +354,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/speakers/maik_wagner/index.html b/speakers/maik_wagner/index.html index 781509589..e189d4091 100644 --- a/speakers/maik_wagner/index.html +++ b/speakers/maik_wagner/index.html @@ -350,6 +350,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/speakers/manuel_mauky/index.html b/speakers/manuel_mauky/index.html index 065ae9d43..398c13a7f 100644 --- a/speakers/manuel_mauky/index.html +++ b/speakers/manuel_mauky/index.html @@ -351,6 +351,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/speakers/marco_gotthans/index.html b/speakers/marco_gotthans/index.html index 4b822a15b..00408ff25 100644 --- a/speakers/marco_gotthans/index.html +++ b/speakers/marco_gotthans/index.html @@ -350,6 +350,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/speakers/marcus_doering/index.html b/speakers/marcus_doering/index.html index 02a3f457b..cc0495b8e 100644 --- a/speakers/marcus_doering/index.html +++ b/speakers/marcus_doering/index.html @@ -348,6 +348,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/speakers/mario_mann/index.html b/speakers/mario_mann/index.html index baef3d0bc..63967b0c4 100644 --- a/speakers/mario_mann/index.html +++ b/speakers/mario_mann/index.html @@ -348,6 +348,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/speakers/mario_reichel/index.html b/speakers/mario_reichel/index.html index 914f29a6a..e67516501 100644 --- a/speakers/mario_reichel/index.html +++ b/speakers/mario_reichel/index.html @@ -348,6 +348,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/speakers/mariusz_zienkiewicz/index.html b/speakers/mariusz_zienkiewicz/index.html index 4bb26a8be..ae391c7a0 100644 --- a/speakers/mariusz_zienkiewicz/index.html +++ b/speakers/mariusz_zienkiewicz/index.html @@ -351,6 +351,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/speakers/mark_ziener/index.html b/speakers/mark_ziener/index.html index 6e2207258..b18258987 100644 --- a/speakers/mark_ziener/index.html +++ b/speakers/mark_ziener/index.html @@ -348,6 +348,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/speakers/marko_modsching/index.html b/speakers/marko_modsching/index.html index 7deef048d..89b4f6521 100644 --- a/speakers/marko_modsching/index.html +++ b/speakers/marko_modsching/index.html @@ -348,6 +348,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/speakers/markus_kett/index.html b/speakers/markus_kett/index.html index dcbf41726..26bbd89f8 100644 --- a/speakers/markus_kett/index.html +++ b/speakers/markus_kett/index.html @@ -352,6 +352,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/speakers/markus_weiland/index.html b/speakers/markus_weiland/index.html index a6d6bfc6a..a066f3fc3 100644 --- a/speakers/markus_weiland/index.html +++ b/speakers/markus_weiland/index.html @@ -348,6 +348,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/speakers/marlene_knoche/index.html b/speakers/marlene_knoche/index.html index 2f8a14404..0e65c1da3 100644 --- a/speakers/marlene_knoche/index.html +++ b/speakers/marlene_knoche/index.html @@ -350,6 +350,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/speakers/max_wielsch/index.html b/speakers/max_wielsch/index.html index 71e09b0e2..9960fb079 100644 --- a/speakers/max_wielsch/index.html +++ b/speakers/max_wielsch/index.html @@ -353,6 +353,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/speakers/michael_foerster/index.html b/speakers/michael_foerster/index.html index 837e53a77..e34c3865b 100644 --- a/speakers/michael_foerster/index.html +++ b/speakers/michael_foerster/index.html @@ -348,6 +348,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/speakers/michael_hunger/index.html b/speakers/michael_hunger/index.html index b86dabeeb..8addf5c3e 100644 --- a/speakers/michael_hunger/index.html +++ b/speakers/michael_hunger/index.html @@ -353,6 +353,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/speakers/michael_thiele/index.html b/speakers/michael_thiele/index.html index f1479c798..a92ee33f2 100644 --- a/speakers/michael_thiele/index.html +++ b/speakers/michael_thiele/index.html @@ -348,6 +348,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/speakers/michael_wiedeking/index.html b/speakers/michael_wiedeking/index.html index 1a7deade5..1f5c66764 100644 --- a/speakers/michael_wiedeking/index.html +++ b/speakers/michael_wiedeking/index.html @@ -348,6 +348,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/speakers/nico_foerster/index.html b/speakers/nico_foerster/index.html index fd6d876ce..026552757 100644 --- a/speakers/nico_foerster/index.html +++ b/speakers/nico_foerster/index.html @@ -351,6 +351,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/speakers/oliver_drotbohm/index.html b/speakers/oliver_drotbohm/index.html index c28bf742e..cf1584d49 100644 --- a/speakers/oliver_drotbohm/index.html +++ b/speakers/oliver_drotbohm/index.html @@ -348,6 +348,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/speakers/patryk_lewandowski/index.html b/speakers/patryk_lewandowski/index.html index dd63c68cf..5e65ea690 100644 --- a/speakers/patryk_lewandowski/index.html +++ b/speakers/patryk_lewandowski/index.html @@ -350,6 +350,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/speakers/paul_weinhold/index.html b/speakers/paul_weinhold/index.html index e2d7c6f87..3aed3f017 100644 --- a/speakers/paul_weinhold/index.html +++ b/speakers/paul_weinhold/index.html @@ -348,6 +348,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/speakers/pawel_adaszewski/index.html b/speakers/pawel_adaszewski/index.html index 66325a7c9..a32533bdc 100644 --- a/speakers/pawel_adaszewski/index.html +++ b/speakers/pawel_adaszewski/index.html @@ -350,6 +350,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/speakers/richard_hauswald/index.html b/speakers/richard_hauswald/index.html index 8ddd1300a..dbaa2d97b 100644 --- a/speakers/richard_hauswald/index.html +++ b/speakers/richard_hauswald/index.html @@ -348,6 +348,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/speakers/robert_wirbs/index.html b/speakers/robert_wirbs/index.html index b488f5965..ca327be1b 100644 --- a/speakers/robert_wirbs/index.html +++ b/speakers/robert_wirbs/index.html @@ -348,6 +348,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/speakers/roland_weisleder/index.html b/speakers/roland_weisleder/index.html index bc8d89088..31d6555a3 100644 --- a/speakers/roland_weisleder/index.html +++ b/speakers/roland_weisleder/index.html @@ -348,6 +348,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/speakers/sebastian_schmeck/index.html b/speakers/sebastian_schmeck/index.html index e3bb511cb..9a6fbefe7 100644 --- a/speakers/sebastian_schmeck/index.html +++ b/speakers/sebastian_schmeck/index.html @@ -348,6 +348,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/speakers/sergej_tihonov/index.html b/speakers/sergej_tihonov/index.html index 84d6f0d6f..ce8696f00 100644 --- a/speakers/sergej_tihonov/index.html +++ b/speakers/sergej_tihonov/index.html @@ -348,6 +348,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/speakers/simon_roloff/index.html b/speakers/simon_roloff/index.html index 4c1d65595..8f970f1cf 100644 --- a/speakers/simon_roloff/index.html +++ b/speakers/simon_roloff/index.html @@ -351,6 +351,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/speakers/stefan_barth/index.html b/speakers/stefan_barth/index.html index 5bbb3538f..a27ff47c7 100644 --- a/speakers/stefan_barth/index.html +++ b/speakers/stefan_barth/index.html @@ -348,6 +348,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/speakers/stefan_bley/index.html b/speakers/stefan_bley/index.html index cdde0924e..4094ab791 100644 --- a/speakers/stefan_bley/index.html +++ b/speakers/stefan_bley/index.html @@ -351,6 +351,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/speakers/stefan_bradl/index.html b/speakers/stefan_bradl/index.html index 55c5ed6d1..95ac7612c 100644 --- a/speakers/stefan_bradl/index.html +++ b/speakers/stefan_bradl/index.html @@ -348,6 +348,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/speakers/stefan_heinze/index.html b/speakers/stefan_heinze/index.html index 998ce86d3..c91f6de5f 100644 --- a/speakers/stefan_heinze/index.html +++ b/speakers/stefan_heinze/index.html @@ -348,6 +348,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/speakers/stefan_scheumann/index.html b/speakers/stefan_scheumann/index.html index 1af7cf6d5..fa7642cd8 100644 --- a/speakers/stefan_scheumann/index.html +++ b/speakers/stefan_scheumann/index.html @@ -348,6 +348,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/speakers/stefan_zoerner/index.html b/speakers/stefan_zoerner/index.html index 6beeef059..db9c32f2e 100644 --- a/speakers/stefan_zoerner/index.html +++ b/speakers/stefan_zoerner/index.html @@ -352,6 +352,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/speakers/stefan_zoerner_2/index.html b/speakers/stefan_zoerner_2/index.html index 921021a76..2483bbe18 100644 --- a/speakers/stefan_zoerner_2/index.html +++ b/speakers/stefan_zoerner_2/index.html @@ -348,6 +348,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/speakers/steffen_seidler/index.html b/speakers/steffen_seidler/index.html index b63812132..faa041add 100644 --- a/speakers/steffen_seidler/index.html +++ b/speakers/steffen_seidler/index.html @@ -348,6 +348,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/speakers/stephan_strehler/index.html b/speakers/stephan_strehler/index.html index cabb5f6de..6c13f93ac 100644 --- a/speakers/stephan_strehler/index.html +++ b/speakers/stephan_strehler/index.html @@ -350,6 +350,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/speakers/sven_hoffmann/index.html b/speakers/sven_hoffmann/index.html index e17be5df7..ab434ecbf 100644 --- a/speakers/sven_hoffmann/index.html +++ b/speakers/sven_hoffmann/index.html @@ -350,6 +350,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/speakers/thilo_frotscher/index.html b/speakers/thilo_frotscher/index.html index 8cbf1b50a..d8bc4b43a 100644 --- a/speakers/thilo_frotscher/index.html +++ b/speakers/thilo_frotscher/index.html @@ -351,6 +351,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/speakers/thomas_storch/index.html b/speakers/thomas_storch/index.html index 48659a68e..6bf4a0c16 100644 --- a/speakers/thomas_storch/index.html +++ b/speakers/thomas_storch/index.html @@ -348,6 +348,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/speakers/tobias_blaschke/index.html b/speakers/tobias_blaschke/index.html index 4ed14660c..95ffef091 100644 --- a/speakers/tobias_blaschke/index.html +++ b/speakers/tobias_blaschke/index.html @@ -350,6 +350,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/speakers/uwe_manteuffel/index.html b/speakers/uwe_manteuffel/index.html index d8a20530a..d44a7d6a5 100644 --- a/speakers/uwe_manteuffel/index.html +++ b/speakers/uwe_manteuffel/index.html @@ -352,6 +352,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/speakers/wolfgang_weigend/index.html b/speakers/wolfgang_weigend/index.html index 963c3ad81..0f2935231 100644 --- a/speakers/wolfgang_weigend/index.html +++ b/speakers/wolfgang_weigend/index.html @@ -350,6 +350,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/tags/index.html b/tags/index.html index a03629d7e..219591bce 100644 --- a/tags/index.html +++ b/tags/index.html @@ -344,10 +344,10 @@ overflow: visible; position: static; width: auto; } -

Tags

a11y android architektur build-management cloud cluster database devops dsl frontend functional-programming git graalvm hardware industrie4.0 infrastructure integration iot java javaee javafx javascript jdk jsf junit jvm ki mobile monitoring non-jvm-language parallel patterns performance platform programmiersprachen roboter security serverless softwareentwicklung spring supercomputer testen web xml

a11y

android

architektur

build-management

cloud

cluster

database

devops

dsl

frontend

functional-programming

git

graalvm

hardware

industrie4.0

infrastructure

integration

iot

java

javaee

javafx

javascript

jdk

jsf

junit

jvm

  • Inside JVM |

    von Michael Wiedeking

ki

mobile

monitoring

non-jvm-language

parallel

patterns

performance

platform

programmiersprachen

roboter

security

serverless

softwareentwicklung

spring

supercomputer

testen

web

xml

  • JDOM |

    von Mark Ziener

+

Tags

a11y android architektur build-management cloud cluster database devops dsl frontend functional-programming git graalvm hardware industrie4.0 infrastructure integration iot java javaee javafx javascript jdk jsf junit jvm ki mobile monitoring non-jvm-language parallel patterns performance platform programmiersprachen roboter security serverless softwareentwicklung spring supercomputer testen web xml

a11y

android

architektur

build-management

cloud

cluster

database

devops

dsl

frontend

functional-programming

git

graalvm

hardware

industrie4.0

infrastructure

integration

iot

java

javaee

javafx

javascript

jdk

jsf

junit

jvm

  • Inside JVM |

    von Michael Wiedeking

ki

mobile

monitoring

non-jvm-language

parallel

patterns

performance

platform

programmiersprachen

roboter

security

serverless

softwareentwicklung

spring

supercomputer

testen

web

xml

  • JDOM |

    von Mark Ziener

- \ No newline at end of file + \ No newline at end of file diff --git a/talks/2011-03-22-easymock/index.html b/talks/2011-03-22-easymock/index.html index efdb2f4b4..578fe5672 100644 --- a/talks/2011-03-22-easymock/index.html +++ b/talks/2011-03-22-easymock/index.html @@ -349,6 +349,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/talks/2011-03-22-jenkins/index.html b/talks/2011-03-22-jenkins/index.html index e4906e060..8b247759c 100644 --- a/talks/2011-03-22-jenkins/index.html +++ b/talks/2011-03-22-jenkins/index.html @@ -353,6 +353,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/talks/2011-04-27-gwt/index.html b/talks/2011-04-27-gwt/index.html index 44ee26c8f..59ba12690 100644 --- a/talks/2011-04-27-gwt/index.html +++ b/talks/2011-04-27-gwt/index.html @@ -348,6 +348,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/talks/2011-04-27-osgi_springdm/index.html b/talks/2011-04-27-osgi_springdm/index.html index 46ad8b364..eda1cf52d 100644 --- a/talks/2011-04-27-osgi_springdm/index.html +++ b/talks/2011-04-27-osgi_springdm/index.html @@ -361,6 +361,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/talks/2011-05-27-guice/index.html b/talks/2011-05-27-guice/index.html index da4c2902c..ba6648e97 100644 --- a/talks/2011-05-27-guice/index.html +++ b/talks/2011-05-27-guice/index.html @@ -348,6 +348,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/talks/2011-06-29-javaee_jboss/index.html b/talks/2011-06-29-javaee_jboss/index.html index f287498b4..d42a2c53c 100644 --- a/talks/2011-06-29-javaee_jboss/index.html +++ b/talks/2011-06-29-javaee_jboss/index.html @@ -349,6 +349,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/talks/2011-07-27-scala/index.html b/talks/2011-07-27-scala/index.html index 4b9ba1b31..ec942e18e 100644 --- a/talks/2011-07-27-scala/index.html +++ b/talks/2011-07-27-scala/index.html @@ -353,6 +353,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/talks/2011-07-27-testng/index.html b/talks/2011-07-27-testng/index.html index 05e5b9116..2e26cf8c8 100644 --- a/talks/2011-07-27-testng/index.html +++ b/talks/2011-07-27-testng/index.html @@ -348,6 +348,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/talks/2011-08-31-testen/index.html b/talks/2011-08-31-testen/index.html index 129e3f4e5..9b04e797b 100644 --- a/talks/2011-08-31-testen/index.html +++ b/talks/2011-08-31-testen/index.html @@ -348,6 +348,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/talks/2011-09-28-jdom/index.html b/talks/2011-09-28-jdom/index.html index 97c31e9bb..739181d35 100644 --- a/talks/2011-09-28-jdom/index.html +++ b/talks/2011-09-28-jdom/index.html @@ -348,6 +348,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/talks/2011-09-28-single-sign-on/index.html b/talks/2011-09-28-single-sign-on/index.html index f04e96ab6..5cf8ac3fd 100644 --- a/talks/2011-09-28-single-sign-on/index.html +++ b/talks/2011-09-28-single-sign-on/index.html @@ -348,6 +348,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/talks/2011-10-26-android/index.html b/talks/2011-10-26-android/index.html index 69a694c4d..3c8b4e3ec 100644 --- a/talks/2011-10-26-android/index.html +++ b/talks/2011-10-26-android/index.html @@ -359,6 +359,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/talks/2011-11-30-jsf-cdi/index.html b/talks/2011-11-30-jsf-cdi/index.html index c12b6544d..5377b0c25 100644 --- a/talks/2011-11-30-jsf-cdi/index.html +++ b/talks/2011-11-30-jsf-cdi/index.html @@ -368,6 +368,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/talks/2012-01-01-hibernate/index.html b/talks/2012-01-01-hibernate/index.html index 1e6f7057d..d32e71f24 100644 --- a/talks/2012-01-01-hibernate/index.html +++ b/talks/2012-01-01-hibernate/index.html @@ -353,6 +353,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/talks/2012-01-25-jsf_cdi_advanced/index.html b/talks/2012-01-25-jsf_cdi_advanced/index.html index f5baff92b..8fe51ff88 100644 --- a/talks/2012-01-25-jsf_cdi_advanced/index.html +++ b/talks/2012-01-25-jsf_cdi_advanced/index.html @@ -362,6 +362,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/talks/2012-02-29-scala_webapps/index.html b/talks/2012-02-29-scala_webapps/index.html index 2c2f77c0e..8fef072a6 100644 --- a/talks/2012-02-29-scala_webapps/index.html +++ b/talks/2012-02-29-scala_webapps/index.html @@ -348,6 +348,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/talks/2012-03-28-webtests/index.html b/talks/2012-03-28-webtests/index.html index 0aa865bb3..4bfce6f96 100644 --- a/talks/2012-03-28-webtests/index.html +++ b/talks/2012-03-28-webtests/index.html @@ -348,6 +348,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/talks/2012-04-25-maven/index.html b/talks/2012-04-25-maven/index.html index 2ec8cd04f..adae9d58c 100644 --- a/talks/2012-04-25-maven/index.html +++ b/talks/2012-04-25-maven/index.html @@ -350,6 +350,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/talks/2012-05-30-jmonkey-engine3/index.html b/talks/2012-05-30-jmonkey-engine3/index.html index ecb20d977..248946733 100644 --- a/talks/2012-05-30-jmonkey-engine3/index.html +++ b/talks/2012-05-30-jmonkey-engine3/index.html @@ -348,6 +348,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/talks/2012-06-27-gridgain/index.html b/talks/2012-06-27-gridgain/index.html index 6b7f40ad8..b20ce64ab 100644 --- a/talks/2012-06-27-gridgain/index.html +++ b/talks/2012-06-27-gridgain/index.html @@ -348,6 +348,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/talks/2012-07-25-selenium_praxis/index.html b/talks/2012-07-25-selenium_praxis/index.html index cac231825..55c1cb765 100644 --- a/talks/2012-07-25-selenium_praxis/index.html +++ b/talks/2012-07-25-selenium_praxis/index.html @@ -351,6 +351,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/talks/2012-09-26-bean_validation/index.html b/talks/2012-09-26-bean_validation/index.html index f7ac7b2af..1a48cc7ab 100644 --- a/talks/2012-09-26-bean_validation/index.html +++ b/talks/2012-09-26-bean_validation/index.html @@ -363,6 +363,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/talks/2012-11-28-javafx2/index.html b/talks/2012-11-28-javafx2/index.html index 368426ccf..7a026156c 100644 --- a/talks/2012-11-28-javafx2/index.html +++ b/talks/2012-11-28-javafx2/index.html @@ -356,6 +356,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/talks/2013-03-27-nxt_lego/index.html b/talks/2013-03-27-nxt_lego/index.html index 56f938a3d..4cde5331c 100644 --- a/talks/2013-03-27-nxt_lego/index.html +++ b/talks/2013-03-27-nxt_lego/index.html @@ -357,6 +357,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/talks/2013-05-29-jruby/index.html b/talks/2013-05-29-jruby/index.html index e60ba2a9b..3e883fea8 100644 --- a/talks/2013-05-29-jruby/index.html +++ b/talks/2013-05-29-jruby/index.html @@ -356,6 +356,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/talks/2013-07-31-persona/index.html b/talks/2013-07-31-persona/index.html index 6edabedf5..1832a3db5 100644 --- a/talks/2013-07-31-persona/index.html +++ b/talks/2013-07-31-persona/index.html @@ -356,6 +356,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/talks/2013-10-30-app-design/index.html b/talks/2013-10-30-app-design/index.html index 855c0087e..221d6472d 100644 --- a/talks/2013-10-30-app-design/index.html +++ b/talks/2013-10-30-app-design/index.html @@ -358,6 +358,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/talks/2013-11-27-web-performance/index.html b/talks/2013-11-27-web-performance/index.html index 052a95659..eb19821e0 100644 --- a/talks/2013-11-27-web-performance/index.html +++ b/talks/2013-11-27-web-performance/index.html @@ -353,6 +353,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/talks/2014-01-29-opendip/index.html b/talks/2014-01-29-opendip/index.html index 2347fcf46..83c1ed2a4 100644 --- a/talks/2014-01-29-opendip/index.html +++ b/talks/2014-01-29-opendip/index.html @@ -364,6 +364,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/talks/2014-04-02-assertj/index.html b/talks/2014-04-02-assertj/index.html index 80125649d..0787a5814 100644 --- a/talks/2014-04-02-assertj/index.html +++ b/talks/2014-04-02-assertj/index.html @@ -366,6 +366,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/talks/2014-05-28-hazelcast/index.html b/talks/2014-05-28-hazelcast/index.html index 9f9afbfd5..15c1e399a 100644 --- a/talks/2014-05-28-hazelcast/index.html +++ b/talks/2014-05-28-hazelcast/index.html @@ -353,6 +353,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/talks/2014-07-30-java8-streams/index.html b/talks/2014-07-30-java8-streams/index.html index 3ae87837a..823212b9d 100644 --- a/talks/2014-07-30-java8-streams/index.html +++ b/talks/2014-07-30-java8-streams/index.html @@ -359,6 +359,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/talks/2014-09-24-solr/index.html b/talks/2014-09-24-solr/index.html index da10f22b3..d29afeef6 100644 --- a/talks/2014-09-24-solr/index.html +++ b/talks/2014-09-24-solr/index.html @@ -358,6 +358,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/talks/2014-10-29-infrastructure_as_code/index.html b/talks/2014-10-29-infrastructure_as_code/index.html index c712b7745..bf41cce57 100644 --- a/talks/2014-10-29-infrastructure_as_code/index.html +++ b/talks/2014-10-29-infrastructure_as_code/index.html @@ -362,6 +362,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/talks/2014-12-03-model-view-star/index.html b/talks/2014-12-03-model-view-star/index.html index c4a8d4177..d83591fec 100644 --- a/talks/2014-12-03-model-view-star/index.html +++ b/talks/2014-12-03-model-view-star/index.html @@ -367,6 +367,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/talks/2015-01-28-moskito/index.html b/talks/2015-01-28-moskito/index.html index 2b677bb19..d886d83d2 100644 --- a/talks/2015-01-28-moskito/index.html +++ b/talks/2015-01-28-moskito/index.html @@ -358,6 +358,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/talks/2015-03-25-android/index.html b/talks/2015-03-25-android/index.html index 1fa8a4537..b83304b73 100644 --- a/talks/2015-03-25-android/index.html +++ b/talks/2015-03-25-android/index.html @@ -366,6 +366,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/talks/2015-05-27-advanced-android/index.html b/talks/2015-05-27-advanced-android/index.html index 3773c0c0c..f71bcc581 100644 --- a/talks/2015-05-27-advanced-android/index.html +++ b/talks/2015-05-27-advanced-android/index.html @@ -363,6 +363,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/talks/2015-07-29-drools/index.html b/talks/2015-07-29-drools/index.html index 5404e922e..cde0a88d0 100644 --- a/talks/2015-07-29-drools/index.html +++ b/talks/2015-07-29-drools/index.html @@ -357,6 +357,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/talks/2015-09-30-guava/index.html b/talks/2015-09-30-guava/index.html index 3dd54b2ed..a8badc1db 100644 --- a/talks/2015-09-30-guava/index.html +++ b/talks/2015-09-30-guava/index.html @@ -364,6 +364,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/talks/2015-11-25-javafx-mobile/index.html b/talks/2015-11-25-javafx-mobile/index.html index ed2c0ecc4..54cfe2b46 100644 --- a/talks/2015-11-25-javafx-mobile/index.html +++ b/talks/2015-11-25-javafx-mobile/index.html @@ -363,6 +363,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/talks/2016-01-27-functional_java/index.html b/talks/2016-01-27-functional_java/index.html index 99eb3f279..4844802f6 100644 --- a/talks/2016-01-27-functional_java/index.html +++ b/talks/2016-01-27-functional_java/index.html @@ -379,6 +379,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/talks/2016-03-30-haskell_frege/index.html b/talks/2016-03-30-haskell_frege/index.html index 47e00bc97..29caf00e8 100644 --- a/talks/2016-03-30-haskell_frege/index.html +++ b/talks/2016-03-30-haskell_frege/index.html @@ -359,6 +359,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/talks/2016-05-25-performance-analyse-inspectit/index.html b/talks/2016-05-25-performance-analyse-inspectit/index.html index 6b6e40b08..39cdd8500 100644 --- a/talks/2016-05-25-performance-analyse-inspectit/index.html +++ b/talks/2016-05-25-performance-analyse-inspectit/index.html @@ -361,6 +361,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/talks/2016-07-27-testwerkzeuge_javafx/index.html b/talks/2016-07-27-testwerkzeuge_javafx/index.html index fb4fd3529..372e79f50 100644 --- a/talks/2016-07-27-testwerkzeuge_javafx/index.html +++ b/talks/2016-07-27-testwerkzeuge_javafx/index.html @@ -359,6 +359,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/talks/2016-09-21-kommunikationskultur/index.html b/talks/2016-09-21-kommunikationskultur/index.html index 1f5013f1e..6f16037f2 100644 --- a/talks/2016-09-21-kommunikationskultur/index.html +++ b/talks/2016-09-21-kommunikationskultur/index.html @@ -358,6 +358,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/talks/2016-11-30-inside_jvm/index.html b/talks/2016-11-30-inside_jvm/index.html index 94196b5fa..663d671d7 100644 --- a/talks/2016-11-30-inside_jvm/index.html +++ b/talks/2016-11-30-inside_jvm/index.html @@ -350,6 +350,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/talks/2017-01-25-junit5/index.html b/talks/2017-01-25-junit5/index.html index afb452a4d..60882959d 100644 --- a/talks/2017-01-25-junit5/index.html +++ b/talks/2017-01-25-junit5/index.html @@ -358,6 +358,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/talks/2017-02-22-css/index.html b/talks/2017-02-22-css/index.html index 3c4a87a71..d832703d8 100644 --- a/talks/2017-02-22-css/index.html +++ b/talks/2017-02-22-css/index.html @@ -356,6 +356,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/talks/2017-03-22-angular/index.html b/talks/2017-03-22-angular/index.html index 43ae0805f..1c61589a6 100644 --- a/talks/2017-03-22-angular/index.html +++ b/talks/2017-03-22-angular/index.html @@ -361,6 +361,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/talks/2017-04-26-jdk9/index.html b/talks/2017-04-26-jdk9/index.html index 2cbf91d1f..1d6ef253b 100644 --- a/talks/2017-04-26-jdk9/index.html +++ b/talks/2017-04-26-jdk9/index.html @@ -366,6 +366,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/talks/2017-05-31-react/index.html b/talks/2017-05-31-react/index.html index 677dd4564..133473c00 100644 --- a/talks/2017-05-31-react/index.html +++ b/talks/2017-05-31-react/index.html @@ -360,6 +360,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/talks/2017-08-30-alexa/index.html b/talks/2017-08-30-alexa/index.html index 639db5cc1..c997cc03b 100644 --- a/talks/2017-08-30-alexa/index.html +++ b/talks/2017-08-30-alexa/index.html @@ -353,6 +353,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/talks/2017-10-25-serverless/index.html b/talks/2017-10-25-serverless/index.html index 30d7a95a0..b4d3b9e8a 100644 --- a/talks/2017-10-25-serverless/index.html +++ b/talks/2017-10-25-serverless/index.html @@ -366,6 +366,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/talks/2017-11-29-neo4j/index.html b/talks/2017-11-29-neo4j/index.html index 849c28b6f..e18e8e55d 100644 --- a/talks/2017-11-29-neo4j/index.html +++ b/talks/2017-11-29-neo4j/index.html @@ -357,6 +357,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/talks/2018-01-31-system_of_systems/index.html b/talks/2018-01-31-system_of_systems/index.html index 0fd0a146a..902914836 100644 --- a/talks/2018-01-31-system_of_systems/index.html +++ b/talks/2018-01-31-system_of_systems/index.html @@ -360,6 +360,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/talks/2018-02-28-java_auf_sap_cloud/index.html b/talks/2018-02-28-java_auf_sap_cloud/index.html index e39118a56..57eba7a6c 100644 --- a/talks/2018-02-28-java_auf_sap_cloud/index.html +++ b/talks/2018-02-28-java_auf_sap_cloud/index.html @@ -363,6 +363,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/talks/2018-03-20-mikro_vs_makroarchitektur/index.html b/talks/2018-03-20-mikro_vs_makroarchitektur/index.html index 1b5562082..c3fe9d3ca 100644 --- a/talks/2018-03-20-mikro_vs_makroarchitektur/index.html +++ b/talks/2018-03-20-mikro_vs_makroarchitektur/index.html @@ -358,6 +358,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/talks/2018-04-25-kotlin/index.html b/talks/2018-04-25-kotlin/index.html index 1d293ae72..ed9b15c25 100644 --- a/talks/2018-04-25-kotlin/index.html +++ b/talks/2018-04-25-kotlin/index.html @@ -359,6 +359,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/talks/2018-05-30-graphql/index.html b/talks/2018-05-30-graphql/index.html index 8c2a55222..eb977f4e0 100644 --- a/talks/2018-05-30-graphql/index.html +++ b/talks/2018-05-30-graphql/index.html @@ -360,6 +360,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/talks/2018-06-27-immutable-data/index.html b/talks/2018-06-27-immutable-data/index.html index 2f60b8381..6ae9e94d2 100644 --- a/talks/2018-06-27-immutable-data/index.html +++ b/talks/2018-06-27-immutable-data/index.html @@ -365,6 +365,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/talks/2018-11-23-monadische_transaktionen/index.html b/talks/2018-11-23-monadische_transaktionen/index.html index 40f1429b2..2e6e93e21 100644 --- a/talks/2018-11-23-monadische_transaktionen/index.html +++ b/talks/2018-11-23-monadische_transaktionen/index.html @@ -358,6 +358,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/talks/2019-01-31_java_apis_missing_manual/index.html b/talks/2019-01-31_java_apis_missing_manual/index.html index b3590f0c1..d7ec9aa2d 100644 --- a/talks/2019-01-31_java_apis_missing_manual/index.html +++ b/talks/2019-01-31_java_apis_missing_manual/index.html @@ -356,6 +356,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/talks/2019-02-27_reflection/index.html b/talks/2019-02-27_reflection/index.html index 522934a9b..009d54e5a 100644 --- a/talks/2019-02-27_reflection/index.html +++ b/talks/2019-02-27_reflection/index.html @@ -357,6 +357,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/talks/2019-03-27-static-site-generators/index.html b/talks/2019-03-27-static-site-generators/index.html index 5c47d4ed3..e25836d84 100644 --- a/talks/2019-03-27-static-site-generators/index.html +++ b/talks/2019-03-27-static-site-generators/index.html @@ -367,6 +367,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/talks/2019-04-24_jdk_jungle/index.html b/talks/2019-04-24_jdk_jungle/index.html index d4b514a74..e2a226eeb 100644 --- a/talks/2019-04-24_jdk_jungle/index.html +++ b/talks/2019-04-24_jdk_jungle/index.html @@ -363,6 +363,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/talks/2019-05-29-oauth/index.html b/talks/2019-05-29-oauth/index.html index 8ff34ad89..60e23be73 100644 --- a/talks/2019-05-29-oauth/index.html +++ b/talks/2019-05-29-oauth/index.html @@ -352,6 +352,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/talks/2019-06-26-collection-framework/index.html b/talks/2019-06-26-collection-framework/index.html index 983bf9cd1..896220e8b 100644 --- a/talks/2019-06-26-collection-framework/index.html +++ b/talks/2019-06-26-collection-framework/index.html @@ -360,6 +360,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/talks/2019-11-28-advanced-bdd-tests/index.html b/talks/2019-11-28-advanced-bdd-tests/index.html index 4ba4eacae..8698d06e4 100644 --- a/talks/2019-11-28-advanced-bdd-tests/index.html +++ b/talks/2019-11-28-advanced-bdd-tests/index.html @@ -351,6 +351,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/talks/2020-01-27-cloud-foundry/index.html b/talks/2020-01-27-cloud-foundry/index.html index bd0f745b0..72514f616 100644 --- a/talks/2020-01-27-cloud-foundry/index.html +++ b/talks/2020-01-27-cloud-foundry/index.html @@ -353,6 +353,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/talks/2020-04-29-jdk14_graalvm/index.html b/talks/2020-04-29-jdk14_graalvm/index.html index 43d800b4c..e5a804782 100644 --- a/talks/2020-04-29-jdk14_graalvm/index.html +++ b/talks/2020-04-29-jdk14_graalvm/index.html @@ -369,6 +369,6 @@

Hinweis

- \ No newline at end of file + \ No newline at end of file diff --git a/talks/2020-07-22-branching_modelle/index.html b/talks/2020-07-22-branching_modelle/index.html index c3c612451..189799d3a 100644 --- a/talks/2020-07-22-branching_modelle/index.html +++ b/talks/2020-07-22-branching_modelle/index.html @@ -363,6 +363,6 @@

Hinweis

- \ No newline at end of file + \ No newline at end of file diff --git a/talks/2020-11-25-secure_coding/index.html b/talks/2020-11-25-secure_coding/index.html index a8b512e94..912f631ff 100644 --- a/talks/2020-11-25-secure_coding/index.html +++ b/talks/2020-11-25-secure_coding/index.html @@ -360,6 +360,6 @@

Hinweis

- \ No newline at end of file + \ No newline at end of file diff --git a/talks/2021-01-27-webcomponents/index.html b/talks/2021-01-27-webcomponents/index.html index 56d3b5e2c..100eac1de 100644 --- a/talks/2021-01-27-webcomponents/index.html +++ b/talks/2021-01-27-webcomponents/index.html @@ -359,6 +359,6 @@

Hinweis

- \ No newline at end of file + \ No newline at end of file diff --git a/talks/2021-06-30-microstream/index.html b/talks/2021-06-30-microstream/index.html index 53b11e3e4..09502ef01 100644 --- a/talks/2021-06-30-microstream/index.html +++ b/talks/2021-06-30-microstream/index.html @@ -379,6 +379,6 @@

Hinweis

- \ No newline at end of file + \ No newline at end of file diff --git a/talks/2022-06-22-iot-infrastruktur-serverless/index.html b/talks/2022-06-22-iot-infrastruktur-serverless/index.html index abcb7252f..1d72dbacf 100644 --- a/talks/2022-06-22-iot-infrastruktur-serverless/index.html +++ b/talks/2022-06-22-iot-infrastruktur-serverless/index.html @@ -358,6 +358,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/talks/2022-10-12-indistrie_4.0/index.html b/talks/2022-10-12-indistrie_4.0/index.html index 5f47cca86..eff601011 100644 --- a/talks/2022-10-12-indistrie_4.0/index.html +++ b/talks/2022-10-12-indistrie_4.0/index.html @@ -386,6 +386,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/talks/2022-11-30-iam-keycloak/index.html b/talks/2022-11-30-iam-keycloak/index.html index 134f383a6..0603786a6 100644 --- a/talks/2022-11-30-iam-keycloak/index.html +++ b/talks/2022-11-30-iam-keycloak/index.html @@ -354,6 +354,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/talks/2023-01-25-contentlab/index.html b/talks/2023-01-25-contentlab/index.html index 4b613ad89..2b07838f1 100644 --- a/talks/2023-01-25-contentlab/index.html +++ b/talks/2023-01-25-contentlab/index.html @@ -349,6 +349,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/talks/2023-02-22-exception_first/index.html b/talks/2023-02-22-exception_first/index.html index 944a307c3..86d512ff7 100644 --- a/talks/2023-02-22-exception_first/index.html +++ b/talks/2023-02-22-exception_first/index.html @@ -350,6 +350,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/talks/2023-03-29-spring_fuer_architekturinteressierte_entwickler_innen/index.html b/talks/2023-03-29-spring_fuer_architekturinteressierte_entwickler_innen/index.html index 34ab287ac..3f1418dd0 100644 --- a/talks/2023-03-29-spring_fuer_architekturinteressierte_entwickler_innen/index.html +++ b/talks/2023-03-29-spring_fuer_architekturinteressierte_entwickler_innen/index.html @@ -362,6 +362,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/talks/2023-04-26-archunit_unit_tests_java_architektur/index.html b/talks/2023-04-26-archunit_unit_tests_java_architektur/index.html index c23fb567f..f2bb69d5f 100644 --- a/talks/2023-04-26-archunit_unit_tests_java_architektur/index.html +++ b/talks/2023-04-26-archunit_unit_tests_java_architektur/index.html @@ -349,6 +349,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/talks/2023-05-31-accessibility_in_the_wild/index.html b/talks/2023-05-31-accessibility_in_the_wild/index.html index adb723f4e..43d263071 100644 --- a/talks/2023-05-31-accessibility_in_the_wild/index.html +++ b/talks/2023-05-31-accessibility_in_the_wild/index.html @@ -352,6 +352,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/talks/2023-06-28-graalvm_23/index.html b/talks/2023-06-28-graalvm_23/index.html index 1ebb05481..05e574b68 100644 --- a/talks/2023-06-28-graalvm_23/index.html +++ b/talks/2023-06-28-graalvm_23/index.html @@ -350,6 +350,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/talks/2023-09-27-virtual-threads/index.html b/talks/2023-09-27-virtual-threads/index.html index f8bb605fd..590745cc6 100644 --- a/talks/2023-09-27-virtual-threads/index.html +++ b/talks/2023-09-27-virtual-threads/index.html @@ -354,6 +354,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/talks/2023-10-25-aws_cdk_in_action/index.html b/talks/2023-10-25-aws_cdk_in_action/index.html index abab5d8f6..d1130f248 100644 --- a/talks/2023-10-25-aws_cdk_in_action/index.html +++ b/talks/2023-10-25-aws_cdk_in_action/index.html @@ -354,6 +354,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/talks/2023-11-29-crac/index.html b/talks/2023-11-29-crac/index.html index 6a1808526..151926f6c 100644 --- a/talks/2023-11-29-crac/index.html +++ b/talks/2023-11-29-crac/index.html @@ -368,6 +368,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/talks/2024-01-31-flutter/index.html b/talks/2024-01-31-flutter/index.html index 9035b43d6..9ffb4dc9b 100644 --- a/talks/2024-01-31-flutter/index.html +++ b/talks/2024-01-31-flutter/index.html @@ -359,6 +359,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/talks/2024-02-28-architektur-reviews/index.html b/talks/2024-02-28-architektur-reviews/index.html index 111db4f60..7f191492b 100644 --- a/talks/2024-02-28-architektur-reviews/index.html +++ b/talks/2024-02-28-architektur-reviews/index.html @@ -349,6 +349,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/talks/2024-03-20-rust/index.html b/talks/2024-03-20-rust/index.html index 0eaf5502c..fe61c316c 100644 --- a/talks/2024-03-20-rust/index.html +++ b/talks/2024-03-20-rust/index.html @@ -363,6 +363,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/talks/2024-04-24-rust2/index.html b/talks/2024-04-24-rust2/index.html index 29592f667..992104fd0 100644 --- a/talks/2024-04-24-rust2/index.html +++ b/talks/2024-04-24-rust2/index.html @@ -349,6 +349,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/talks/2024-05-29-parallele-programmiermodelle/index.html b/talks/2024-05-29-parallele-programmiermodelle/index.html index 48091247a..e3779bb69 100644 --- a/talks/2024-05-29-parallele-programmiermodelle/index.html +++ b/talks/2024-05-29-parallele-programmiermodelle/index.html @@ -350,6 +350,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/talks/2024-09-25-javafx-state-of-the-technology/index.html b/talks/2024-09-25-javafx-state-of-the-technology/index.html index c58fe6c41..b22cbec4c 100644 --- a/talks/2024-09-25-javafx-state-of-the-technology/index.html +++ b/talks/2024-09-25-javafx-state-of-the-technology/index.html @@ -344,7 +344,7 @@ overflow: visible; position: static; width: auto; } -

JavaFX State of the Technology

von Wolfgang Weigend | 25. September 2024

javafx, frontend

Der aktuelle Stand der JavaFX-UI-Entwicklung wird aus der Sicht von Oracle erläutert, mit einer Bestandsaufnahme der +

JavaFX State of the Technology

von Christian Heilmann, Wolfgang Weigend | 25. September 2024

javafx, frontend

Der aktuelle Stand der JavaFX-UI-Entwicklung wird aus der Sicht von Oracle erläutert, mit einer Bestandsaufnahme der vorhandenen Entwicklungsressourcen und der Fortführung von JavaFX in einem freien Ökosystem. JavaFX ist vom JDK entkoppelt, sodass es separat entwickelt werden kann und alle davon profitieren. Gemeinsam mit Oracle Engineering wurde ein JavaFX-Ökosystem aufgebaut, dass die langfristige technologische Lebensfähigkeit von JavaFX sicherstellt. Die @@ -352,12 +352,12 @@ weiterverteilt werden. Oracle entwickelt und veröffentlicht JavaFX als eigenständige Module über das OpenJFX-Projekt im OpenJDK. Oracle plant, diese kostenlosen und Open-Source-OpenJFX-Builds weiterhin mit den neuesten Java-Versionen bereitzustellen, wie derzeit JavaFX 22 auf Oracle JDK 22, dann JavaFX 23 für Oracle JDK 23 im September 2024 und sie, -wie seit vielen Jahren regelmäßig auf jdk.java.net verfügbar zu machen.

Poster: Jürgen ist hat eine 3D-Brille auf und isst Popcorn.

Wolfgang Weigend arbeitet als Master Principal Solution Engineer bei der ORACLE Global Services Germany GmbH im +wie seit vielen Jahren regelmäßig auf jdk.java.net verfügbar zu machen.

Poster: Jürgen ist hat eine 3D-Brille auf und isst Popcorn.



Die Veranstaltung wird durch die Java User Group Görlitz (im iJUG Verband) organisiert.
Die Java User Group Görlitz ist ein Projekt des Digitale Oberlausitz e.V.

- \ No newline at end of file + \ No newline at end of file diff --git a/talks/index.html b/talks/index.html index badfa0359..467b22677 100644 --- a/talks/index.html +++ b/talks/index.html @@ -344,10 +344,10 @@ overflow: visible; position: static; width: auto; } -

Alle Vortragsthemen

+

Alle Vortragsthemen

- \ No newline at end of file + \ No newline at end of file diff --git a/unterstuetzer/index.html b/unterstuetzer/index.html index 0d2ba508f..eaf5f7bd5 100644 --- a/unterstuetzer/index.html +++ b/unterstuetzer/index.html @@ -348,6 +348,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/webpack.stats.json b/webpack.stats.json index 07faeeeef..c21cd4ea3 100644 --- a/webpack.stats.json +++ b/webpack.stats.json @@ -1 +1 @@ -{"name":"build-javascript","namedChunkGroups":{"app":{"name":"app","assets":[{"name":"webpack-runtime-02d3561a355c61205fea.js","size":6102},{"name":"framework-1ac93cd8000c4311fb77.js","size":210235},{"name":"app-4a6f4c870da7a677f533.js","size":90717}],"filteredAssets":0,"assetsSize":307054,"filteredAuxiliaryAssets":3,"auxiliaryAssetsSize":776538},"component---src-pages-404-tsx":{"name":"component---src-pages-404-tsx","assets":[{"name":"styles.f0b7b84ad0e8a4f245ea.css","size":147007},{"name":"c16184b3-1b49df0b1e7d5219011e.js","size":2230},{"name":"2cca2479-cf64efe86dbcca44f9f3.js","size":3523},{"name":"commons-010320f52fda88b61858.js","size":161477},{"name":"component---src-pages-404-tsx-40df00c8cace58695efb.js","size":911}],"filteredAssets":0,"assetsSize":315148,"filteredAuxiliaryAssets":125,"auxiliaryAssetsSize":79217531},"component---src-pages-debug-redirects-tsx":{"name":"component---src-pages-debug-redirects-tsx","assets":[{"name":"styles.f0b7b84ad0e8a4f245ea.css","size":147007},{"name":"c16184b3-1b49df0b1e7d5219011e.js","size":2230},{"name":"2cca2479-cf64efe86dbcca44f9f3.js","size":3523},{"name":"commons-010320f52fda88b61858.js","size":161477},{"name":"component---src-pages-debug-redirects-tsx-95780ce6e63631f2bd11.js","size":1153}],"filteredAssets":0,"assetsSize":315390,"filteredAuxiliaryAssets":125,"auxiliaryAssetsSize":79219016},"component---src-pages-index-tsx":{"name":"component---src-pages-index-tsx","assets":[{"name":"styles.f0b7b84ad0e8a4f245ea.css","size":147007},{"name":"c16184b3-1b49df0b1e7d5219011e.js","size":2230},{"name":"2cca2479-cf64efe86dbcca44f9f3.js","size":3523},{"name":"75fc9c18-f71279181183774e258e.js","size":60483},{"name":"commons-010320f52fda88b61858.js","size":161477},{"name":"083fcf652479e2899573de2cb0d9a486b1ed95d5-47c0f2d790faa87edb72.js","size":15944},{"name":"b95451f0b310186e909e788b848f8c20c7036633-47a36eb907b3ba1da6a0.js","size":14077},{"name":"component---src-pages-index-tsx-bcc7c3f8eff56e47a167.js","size":1831}],"filteredAssets":0,"assetsSize":406572,"filteredAuxiliaryAssets":128,"auxiliaryAssetsSize":79671818},"component---src-pages-locations-tsx":{"name":"component---src-pages-locations-tsx","assets":[{"name":"styles.f0b7b84ad0e8a4f245ea.css","size":147007},{"name":"c16184b3-1b49df0b1e7d5219011e.js","size":2230},{"name":"2cca2479-cf64efe86dbcca44f9f3.js","size":3523},{"name":"commons-010320f52fda88b61858.js","size":161477},{"name":"083fcf652479e2899573de2cb0d9a486b1ed95d5-47c0f2d790faa87edb72.js","size":15944},{"name":"component---src-pages-locations-tsx-2b27ecd750548e08c6e6.js","size":876}],"filteredAssets":0,"assetsSize":331057,"filteredAuxiliaryAssets":126,"auxiliaryAssetsSize":79313964},"component---src-pages-posters-tsx":{"name":"component---src-pages-posters-tsx","assets":[{"name":"styles.f0b7b84ad0e8a4f245ea.css","size":147007},{"name":"c16184b3-1b49df0b1e7d5219011e.js","size":2230},{"name":"2cca2479-cf64efe86dbcca44f9f3.js","size":3523},{"name":"commons-010320f52fda88b61858.js","size":161477},{"name":"component---src-pages-posters-tsx-bad2ab9bb98aefe9f149.js","size":10568}],"filteredAssets":0,"assetsSize":324805,"filteredAuxiliaryAssets":125,"auxiliaryAssetsSize":79284853},"component---src-pages-speakers-tsx":{"name":"component---src-pages-speakers-tsx","assets":[{"name":"styles.f0b7b84ad0e8a4f245ea.css","size":147007},{"name":"c16184b3-1b49df0b1e7d5219011e.js","size":2230},{"name":"2cca2479-cf64efe86dbcca44f9f3.js","size":3523},{"name":"commons-010320f52fda88b61858.js","size":161477},{"name":"083fcf652479e2899573de2cb0d9a486b1ed95d5-47c0f2d790faa87edb72.js","size":15944},{"name":"component---src-pages-speakers-tsx-c309584ed597fba12705.js","size":834}],"filteredAssets":0,"assetsSize":331015,"filteredAuxiliaryAssets":126,"auxiliaryAssetsSize":79313658},"component---src-pages-tags-tsx":{"name":"component---src-pages-tags-tsx","assets":[{"name":"styles.f0b7b84ad0e8a4f245ea.css","size":147007},{"name":"c16184b3-1b49df0b1e7d5219011e.js","size":2230},{"name":"2cca2479-cf64efe86dbcca44f9f3.js","size":3523},{"name":"75fc9c18-f71279181183774e258e.js","size":60483},{"name":"commons-010320f52fda88b61858.js","size":161477},{"name":"083fcf652479e2899573de2cb0d9a486b1ed95d5-47c0f2d790faa87edb72.js","size":15944},{"name":"component---src-pages-tags-tsx-de6815ace04d21511f1e.js","size":3841}],"filteredAssets":0,"assetsSize":394505,"filteredAuxiliaryAssets":127,"auxiliaryAssetsSize":79597739},"component---src-pages-talks-tsx":{"name":"component---src-pages-talks-tsx","assets":[{"name":"styles.f0b7b84ad0e8a4f245ea.css","size":147007},{"name":"c16184b3-1b49df0b1e7d5219011e.js","size":2230},{"name":"2cca2479-cf64efe86dbcca44f9f3.js","size":3523},{"name":"75fc9c18-f71279181183774e258e.js","size":60483},{"name":"commons-010320f52fda88b61858.js","size":161477},{"name":"083fcf652479e2899573de2cb0d9a486b1ed95d5-47c0f2d790faa87edb72.js","size":15944},{"name":"component---src-pages-talks-tsx-6c74cdbede6dcb5bf616.js","size":3440}],"filteredAssets":0,"assetsSize":394104,"filteredAuxiliaryAssets":127,"auxiliaryAssetsSize":79597061},"component---src-pages-unterstuetzer-tsx":{"name":"component---src-pages-unterstuetzer-tsx","assets":[{"name":"styles.f0b7b84ad0e8a4f245ea.css","size":147007},{"name":"c16184b3-1b49df0b1e7d5219011e.js","size":2230},{"name":"2cca2479-cf64efe86dbcca44f9f3.js","size":3523},{"name":"commons-010320f52fda88b61858.js","size":161477},{"name":"component---src-pages-unterstuetzer-tsx-6c7946d35d5deec320db.js","size":15235}],"filteredAssets":0,"assetsSize":329472,"filteredAuxiliaryAssets":125,"auxiliaryAssetsSize":79288406},"component---src-templates-location-page-tsx":{"name":"component---src-templates-location-page-tsx","assets":[{"name":"styles.f0b7b84ad0e8a4f245ea.css","size":147007},{"name":"c16184b3-1b49df0b1e7d5219011e.js","size":2230},{"name":"2cca2479-cf64efe86dbcca44f9f3.js","size":3523},{"name":"commons-010320f52fda88b61858.js","size":161477},{"name":"component---src-templates-location-page-tsx-66f99d488944fe4e5e5a.js","size":1610}],"filteredAssets":0,"assetsSize":315847,"filteredAuxiliaryAssets":125,"auxiliaryAssetsSize":79220252},"component---src-templates-speaker-page-tsx":{"name":"component---src-templates-speaker-page-tsx","assets":[{"name":"styles.f0b7b84ad0e8a4f245ea.css","size":147007},{"name":"c16184b3-1b49df0b1e7d5219011e.js","size":2230},{"name":"2cca2479-cf64efe86dbcca44f9f3.js","size":3523},{"name":"commons-010320f52fda88b61858.js","size":161477},{"name":"component---src-templates-speaker-page-tsx-2b70a93379a65ecad731.js","size":10469}],"filteredAssets":0,"assetsSize":324706,"filteredAuxiliaryAssets":125,"auxiliaryAssetsSize":79285033},"component---src-templates-static-page-tsx":{"name":"component---src-templates-static-page-tsx","assets":[{"name":"styles.f0b7b84ad0e8a4f245ea.css","size":147007},{"name":"c16184b3-1b49df0b1e7d5219011e.js","size":2230},{"name":"2cca2479-cf64efe86dbcca44f9f3.js","size":3523},{"name":"commons-010320f52fda88b61858.js","size":161477},{"name":"component---src-templates-static-page-tsx-7e013f4f0cc0eabd4a50.js","size":933}],"filteredAssets":0,"assetsSize":315170,"filteredAuxiliaryAssets":125,"auxiliaryAssetsSize":79217934},"component---src-templates-talk-page-tsx":{"name":"component---src-templates-talk-page-tsx","assets":[{"name":"styles.f0b7b84ad0e8a4f245ea.css","size":147007},{"name":"c16184b3-1b49df0b1e7d5219011e.js","size":2230},{"name":"2cca2479-cf64efe86dbcca44f9f3.js","size":3523},{"name":"75fc9c18-f71279181183774e258e.js","size":60483},{"name":"commons-010320f52fda88b61858.js","size":161477},{"name":"083fcf652479e2899573de2cb0d9a486b1ed95d5-47c0f2d790faa87edb72.js","size":15944},{"name":"b95451f0b310186e909e788b848f8c20c7036633-47a36eb907b3ba1da6a0.js","size":14077},{"name":"component---src-templates-talk-page-tsx-ab69b6140103e09d919e.js","size":496}],"filteredAssets":0,"assetsSize":405237,"filteredAuxiliaryAssets":128,"auxiliaryAssetsSize":79665287}},"assetsByChunkName":{"app":["webpack-runtime-02d3561a355c61205fea.js","framework-1ac93cd8000c4311fb77.js","app-4a6f4c870da7a677f533.js"],"component---src-pages-404-tsx":["styles.f0b7b84ad0e8a4f245ea.css","c16184b3-1b49df0b1e7d5219011e.js","2cca2479-cf64efe86dbcca44f9f3.js","commons-010320f52fda88b61858.js","component---src-pages-404-tsx-40df00c8cace58695efb.js"],"component---src-pages-debug-redirects-tsx":["styles.f0b7b84ad0e8a4f245ea.css","c16184b3-1b49df0b1e7d5219011e.js","2cca2479-cf64efe86dbcca44f9f3.js","commons-010320f52fda88b61858.js","component---src-pages-debug-redirects-tsx-95780ce6e63631f2bd11.js"],"component---src-pages-index-tsx":["styles.f0b7b84ad0e8a4f245ea.css","c16184b3-1b49df0b1e7d5219011e.js","2cca2479-cf64efe86dbcca44f9f3.js","75fc9c18-f71279181183774e258e.js","commons-010320f52fda88b61858.js","083fcf652479e2899573de2cb0d9a486b1ed95d5-47c0f2d790faa87edb72.js","b95451f0b310186e909e788b848f8c20c7036633-47a36eb907b3ba1da6a0.js","component---src-pages-index-tsx-bcc7c3f8eff56e47a167.js"],"component---src-pages-locations-tsx":["styles.f0b7b84ad0e8a4f245ea.css","c16184b3-1b49df0b1e7d5219011e.js","2cca2479-cf64efe86dbcca44f9f3.js","commons-010320f52fda88b61858.js","083fcf652479e2899573de2cb0d9a486b1ed95d5-47c0f2d790faa87edb72.js","component---src-pages-locations-tsx-2b27ecd750548e08c6e6.js"],"component---src-pages-posters-tsx":["styles.f0b7b84ad0e8a4f245ea.css","c16184b3-1b49df0b1e7d5219011e.js","2cca2479-cf64efe86dbcca44f9f3.js","commons-010320f52fda88b61858.js","component---src-pages-posters-tsx-bad2ab9bb98aefe9f149.js"],"component---src-pages-speakers-tsx":["styles.f0b7b84ad0e8a4f245ea.css","c16184b3-1b49df0b1e7d5219011e.js","2cca2479-cf64efe86dbcca44f9f3.js","commons-010320f52fda88b61858.js","083fcf652479e2899573de2cb0d9a486b1ed95d5-47c0f2d790faa87edb72.js","component---src-pages-speakers-tsx-c309584ed597fba12705.js"],"component---src-pages-tags-tsx":["styles.f0b7b84ad0e8a4f245ea.css","c16184b3-1b49df0b1e7d5219011e.js","2cca2479-cf64efe86dbcca44f9f3.js","75fc9c18-f71279181183774e258e.js","commons-010320f52fda88b61858.js","083fcf652479e2899573de2cb0d9a486b1ed95d5-47c0f2d790faa87edb72.js","component---src-pages-tags-tsx-de6815ace04d21511f1e.js"],"component---src-pages-talks-tsx":["styles.f0b7b84ad0e8a4f245ea.css","c16184b3-1b49df0b1e7d5219011e.js","2cca2479-cf64efe86dbcca44f9f3.js","75fc9c18-f71279181183774e258e.js","commons-010320f52fda88b61858.js","083fcf652479e2899573de2cb0d9a486b1ed95d5-47c0f2d790faa87edb72.js","component---src-pages-talks-tsx-6c74cdbede6dcb5bf616.js"],"component---src-pages-unterstuetzer-tsx":["styles.f0b7b84ad0e8a4f245ea.css","c16184b3-1b49df0b1e7d5219011e.js","2cca2479-cf64efe86dbcca44f9f3.js","commons-010320f52fda88b61858.js","component---src-pages-unterstuetzer-tsx-6c7946d35d5deec320db.js"],"component---src-templates-location-page-tsx":["styles.f0b7b84ad0e8a4f245ea.css","c16184b3-1b49df0b1e7d5219011e.js","2cca2479-cf64efe86dbcca44f9f3.js","commons-010320f52fda88b61858.js","component---src-templates-location-page-tsx-66f99d488944fe4e5e5a.js"],"component---src-templates-speaker-page-tsx":["styles.f0b7b84ad0e8a4f245ea.css","c16184b3-1b49df0b1e7d5219011e.js","2cca2479-cf64efe86dbcca44f9f3.js","commons-010320f52fda88b61858.js","component---src-templates-speaker-page-tsx-2b70a93379a65ecad731.js"],"component---src-templates-static-page-tsx":["styles.f0b7b84ad0e8a4f245ea.css","c16184b3-1b49df0b1e7d5219011e.js","2cca2479-cf64efe86dbcca44f9f3.js","commons-010320f52fda88b61858.js","component---src-templates-static-page-tsx-7e013f4f0cc0eabd4a50.js"],"component---src-templates-talk-page-tsx":["styles.f0b7b84ad0e8a4f245ea.css","c16184b3-1b49df0b1e7d5219011e.js","2cca2479-cf64efe86dbcca44f9f3.js","75fc9c18-f71279181183774e258e.js","commons-010320f52fda88b61858.js","083fcf652479e2899573de2cb0d9a486b1ed95d5-47c0f2d790faa87edb72.js","b95451f0b310186e909e788b848f8c20c7036633-47a36eb907b3ba1da6a0.js","component---src-templates-talk-page-tsx-ab69b6140103e09d919e.js"]},"childAssetsByChunkName":{}} \ No newline at end of file +{"name":"build-javascript","namedChunkGroups":{"app":{"name":"app","assets":[{"name":"webpack-runtime-02d3561a355c61205fea.js","size":6102},{"name":"framework-1ac93cd8000c4311fb77.js","size":210235},{"name":"app-545491b94328c8e7ee02.js","size":90717}],"filteredAssets":0,"assetsSize":307054,"filteredAuxiliaryAssets":3,"auxiliaryAssetsSize":776538},"component---src-pages-404-tsx":{"name":"component---src-pages-404-tsx","assets":[{"name":"styles.f0b7b84ad0e8a4f245ea.css","size":147007},{"name":"c16184b3-1b49df0b1e7d5219011e.js","size":2230},{"name":"2cca2479-cf64efe86dbcca44f9f3.js","size":3523},{"name":"commons-010320f52fda88b61858.js","size":161477},{"name":"component---src-pages-404-tsx-40df00c8cace58695efb.js","size":911}],"filteredAssets":0,"assetsSize":315148,"filteredAuxiliaryAssets":125,"auxiliaryAssetsSize":79217531},"component---src-pages-debug-redirects-tsx":{"name":"component---src-pages-debug-redirects-tsx","assets":[{"name":"styles.f0b7b84ad0e8a4f245ea.css","size":147007},{"name":"c16184b3-1b49df0b1e7d5219011e.js","size":2230},{"name":"2cca2479-cf64efe86dbcca44f9f3.js","size":3523},{"name":"commons-010320f52fda88b61858.js","size":161477},{"name":"component---src-pages-debug-redirects-tsx-95780ce6e63631f2bd11.js","size":1153}],"filteredAssets":0,"assetsSize":315390,"filteredAuxiliaryAssets":125,"auxiliaryAssetsSize":79219016},"component---src-pages-index-tsx":{"name":"component---src-pages-index-tsx","assets":[{"name":"styles.f0b7b84ad0e8a4f245ea.css","size":147007},{"name":"c16184b3-1b49df0b1e7d5219011e.js","size":2230},{"name":"2cca2479-cf64efe86dbcca44f9f3.js","size":3523},{"name":"75fc9c18-f71279181183774e258e.js","size":60483},{"name":"commons-010320f52fda88b61858.js","size":161477},{"name":"083fcf652479e2899573de2cb0d9a486b1ed95d5-47c0f2d790faa87edb72.js","size":15944},{"name":"b95451f0b310186e909e788b848f8c20c7036633-47a36eb907b3ba1da6a0.js","size":14077},{"name":"component---src-pages-index-tsx-bcc7c3f8eff56e47a167.js","size":1831}],"filteredAssets":0,"assetsSize":406572,"filteredAuxiliaryAssets":128,"auxiliaryAssetsSize":79671818},"component---src-pages-locations-tsx":{"name":"component---src-pages-locations-tsx","assets":[{"name":"styles.f0b7b84ad0e8a4f245ea.css","size":147007},{"name":"c16184b3-1b49df0b1e7d5219011e.js","size":2230},{"name":"2cca2479-cf64efe86dbcca44f9f3.js","size":3523},{"name":"commons-010320f52fda88b61858.js","size":161477},{"name":"083fcf652479e2899573de2cb0d9a486b1ed95d5-47c0f2d790faa87edb72.js","size":15944},{"name":"component---src-pages-locations-tsx-2b27ecd750548e08c6e6.js","size":876}],"filteredAssets":0,"assetsSize":331057,"filteredAuxiliaryAssets":126,"auxiliaryAssetsSize":79313964},"component---src-pages-posters-tsx":{"name":"component---src-pages-posters-tsx","assets":[{"name":"styles.f0b7b84ad0e8a4f245ea.css","size":147007},{"name":"c16184b3-1b49df0b1e7d5219011e.js","size":2230},{"name":"2cca2479-cf64efe86dbcca44f9f3.js","size":3523},{"name":"commons-010320f52fda88b61858.js","size":161477},{"name":"component---src-pages-posters-tsx-bad2ab9bb98aefe9f149.js","size":10568}],"filteredAssets":0,"assetsSize":324805,"filteredAuxiliaryAssets":125,"auxiliaryAssetsSize":79284853},"component---src-pages-speakers-tsx":{"name":"component---src-pages-speakers-tsx","assets":[{"name":"styles.f0b7b84ad0e8a4f245ea.css","size":147007},{"name":"c16184b3-1b49df0b1e7d5219011e.js","size":2230},{"name":"2cca2479-cf64efe86dbcca44f9f3.js","size":3523},{"name":"commons-010320f52fda88b61858.js","size":161477},{"name":"083fcf652479e2899573de2cb0d9a486b1ed95d5-47c0f2d790faa87edb72.js","size":15944},{"name":"component---src-pages-speakers-tsx-c309584ed597fba12705.js","size":834}],"filteredAssets":0,"assetsSize":331015,"filteredAuxiliaryAssets":126,"auxiliaryAssetsSize":79313658},"component---src-pages-tags-tsx":{"name":"component---src-pages-tags-tsx","assets":[{"name":"styles.f0b7b84ad0e8a4f245ea.css","size":147007},{"name":"c16184b3-1b49df0b1e7d5219011e.js","size":2230},{"name":"2cca2479-cf64efe86dbcca44f9f3.js","size":3523},{"name":"75fc9c18-f71279181183774e258e.js","size":60483},{"name":"commons-010320f52fda88b61858.js","size":161477},{"name":"083fcf652479e2899573de2cb0d9a486b1ed95d5-47c0f2d790faa87edb72.js","size":15944},{"name":"component---src-pages-tags-tsx-de6815ace04d21511f1e.js","size":3841}],"filteredAssets":0,"assetsSize":394505,"filteredAuxiliaryAssets":127,"auxiliaryAssetsSize":79597739},"component---src-pages-talks-tsx":{"name":"component---src-pages-talks-tsx","assets":[{"name":"styles.f0b7b84ad0e8a4f245ea.css","size":147007},{"name":"c16184b3-1b49df0b1e7d5219011e.js","size":2230},{"name":"2cca2479-cf64efe86dbcca44f9f3.js","size":3523},{"name":"75fc9c18-f71279181183774e258e.js","size":60483},{"name":"commons-010320f52fda88b61858.js","size":161477},{"name":"083fcf652479e2899573de2cb0d9a486b1ed95d5-47c0f2d790faa87edb72.js","size":15944},{"name":"component---src-pages-talks-tsx-6c74cdbede6dcb5bf616.js","size":3440}],"filteredAssets":0,"assetsSize":394104,"filteredAuxiliaryAssets":127,"auxiliaryAssetsSize":79597061},"component---src-pages-unterstuetzer-tsx":{"name":"component---src-pages-unterstuetzer-tsx","assets":[{"name":"styles.f0b7b84ad0e8a4f245ea.css","size":147007},{"name":"c16184b3-1b49df0b1e7d5219011e.js","size":2230},{"name":"2cca2479-cf64efe86dbcca44f9f3.js","size":3523},{"name":"commons-010320f52fda88b61858.js","size":161477},{"name":"component---src-pages-unterstuetzer-tsx-6c7946d35d5deec320db.js","size":15235}],"filteredAssets":0,"assetsSize":329472,"filteredAuxiliaryAssets":125,"auxiliaryAssetsSize":79288406},"component---src-templates-location-page-tsx":{"name":"component---src-templates-location-page-tsx","assets":[{"name":"styles.f0b7b84ad0e8a4f245ea.css","size":147007},{"name":"c16184b3-1b49df0b1e7d5219011e.js","size":2230},{"name":"2cca2479-cf64efe86dbcca44f9f3.js","size":3523},{"name":"commons-010320f52fda88b61858.js","size":161477},{"name":"component---src-templates-location-page-tsx-66f99d488944fe4e5e5a.js","size":1610}],"filteredAssets":0,"assetsSize":315847,"filteredAuxiliaryAssets":125,"auxiliaryAssetsSize":79220252},"component---src-templates-speaker-page-tsx":{"name":"component---src-templates-speaker-page-tsx","assets":[{"name":"styles.f0b7b84ad0e8a4f245ea.css","size":147007},{"name":"c16184b3-1b49df0b1e7d5219011e.js","size":2230},{"name":"2cca2479-cf64efe86dbcca44f9f3.js","size":3523},{"name":"commons-010320f52fda88b61858.js","size":161477},{"name":"component---src-templates-speaker-page-tsx-2b70a93379a65ecad731.js","size":10469}],"filteredAssets":0,"assetsSize":324706,"filteredAuxiliaryAssets":125,"auxiliaryAssetsSize":79285033},"component---src-templates-static-page-tsx":{"name":"component---src-templates-static-page-tsx","assets":[{"name":"styles.f0b7b84ad0e8a4f245ea.css","size":147007},{"name":"c16184b3-1b49df0b1e7d5219011e.js","size":2230},{"name":"2cca2479-cf64efe86dbcca44f9f3.js","size":3523},{"name":"commons-010320f52fda88b61858.js","size":161477},{"name":"component---src-templates-static-page-tsx-7e013f4f0cc0eabd4a50.js","size":933}],"filteredAssets":0,"assetsSize":315170,"filteredAuxiliaryAssets":125,"auxiliaryAssetsSize":79217934},"component---src-templates-talk-page-tsx":{"name":"component---src-templates-talk-page-tsx","assets":[{"name":"styles.f0b7b84ad0e8a4f245ea.css","size":147007},{"name":"c16184b3-1b49df0b1e7d5219011e.js","size":2230},{"name":"2cca2479-cf64efe86dbcca44f9f3.js","size":3523},{"name":"75fc9c18-f71279181183774e258e.js","size":60483},{"name":"commons-010320f52fda88b61858.js","size":161477},{"name":"083fcf652479e2899573de2cb0d9a486b1ed95d5-47c0f2d790faa87edb72.js","size":15944},{"name":"b95451f0b310186e909e788b848f8c20c7036633-47a36eb907b3ba1da6a0.js","size":14077},{"name":"component---src-templates-talk-page-tsx-ab69b6140103e09d919e.js","size":496}],"filteredAssets":0,"assetsSize":405237,"filteredAuxiliaryAssets":128,"auxiliaryAssetsSize":79665287}},"assetsByChunkName":{"app":["webpack-runtime-02d3561a355c61205fea.js","framework-1ac93cd8000c4311fb77.js","app-545491b94328c8e7ee02.js"],"component---src-pages-404-tsx":["styles.f0b7b84ad0e8a4f245ea.css","c16184b3-1b49df0b1e7d5219011e.js","2cca2479-cf64efe86dbcca44f9f3.js","commons-010320f52fda88b61858.js","component---src-pages-404-tsx-40df00c8cace58695efb.js"],"component---src-pages-debug-redirects-tsx":["styles.f0b7b84ad0e8a4f245ea.css","c16184b3-1b49df0b1e7d5219011e.js","2cca2479-cf64efe86dbcca44f9f3.js","commons-010320f52fda88b61858.js","component---src-pages-debug-redirects-tsx-95780ce6e63631f2bd11.js"],"component---src-pages-index-tsx":["styles.f0b7b84ad0e8a4f245ea.css","c16184b3-1b49df0b1e7d5219011e.js","2cca2479-cf64efe86dbcca44f9f3.js","75fc9c18-f71279181183774e258e.js","commons-010320f52fda88b61858.js","083fcf652479e2899573de2cb0d9a486b1ed95d5-47c0f2d790faa87edb72.js","b95451f0b310186e909e788b848f8c20c7036633-47a36eb907b3ba1da6a0.js","component---src-pages-index-tsx-bcc7c3f8eff56e47a167.js"],"component---src-pages-locations-tsx":["styles.f0b7b84ad0e8a4f245ea.css","c16184b3-1b49df0b1e7d5219011e.js","2cca2479-cf64efe86dbcca44f9f3.js","commons-010320f52fda88b61858.js","083fcf652479e2899573de2cb0d9a486b1ed95d5-47c0f2d790faa87edb72.js","component---src-pages-locations-tsx-2b27ecd750548e08c6e6.js"],"component---src-pages-posters-tsx":["styles.f0b7b84ad0e8a4f245ea.css","c16184b3-1b49df0b1e7d5219011e.js","2cca2479-cf64efe86dbcca44f9f3.js","commons-010320f52fda88b61858.js","component---src-pages-posters-tsx-bad2ab9bb98aefe9f149.js"],"component---src-pages-speakers-tsx":["styles.f0b7b84ad0e8a4f245ea.css","c16184b3-1b49df0b1e7d5219011e.js","2cca2479-cf64efe86dbcca44f9f3.js","commons-010320f52fda88b61858.js","083fcf652479e2899573de2cb0d9a486b1ed95d5-47c0f2d790faa87edb72.js","component---src-pages-speakers-tsx-c309584ed597fba12705.js"],"component---src-pages-tags-tsx":["styles.f0b7b84ad0e8a4f245ea.css","c16184b3-1b49df0b1e7d5219011e.js","2cca2479-cf64efe86dbcca44f9f3.js","75fc9c18-f71279181183774e258e.js","commons-010320f52fda88b61858.js","083fcf652479e2899573de2cb0d9a486b1ed95d5-47c0f2d790faa87edb72.js","component---src-pages-tags-tsx-de6815ace04d21511f1e.js"],"component---src-pages-talks-tsx":["styles.f0b7b84ad0e8a4f245ea.css","c16184b3-1b49df0b1e7d5219011e.js","2cca2479-cf64efe86dbcca44f9f3.js","75fc9c18-f71279181183774e258e.js","commons-010320f52fda88b61858.js","083fcf652479e2899573de2cb0d9a486b1ed95d5-47c0f2d790faa87edb72.js","component---src-pages-talks-tsx-6c74cdbede6dcb5bf616.js"],"component---src-pages-unterstuetzer-tsx":["styles.f0b7b84ad0e8a4f245ea.css","c16184b3-1b49df0b1e7d5219011e.js","2cca2479-cf64efe86dbcca44f9f3.js","commons-010320f52fda88b61858.js","component---src-pages-unterstuetzer-tsx-6c7946d35d5deec320db.js"],"component---src-templates-location-page-tsx":["styles.f0b7b84ad0e8a4f245ea.css","c16184b3-1b49df0b1e7d5219011e.js","2cca2479-cf64efe86dbcca44f9f3.js","commons-010320f52fda88b61858.js","component---src-templates-location-page-tsx-66f99d488944fe4e5e5a.js"],"component---src-templates-speaker-page-tsx":["styles.f0b7b84ad0e8a4f245ea.css","c16184b3-1b49df0b1e7d5219011e.js","2cca2479-cf64efe86dbcca44f9f3.js","commons-010320f52fda88b61858.js","component---src-templates-speaker-page-tsx-2b70a93379a65ecad731.js"],"component---src-templates-static-page-tsx":["styles.f0b7b84ad0e8a4f245ea.css","c16184b3-1b49df0b1e7d5219011e.js","2cca2479-cf64efe86dbcca44f9f3.js","commons-010320f52fda88b61858.js","component---src-templates-static-page-tsx-7e013f4f0cc0eabd4a50.js"],"component---src-templates-talk-page-tsx":["styles.f0b7b84ad0e8a4f245ea.css","c16184b3-1b49df0b1e7d5219011e.js","2cca2479-cf64efe86dbcca44f9f3.js","75fc9c18-f71279181183774e258e.js","commons-010320f52fda88b61858.js","083fcf652479e2899573de2cb0d9a486b1ed95d5-47c0f2d790faa87edb72.js","b95451f0b310186e909e788b848f8c20c7036633-47a36eb907b3ba1da6a0.js","component---src-templates-talk-page-tsx-ab69b6140103e09d919e.js"]},"childAssetsByChunkName":{}} \ No newline at end of file