CINXE.COM
A Master Metric Predicting Lifespan
<!DOCTYPE html> <html lang="en"> <head> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <!-- OneTrust Cookies Consent Notice start for contest.techbriefs.com --> <script src="https://cdn-ukwest.onetrust.com/scripttemplates/otSDKStub.js" type="text/javascript" charset="UTF-8" data-domain-script="64457799-0d46-4cbd-b1bc-b931e8f8df9a" tb-donotmove></script> <script type="text/javascript" tb-donotmove> function OptanonWrapper() { } </script> <!-- OneTrust Cookies Consent Notice end for contest.techbriefs.com --> <link rel="preconnect" href="https://cdnjs.cloudflare.com/"> <link rel="preconnect" href="https://fonts.gstatic.com/"> <link rel="preconnect" href="https://fonts.googleapis.com/"> <link rel="preconnect" href="https://res.cloudinary.com/"> <link rel="preconnect" href="https://kit.fontawesome.com/"> <link rel="preconnect" href="https://kit-pro.fontawesome.com/"> <link rel="preconnect" href="https://www.googletagmanager.com/"> <link rel="preconnect" href="https://www.googletagservices.com/"> <link rel="preconnect" href="https://www.google-analytics.com/"> <link rel="preconnect" href="https://cdn.shareaholic.net"> <link rel="preconnect" href="https://olytics.omeda.com"> <link rel="preconnect" href="https://securepubads.g.doubleclick.net/"> <link rel="preconnect" href="https://px.ads.linkedin.com"> <link rel="preconnect" href="https://snap.licdn.com"> <link rel="preconnect" href="https://cdn-ukwest.onetrust.com"> <link rel="preconnect" href="https://agent.extrawatch.com"> <link rel="preload" as="style" href="/templates/ctf_2019/css/template.min.css?t=1716788610" integrity="sha512-F9gZzNqGLMtFzYq2oxq8kTyzLIjCuSsA2lb2mTTPvqkKnEZ0oqTEpujAJ5zywetxQT4izs4tIjAWmpw/QYCXPQ==" crossorigin="anonymous" referrerpolicy="no-referrer"/> <link rel="preload" as="script" href="https://cdnjs.cloudflare.com/ajax/libs/cloudinary-core/2.13.1/cloudinary-core-shrinkwrap.min.js" integrity="sha512-stp48jOOmT4TXnB4bMJ0rlcR7XagE92cqr7pEb+oFQox6qNSyKiN31GajDsg5VVn+HgM5mhOZinSRXowsRmgPg==" crossorigin="anonymous" referrerpolicy="no-referrer"/> <link rel="preload" as="script" href="https://kit.fontawesome.com/796c614b26.js" crossorigin="anonymous" referrerpolicy="no-referrer"/> <link rel="preload" as="script" href="https://cdnjs.cloudflare.com/ajax/libs/masonry/4.2.2/masonry.pkgd.min.js" integrity="sha512-JRlcvSZAXT8+5SQQAvklXGJuxXTouyq8oIMaYERZQasB8SBDHZaUbeASsJWpk0UUrf89DP3/aefPPrlMR1h1yQ==" crossorigin="anonymous" referrerpolicy="no-referrer"/> <link rel="preload" as="script" href="https://cdnjs.cloudflare.com/ajax/libs/lazysizes/5.3.2/lazysizes.min.js" integrity="sha512-q583ppKrCRc7N5O0n2nzUiJ+suUv7Et1JGels4bXOaMFQcamPk9HjdUknZuuFjBNs7tsMuadge5k9RzdmO+1GQ==" crossorigin="anonymous" referrerpolicy="no-referrer"/> <link rel="preload" as="script" href="https://cdnjs.cloudflare.com/ajax/libs/lazysizes/5.3.2/plugins/print/ls.print.min.js" integrity="sha512-tY3D/iSWSdQE2NSLW/mRWQd/bvHAGjyCLRwSd23sqNbbgVnUaah2t+ZpX7hdBOskZ7PqYvwe4E+qxNARGojJGQ==" crossorigin="anonymous" referrerpolicy="no-referrer"/> <link rel="preload" as="script" href="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js" integrity="sha512-v2CJ7UaYy4JwqLDIrZUI/4hqeoQieOmAZNXBeQyjo21dadnwR+8ZaIJVT8EE2iyI61OV8e6M8PP2/4hpQINQ/g==" crossorigin="anonymous" referrerpolicy="no-referrer"/> <link rel="preload" as="script" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap/5.2.3/js/bootstrap.bundle.min.js" integrity="sha512-i9cEfJwUwViEPFKdC1enz4ZRGBj8YQo6QByFTF92YXHi7waCqyexvRD75S5NVTsSiTv7rKWqG9Y5eFxmRsOn0A==" crossorigin="anonymous" referrerpolicy="no-referrer"/> <link rel="preload" as="script" href="https://cdnjs.cloudflare.com/ajax/libs/limonte-sweetalert2/11.14.5/sweetalert2.all.min.js" integrity="sha512-m4zOGknNg3h+mK09EizkXi9Nf7B3zwsN9ow+YkYIPZoA6iX2vSzLezg4FnW0Q6Z1CPaJdwgUFQ3WSAUC4E/5Hg==" crossorigin="anonymous" referrerpolicy="no-referrer"/> <link rel="preload" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.14.0-beta3/css/bootstrap-select.min.css" integrity="sha512-g2SduJKxa4Lbn3GW+Q7rNz+pKP9AWMR++Ta8fgwsZRCUsawjPvF/BxSMkGS61VsR9yinGoEgrHPGPn2mrj8+4w==" crossorigin="anonymous" referrerpolicy="no-referrer"/> <link rel="preload" as="script" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.14.0-beta3/js/bootstrap-select.min.js" integrity="sha512-yrOmjPdp8qH8hgLfWpSFhC/+R9Cj9USL8uJxYIveJZGAiedxyIxwNw4RsLDlcjNlIRR4kkHaDHSmNHAkxFTmgg==" crossorigin="anonymous" referrerpolicy="no-referrer"/> <meta charset="utf-8"> <meta name="robots" content="index, follow"> <meta name="author" content="Jess Goodman"> <meta name="page_title" content="A Master Metric Predicting Lifespan"> <meta name="keywords" content="Tech Briefs, Design Engineering, Technology Transfer, electronics, semiconductors, ICs, sensors, test & measurement, data acquisition, photonics, materials, computer software, mechanics, mechanical components, machinery, automation, manufacturing, fabrication, prototyping, mathematics, information sciences, life sciences, motion control, imaging"> <meta name="description" content="The Create the Future Design Contest was launched in 2002 by the publishers of NASA Tech Briefs magazine to help stimulate and reward engineering innovation. Th"> <title>A Master Metric Predicting Lifespan</title> <link href="https://contest.techbriefs.com/2023/entries/medical/12205" rel="canonical"> <style> /*! inlined from /media/plg_system_webauthn/css/button.min.css by ntb_minifier */ @charset "UTF-8"; button[class*="plg_system_webauthn_login_button"] { max-height: 3rem; padding: .25rem; } button[class*="plg_system_webauthn_login_button"] span[class*="icon"] { text-align: center; vertical-align: sub; width: 1em; font-size: 1.25em; display: inline-block; } button[class*="plg_system_webauthn_login_button"] img[class*="icon"] { text-align: center; vertical-align: middle; height: 2.5rem; padding: 0 .25em 2px; font-size: 1.5em; display: inline-block; } button[class*="plg_system_webauthn_login_button"] span[class*="icon"]:not(:last-child) { margin-inline-end: .5em; } /* end /media/plg_system_webauthn/css/button.min.css */ </style> <link href="/plugins/content/jw_disqus/jw_disqus/tmpl/css/template.min.css?v=3.7.0" rel="stylesheet" /> <style>/** * Critical CSS created by criticalcss.com * file: /css/critical/article-entry.css' * createdAt : 2024-05-27T05:46:40.000Z * resultStatus : GOOD * originalSize : 559615 * size : 0 * validationStatus : GOOD */ @charset "UTF-8";#startOfPage{visibility:hidden}@font-face{font-family:Cabin;font-style:normal;font-weight:400;font-stretch:normal;font-display:swap;src:url(https://fonts.gstatic.com/s/cabin/v27/u-4X0qWljRw-PfU81xCKCpdpbgZJl6XFpfEd7eA9BIxxkV2EH7ilwg.ttf) format('truetype')}@font-face{font-family:Cabin;font-style:normal;font-weight:700;font-stretch:normal;font-display:swap;src:url(https://fonts.gstatic.com/s/cabin/v27/u-4X0qWljRw-PfU81xCKCpdpbgZJl6XFpfEd7eA9BIxxkbqDH7ilwg.ttf) format('truetype')}@font-face{font-family:'Exo 2';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/exo2/v21/7cH1v4okm5zmbvwkAx_sfcEuiD8jvvKsN9C6.ttf) format('truetype')}@font-face{font-family:'Exo 2';font-style:normal;font-weight:600;font-display:swap;src:url(https://fonts.gstatic.com/s/exo2/v21/7cH1v4okm5zmbvwkAx_sfcEuiD8jYPWsN9C6.ttf) format('truetype')}:root{--bs-blue:#144c89;--bs-indigo:#6610f2;--bs-purple:#6f42c1;--bs-pink:#b9519f;--bs-red:#ec1f27;--bs-orange:#f79420;--bs-yellow:#f3ec19;--bs-green:#69bd45;--bs-teal:#6ecddd;--bs-cyan:#00abe9;--bs-white:#ffffff;--bs-gray:#6c757d;--bs-gray-dark:#343a40;--bs-gray-100:#f8f9fa;--bs-gray-200:#e9ecef;--bs-gray-300:#dee2e6;--bs-gray-400:#ced4da;--bs-gray-500:#adb5bd;--bs-gray-600:#6c757d;--bs-gray-700:#495057;--bs-gray-800:#343a40;--bs-gray-900:#212529;--bs-inverse:#000000;--bs-navbar:#adb5bd;--bs-navitem:#ffffff;--bs-primary-light:#144c89;--bs-error:#ec1f27;--bs-primary:#144c89;--bs-secondary:#00abe9;--bs-success:#69bd45;--bs-info:#00abe9;--bs-warning:#f3ec19;--bs-danger:#ec1f27;--bs-light:#f8f9fa;--bs-dark:#212529;--bs-inverse-rgb:0,0,0;--bs-navbar-rgb:173,181,189;--bs-navitem-rgb:255,255,255;--bs-primary-light-rgb:20,76,137;--bs-error-rgb:236,31,39;--bs-primary-rgb:20,76,137;--bs-secondary-rgb:0,171,233;--bs-success-rgb:105,189,69;--bs-info-rgb:0,171,233;--bs-warning-rgb:243,236,25;--bs-danger-rgb:236,31,39;--bs-light-rgb:248,249,250;--bs-dark-rgb:33,37,41;--bs-white-rgb:255,255,255;--bs-black-rgb:0,0,0;--bs-body-color-rgb:33,37,41;--bs-body-bg-rgb:255,255,255;--bs-font-sans-serif:"Cabin",sans-serif;--bs-font-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--bs-gradient:linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));--bs-body-font-family:Cabin,sans-serif;--bs-body-font-size:1rem;--bs-body-font-weight:400;--bs-body-line-height:1.5;--bs-body-color:#212529;--bs-body-bg:#ffffff;--bs-border-width:1px;--bs-border-style:solid;--bs-border-color:#dee2e6;--bs-border-color-translucent:rgba(0, 0, 0, 0.175);--bs-border-radius:0.25rem;--bs-border-radius-sm:0.2rem;--bs-border-radius-lg:0.3rem;--bs-border-radius-xl:1rem;--bs-border-radius-2xl:2rem;--bs-border-radius-pill:50rem;--bs-link-color:#144c89;--bs-link-hover-color:#0a2746;--bs-code-color:#b9519f;--bs-highlight-bg:#fdfbd1}*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:var(--bs-body-font-family);font-size:var(--bs-body-font-size);font-weight:var(--bs-body-font-weight);line-height:var(--bs-body-line-height);color:var(--bs-body-color);text-align:var(--bs-body-text-align);background-color:var(--bs-body-bg);-webkit-text-size-adjust:100%}hr{margin:1rem 0;color:inherit;border:0;border-top:1px solid #495057;opacity:.25}h2,h3,h4,h5{margin-top:0;margin-bottom:.5rem;font-family:"Exo 2",sans-serif;font-weight:600;line-height:1.2}h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){h2{font-size:2rem}}h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){h3{font-size:1.75rem}}h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){h4{font-size:1.5rem}}h5{font-size:1.25rem}p{margin-top:0}ol,ul{padding-left:2rem;margin-top:0}ol,p,ul{margin-bottom:1rem}b{font-weight:bolder}a{color:var(--bs-link-color);text-decoration:none}a:not([href]):not([class]){color:inherit;text-decoration:none}img,svg{vertical-align:middle}button{border-radius:0;text-transform:none}button,input{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}[type=button],[type=submit],button{-webkit-appearance:button}::-moz-focus-inner{padding:0;border-style:none}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit;-webkit-appearance:button}iframe{border:0}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}img{max-width:100%;height:auto}.container,.container-fluid,.container-xl{--bs-gutter-x:1.5rem;--bs-gutter-y:0;width:100%;padding-right:calc(var(--bs-gutter-x)*.5);padding-left:calc(var(--bs-gutter-x)*.5);margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container,.container-xl{max-width:1140px}}@media (min-width:1400px){.container,.container-xl{max-width:1320px}}.row{--bs-gutter-x:1.5rem;--bs-gutter-y:0;display:flex;flex-wrap:wrap;margin-top:calc(-1*var(--bs-gutter-y));margin-right:calc(-.5*var(--bs-gutter-x));margin-left:calc(-.5*var(--bs-gutter-x))}.row>*{flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--bs-gutter-x)*.5);padding-left:calc(var(--bs-gutter-x)*.5);margin-top:var(--bs-gutter-y)}.col{flex:1 0 0%}.col-2{flex:0 0 auto;width:16.66666667%}.col-4{flex:0 0 auto;width:33.33333333%}.col-6{flex:0 0 auto;width:50%}.col-8{flex:0 0 auto;width:66.66666667%}.offset-2{margin-left:16.66666667%}@media (min-width:576px){.col-sm-1{flex:0 0 auto;width:8.33333333%}.col-sm-5{flex:0 0 auto;width:41.66666667%}.col-sm-6{flex:0 0 auto;width:50%}}@media (min-width:768px){.col-md-1,.col-md-2{flex:0 0 auto;width:8.33333333%}.col-md-2{width:16.66666667%}.col-md-4{flex:0 0 auto;width:33.33333333%}.col-md-5{flex:0 0 auto;width:41.66666667%}.col-md-7{flex:0 0 auto;width:58.33333333%}}@media (min-width:992px){.col-lg-2{flex:0 0 auto;width:16.66666667%}.col-lg-4{flex:0 0 auto;width:33.33333333%}.col-lg-8{flex:0 0 auto;width:66.66666667%}}@media (min-width:1200px){.col-xl-2{flex:0 0 auto;width:16.66666667%}.col-xl-4{flex:0 0 auto;width:33.33333333%}}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:.25rem}.form-control::-webkit-date-and-time-value{height:1.5em}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.form-control{position:relative;flex:1 1 auto;width:1%;min-width:0}.input-group .btn{position:relative;z-index:2}.input-group:not(.has-validation)>:not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){margin-left:-1px;border-top-left-radius:0;border-bottom-left-radius:0}.btn{color:var(--bs-btn-color);background-color:var(--bs-btn-bg);--bs-btn-padding-x:0.75rem;--bs-btn-padding-y:0.375rem;--bs-btn-font-size:1rem;--bs-btn-font-weight:400;--bs-btn-line-height:1.5;--bs-btn-color:#212529;--bs-btn-bg:transparent;--bs-btn-border-width:1px;--bs-btn-border-color:transparent;--bs-btn-border-radius:0.25rem;--bs-btn-hover-border-color:transparent;--bs-btn-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.15),0 1px 1px rgba(0, 0, 0, 0.075);--bs-btn-disabled-opacity:0.65;--bs-btn-focus-box-shadow:0 0 0 0.25rem rgba(var(--bs-btn-focus-shadow-rgb), .5);display:inline-block;padding:var(--bs-btn-padding-y) var(--bs-btn-padding-x);font-family:var(--bs-btn-font-family);font-size:var(--bs-btn-font-size);font-weight:var(--bs-btn-font-weight);line-height:var(--bs-btn-line-height);text-align:center;vertical-align:middle;border:var(--bs-btn-border-width) solid var(--bs-btn-border-color);border-radius:var(--bs-btn-border-radius);background-image:var(--bs-gradient)}.btn-primary{--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-color:#ffffff;--bs-btn-bg:#144c89;--bs-btn-border-color:#144c89;--bs-btn-hover-color:#ffffff;--bs-btn-hover-bg:#114174;--bs-btn-hover-border-color:#103d6e;--bs-btn-focus-shadow-rgb:55,103,155;--bs-btn-active-color:#ffffff;--bs-btn-active-bg:#103d6e;--bs-btn-active-border-color:#0f3967;--bs-btn-disabled-color:#ffffff;--bs-btn-disabled-bg:#144c89;--bs-btn-disabled-border-color:#144c89}.btn-secondary{--bs-btn-color:#000000;--bs-btn-bg:#00abe9;--bs-btn-border-color:#00abe9;--bs-btn-hover-color:#000000;--bs-btn-hover-bg:#26b8ec;--bs-btn-hover-border-color:#1ab3eb;--bs-btn-focus-shadow-rgb:0,145,198;--bs-btn-active-color:#000000;--bs-btn-active-bg:#33bced;--bs-btn-active-border-color:#1ab3eb;--bs-btn-disabled-color:#000000;--bs-btn-disabled-bg:#00abe9;--bs-btn-disabled-border-color:#00abe9;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125)}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.nav{--bs-nav-link-padding-x:0.7rem;--bs-nav-link-padding-y:0.7rem;--bs-nav-link-color:var(--bs-link-color);--bs-nav-link-hover-color:var(--bs-link-hover-color);--bs-nav-link-disabled-color:#6c757d;display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:var(--bs-nav-link-padding-y) var(--bs-nav-link-padding-x);font-size:var(--bs-nav-link-font-size);font-weight:var(--bs-nav-link-font-weight);color:var(--bs-nav-link-color)}.navbar{--bs-navbar-padding-x:0;--bs-navbar-padding-y:0.5rem;--bs-navbar-color:rgba(0, 0, 0, 0.55);--bs-navbar-hover-color:rgba(0, 0, 0, 0.7);--bs-navbar-disabled-color:rgba(0, 0, 0, 0.3);--bs-navbar-active-color:rgba(0, 0, 0, 0.9);--bs-navbar-brand-padding-y:0.25rem;--bs-navbar-brand-margin-end:1rem;--bs-navbar-brand-font-size:1.25rem;--bs-navbar-brand-color:rgba(0, 0, 0, 0.9);--bs-navbar-brand-hover-color:rgba(0, 0, 0, 0.9);--bs-navbar-nav-link-padding-x:0.5rem;--bs-navbar-toggler-padding-y:0.25rem;--bs-navbar-toggler-padding-x:0.75rem;--bs-navbar-toggler-font-size:1.25rem;--bs-navbar-toggler-icon-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e");--bs-navbar-toggler-border-color:rgba(0, 0, 0, 0.1);--bs-navbar-toggler-border-radius:0.25rem;--bs-navbar-toggler-focus-width:0.25rem;position:relative;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;padding:var(--bs-navbar-padding-y) var(--bs-navbar-padding-x);background-image:var(--bs-gradient)}.navbar>.container-xl{display:flex;flex-wrap:inherit;align-items:center;justify-content:space-between}.navbar-nav{--bs-nav-link-padding-x:0;--bs-nav-link-padding-y:0.7rem;--bs-nav-link-color:var(--bs-navbar-color);--bs-nav-link-hover-color:var(--bs-navbar-hover-color);--bs-nav-link-disabled-color:var(--bs-navbar-disabled-color);display:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:var(--bs-navbar-toggler-padding-y) var(--bs-navbar-toggler-padding-x);font-size:var(--bs-navbar-toggler-font-size);line-height:1;color:var(--bs-navbar-color);background-color:transparent;border:var(--bs-border-width) solid var(--bs-navbar-toggler-border-color);border-radius:var(--bs-navbar-toggler-border-radius)}@media (min-width:576px){.navbar-expand-sm{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-sm .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}.navbar-dark{--bs-navbar-color:rgba(255, 255, 255, 0.85);--bs-navbar-hover-color:rgba(255, 255, 255, 0.5);--bs-navbar-disabled-color:rgba(255, 255, 255, 0.25);--bs-navbar-active-color:#ffffff;--bs-navbar-brand-color:#ffffff;--bs-navbar-brand-hover-color:#ffffff;--bs-navbar-toggler-border-color:transparent;--bs-navbar-toggler-icon-bg:none}.card{--bs-card-spacer-y:1rem;--bs-card-spacer-x:1rem;--bs-card-title-spacer-y:0.5rem;--bs-card-border-width:1px;--bs-card-border-color:var(--bs-border-color-translucent);--bs-card-border-radius:0.25rem;--bs-card-inner-border-radius:calc(0.25rem - 1px);--bs-card-cap-padding-y:0.5rem;--bs-card-cap-padding-x:1rem;--bs-card-cap-bg:rgba(0, 0, 0, 0.03);--bs-card-bg:#ffffff;--bs-card-img-overlay-padding:1rem;--bs-card-group-margin:0.75rem;position:relative;display:flex;flex-direction:column;min-width:0;height:var(--bs-card-height);word-wrap:break-word;background-color:var(--bs-card-bg);background-clip:border-box;border:var(--bs-card-border-width) solid var(--bs-card-border-color);border-radius:var(--bs-card-border-radius)}.card-body{flex:1 1 auto;padding:var(--bs-card-spacer-y) var(--bs-card-spacer-x);color:var(--bs-card-color)}.card-header{padding:var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);margin-bottom:0;color:var(--bs-card-cap-color);background-color:var(--bs-card-cap-bg);border-bottom:var(--bs-card-border-width) solid var(--bs-card-border-color)}.card-header:first-child{border-radius:var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius) 0 0}.breadcrumb{display:flex;list-style:none;--bs-breadcrumb-padding-x:0;--bs-breadcrumb-padding-y:0.5rem;--bs-breadcrumb-margin-bottom:0;--bs-breadcrumb-font-size:0.875rem;--bs-breadcrumb-bg:transparent;--bs-breadcrumb-divider-color:#adb5bd;--bs-breadcrumb-item-padding-x:0.5rem;--bs-breadcrumb-item-active-color:#adb5bd;flex-wrap:wrap;padding:var(--bs-breadcrumb-padding-y) var(--bs-breadcrumb-padding-x);margin-bottom:var(--bs-breadcrumb-margin-bottom);font-size:var(--bs-breadcrumb-font-size);background-color:var(--bs-breadcrumb-bg);border-radius:var(--bs-breadcrumb-border-radius)}.breadcrumb-item+.breadcrumb-item{padding-left:var(--bs-breadcrumb-item-padding-x)}.breadcrumb-item+.breadcrumb-item::before{float:left;padding-right:var(--bs-breadcrumb-item-padding-x);color:var(--bs-breadcrumb-divider-color);content:var(--bs-breadcrumb-divider, "|")}.breadcrumb-item.active{color:var(--bs-breadcrumb-item-active-color)}.badge{--bs-badge-padding-x:0.65em;--bs-badge-padding-y:0.35em;--bs-badge-font-size:0.75em;--bs-badge-font-weight:700;--bs-badge-color:#ffffff;--bs-badge-border-radius:0.25rem;display:inline-block;padding:var(--bs-badge-padding-y) var(--bs-badge-padding-x);font-size:var(--bs-badge-font-size);font-weight:var(--bs-badge-font-weight);line-height:1;color:var(--bs-badge-color);text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:var(--bs-badge-border-radius);background-image:var(--bs-gradient)}.alert{--bs-alert-bg:transparent;--bs-alert-padding-x:1rem;--bs-alert-padding-y:1rem;--bs-alert-margin-bottom:1rem;--bs-alert-color:inherit;--bs-alert-border-color:transparent;--bs-alert-border:1px solid var(--bs-alert-border-color);--bs-alert-border-radius:0.25rem;position:relative;padding:var(--bs-alert-padding-y) var(--bs-alert-padding-x);margin-bottom:var(--bs-alert-margin-bottom);color:var(--bs-alert-color);background-color:var(--bs-alert-bg);border:var(--bs-alert-border);border-radius:var(--bs-alert-border-radius)}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:3rem}.alert-dismissible .btn-close{position:absolute;top:0;right:0;z-index:2;padding:1.25rem 1rem}.alert-inverse{--bs-alert-color:black;--bs-alert-bg:#cccccc;--bs-alert-border-color:#b3b3b3}.alert-inverse .alert-link{color:#000}.alert-inverse,.alert-navbar,.alert-navitem{background-image:var(--bs-gradient)}.alert-navbar{--bs-alert-color:#686d71;--bs-alert-bg:#eff0f2;--bs-alert-border-color:#e6e9eb}.alert-navbar .alert-link{color:#53575a}.alert-navitem{--bs-alert-color:#666666;--bs-alert-bg:white;--bs-alert-border-color:white}.alert-navitem .alert-link{color:#525252}.alert-cdnjs,.alert-cleanup,.alert-primary,.alert-primary-light{--bs-alert-color:#0c2e52;--bs-alert-bg:#d0dbe7;--bs-alert-border-color:#b9c9dc;background-image:var(--bs-gradient)}.alert-cdnjs .alert-link,.alert-cleanup .alert-link,.alert-primary .alert-link,.alert-primary-light .alert-link{color:#0a2542}.alert-admin,.alert-cloudinary,.alert-criticalcss,.alert-secondary{--bs-alert-color:#00678c;--bs-alert-bg:#cceefb;--bs-alert-border-color:#b3e6f8;background-image:var(--bs-gradient)}.alert-admin .alert-link,.alert-cloudinary .alert-link,.alert-criticalcss .alert-link,.alert-secondary .alert-link{color:#005270}.alert-success{--bs-alert-color:#3f7129;--bs-alert-bg:#e1f2da;--bs-alert-border-color:#d2ebc7;background-image:var(--bs-gradient)}.alert-success .alert-link{color:#325a21}.alert-cache,.alert-info{--bs-alert-color:#00678c;--bs-alert-bg:#cceefb;--bs-alert-border-color:#b3e6f8;background-image:var(--bs-gradient)}.alert-cache .alert-link,.alert-info .alert-link{color:#005270}.alert-notice,.alert-warning{--bs-alert-color:#615e0a;--bs-alert-bg:#fdfbd1;--bs-alert-border-color:#fbf9ba;background-image:var(--bs-gradient)}.alert-notice .alert-link,.alert-warning .alert-link{color:#4e4b08}.alert-danger,.alert-error{--bs-alert-color:#8e1317;--bs-alert-bg:#fbd2d4;--bs-alert-border-color:#f9bcbe}.alert-danger .alert-link,.alert-error .alert-link{color:#720f12}.alert-danger,.alert-dark,.alert-error,.alert-light{background-image:var(--bs-gradient)}.alert-light{--bs-alert-color:#636464;--bs-alert-bg:#fefefe;--bs-alert-border-color:#fdfdfe}.alert-light .alert-link{color:#4f5050}.alert-dark{--bs-alert-color:#141619;--bs-alert-bg:#d3d3d4;--bs-alert-border-color:#bcbebf}.alert-dark .alert-link{color:#101214}.list-group{--bs-list-group-color:#212529;--bs-list-group-bg:#ffffff;--bs-list-group-border-color:rgba(0, 0, 0, 0.125);--bs-list-group-border-width:1px;--bs-list-group-border-radius:0.25rem;--bs-list-group-item-padding-x:1rem;--bs-list-group-item-padding-y:0.5rem;--bs-list-group-action-color:#495057;--bs-list-group-action-hover-color:#495057;--bs-list-group-action-hover-bg:#f8f9fa;--bs-list-group-action-active-color:#212529;--bs-list-group-action-active-bg:#e9ecef;--bs-list-group-disabled-color:#6c757d;--bs-list-group-disabled-bg:#ffffff;--bs-list-group-active-color:#ffffff;--bs-list-group-active-bg:#144c89;--bs-list-group-active-border-color:#144c89;display:flex;flex-direction:column;padding-left:0;margin-bottom:0;border-radius:var(--bs-list-group-border-radius)}.list-group-item{position:relative;display:block;padding:var(--bs-list-group-item-padding-y) var(--bs-list-group-item-padding-x);color:var(--bs-list-group-color);background-color:var(--bs-list-group-bg);border:var(--bs-list-group-border-width) solid var(--bs-list-group-border-color)}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.list-group-item+.list-group-item{border-top-width:0}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 var(--bs-list-group-border-width)}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.modal{--bs-modal-zindex:1055;--bs-modal-width:500px;--bs-modal-padding:1rem;--bs-modal-margin:0.5rem;--bs-modal-bg:#ffffff;--bs-modal-border-color:var(--bs-border-color-translucent);--bs-modal-border-width:1px;--bs-modal-border-radius:0.3rem;--bs-modal-box-shadow:0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);--bs-modal-inner-border-radius:calc(0.3rem - 1px);--bs-modal-header-padding-x:1rem;--bs-modal-header-padding-y:1rem;--bs-modal-header-padding:1rem 1rem;--bs-modal-header-border-color:var(--bs-border-color);--bs-modal-header-border-width:1px;--bs-modal-title-line-height:1.5;--bs-modal-footer-gap:0.5rem;--bs-modal-footer-border-color:var(--bs-border-color);--bs-modal-footer-border-width:1px;position:fixed;top:0;left:0;z-index:var(--bs-modal-zindex);display:none;width:100%;height:100%;overflow-x:hidden;overflow-y:auto;outline:0}.modal-dialog{position:relative;width:auto;margin:var(--bs-modal-margin)}.modal.fade .modal-dialog{transform:translate(0,-50px)}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - var(--bs-modal-margin)*2)}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;color:var(--bs-modal-color);background-color:var(--bs-modal-bg);background-clip:padding-box;border:var(--bs-modal-border-width) solid var(--bs-modal-border-color);border-radius:var(--bs-modal-border-radius);outline:0}.modal-header{display:flex;flex-shrink:0;align-items:center;justify-content:space-between;padding:var(--bs-modal-header-padding);border-bottom:var(--bs-modal-header-border-width) solid var(--bs-modal-header-border-color);border-top-left-radius:var(--bs-modal-inner-border-radius);border-top-right-radius:var(--bs-modal-inner-border-radius)}.modal-title{margin-bottom:0;line-height:var(--bs-modal-title-line-height)}.modal-body{position:relative;flex:1 1 auto;padding:var(--bs-modal-padding)}@media (min-width:576px){.modal{--bs-modal-margin:1.75rem;--bs-modal-box-shadow:0 0.5rem 1rem rgba(0, 0, 0, 0.15)}.modal-dialog{max-width:var(--bs-modal-width);margin-right:auto;margin-left:auto}.modal-sm{--bs-modal-width:300px}}@media (min-width:992px){.modal-xl{--bs-modal-width:800px}}.carousel,.carousel-inner{position:relative}.carousel-inner{width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;backface-visibility:hidden}.carousel-item.active{display:block}.align-top{vertical-align:top!important}.float-end{float:right!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-flex{display:flex!important}.d-none{display:none!important}.position-relative{position:relative!important}.border-top{border-top:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-top-0{border-top:0!important}.border-bottom{border-bottom:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-secondary{--bs-border-opacity:1;border-color:rgba(var(--bs-secondary-rgb),var(--bs-border-opacity))!important}.w-75{width:75%!important}.w-100{width:100%!important}.h-100{height:100%!important}.flex-fill{flex:1 1 auto!important}.flex-column{flex-direction:column!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-nowrap{flex-wrap:nowrap!important}.justify-content-center{justify-content:center!important}.justify-content-around{justify-content:space-around!important}.align-items-end{align-items:flex-end!important}.m-0{margin:0!important}.mx-auto{margin-right:auto!important;margin-left:auto!important}.my-3{margin-top:1rem!important;margin-bottom:1rem!important}.mt-1{margin-top:.25rem!important}.mt-5{margin-top:3rem!important}.me-2{margin-right:.5rem!important}.me-4{margin-right:1.5rem!important}.me-auto{margin-right:auto!important}.mb-0{margin-bottom:0!important}.mb-3{margin-bottom:1rem!important}.ms-3{margin-left:1rem!important}.ms-auto{margin-left:auto!important}.p-0{padding:0!important}.p-1{padding:.25rem!important}.p-3{padding:1rem!important}.px-0{padding-right:0!important;padding-left:0!important}.px-2{padding-right:.5rem!important;padding-left:.5rem!important}.py-0{padding-top:0!important;padding-bottom:0!important}.py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.pt-0{padding-top:0!important}.pt-2{padding-top:.5rem!important}.pt-3{padding-top:1rem!important}.pb-0{padding-bottom:0!important}.text-center{text-align:center!important}.text-uppercase{text-transform:uppercase!important}.text-primary{--bs-text-opacity:1;color:rgba(var(--bs-primary-rgb),var(--bs-text-opacity))!important}.text-secondary{--bs-text-opacity:1;color:rgba(var(--bs-secondary-rgb),var(--bs-text-opacity))!important}.text-white{--bs-text-opacity:1;color:rgba(var(--bs-white-rgb),var(--bs-text-opacity))!important}.bg-navbar{--bs-bg-opacity:1;background-color:rgba(var(--bs-navbar-rgb),var(--bs-bg-opacity))!important}.bg-primary{--bs-bg-opacity:1;background-color:rgba(var(--bs-error-rgb),var(--bs-bg-opacity))!important;background-color:rgba(var(--bs-primary-rgb),var(--bs-bg-opacity))!important}.bg-secondary{--bs-bg-opacity:1;background-color:rgba(var(--bs-secondary-rgb),var(--bs-bg-opacity))!important}.bg-light{--bs-bg-opacity:1;background-color:rgba(var(--bs-danger-rgb),var(--bs-bg-opacity))!important;background-color:rgba(var(--bs-light-rgb),var(--bs-bg-opacity))!important}.nav-link{font-family:"Exo 2",sans-serif;font-weight:600;font-size:16px;text-transform:uppercase}.menu-top-nav .nav-bottom .nav-item .nav-link{font-size:11px;border-left:1px solid #fff;height:100%;letter-spacing:.1em}@media (max-width:1000px){.menu-top-nav .nav-bottom .nav-item .nav-link{letter-spacing:.05em;padding-left:.45rem;padding-right:.45rem}}@media (max-width:925px){.menu-top-nav .nav-bottom .nav-item .nav-link{letter-spacing:.025em;padding-left:.4rem;padding-right:.4rem}}@media (max-width:875px){.menu-top-nav .nav-bottom .nav-item .nav-link{letter-spacing:.01em;padding-left:.35rem;padding-right:.35rem}}@media (max-width:850px){.menu-top-nav .nav-bottom .nav-item .nav-link{padding-left:.25rem;padding-right:.25rem}}.menu-top-nav .nav-bottom li:last-child{border-right:1px solid #fff}.navbar{font-family:Cabin,sans-serif;font-weight:700}.navbar-side{position:fixed;top:0;left:0;border-right:2px solid #495057;overflow-y:scroll;z-index:1000;transform:translateX(-100%);width:100%}@media (min-width:576px){.navbar-side{width:50%}}@media (min-width:768px){.d-md-block{display:block!important}.d-md-flex{display:flex!important}.navbar-side{width:35%}}@media (min-width:1200px){.modal-xl{--bs-modal-width:1140px}.navbar-side{width:28%}}.navbar-side .nav-link{font-size:16px;padding-top:.5rem;padding-bottom:.5rem}.navbar-toggler{padding:.75rem!important}.navbar-toggler-left{position:absolute}.module.card h4{color:#fff;text-transform:uppercase;padding-top:0;padding-bottom:0;margin-top:0;margin-bottom:0;font-weight:400;letter-spacing:.25rem;font-size:1.1rem}.module.card .card-body,.module.card .card-header{padding-top:.25rem;padding-bottom:.25rem}.module.card .card-header{background:#00abe9}.module.card .card-header h4{font-size:1.25rem}.module.card .list-group-item{font-size:1.25rem;font-family:"Exo 2",sans-serif}.module.card .card-body{background:#adb5bd;font-family:Cabin,sans-serif}.entry.card .card-body,.entry.card .list-group-item{color:#6c757d}.entry.card .card-header h2{font-size:1.75rem}.entry.card .card-body img{margin-bottom:.5rem;clear:right;float:right;width:28%}.entry.card .entry-header{font-family:Cabin,sans-serif}.entry.card .card-body h3,.entry.card .list-group-item h3{color:#144c89}.entry.card .card-body{height:unset}.entry.card .card-body p{margin-bottom:1rem;font-size:1.1rem;line-height:1.65}.entry.card .card-body:after{content:none}.entry.card #entry-carousel .carousel-item img{margin:0;padding:0;height:400px;-o-object-fit:contain;object-fit:contain}.alert-message{font-size:smaller}.blur-up{filter:blur(5px)}.overlay{position:fixed;top:0;left:0;right:0;bottom:0;background-color:#000;opacity:.6;z-index:990}nav.header-nav .logolarge{vertical-align:middle;height:150px;max-height:150px}@media (max-width:1199.98px){nav.header-nav .logolarge{max-height:140px}}@media (max-width:991.98px){nav.header-nav .logolarge{max-height:130px}}@media (max-width:767.98px){.navbar{border-bottom:5px solid #adb5bd}nav.header-nav .logolarge{max-height:120px}}@media (max-width:575.98px){nav.header-nav .logolarge{max-height:100px;max-width:100%;padding-left:5px;padding-right:5px}}nav.header-nav .principal-sponsors{max-width:400px;max-height:165px;border-radius:.5rem;background-image:linear-gradient(rgba(20,76,137,.15),rgba(255,255,255,0) 50%,rgba(20,76,137,.15))}@media (max-width:1199.98px){nav.header-nav .principal-sponsors{max-height:155px;max-width:375px}}@media (max-width:991.98px){nav.header-nav .principal-sponsors{max-height:145px;max-width:325px}}nav.header-nav .principal-sponsors-header h3{line-height:.5;font-weight:200;font-size:1.1rem;letter-spacing:.35rem}@media (max-width:1199.98px){nav.header-nav .principal-sponsors-header h3{font-size:1rem;letter-spacing:.35rem}}@media (max-width:991.98px){nav.header-nav .principal-sponsors-header h3{font-size:.9rem;letter-spacing:.3rem}div#login-menu ul{flex-direction:column!important}}@media (max-width:767.98px){nav.header-nav .principal-sponsors{max-height:135px;max-width:280px}nav.header-nav .principal-sponsors-header h3{font-size:.8rem;letter-spacing:.25rem}}@media (max-width:575.98px){nav.header-nav .principal-sponsors{max-height:100px;max-width:40%;padding-left:5px;padding-right:5px}nav.header-nav .principal-sponsors-header h3{font-size:.5rem;letter-spacing:.1rem}}.overlay,.printmessage{display:none}.cls-1{fill:#6fccdd}.cls-2{fill:#fff}.cls-3{fill:#06b0d8}.cls-4{fill:#f79420}.cls-5{fill:#fbb03a}.cls-6{fill:#faed23}.cls-7{fill:#f7ec13}.cls-8{fill:#6abd45}.cls-9{fill:#b9529f}.cls-10{fill:#c1272d}.cls-11{fill:#ec2027}.cls-12{fill:#d2d3d4}: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}.cb_template .alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.cb_template .alert-heading{color:inherit}.cb_template .alert-link{font-weight:700}.cb_template .alert-dismissible{padding-right:4rem}.cb_template .alert-dismissible .close{position:absolute;top:0;right:0;z-index:2;padding:.75rem 1.25rem;color:inherit}.cb_template .alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.cb_template .alert-primary hr{border-top-color:#9fcdff}.cb_template .alert-primary .alert-link{color:#002752}.cb_template .alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.cb_template .alert-secondary hr{border-top-color:#c8cbcf}.cb_template .alert-secondary .alert-link{color:#202326}.cb_template .alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.cb_template .alert-success hr{border-top-color:#b1dfbb}.cb_template .alert-success .alert-link{color:#0b2e13}.cb_template .alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.cb_template .alert-info hr{border-top-color:#abdde5}.cb_template .alert-info .alert-link{color:#062c33}.cb_template .alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.cb_template .alert-warning hr{border-top-color:#ffe8a1}.cb_template .alert-warning .alert-link{color:#533f03}.cb_template .alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.cb_template .alert-danger hr{border-top-color:#f1b0b7}.cb_template .alert-danger .alert-link{color:#491217}.cb_template .alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.cb_template .alert-light hr{border-top-color:#ececf6}.cb_template .alert-light .alert-link{color:#686868}.cb_template .alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.cb_template .alert-dark hr{border-top-color:#b9bbbe}.cb_template .alert-dark .alert-link{color:#040505}</style> <script type="application/json" class="joomla-script-options new">{"joomla.jtext":{"PLG_SYSTEM_WEBAUTHN_ERR_CANNOT_FIND_USERNAME":"Cannot find the username field in the login module. Sorry, Passwordless authentication will not work on this site unless you use a different login module.","PLG_SYSTEM_WEBAUTHN_ERR_EMPTY_USERNAME":"You need to enter your username (but NOT your password) before selecting the Web Authentication login button.","PLG_SYSTEM_WEBAUTHN_ERR_INVALID_USERNAME":"The specified username does not correspond to a user account that has enabled passwordless login on this site."},"system.paths":{"root":"","rootFull":"https:\/\/contest.techbriefs.com\/","base":"","baseFull":"https:\/\/contest.techbriefs.com\/"},"csrf.token":"f45ef576707e1fdcf886f15e026168e7","system.keepalive":{"interval":3600000,"uri":"\/component\/ajax\/?format=json"}}</script> <script type="module"> /*! inlined from /media/vendor/bootstrap/js/toast.min.js by ntb_minifier */ import { e as enableDismissTrigger, d as define$Plugin, B as BaseComponent, E as EventHandler, r as reflow } from './dom.js?5.3.0'; /** * -------------------------------------------------------------------------- * Bootstrap toast.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ /** * Constants */ const NAME = 'toast'; const DATA_KEY = 'bs.toast'; const EVENT_KEY = `.${DATA_KEY}`; const EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`; const EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`; const EVENT_FOCUSIN = `focusin${EVENT_KEY}`; const EVENT_FOCUSOUT = `focusout${EVENT_KEY}`; const EVENT_HIDE = `hide${EVENT_KEY}`; const EVENT_HIDDEN = `hidden${EVENT_KEY}`; const EVENT_SHOW = `show${EVENT_KEY}`; const EVENT_SHOWN = `shown${EVENT_KEY}`; const CLASS_NAME_FADE = 'fade'; const CLASS_NAME_HIDE = 'hide'; // @deprecated - kept here only for backwards compatibility const CLASS_NAME_SHOW = 'show'; const CLASS_NAME_SHOWING = 'showing'; const DefaultType = { animation: 'boolean', autohide: 'boolean', delay: 'number' }; const Default = { animation: true, autohide: true, delay: 5000 }; /** * Class definition */ class Toast extends BaseComponent { constructor(element, config) { super(element, config); this._timeout = null; this._hasMouseInteraction = false; this._hasKeyboardInteraction = false; this._setListeners(); } // Getters static get Default() { return Default; } static get DefaultType() { return DefaultType; } static get NAME() { return NAME; } // Public show() { const showEvent = EventHandler.trigger(this._element, EVENT_SHOW); if (showEvent.defaultPrevented) { return; } this._clearTimeout(); if (this._config.animation) { this._element.classList.add(CLASS_NAME_FADE); } const complete = () => { this._element.classList.remove(CLASS_NAME_SHOWING); EventHandler.trigger(this._element, EVENT_SHOWN); this._maybeScheduleHide(); }; this._element.classList.remove(CLASS_NAME_HIDE); // @deprecated reflow(this._element); this._element.classList.add(CLASS_NAME_SHOW, CLASS_NAME_SHOWING); this._queueCallback(complete, this._element, this._config.animation); } hide() { if (!this.isShown()) { return; } const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE); if (hideEvent.defaultPrevented) { return; } const complete = () => { this._element.classList.add(CLASS_NAME_HIDE); // @deprecated this._element.classList.remove(CLASS_NAME_SHOWING, CLASS_NAME_SHOW); EventHandler.trigger(this._element, EVENT_HIDDEN); }; this._element.classList.add(CLASS_NAME_SHOWING); this._queueCallback(complete, this._element, this._config.animation); } dispose() { this._clearTimeout(); if (this.isShown()) { this._element.classList.remove(CLASS_NAME_SHOW); } super.dispose(); } isShown() { return this._element.classList.contains(CLASS_NAME_SHOW); } // Private _maybeScheduleHide() { if (!this._config.autohide) { return; } if (this._hasMouseInteraction || this._hasKeyboardInteraction) { return; } this._timeout = setTimeout(() => { this.hide(); }, this._config.delay); } _onInteraction(event, isInteracting) { switch (event.type) { case 'mouseover': case 'mouseout': { this._hasMouseInteraction = isInteracting; break; } case 'focusin': case 'focusout': { this._hasKeyboardInteraction = isInteracting; break; } } if (isInteracting) { this._clearTimeout(); return; } const nextElement = event.relatedTarget; if (this._element === nextElement || this._element.contains(nextElement)) { return; } this._maybeScheduleHide(); } _setListeners() { EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true)); EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false)); EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true)); EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false)); } _clearTimeout() { clearTimeout(this._timeout); this._timeout = null; } // Static static $Interface(config) { return this.each(function () { const data = Toast.getOrCreateInstance(this, config); if (typeof config === 'string') { if (typeof data[config] === 'undefined') { throw new TypeError(`No method named "${config}"`); } data[config](this); } }); } } /** * Data API implementation */ enableDismissTrigger(Toast); /** * $ */ define$Plugin(Toast); window.bootstrap = window.bootstrap || {}; window.bootstrap.Toast = Toast; if (Joomla && Joomla.getOptions) { // Get the elements/configurations from the PHP const toasts = Joomla.getOptions('bootstrap.toast'); // Initialise the elements if (typeof toasts === 'object' && toasts !== null) { Object.keys(toasts).forEach(toast => { const opt = toasts[toast]; const options = { animation: opt.animation ? opt.animation : true, autohide: opt.autohide ? opt.autohide : true, delay: opt.delay ? opt.delay : 5000 }; const elements = Array.from(document.querySelectorAll(toast)); if (elements.length) { elements.map(el => new window.bootstrap.Toast(el, options)); } }); } } export { Toast as T }; /* end /media/vendor/bootstrap/js/toast.min.js */ </script> <script type="module"> /*! inlined from /media/vendor/bootstrap/js/scrollspy.min.js by ntb_minifier */ import { E as EventHandler, S as SelectorEngine, d as define$Plugin, B as BaseComponent, c as getElement, f as isDisabled, i as isVisible } from './dom.js?5.3.0'; /** * -------------------------------------------------------------------------- * Bootstrap scrollspy.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ /** * Constants */ const NAME = 'scrollspy'; const DATA_KEY = 'bs.scrollspy'; const EVENT_KEY = `.${DATA_KEY}`; const DATA_API_KEY = '.data-api'; const EVENT_ACTIVATE = `activate${EVENT_KEY}`; const EVENT_CLICK = `click${EVENT_KEY}`; const EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`; const CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item'; const CLASS_NAME_ACTIVE = 'active'; const SELECTOR_DATA_SPY = '[data-bs-spy="scroll"]'; const SELECTOR_TARGET_LINKS = '[href]'; const SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'; const SELECTOR_NAV_LINKS = '.nav-link'; const SELECTOR_NAV_ITEMS = '.nav-item'; const SELECTOR_LIST_ITEMS = '.list-group-item'; const SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_NAV_ITEMS} > ${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`; const SELECTOR_DROPDOWN = '.dropdown'; const SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'; const Default = { offset: null, // TODO: v6 @deprecated, keep it for backwards compatibility reasons rootMargin: '0px 0px -25%', smoothScroll: false, target: null, threshold: [0.1, 0.5, 1] }; const DefaultType = { offset: '(number|null)', // TODO v6 @deprecated, keep it for backwards compatibility reasons rootMargin: 'string', smoothScroll: 'boolean', target: 'element', threshold: 'array' }; /** * Class definition */ class ScrollSpy extends BaseComponent { constructor(element, config) { super(element, config); // this._element is the observablesContainer and config.target the menu links wrapper this._targetLinks = new Map(); this._observableSections = new Map(); this._rootElement = getComputedStyle(this._element).overflowY === 'visible' ? null : this._element; this._activeTarget = null; this._observer = null; this._previousScrollData = { visibleEntryTop: 0, parentScrollTop: 0 }; this.refresh(); // initialize } // Getters static get Default() { return Default; } static get DefaultType() { return DefaultType; } static get NAME() { return NAME; } // Public refresh() { this._initializeTargetsAndObservables(); this._maybeEnableSmoothScroll(); if (this._observer) { this._observer.disconnect(); } else { this._observer = this._getNewObserver(); } for (const section of this._observableSections.values()) { this._observer.observe(section); } } dispose() { this._observer.disconnect(); super.dispose(); } // Private _configAfterMerge(config) { // TODO: on v6 target should be given explicitly & remove the {target: 'ss-target'} case config.target = getElement(config.target) || document.body; // TODO: v6 Only for backwards compatibility reasons. Use rootMargin only config.rootMargin = config.offset ? `${config.offset}px 0px -30%` : config.rootMargin; if (typeof config.threshold === 'string') { config.threshold = config.threshold.split(',').map(value => Number.parseFloat(value)); } return config; } _maybeEnableSmoothScroll() { if (!this._config.smoothScroll) { return; } // unregister any previous listeners EventHandler.off(this._config.target, EVENT_CLICK); EventHandler.on(this._config.target, EVENT_CLICK, SELECTOR_TARGET_LINKS, event => { const observableSection = this._observableSections.get(event.target.hash); if (observableSection) { event.preventDefault(); const root = this._rootElement || window; const height = observableSection.offsetTop - this._element.offsetTop; if (root.scrollTo) { root.scrollTo({ top: height, behavior: 'smooth' }); return; } // Chrome 60 doesn't support `scrollTo` root.scrollTop = height; } }); } _getNewObserver() { const options = { root: this._rootElement, threshold: this._config.threshold, rootMargin: this._config.rootMargin }; return new IntersectionObserver(entries => this._observerCallback(entries), options); } // The logic of selection _observerCallback(entries) { const targetElement = entry => this._targetLinks.get(`#${entry.target.id}`); const activate = entry => { this._previousScrollData.visibleEntryTop = entry.target.offsetTop; this._process(targetElement(entry)); }; const parentScrollTop = (this._rootElement || document.documentElement).scrollTop; const userScrollsDown = parentScrollTop >= this._previousScrollData.parentScrollTop; this._previousScrollData.parentScrollTop = parentScrollTop; for (const entry of entries) { if (!entry.isIntersecting) { this._activeTarget = null; this._clearActiveClass(targetElement(entry)); continue; } const entryIsLowerThanPrevious = entry.target.offsetTop >= this._previousScrollData.visibleEntryTop; // if we are scrolling down, pick the bigger offsetTop if (userScrollsDown && entryIsLowerThanPrevious) { activate(entry); // if parent isn't scrolled, let's keep the first visible item, breaking the iteration if (!parentScrollTop) { return; } continue; } // if we are scrolling up, pick the smallest offsetTop if (!userScrollsDown && !entryIsLowerThanPrevious) { activate(entry); } } } _initializeTargetsAndObservables() { this._targetLinks = new Map(); this._observableSections = new Map(); const targetLinks = SelectorEngine.find(SELECTOR_TARGET_LINKS, this._config.target); for (const anchor of targetLinks) { // ensure that the anchor has an id and is not disabled if (!anchor.hash || isDisabled(anchor)) { continue; } const observableSection = SelectorEngine.findOne(decodeURI(anchor.hash), this._element); // ensure that the observableSection exists & is visible if (isVisible(observableSection)) { this._targetLinks.set(decodeURI(anchor.hash), anchor); this._observableSections.set(anchor.hash, observableSection); } } } _process(target) { if (this._activeTarget === target) { return; } this._clearActiveClass(this._config.target); this._activeTarget = target; target.classList.add(CLASS_NAME_ACTIVE); this._activateParents(target); EventHandler.trigger(this._element, EVENT_ACTIVATE, { relatedTarget: target }); } _activateParents(target) { // Activate dropdown parents if (target.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) { SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE, target.closest(SELECTOR_DROPDOWN)).classList.add(CLASS_NAME_ACTIVE); return; } for (const listGroup of SelectorEngine.parents(target, SELECTOR_NAV_LIST_GROUP)) { // Set triggered links parents as active // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor for (const item of SelectorEngine.prev(listGroup, SELECTOR_LINK_ITEMS)) { item.classList.add(CLASS_NAME_ACTIVE); } } } _clearActiveClass(parent) { parent.classList.remove(CLASS_NAME_ACTIVE); const activeNodes = SelectorEngine.find(`${SELECTOR_TARGET_LINKS}.${CLASS_NAME_ACTIVE}`, parent); for (const node of activeNodes) { node.classList.remove(CLASS_NAME_ACTIVE); } } // Static static $Interface(config) { return this.each(function () { const data = ScrollSpy.getOrCreateInstance(this, config); if (typeof config !== 'string') { return; } if (data[config] === undefined || config.startsWith('_') || config === 'constructor') { throw new TypeError(`No method named "${config}"`); } data[config](); }); } } /** * Data API implementation */ EventHandler.on(window, EVENT_LOAD_DATA_API, () => { for (const spy of SelectorEngine.find(SELECTOR_DATA_SPY)) { ScrollSpy.getOrCreateInstance(spy); } }); /** * $ */ define$Plugin(ScrollSpy); window.bootstrap = window.bootstrap || {}; window.bootstrap.Scrollspy = ScrollSpy; if (Joomla && Joomla.getOptions) { // Get the elements/configurations from the PHP const scrollspys = Joomla.getOptions('bootstrap.scrollspy'); // Initialise the elements if (typeof scrollspys === 'object' && scrollspys !== null) { Object.keys(scrollspys).forEach(scrollspy => { const opt = scrollspys[scrollspy]; const options = { offset: opt.offset ? opt.offset : 10, method: opt.method ? opt.method : 'auto' }; if (opt.target) { options.target = opt.target; } const elements = Array.from(document.querySelectorAll(scrollspy)); if (elements.length) { elements.map(el => new window.bootstrap.Scrollspy(el, options)); } }); } } export { ScrollSpy as S }; /* end /media/vendor/bootstrap/js/scrollspy.min.js */ </script> <script type="module"> /*! inlined from /media/vendor/bootstrap/js/offcanvas.min.js by ntb_minifier */ import { E as EventHandler, S as SelectorEngine, f as isDisabled, i as isVisible, e as enableDismissTrigger, d as define$Plugin, B as BaseComponent, k as ScrollBarHelper, l as Backdrop, F as FocusTrap } from './dom.js?5.3.0'; /** * -------------------------------------------------------------------------- * Bootstrap offcanvas.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ /** * Constants */ const NAME = 'offcanvas'; const DATA_KEY = 'bs.offcanvas'; const EVENT_KEY = `.${DATA_KEY}`; const DATA_API_KEY = '.data-api'; const EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`; const ESCAPE_KEY = 'Escape'; const CLASS_NAME_SHOW = 'show'; const CLASS_NAME_SHOWING = 'showing'; const CLASS_NAME_HIDING = 'hiding'; const CLASS_NAME_BACKDROP = 'offcanvas-backdrop'; const OPEN_SELECTOR = '.offcanvas.show'; const EVENT_SHOW = `show${EVENT_KEY}`; const EVENT_SHOWN = `shown${EVENT_KEY}`; const EVENT_HIDE = `hide${EVENT_KEY}`; const EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`; const EVENT_HIDDEN = `hidden${EVENT_KEY}`; const EVENT_RESIZE = `resize${EVENT_KEY}`; const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`; const EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`; const SELECTOR_DATA_TOGGLE = '[data-bs-toggle="offcanvas"]'; const Default = { backdrop: true, keyboard: true, scroll: false }; const DefaultType = { backdrop: '(boolean|string)', keyboard: 'boolean', scroll: 'boolean' }; /** * Class definition */ class Offcanvas extends BaseComponent { constructor(element, config) { super(element, config); this._isShown = false; this._backdrop = this._initializeBackDrop(); this._focustrap = this._initializeFocusTrap(); this._addEventListeners(); } // Getters static get Default() { return Default; } static get DefaultType() { return DefaultType; } static get NAME() { return NAME; } // Public toggle(relatedTarget) { return this._isShown ? this.hide() : this.show(relatedTarget); } show(relatedTarget) { if (this._isShown) { return; } const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, { relatedTarget }); if (showEvent.defaultPrevented) { return; } this._isShown = true; this._backdrop.show(); if (!this._config.scroll) { new ScrollBarHelper().hide(); } this._element.setAttribute('aria-modal', true); this._element.setAttribute('role', 'dialog'); this._element.classList.add(CLASS_NAME_SHOWING); const completeCallBack = () => { if (!this._config.scroll || this._config.backdrop) { this._focustrap.activate(); } this._element.classList.add(CLASS_NAME_SHOW); this._element.classList.remove(CLASS_NAME_SHOWING); EventHandler.trigger(this._element, EVENT_SHOWN, { relatedTarget }); }; this._queueCallback(completeCallBack, this._element, true); } hide() { if (!this._isShown) { return; } const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE); if (hideEvent.defaultPrevented) { return; } this._focustrap.deactivate(); this._element.blur(); this._isShown = false; this._element.classList.add(CLASS_NAME_HIDING); this._backdrop.hide(); const completeCallback = () => { this._element.classList.remove(CLASS_NAME_SHOW, CLASS_NAME_HIDING); this._element.removeAttribute('aria-modal'); this._element.removeAttribute('role'); if (!this._config.scroll) { new ScrollBarHelper().reset(); } EventHandler.trigger(this._element, EVENT_HIDDEN); }; this._queueCallback(completeCallback, this._element, true); } dispose() { this._backdrop.dispose(); this._focustrap.deactivate(); super.dispose(); } // Private _initializeBackDrop() { const clickCallback = () => { if (this._config.backdrop === 'static') { EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED); return; } this.hide(); }; // 'static' option will be translated to true, and booleans will keep their value const isVisible = Boolean(this._config.backdrop); return new Backdrop({ className: CLASS_NAME_BACKDROP, isVisible, isAnimated: true, rootElement: this._element.parentNode, clickCallback: isVisible ? clickCallback : null }); } _initializeFocusTrap() { return new FocusTrap({ trapElement: this._element }); } _addEventListeners() { EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => { if (event.key !== ESCAPE_KEY) { return; } if (this._config.keyboard) { this.hide(); return; } EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED); }); } // Static static $Interface(config) { return this.each(function () { const data = Offcanvas.getOrCreateInstance(this, config); if (typeof config !== 'string') { return; } if (data[config] === undefined || config.startsWith('_') || config === 'constructor') { throw new TypeError(`No method named "${config}"`); } data[config](this); }); } } /** * Data API implementation */ EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) { const target = SelectorEngine.getElementFromSelector(this); if (['A', 'AREA'].includes(this.tagName)) { event.preventDefault(); } if (isDisabled(this)) { return; } EventHandler.one(target, EVENT_HIDDEN, () => { // focus on trigger when it is closed if (isVisible(this)) { this.focus(); } }); // avoid conflict when clicking a toggler of an offcanvas, while another is open const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR); if (alreadyOpen && alreadyOpen !== target) { Offcanvas.getInstance(alreadyOpen).hide(); } const data = Offcanvas.getOrCreateInstance(target); data.toggle(this); }); EventHandler.on(window, EVENT_LOAD_DATA_API, () => { for (const selector of SelectorEngine.find(OPEN_SELECTOR)) { Offcanvas.getOrCreateInstance(selector).show(); } }); EventHandler.on(window, EVENT_RESIZE, () => { for (const element of SelectorEngine.find('[aria-modal][class*=show][class*=offcanvas-]')) { if (getComputedStyle(element).position !== 'fixed') { Offcanvas.getOrCreateInstance(element).hide(); } } }); enableDismissTrigger(Offcanvas); /** * $ */ define$Plugin(Offcanvas); window.bootstrap = window.bootstrap || {}; window.bootstrap.Offcanvas = Offcanvas; if (Joomla && Joomla.getOptions) { // Get the elements/configurations from the PHP const offcanvases = Joomla.getOptions('bootstrap.offcanvas'); // Initialise the elements if (typeof offcanvases === 'object' && offcanvases !== null) { Object.keys(offcanvases).forEach(offcanvas => { const opt = offcanvases[offcanvas]; const options = { backdrop: opt.backdrop ? opt.backdrop : true, keyboard: opt.keyboard ? opt.keyboard : true, scroll: opt.scroll ? opt.scroll : true }; const elements = Array.from(document.querySelectorAll(offcanvas)); if (elements.length) { elements.map(el => new window.bootstrap.Offcanvas(el, options)); } }); } } export { Offcanvas as O }; /* end /media/vendor/bootstrap/js/offcanvas.min.js */ </script> <script type="module"> /*! inlined from /media/vendor/bootstrap/js/collapse.min.js by ntb_minifier */ import { E as EventHandler, S as SelectorEngine, d as define$Plugin, B as BaseComponent, r as reflow, c as getElement } from './dom.js?5.3.0'; /** * -------------------------------------------------------------------------- * Bootstrap collapse.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ /** * Constants */ const NAME = 'collapse'; const DATA_KEY = 'bs.collapse'; const EVENT_KEY = `.${DATA_KEY}`; const DATA_API_KEY = '.data-api'; const EVENT_SHOW = `show${EVENT_KEY}`; const EVENT_SHOWN = `shown${EVENT_KEY}`; const EVENT_HIDE = `hide${EVENT_KEY}`; const EVENT_HIDDEN = `hidden${EVENT_KEY}`; const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`; const CLASS_NAME_SHOW = 'show'; const CLASS_NAME_COLLAPSE = 'collapse'; const CLASS_NAME_COLLAPSING = 'collapsing'; const CLASS_NAME_COLLAPSED = 'collapsed'; const CLASS_NAME_DEEPER_CHILDREN = `:scope .${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`; const CLASS_NAME_HORIZONTAL = 'collapse-horizontal'; const WIDTH = 'width'; const HEIGHT = 'height'; const SELECTOR_ACTIVES = '.collapse.show, .collapse.collapsing'; const SELECTOR_DATA_TOGGLE = '[data-bs-toggle="collapse"]'; const Default = { parent: null, toggle: true }; const DefaultType = { parent: '(null|element)', toggle: 'boolean' }; /** * Class definition */ class Collapse extends BaseComponent { constructor(element, config) { super(element, config); this._isTransitioning = false; this._triggerArray = []; const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE); for (const elem of toggleList) { const selector = SelectorEngine.getSelectorFromElement(elem); const filterElement = SelectorEngine.find(selector).filter(foundElement => foundElement === this._element); if (selector !== null && filterElement.length) { this._triggerArray.push(elem); } } this._initializeChildren(); if (!this._config.parent) { this._addAriaAndCollapsedClass(this._triggerArray, this._isShown()); } if (this._config.toggle) { this.toggle(); } } // Getters static get Default() { return Default; } static get DefaultType() { return DefaultType; } static get NAME() { return NAME; } // Public toggle() { if (this._isShown()) { this.hide(); } else { this.show(); } } show() { if (this._isTransitioning || this._isShown()) { return; } let activeChildren = []; // find active children if (this._config.parent) { activeChildren = this._getFirstLevelChildren(SELECTOR_ACTIVES).filter(element => element !== this._element).map(element => Collapse.getOrCreateInstance(element, { toggle: false })); } if (activeChildren.length && activeChildren[0]._isTransitioning) { return; } const startEvent = EventHandler.trigger(this._element, EVENT_SHOW); if (startEvent.defaultPrevented) { return; } for (const activeInstance of activeChildren) { activeInstance.hide(); } const dimension = this._getDimension(); this._element.classList.remove(CLASS_NAME_COLLAPSE); this._element.classList.add(CLASS_NAME_COLLAPSING); this._element.style[dimension] = 0; this._addAriaAndCollapsedClass(this._triggerArray, true); this._isTransitioning = true; const complete = () => { this._isTransitioning = false; this._element.classList.remove(CLASS_NAME_COLLAPSING); this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW); this._element.style[dimension] = ''; EventHandler.trigger(this._element, EVENT_SHOWN); }; const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1); const scrollSize = `scroll${capitalizedDimension}`; this._queueCallback(complete, this._element, true); this._element.style[dimension] = `${this._element[scrollSize]}px`; } hide() { if (this._isTransitioning || !this._isShown()) { return; } const startEvent = EventHandler.trigger(this._element, EVENT_HIDE); if (startEvent.defaultPrevented) { return; } const dimension = this._getDimension(); this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`; reflow(this._element); this._element.classList.add(CLASS_NAME_COLLAPSING); this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW); for (const trigger of this._triggerArray) { const element = SelectorEngine.getElementFromSelector(trigger); if (element && !this._isShown(element)) { this._addAriaAndCollapsedClass([trigger], false); } } this._isTransitioning = true; const complete = () => { this._isTransitioning = false; this._element.classList.remove(CLASS_NAME_COLLAPSING); this._element.classList.add(CLASS_NAME_COLLAPSE); EventHandler.trigger(this._element, EVENT_HIDDEN); }; this._element.style[dimension] = ''; this._queueCallback(complete, this._element, true); } _isShown() { let element = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this._element; return element.classList.contains(CLASS_NAME_SHOW); } // Private _configAfterMerge(config) { config.toggle = Boolean(config.toggle); // Coerce string values config.parent = getElement(config.parent); return config; } _getDimension() { return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT; } _initializeChildren() { if (!this._config.parent) { return; } const children = this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE); for (const element of children) { const selected = SelectorEngine.getElementFromSelector(element); if (selected) { this._addAriaAndCollapsedClass([element], this._isShown(selected)); } } } _getFirstLevelChildren(selector) { const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent); // remove children if greater depth return SelectorEngine.find(selector, this._config.parent).filter(element => !children.includes(element)); } _addAriaAndCollapsedClass(triggerArray, isOpen) { if (!triggerArray.length) { return; } for (const element of triggerArray) { element.classList.toggle(CLASS_NAME_COLLAPSED, !isOpen); element.setAttribute('aria-expanded', isOpen); } } // Static static $Interface(config) { const _config = {}; if (typeof config === 'string' && /show|hide/.test(config)) { _config.toggle = false; } return this.each(function () { const data = Collapse.getOrCreateInstance(this, _config); if (typeof config === 'string') { if (typeof data[config] === 'undefined') { throw new TypeError(`No method named "${config}"`); } data[config](); } }); } } /** * Data API implementation */ EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) { // preventDefault only for <a> elements (which change the URL) not inside the collapsible element if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') { event.preventDefault(); } for (const element of SelectorEngine.getMultipleElementsFromSelector(this)) { Collapse.getOrCreateInstance(element, { toggle: false }).toggle(); } }); /** * $ */ define$Plugin(Collapse); window.bootstrap = window.bootstrap || {}; window.bootstrap.Collapse = Collapse; if (Joomla && Joomla.getOptions) { // Get the elements/configurations from the PHP const collapses = { ...Joomla.getOptions('bootstrap.collapse'), ...Joomla.getOptions('bootstrap.accordion') }; // Initialise the elements Object.keys(collapses).forEach(collapse => { const opt = collapses[collapse]; const options = { toggle: opt.toggle ? opt.toggle : true }; if (opt.parent) { options.parent = opt.parent; } const elements = Array.from(document.querySelectorAll(collapse)); if (elements.length) { elements.map(el => new window.bootstrap.Collapse(el, options)); } }); } export { Collapse as C }; /* end /media/vendor/bootstrap/js/collapse.min.js */ </script> <script type="module"> /*! inlined from /media/vendor/bootstrap/js/button.min.js by ntb_minifier */ import { E as EventHandler, d as define$Plugin, B as BaseComponent } from './dom.js?5.3.0'; /** * -------------------------------------------------------------------------- * Bootstrap button.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ /** * Constants */ const NAME = 'button'; const DATA_KEY = 'bs.button'; const EVENT_KEY = `.${DATA_KEY}`; const DATA_API_KEY = '.data-api'; const CLASS_NAME_ACTIVE = 'active'; const SELECTOR_DATA_TOGGLE = '[data-bs-toggle="button"]'; const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`; /** * Class definition */ class Button extends BaseComponent { // Getters static get NAME() { return NAME; } // Public toggle() { // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE)); } // Static static $Interface(config) { return this.each(function () { const data = Button.getOrCreateInstance(this); if (config === 'toggle') { data[config](); } }); } } /** * Data API implementation */ EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, event => { event.preventDefault(); const button = event.target.closest(SELECTOR_DATA_TOGGLE); const data = Button.getOrCreateInstance(button); data.toggle(); }); /** * $ */ define$Plugin(Button); window.bootstrap = window.bootstrap || {}; window.bootstrap.Button = Button; if (Joomla && Joomla.getOptions) { // Get the elements/configurations from the PHP const buttons = Joomla.getOptions('bootstrap.button'); // Initialise the elements if (buttons && buttons.length) { buttons.forEach(selector => { Array.from(document.querySelectorAll(selector)).map(el => new window.bootstrap.Button(el)); }); } } export { Button as B }; /* end /media/vendor/bootstrap/js/button.min.js */ </script> <script type="module"> /*! inlined from /media/vendor/bootstrap/js/alert.min.js by ntb_minifier */ import { e as enableDismissTrigger, d as define$Plugin, B as BaseComponent, E as EventHandler } from './dom.js?5.3.0'; /** * -------------------------------------------------------------------------- * Bootstrap alert.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ /** * Constants */ const NAME = 'alert'; const DATA_KEY = 'bs.alert'; const EVENT_KEY = `.${DATA_KEY}`; const EVENT_CLOSE = `close${EVENT_KEY}`; const EVENT_CLOSED = `closed${EVENT_KEY}`; const CLASS_NAME_FADE = 'fade'; const CLASS_NAME_SHOW = 'show'; /** * Class definition */ class Alert extends BaseComponent { // Getters static get NAME() { return NAME; } // Public close() { const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE); if (closeEvent.defaultPrevented) { return; } this._element.classList.remove(CLASS_NAME_SHOW); const isAnimated = this._element.classList.contains(CLASS_NAME_FADE); this._queueCallback(() => this._destroyElement(), this._element, isAnimated); } // Private _destroyElement() { this._element.remove(); EventHandler.trigger(this._element, EVENT_CLOSED); this.dispose(); } // Static static $Interface(config) { return this.each(function () { const data = Alert.getOrCreateInstance(this); if (typeof config !== 'string') { return; } if (data[config] === undefined || config.startsWith('_') || config === 'constructor') { throw new TypeError(`No method named "${config}"`); } data[config](this); }); } } /** * Data API implementation */ enableDismissTrigger(Alert, 'close'); /** * $ */ define$Plugin(Alert); window.bootstrap = window.bootstrap || {}; window.bootstrap.Alert = Alert; if (Joomla && Joomla.getOptions) { // Get the elements/configurations from the PHP const alerts = Joomla.getOptions('bootstrap.alert'); // Initialise the elements if (alerts && alerts.length) { alerts.forEach(selector => { Array.from(document.querySelectorAll(selector)).map(el => new window.bootstrap.Alert(el)); }); } } export { Alert as A }; /* end /media/vendor/bootstrap/js/alert.min.js */ </script> <script type="module"> /*! inlined from /media/system/js/keepalive.min.js by ntb_minifier */ /** * @copyright (C) 2018 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ /** * Keepalive javascript behavior * * Used for keeping the session alive * * @package Joomla.JavaScript * @since 3.7.0 */ if (!window.Joomla) { throw new Error('Joomla API was not properly initialised'); } const keepAliveOptions = Joomla.getOptions('system.keepalive'); const keepAliveInterval = keepAliveOptions && keepAliveOptions.interval ? parseInt(keepAliveOptions.interval, 10) : 45 * 1000; let keepAliveUri = keepAliveOptions && keepAliveOptions.uri ? keepAliveOptions.uri.replace(/&/g, '&') : ''; // Fallback in case no keepalive uri was found. if (keepAliveUri === '') { const systemPaths = Joomla.getOptions('system.paths'); keepAliveUri = `${systemPaths ? `${systemPaths.root}/index.php` : window.location.pathname}?option=com_ajax&format=json`; } setInterval(() => fetch(keepAliveUri, { method: 'POST' }), keepAliveInterval); /* end /media/system/js/keepalive.min.js */ </script> <meta name="pubdate" content="20230518"> <!--<PageMap> <DataObject type="thumbnail"> <Attribute name="src" value="//contest.techbriefs.com/media/thumbnails/metahttps://res.cloudinary.com/tbmg/q_auto,f_auto/ctf/stories/entries/2023/0518181005-iheart_vs_sphygmocor_aopwv.jpg"/> <Attribute name="width" value="95"/> <Attribute name="height" value="100"/> </DataObject> </PageMap>--> <meta name="thumbnail" content="//contest.techbriefs.com/media/thumbnails/metahttps://res.cloudinary.com/tbmg/q_auto,f_auto/ctf/stories/entries/2023/0518181005-iheart_vs_sphygmocor_aopwv.jpg"> <!-- Google Tag Manager --> <script>(function (w, d, s, l, i) { w[l] = w[l] || []; w[l].push({ 'gtm.start': new Date().getTime(), event: 'gtm.js' }); var f = d.getElementsByTagName(s)[0], j = d.createElement(s), dl = l != 'dataLayer' ? '&l=' + l : ''; j.async = true; j.src = 'https://www.googletagmanager.com/gtm.js?id=' + i + dl; f.parentNode.insertBefore(j, f); })(window, document, 'script', 'dataLayer', 'GTM-NBC2RTV');</script> <!-- End Google Tag Manager --> <!-- favicons --> <link rel="apple-touch-icon-precomposed" sizes="57x57" href="/templates/ctf_2019/favicos/apple-touch-icon-57x57.png" /> <link rel="apple-touch-icon-precomposed" sizes="114x114" href="/templates/ctf_2019/favicos/apple-touch-icon-114x114.png" /> <link rel="apple-touch-icon-precomposed" sizes="72x72" href="/templates/ctf_2019/favicos/apple-touch-icon-72x72.png" /> <link rel="apple-touch-icon-precomposed" sizes="144x144" href="/templates/ctf_2019/favicos/apple-touch-icon-144x144.png" /> <link rel="apple-touch-icon-precomposed" sizes="60x60" href="/templates/ctf_2019/favicos/apple-touch-icon-60x60.png" /> <link rel="apple-touch-icon-precomposed" sizes="120x120" href="/templates/ctf_2019/favicos/apple-touch-icon-120x120.png" /> <link rel="apple-touch-icon-precomposed" sizes="76x76" href="/templates/ctf_2019/favicos/apple-touch-icon-76x76.png" /> <link rel="apple-touch-icon-precomposed" sizes="152x152" href="/templates/ctf_2019/favicos/apple-touch-icon-152x152.png" /> <link rel="icon" type="image/png" href="/templates/ctf_2019/favicos/favicon-196x196.png" sizes="196x196" /> <link rel="icon" type="image/png" href="/templates/ctf_2019/favicos/favicon-96x96.png" sizes="96x96" /> <link rel="icon" type="image/png" href="/templates/ctf_2019/favicos/favicon-32x32.png" sizes="32x32" /> <link rel="icon" type="image/png" href="/templates/ctf_2019/favicos/favicon-16x16.png" sizes="16x16" /> <link rel="icon" type="image/png" href="/templates/ctf_2019/favicos/favicon-128.png" sizes="128x128" /> <meta name="application-name" content=" " /> <meta name="msapplication-TileColor" content="#FFFFFF" /> <meta name="msapplication-TileImage" content="/templates/ctf_2019/favicos/mstile-144x144.png" /> <meta name="msapplication-square70x70logo" content="/templates/ctf_2019/favicos/mstile-70x70.png" /> <meta name="msapplication-square150x150logo" content="/templates/ctf_2019/favicos/mstile-150x150.png" /> <meta name="msapplication-wide310x150logo" content="/templates/ctf_2019/favicos/mstile-310x150.png" /> <meta name="msapplication-square310x310logo" content="/templates/ctf_2019/favicos/mstile-310x310.png" /> </head> <body> <!-- Google Tag Manager (noscript) --> <noscript> <iframe src="https://www.googletagmanager.com/ns.html?id=GTM-NBC2RTV" height="0" width="0" style="display:none;visibility:hidden"></iframe> </noscript> <!-- End Google Tag Manager (noscript) --> <!--googleoff: all--> <header class="header"> <div class="header-container container-fluid p-0"> <nav class="header-nav navbar navbar-expand-sm navbar-dark bg-primary px-0 py-1"> <div class="row w-100"> <div class="col-xl-2 col-lg-2 col-md-1 col-sm-1 col-xs-1 col-2 align-top h-100"> <button type="button" id="navbar-side-button-small" class="hamburger navbar-toggler navbar-toggler-left" data-bs-toggle="collapse" data-bs-target=".navbar-side"> <span class="fas fa-bars"></span> </button> <div id="hamburger-menu" class="navbar-collapse collapse d-none"> <ul class="navbar-nav me-auto"> <li class="nav-item active"> <a id="navbar-side-button-large" class="nav-link ms-3"> <span class="fas fa-bars"></span> </a></li></ul></div></div> <div class="col-xl-4 col-lg-4 col-md-4 col-sm-5 col-xs-4 col-4 py-2 ctf-logo"> <div class="d-flex justify-content-around align-items-end"> <div> <a href="/"> <svg class="logolarge py-1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2734.14 1993.33"><defs><style>.cls-1{fill:#6fccdd;}.cls-2{fill:#fff;}.cls-3{fill:#06b0d8;}.cls-4{fill:#f79420;}.cls-5{fill:#fbb03a;}.cls-6{fill:#faed23;}.cls-7{fill:#f7ec13;}.cls-8{fill:#6abd45;}.cls-9{fill:#b9529f;}.cls-10{fill:#c1272d;}.cls-11{fill:#ec2027;}.cls-12{fill:#d2d3d4;}</style></defs><g id="Layer_2" data-name="Layer 2"><g id="Layer_1-2" data-name="Layer 1"><polygon class="cls-1" points="1112.55 1624.74 1112.34 1683.17 606.53 1681.18 606.95 1622.8 1112.55 1624.74"/><path class="cls-2" d="M634.37,536.36V519.21h37.84v78.34H634.37q-16.71-42.43-55.73-42.43-19.36,0-34.37,10.06a67.37,67.37,0,0,0-23.36,27.42,87.79,87.79,0,0,0-8.35,38.5,82.63,82.63,0,0,0,7.91,36.28,66,66,0,0,0,22.1,26.32q14.19,9.82,32.66,9.82a55.9,55.9,0,0,0,39.54-15.74q16.77-15.75,22.54-41.47l43.9,20.84q-24.83,77.46-110.12,77.45-36.66,0-64.07-14t-42.2-39.91Q450,664.79,450,630.2q0-32.67,15.22-58.83a108.58,108.58,0,0,1,42.05-41q26.84-14.85,60.09-14.86Q607.77,515.52,634.37,536.36Z"/><path class="cls-2" d="M830.61,584.84V631.4q-20.4,1.33-32.45,6.43a37.17,37.17,0,0,0-18.62,17.51Q773,667.76,773,690.81v15.38h30.89V742H694.91V706.19h28.53V623H696.39V586.61h72.43v39.46a59.48,59.48,0,0,1,20.25-29.7q14.77-11.82,36.66-11.82A29.45,29.45,0,0,1,830.61,584.84Z"/><path class="cls-2" d="M1007.93,674.7H892q1.77,17.89,12.34,28.31t27.27,10.42q18.47,0,36.06-18.32l38.43,12.41q-12.72,19.07-31.49,28.6t-44.49,9.54q-25.73,0-45.45-9.68a72.26,72.26,0,0,1-30.6-27.42q-10.87-17.73-10.86-41.69A83,83,0,0,1,854.55,624a81.23,81.23,0,0,1,30.6-30.09,84,84,0,0,1,41.91-10.86q24.54,0,42.72,11.31t28,32.08Q1007.63,647.21,1007.93,674.7ZM924.71,616q-13.31,0-21.36,7.68t-10.12,23.51H958q-2.07-13.89-11.31-22.55A31.05,31.05,0,0,0,924.71,616Z"/><path class="cls-2" d="M1172,648.69v57.5h25.12V742h-74.49V729.84q-21.15,14.48-42.27,14.48-25.57,0-40.94-13.16T1024,695.69q0-23.66,17.22-37.91T1087,643.51a66.94,66.94,0,0,1,17.67,2.14,100.08,100.08,0,0,1,18,7.32V640.56q0-11.82-7.39-18.92T1093,614.55q-16.11,0-28.53,12.41l-39.91-7.24q18.18-36.68,75.09-36.67,39,0,55.65,16T1172,648.69Zm-80.56,64.74q13.29,0,31.19-16v-13.9q-16-10.35-29.27-10.35-10.63,0-16.26,5t-5.61,14.34Q1071.44,713.45,1091.39,713.43Z"/><path class="cls-2" d="M1296.05,586.61V623h-28.67v67.84c0,4.83.93,8.46,2.81,10.86s5.37,3.63,10.49,3.63q6.35,0,15.37-3.25v34.44q-20,7.83-37.54,7.83-20.25,0-30.37-10.27T1218,705V623h-19.66V586.6H1218V562.51L1267.38,527v59.57Z"/><path class="cls-2" d="M1475.57,674.7H1359.68Q1361.45,692.6,1372,703t27.27,10.42q18.48,0,36.07-18.32l38.42,12.41q-12.7,19.07-31.48,28.6t-44.49,9.54q-25.72,0-45.46-9.68t-30.59-27.42q-10.87-17.73-10.86-41.69A82.87,82.87,0,0,1,1322.22,624a81.27,81.27,0,0,1,30.59-30.09,84,84,0,0,1,41.91-10.86q24.52,0,42.71,11.31t28,32.08Q1475.27,647.21,1475.57,674.7ZM1392.35,616q-13.3,0-21.36,7.68t-10.13,23.51h64.74q-2.05-13.89-11.3-22.55A31.05,31.05,0,0,0,1392.35,616Z"/><path class="cls-2" d="M1590.06,653.17V674h-16.39v38.78q0,4.14,1.61,6.21t6,2.07a26.65,26.65,0,0,0,8.78-1.86v19.69a59,59,0,0,1-21.46,4.48q-11.58,0-17.36-5.87t-5.79-16.6V674h-11.24V653.17h11.24V639.41l28.22-20.28v34h16.39Z"/><path class="cls-2" d="M1667.11,651.15q13.52,0,20.32,8.19t6.8,23.83v38.35h13.18V742h-41.57V684.52c0-3.67-.7-6.29-2.07-7.86s-3.68-2.36-6.88-2.36q-6.6,0-14.88,5.41v41.82h12.42V742h-55V721.53h14.36V635h-14.36V614.66H1642v45.79Q1655.71,651.14,1667.11,651.15Z"/><path class="cls-2" d="M1808.42,703.52h-66.23q1,10.23,7,16.18t15.58,6q10.56,0,20.62-10.48l22,7.09a47.23,47.23,0,0,1-18,16.35q-10.74,5.45-25.44,5.45t-26-5.54a41.29,41.29,0,0,1-17.49-15.66q-6.19-10.14-6.21-23.83a47.35,47.35,0,0,1,6.47-24.5,46.44,46.44,0,0,1,17.48-17.19,48,48,0,0,1,24-6.21q14,0,24.42,6.46a42.39,42.39,0,0,1,16,18.33Q1808.26,687.81,1808.42,703.52ZM1760.86,670c-5.06,0-9.14,1.47-12.21,4.39s-5,7.41-5.78,13.44h37a21.33,21.33,0,0,0-6.47-12.89A17.69,17.69,0,0,0,1760.86,670Z"/><path class="cls-2" d="M651.51,873V831.77H562.24v68.59h64.64v50.45H562.24v77.06h46.12v50.45H442.41v-50.45h42.38V831.77H442.41V781.32H708.47V873Z"/><path class="cls-2" d="M829.42,1027.08q17,0,36.66-15V919.67H834.35V871.18H931.9v159.44h33.9v47.69H866.08V1061q-30.95,20.49-60.11,20.5-30.15,0-46.9-16.76t-16.76-46.11V919.67H711.17V871.18h96.57v130.47q0,14.58,4.63,20T829.42,1027.08Z"/><path class="cls-2" d="M1106.65,871.18v48.49h-38.23v90.46q0,9.66,3.74,14.48t14,4.83q8.47,0,20.5-4.34V1071q-26.61,10.46-50.06,10.45-27,0-40.5-13.69t-13.5-38.73V919.66H976.38V871.17h26.21V839.05l65.83-47.3v79.41h38.23Z"/><path class="cls-2" d="M1244.36,1027.08q17,0,36.65-15V919.67h-31.72V871.18h97.55v159.44h33.9v47.69H1281V1061q-30.94,20.49-60.1,20.5-30.17,0-46.91-16.76t-16.75-46.11V919.67h-31.14V871.18h96.56v130.47q0,14.58,4.63,20T1244.36,1027.08Z"/><path class="cls-2" d="M1576.57,868.81v62.08q-27.19,1.77-43.25,8.58t-24.83,23.35q-8.77,16.56-8.77,47.31v20.5h41.19v47.69H1395.66v-47.69h38v-111h-36.06V871.18h96.56V923.8a79.4,79.4,0,0,1,27-39.61q19.71-15.77,48.87-15.78A42.06,42.06,0,0,1,1576.57,868.81Z"/><path class="cls-2" d="M1813.41,988.64H1658.9q2.37,23.85,16.46,37.74t36.36,13.9q24.63,0,48.08-24.44l51.24,16.55q-16.95,25.42-42,38.14t-59.31,12.71q-34.29,0-60.61-12.92t-40.8-36.55q-14.47-23.65-14.48-55.57,0-31.53,15.08-57.16a108.09,108.09,0,0,1,40.8-40.1,111.91,111.91,0,0,1,55.87-14.49q32.72,0,57,15.08t37.34,42.77Q1813,952,1813.41,988.64Zm-111-78.24q-17.73,0-28.48,10.25T1660.47,952h86.33q-2.76-18.53-15.08-30.06A41.38,41.38,0,0,0,1702.45,910.4Z"/><polygon class="cls-3" points="467.4 1239.41 513.45 1275.39 345.54 1489.76 299.6 1453.74 467.4 1239.41"/><polygon class="cls-4" points="380.34 1144.36 417.01 1189.68 205.2 1360.76 168.6 1315.47 380.34 1144.36"/><polygon class="cls-5" points="316.86 1032.07 342.43 1084.63 97.53 1203.67 71.99 1151.15 316.86 1032.07"/><polygon class="cls-6" points="280.26 908.45 293.35 965.35 27.88 1026.22 14.89 969.38 280.26 908.45"/><polygon class="cls-7" points="272.44 779.72 272.33 838.04 0 837.66 0.14 779.34 272.44 779.72"/><polygon class="cls-8" points="293.77 652.66 280.53 709.42 15.23 647.8 28.43 590.99 293.77 652.66"/><polygon class="cls-1" points="343.05 533.51 317.45 585.94 72.85 466.17 98.5 413.82 343.05 533.51"/><polygon class="cls-9" points="417.98 428.53 381.24 473.85 169.91 302.15 206.58 256.87 417.98 428.53"/><polygon class="cls-10" points="514.58 343.14 468.61 378.97 301.25 164.12 347.33 128.32 514.58 343.14"/><polygon class="cls-11" points="632.12 295.88 577.39 316.08 483.37 60.48 538.08 40.37 632.12 295.88"/><polygon class="cls-4" points="758.83 271.78 700.95 279.15 666.86 9 724.66 1.62 758.83 271.78"/><polygon class="cls-5" points="887.66 276.82 829.67 270.95 857.18 0 915.23 5.97 887.66 276.82"/><polygon class="cls-7" points="1025.69 305.78 969.84 288.91 1048.85 28.33 1104.63 45.15 1025.69 305.78"/><polygon class="cls-7" points="1141.27 362.9 1090.71 333.9 1226.3 97.71 1276.88 126.83 1141.27 362.9"/><path class="cls-2" d="M604.15,1337.13h27.74c21,0,38.23,17.12,38.23,39.11s-17.37,39.11-38.23,39.11H604.15Zm19.56,61h4.39c11.68,0,21.66-6.64,21.66-21.89,0-14-8.88-21.89-21.46-21.89h-4.59v43.78Z"/><path class="cls-2" d="M723.65,1354.35v13.07h22.06v17.22H723.65v13.49H746.9v17.22H704.09v-78.22H746.9v17.22Z"/><path class="cls-2" d="M825.2,1357.25a20.13,20.13,0,0,0-13-5.18c-3.59,0-8.38,2.18-8.38,6.54,0,4.56,5.29,6.33,8.68,7.47l5,1.56c10.48,3.21,18.56,8.71,18.56,21.37,0,7.77-1.79,15.77-7.78,21s-13.77,7.37-21.36,7.37a45.22,45.22,0,0,1-26.45-8.92l8.39-16.39c4.89,4.47,10.68,8.1,17.36,8.1,4.59,0,9.48-2.39,9.48-7.88,0-5.71-7.68-7.68-11.87-8.92-12.27-3.63-20.36-7-20.36-22.09,0-15.88,10.88-26.26,26-26.26a50,50,0,0,1,23.55,6.44Z"/><path class="cls-2" d="M889.82,1415.35H870.26v-78.22h19.56Z"/><path class="cls-2" d="M1002.55,1371.67c-.2,11.41-1,21.16-7.69,30.91-7.38,10.69-18.46,15.36-31,15.36-23.65,0-40.12-16.71-40.12-41.29,0-25.42,16.57-42.12,40.82-42.12,15.47,0,27.45,7.27,33.93,21.89l-18.56,8.09c-2.7-7.47-8.38-12.45-16.27-12.45-12.87,0-19.56,12.76-19.56,24.69,0,12.14,7,24.49,19.86,24.49,8.48,0,15-4.57,15.77-13.59h-16v-16Z"/><path class="cls-2" d="M1036.43,1337.13H1056l35.83,47.82h.19v-47.82h19.57v78.22H1092l-35.83-47.93h-.2v47.93h-19.56v-78.22Z"/><path class="cls-2" d="M657.94,1501.79a21,21,0,0,0-17.17-8.61c-12,0-20.06,9.54-20.06,21.68,0,12.35,8.19,21.27,20.36,21.27a22.13,22.13,0,0,0,16.86-8.3v24.38c-6.48,2.07-11.18,3.63-17.27,3.63a41,41,0,0,1-28.24-11.51c-8.28-7.78-12.07-17.95-12.07-29.57a41.78,41.78,0,0,1,11.08-28.63,40,40,0,0,1,28.64-12.66,44.52,44.52,0,0,1,17.86,3.94v24.38Z"/><path class="cls-2" d="M757.9,1513.2c0,25.32-17.46,43.16-41.62,43.16s-41.61-17.85-41.61-43.16c0-23.65,20-40.25,41.61-40.25S757.9,1489.55,757.9,1513.2Zm-62.88.1c0,13.49,9.58,23.35,21.26,23.35s21.26-9.85,21.26-23.35c0-10.78-9.58-20.64-21.26-20.64S695,1502.52,695,1513.3Z"/><path class="cls-2" d="M775.4,1475.55H795l35.83,47.82h.2v-47.82h19.56v78.22H831l-35.83-47.93H795v47.93H775.4Z"/><path class="cls-2" d="M901.69,1553.77H882.13v-61H866v-17.22h51.9v17.22H901.7v61Z"/><path class="cls-2" d="M953,1492.77v13.07H975v17.22H953v13.49H976.2v17.22H933.39v-78.22H976.2v17.22Z"/><path class="cls-2" d="M1038,1495.67a20.13,20.13,0,0,0-13-5.18c-3.59,0-8.38,2.18-8.38,6.54,0,4.56,5.29,6.33,8.68,7.47l5,1.56c10.48,3.21,18.56,8.71,18.56,21.37,0,7.77-1.79,15.77-7.78,21s-13.77,7.37-21.36,7.37a45.22,45.22,0,0,1-26.45-8.92l8.39-16.39c4.89,4.47,10.68,8.1,17.36,8.1,4.59,0,9.48-2.39,9.48-7.88,0-5.71-7.68-7.68-11.87-8.92-12.27-3.63-20.36-6.95-20.36-22.09,0-15.88,10.88-26.26,25.95-26.26a50,50,0,0,1,23.55,6.44Z"/><path class="cls-2" d="M1096.59,1553.77H1077v-61h-16.16v-17.22h51.9v17.22H1096.6v61Z"/><path class="cls-1" d="M631.82,1795.7s46.9,5.65,57.67,11.53c82.71,45.16-9.56,184.55,92.28,184.55,92.28,0-39.51,1.55,141.49,1.55l20-1.55c101.84,0,9.57-139.39,92.28-184.55,10.77-5.88,57.67-11.53,57.67-11.53V1738H631.83v57.67Z"/><g id="Layer_2-2" data-name="Layer 2"><path class="cls-2" d="M1646,1583.28h-10.75v-82.94h12.35c26.54,0,34.77,8.8,34.77,24,0,17.49-13.84,24.2-30.2,24.2H1646v34.76Zm0-44h3.43c11,0,22.88-2,22.88-15.18,0-13-12.81-14.52-23.45-14.52H1646v29.7Z"/><path class="cls-2" d="M1777,1583.28h-13l-25.39-35.09h-4.46v35.09h-10.75v-82.94h13c7.66,0,15.9.11,22.76,3.85a23.21,23.21,0,0,1-9.38,43Zm-42.9-43.67h3.43c11,0,22.88-2,22.88-15.18,0-13-12.81-14.85-23.45-14.85h-2.86v30Z"/><path class="cls-2" d="M1901.18,1541.81c0,24.64-20.25,43.23-45.18,43.23s-45.18-18.59-45.18-43.23c0-23.76,20.47-43.23,45.18-43.23S1901.18,1518.05,1901.18,1541.81Zm-10.76,0c0-18.26-14.18-33.55-34.43-33.55s-34.43,15.29-34.43,33.55c0,18.92,15.78,33.55,34.43,33.55S1890.42,1560.73,1890.42,1541.81Z"/><path class="cls-2" d="M1942.13,1500.34H1960c26.42,0,48.38,13.42,48.38,41,0,28.27-21.5,41.91-48.73,41.91h-17.5v-82.94Zm10.75,73.48h3.77c22,0,40.95-7.92,40.95-32s-19-32-40.95-32h-3.77Z"/><path class="cls-2" d="M2059.83,1500.34v49c0,13.53,4.23,26.07,20.82,26.07s20.82-12.54,20.82-26.07v-49h10.75v52.47c0,18.26-11.78,32.23-31.57,32.23s-31.57-14-31.57-32.23v-52.47Z"/><path class="cls-2" d="M2221.34,1516.18a35.68,35.68,0,0,0-22.76-8.14,33.77,33.77,0,1,0-.23,67.54,35.3,35.3,0,0,0,23-8.58v12.21a48.07,48.07,0,0,1-22.65,5.83c-24.59,0-45-18.81-45-42.79,0-24.53,20.47-43.67,45.87-43.67a42.87,42.87,0,0,1,21.73,5.61v12Z"/><path class="cls-2" d="M2265.61,1500.34h46.32v9.46h-35.57V1533h34.54v9.46h-34.54v31.35h35.57v9.46h-46.32Z"/><path class="cls-2" d="M2355.75,1500.34h17.84c26.42,0,48.38,13.42,48.38,41,0,28.27-21.5,41.91-48.73,41.91h-17.5v-82.94Zm10.75,73.48h3.77c22,0,40.95-7.92,40.95-32s-19-32-40.95-32h-3.77Z"/><path class="cls-2" d="M2527.78,1500.34h10.52c16.24,0,31.57,4.07,31.57,22.77,0,6.05-3.43,13.09-9.26,15.73v.22c10.18,1.76,17.27,11.33,17.27,21,0,16.61-14.75,23.21-30,23.21h-20.13v-82.94Zm10.75,36.74h2.75c10.18,0,18.53-2,18.53-13.86,0-11.66-8.24-13.64-18.3-13.64h-3v27.5Zm0,37h8.24c9.95,0,20.36-2.86,20.36-14.63s-12.35-14.08-22-14.08h-6.63V1574Z"/><path class="cls-2" d="M2612.43,1500.34h12.35l21.16,35.42,21.16-35.42h12.35l-28.14,46.86v36.08h-10.75V1547.2Z"/><path class="cls-2" d="M2035.07,1645.34h43.65l33.5,60.87,33.27-60.87h43.88v165.15h-42v-93l-35.16,61.34h-.7L2076.36,1718v92.48h-41.29Z"/><path class="cls-2" d="M2203.28,1645.34H2317v37.28h-71.72v27.13h64.65v35.15h-64.65v28.31h72.66v37.28H2203.28Z"/><path class="cls-2" d="M2327.14,1645.34h54.26c53.08,0,83.28,32.08,83.28,80.69v2.83c0,48.6-30.43,81.63-84,81.63h-53.56V1645.34Zm42.47,38v89.18h12.27c23.59,0,39.4-13.92,39.4-43.41V1727c0-29.73-15.81-43.65-39.4-43.65Z"/><path class="cls-2" d="M2474.59,1645.34h42.46v165.15h-42.46Z"/><path class="cls-2" d="M2578.63,1644.39h42.94l58.27,166.09h-44.59l-9.67-29.73h-51.9l-9.44,29.73h-43.65ZM2615,1746.78l-15.34-48.36-15.34,48.36Z"/><path class="cls-2" d="M1847.41,1810.75v-35.48h98v35.48Zm89.67-65.94v-35.48h-89.66v35.48Zm8.32-65.94v-35.48h-98v35.48Zm-206.59,41.39-27.61,46c4.78-9.83-2.93-15-7.74-16.49-8.08-3.1-33.43-8.09-49.88-12.9a63.26,63.26,0,0,1-18-8.36,44.17,44.17,0,0,1-18.69-36.26c0-10.21,5.09-51.56,68.51-51.56,52.13,0,66.28,30.48,67.52,48.71h-42.65c-1.51-6.64-7.5-14.45-25.8-14.56-4.22,0-21.13.44-22.77,11.42a9.87,9.87,0,0,0,3.95,9.8c2.62,2,7.31,3.07,9,3.58,7.71,2.32,24.59,5.57,32.89,7.61C1722,1710.77,1732.35,1715.14,1738.81,1720.26Zm-53.68,55.36c-16.77,0-27.73-4.28-31.31-21.54h-43.13c0,6.91,3.62,36.25,29.87,48.56,14.7,6.9,31.12,8.12,43.89,8.12l26.36-43.87C1709,1769.37,1705.32,1775.62,1685.13,1775.62Z"/><path class="cls-12" d="M1847.41,1643.39H1785l-46.19,76.87-27.61,46-.4.67-26.36,43.87h44.49l21.33-35.5h58v35.5h39.2V1643.39Zm-39.19,101.38h-39.65l39.65-66Z"/><path class="cls-12" d="M2680.64,1960.54H1635.71V1841.23H2680.64ZM1945.55,1932a39.4,39.4,0,0,0,23.9-8.09v-31.06h-26v12.92h10.32v9.67a13.43,13.43,0,0,1-7.53,1.95c-8.37,0-14.79-6.6-14.79-18.51v-.93c0-10.79,6.32-18,14.6-18,5.58,0,9.3,2.32,12.74,5.39l9.3-12.74a33.4,33.4,0,0,0-22.41-7.91c-18,0-31.34,13.58-31.34,33.11v1.3C1914.3,1919.42,1927.79,1932,1945.55,1932Zm78.83-1.12H2041v-20.18h6l11.06,20.18h18.88l-13.39-23.62c6.88-3.44,11.62-9.49,11.62-19.16v-.46c0-6.6-2-11.63-5.67-15.25-4.19-4.28-10.79-6.6-19.53-6.6h-25.57Zm16.65-33.47v-17h8.18c5.58,0,9.12,2.79,9.12,8.37v.19c0,5.21-3.35,8.46-9,8.46Zm116.41,34.68c17.48,0,30.23-13.67,30.23-33.11v-1.4c0-19.53-12.56-33-30.13-33s-30.23,13.67-30.23,33.11v1.4C2127.31,1918.58,2139.86,1932.06,2157.44,1932.06Zm.09-15.15c-7.72,0-13.12-6.88-13.12-18.13v-1c0-11.25,5.3-18,13-18s13.11,6.88,13.11,18.13v1C2170.55,1910.12,2165.34,1916.91,2157.53,1916.91ZM2267.61,1932c15.9,0,26.59-8.28,26.59-27.15v-39.06h-16.92v39.8c0,7.72-3.72,11.25-9.58,11.25s-9.58-3.72-9.58-11.53v-39.52h-16.83v39.34C2241.29,1923.6,2251.71,1932,2267.61,1932Zm82.09-1.12h16.65V1912h6.41c14.23-.19,25.58-7.62,25.58-23.25v-.37c0-14.6-10.05-22.6-25.39-22.6H2349.7Zm16.65-32.54v-18.23h5.77c6,0,9.48,3.07,9.48,9v.28c0,5.49-3.53,8.93-9.39,8.93Z"/><path class="cls-12" d="M2696.31,1845h-7.26v-3.71h18.52V1845h-7.26v19.08h-4Z"/><path class="cls-12" d="M2711.73,1841.28H2716l6.94,10.78,6.93-10.78h4.27v22.79h-4v-16.35l-7.2,10.75h-.13l-7.13-10.68v16.28h-3.94v-22.79Z"/></g></g></g></svg></a></div></div></div> <div class="principal-sponsors col-xl-4 col-lg-4 col-md-5 col-sm-6 col-xs-7 col-6 mx-auto bg-light"> <div class="d-flex flex-column "> <div class="principal-sponsors-header mx-auto pt-3 mb-0"> <div class="d-flex justify-content-center"> <h3 class="text-primary">PLATINUM SPONSORS</h3></div></div> <div> <img src='https://res.cloudinary.com/tbmg/f_auto,q_auto:best/v1614086394/ctf/extra/sponsors/sponsors_merged_2021.png' class=' lazyload blur-up' width='725' height='236' alt='Platinum Sponsors' /></div></div></div> <div class="col-xl-2 col-lg-2 col-md-2 d-md-block d-none"> <div class="d-flex flex-row-reverse"> <div id="login-menu" class="navbar-collapse collapse"> <ul class="navbar-nav ms-auto"><li class="nav-item"> <a class="nav-link" href="#" data-bs-toggle="modal" data-bs-target="#cb-form">Login</a></li> <li class="nav-item"> <a class="nav-link" href="/account/registration">Sign Up</a></li></ul></div></div></div></div> </nav> <nav class="main-nav bg-navbar navbar navbar-expand-sm navbar-light main-nav py-0"> <div class="main-nav-container container-xl mx-auto px-0"><div class="menu-top-nav"> <ul class="nav navbar-nav nav-bottom flex-nowrap d-md-flex d-none mx-auto"> <li class="nav-item"> <a class="nav-link " href="/how-to-vote">How to Vote</a></li></ul></div><div class="menu-top-nav"> <ul class="nav navbar-nav nav-bottom flex-nowrap d-md-flex d-none mx-auto"> <li class="nav-item"> <a class="nav-link " href="/about">About</a></li> <li class="nav-item"> <a class="nav-link " href="/contest-rules">Rules & Tips</a></li> <li class="nav-item"> <a class="nav-link " href="/2024/entries">Entries</a></li> <li class="nav-item"> <a class="nav-link " href="/archive">Archive</a></li> <li class="nav-item"> <a class="nav-link " href="/prizes">Prizes</a></li> <li class="nav-item"> <a class="nav-link " href="/faqs">FAQs</a></li> <li class="nav-item"> <a class="nav-link contact-us" href="#contactus">Contact</a></li></ul></div><div id="navbarSideContainer" class="navbar-side h-100 p-0 bg-light"> <ul class="nav flex-column nav"> <li id="navbar-side-close" class="nav-item text-right bg-secondary"> <a class="nav-link pb-0" href="#"> <i class="fas fa-2x fa-window-close"></i> </a></li> <li class="nav-item bg-secondary"><form id="searchform" class="form-inline nav-link w-75" action="/search" method="get"> <div class="input-group"> <input type="text" name="q" placeholder="Search" id="searchbox" class="form-control" value=""> <div class="input-group-append"> <button class="btn btn-primary" type="button" onclick="$('#searchform').submit()"> <span class="fas fa-search"></span> </button></div></div></form></li><li class="nav-item"> <a class="nav-link" href="#" data-bs-toggle="modal" data-bs-target="#cb-form">Login</a></li> <li class="nav-item"> <a class="nav-link" href="/account/registration">Sign Up</a></li> <!--<hr class="border border-secondary w-75">--> <hr class="border-secondary m-0 w-100"> <li class="nav-item"> <a class="nav-link" href="/how-to-vote">How to Vote</a></li><hr class="border-secondary m-0 w-100"> <li class="nav-item"> <a class="nav-link" href="/about">About</a></li> <li class="nav-item"> <a class="nav-link" href="/contest-rules">Rules & Tips</a></li> <li class="nav-item"> <a class="nav-link" href="/2024/entries">Entries</a></li> <li class="nav-item"> <a class="nav-link" href="/archive">Archive</a></li> <li class="nav-item"> <a class="nav-link" href="/prizes">Prizes</a></li> <li class="nav-item"> <a class="nav-link" href="/faqs">FAQs</a></li> <li class="nav-item"> <a class="nav-link" href="#contactus">Contact</a></li></ul></div><div class="overlay"></div></div> </nav></div> </header> <section id="print-only-message" class="printmessage"> </section> <!--googleon: all--> <div class="container"> <nav aria-label="breadcrumb"> <ol itemscope itemtype="https://schema.org/BreadcrumbList" class="breadcrumb pt-3 text-uppercase"> <li class="breadcrumb-item" itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem"> <a itemprop="item" href="/" class="pathway"><span itemprop="name">Home</span></a> <meta itemprop="position" content="1"></li> <li class="breadcrumb-item" itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem"> <a itemprop="item" href="/2023" class="pathway"><span itemprop="name">2023</span></a> <meta itemprop="position" content="2"></li> <li class="breadcrumb-item" itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem"> <a itemprop="item" href="/2023/entries" class="pathway"><span itemprop="name">Entries</span></a> <meta itemprop="position" content="3"></li> <li class="breadcrumb-item" itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem"> <a itemprop="item" href="/2023/entries/medical" class="pathway"><span itemprop="name">Medical</span></a> <meta itemprop="position" content="4"></li> <li class="breadcrumb-item active" aria-current="page"> <span itemprop="name"> Entry</span> <meta itemprop="position" content="5"></li></ol> </nav> <!-- Main story section --> <section id="content" class="row my-3"> <section id="mainstory" class="left-column col-lg-8 col-md-7 .col-12"> <div> <!--googleoff: all--> <div id="system-message-container"></div> <!--googlon: all--> <div class="item-page" itemscope itemtype="https://schema.org/Article"> <meta itemprop="inLanguage" content="en-GB"/> <div class="card entry"> <div class="card-header bg-primary"> <h2 class="font-weight-normal text-white mb-0" itemprop="headline">A Master Metric Predicting Lifespan</h2></div><aside class="ms-auto me-2 mt-1 mb-0 d-inline-block"> <ul class="list-inline mb-0"> <li class="list-inline-item"> <a href="https://www.shareaholic.com/api/share/?apikey=18e410eb5fc79f84f064431251ed4713&apitype=1&v=1&service=facebook&link=https://contest.techbriefs.com/2023/entries/medical/12205&title=A+Master+Metric+Predicting+Lifespan" rel="nofollow" target="_blank"><i class="fa-brands fa-facebook text-secondary"></i></a></li> <li class="list-inline-item"> <i class=""></i> <a href="https://www.shareaholic.com/api/share/?apikey=18e410eb5fc79f84f064431251ed4713&apitype=1&v=1&service=twitter&link=https://contest.techbriefs.com/2023/entries/medical/12205&title=A+Master+Metric+Predicting+Lifespan" rel="nofollow" target="_blank"><i class="fa-brands fa-x-twitter text-secondary"></i></a></li> <li class="list-inline-item"> <a href="https://www.shareaholic.com/api/share/?apikey=18e410eb5fc79f84f064431251ed4713&apitype=1&v=1&service=linkedin&link=https://contest.techbriefs.com/2023/entries/medical/12205&title=A+Master+Metric+Predicting+Lifespan" rel="nofollow" target="_blank"><i class="fa-brands fa-linkedin text-secondary"></i></a></li> <li class="list-inline-item"> <a href="#" onclick="$('html, body').animate({scrollTop:($('#disqus_thread').offset().top)},500);"><i class="fa-duotone fa-comment-alt text-secondary"></i></a></li></ul> </aside><div class="card-body entry-header pt-0"> <!--<div class="container">--> <!-- <div class="row">--> <div class="d-flex"> <div class="flex-fill" itemprop="author" itemscope itemtype="https://schema.org/Person" itemref="thisauthor"> <meta itemprop="url" content="https://contest.techbriefs.com/profile?user=115875"/> <a href="/profile?user=115875"> <span itemprop="name">Jess Goodman</span> </a> <br/> <span itemprop="address" itemscope itemtype="https://schema.org/PostalAddress"> <span itemprop="addressLocality">Mississauga</span>, <span itemprop="addressCountry" itemscope itemtype="https://schema.org/Country"> <span itemprop="name">Canada</span> </span> </span></div> <div class="flex-fill px-2"> <a href="/2023/top-votes">Votes</a>: 0<br/>Views: 1096</div> <div class="flex-fill"> <a href="/2023/entries/medical"> <span itemprop="articleSection">Medical</span> </a> <br/> <span itemprop="datePublished" content="2023-05-18">May 18, 2023</span></div></div> <!--</div>--> <!--</div>--> </div> <div itemprop="articleBody"> <!-- JoomlaWorks "Disqus Comments (for Joomla)" (v3.7.0) starts here --> <a id="startOfPage"></a> <div id="entry-carousel-modal-outer-1" class="modal fade " tabindex="-1" role="dialog" aria-labelledby="myExtraLargeModalLabel" aria-hidden="true"> <div class="modal-dialog modal-dialog-centered modal-xl"> <div class="modal-content"> <div class="modal-header bg-primary"> <a href="#" class="ms-auto" data-bs-dismiss="modal" aria-label="Close"> <span aria-hidden="true"><i class="fas fa-times-square fa-2x text-white"></i></span> </a></div> <div class="modal-body"> <img src='https://res.cloudinary.com/tbmg/c_scale,w_1000,f_auto,q_auto/v1687666428/ctf/entries/2023/0518181005-iheart_vs_sphygmocor_aopwv.png' class='d-block w-100 lazyload blur-up' width='1000' alt='' /></div></div></div></div> <div id="entry-carousel-modal-outer-2" class="modal fade " tabindex="-1" role="dialog" aria-labelledby="myExtraLargeModalLabel" aria-hidden="true"> <div class="modal-dialog modal-dialog-centered modal-xl"> <div class="modal-content"> <div class="modal-header bg-primary"> <a href="#" class="ms-auto" data-bs-dismiss="modal" aria-label="Close"> <span aria-hidden="true"><i class="fas fa-times-square fa-2x text-white"></i></span> </a></div> <div class="modal-body"> <img src='https://res.cloudinary.com/tbmg/c_scale,w_1000,f_auto,q_auto/v1687666428/ctf/entries/2023/0518181005-IMG_0589.jpg' class='d-block w-100 lazyload blur-up' width='1000' alt='' /></div></div></div></div> <div id="entry-carousel-modal-outer-3" class="modal fade " tabindex="-1" role="dialog" aria-labelledby="myExtraLargeModalLabel" aria-hidden="true"> <div class="modal-dialog modal-dialog-centered modal-xl"> <div class="modal-content"> <div class="modal-header bg-primary"> <a href="#" class="ms-auto" data-bs-dismiss="modal" aria-label="Close"> <span aria-hidden="true"><i class="fas fa-times-square fa-2x text-white"></i></span> </a></div> <div class="modal-body"> <img src='https://res.cloudinary.com/tbmg/c_scale,w_1000,f_auto,q_auto/v1687666428/ctf/entries/2023/0518181005-139BD5DF-4973-41AE-B2C0-BC87DFB07B04-2967-0000019CA56719AD.png' class='d-block w-100 lazyload blur-up' width='1000' alt='' /></div></div></div></div> <div class="card-body entry-images border-bottom border-top p-1"> <div id="entry-carousel" class="carousel slide" data-bs-ride="carousel"> <div class="carousel-inner pt-2"> <div class="carousel-item active"> <a class="badge bg-primary float-end position-relative me-4" style="z-index: 10; top: 1rem" href="#" role="button" data-bs-target="#entry-carousel-modal-outer-1" data-bs-toggle="modal"> <div data-bs-toggle="tooltip" data-bs-placement="top" title="View fullsize image"> <i class="fas fa-expand-arrows "></i></div> </a> <a href="#" data-bs-target="#entry-carousel-modal-outer-1" data-bs-toggle="modal"> <span itemprop="associatedMedia" itemscope itemtype="https://schema.org/ImageObject"> <img src='https://res.cloudinary.com/tbmg/c_scale,w_800,f_auto,q_auto/v1687666428/ctf/entries/2023/0518181005-iheart_vs_sphygmocor_aopwv.png' class='d-block w-100 mt-n4 lazyload blur-up' width='800' alt='' /><meta itemprop="url" content="https://contest.techbriefs.com/https://res.cloudinary.com/tbmg/q_auto,f_auto/ctf/stories/entries/2023/0518181005-iheart_vs_sphygmocor_aopwv.png"/> <meta itemprop="height" content="492"/> <meta itemprop="width" content="471"/> </span> </a></div> <div class="carousel-item"> <a class="badge bg-primary float-end position-relative me-4" style="z-index: 10; top: 1rem" href="#" role="button" data-bs-target="#entry-carousel-modal-outer-2" data-bs-toggle="modal"> <div data-bs-toggle="tooltip" data-bs-placement="top" title="View fullsize image"> <i class="fas fa-expand-arrows "></i></div> </a> <a href="#" data-bs-target="#entry-carousel-modal-outer-2" data-bs-toggle="modal"> <span itemprop="associatedMedia" itemscope itemtype="https://schema.org/ImageObject"> <img src='https://res.cloudinary.com/tbmg/c_scale,w_800,f_auto,q_auto/v1687666428/ctf/entries/2023/0518181005-IMG_0589.jpg' class='d-block w-100 mt-n4 lazyload blur-up' width='800' alt='' /><meta itemprop="url" content="https://contest.techbriefs.com/https://res.cloudinary.com/tbmg/q_auto,f_auto/ctf/stories/entries/2023/0518181005-IMG_0589.jpg"/> <meta itemprop="height" content="1059"/> <meta itemprop="width" content="1294"/> </span> </a></div> <div class="carousel-item"> <a class="badge bg-primary float-end position-relative me-4" style="z-index: 10; top: 1rem" href="#" role="button" data-bs-target="#entry-carousel-modal-outer-3" data-bs-toggle="modal"> <div data-bs-toggle="tooltip" data-bs-placement="top" title="View fullsize image"> <i class="fas fa-expand-arrows "></i></div> </a> <a href="#" data-bs-target="#entry-carousel-modal-outer-3" data-bs-toggle="modal"> <span itemprop="associatedMedia" itemscope itemtype="https://schema.org/ImageObject"> <img src='https://res.cloudinary.com/tbmg/c_scale,w_800,f_auto,q_auto/v1687666428/ctf/entries/2023/0518181005-139BD5DF-4973-41AE-B2C0-BC87DFB07B04-2967-0000019CA56719AD.png' class='d-block w-100 mt-n4 lazyload blur-up' width='800' alt='' /><meta itemprop="url" content="https://contest.techbriefs.com/https://res.cloudinary.com/tbmg/q_auto,f_auto/ctf/stories/entries/2023/0518181005-139BD5DF-4973-41AE-B2C0-BC87DFB07B04-2967-0000019CA56719AD.png"/> <meta itemprop="height" content="570"/> <meta itemprop="width" content="431"/> </span> </a></div></div> <div class="container pt-2 pb-1 border-top"> <div class="row"> <div class="col-1"></div> <div class="col-10 carousel-indicators " data-bs-toggle="tooltip" data-bs-placement="bottom" title="Goto slide"> <a class="w-33 px-2 active" href="#" type="button" data-bs-target="#entry-carousel" data-bs-slide-to="0" aria-label="Slide 1" > <img src='https://res.cloudinary.com/tbmg/ar_4:3,c_thumb,g_auto:subject,f_auto,q_auto/c_limit,w_200/v1687666428/ctf/entries/2023/0518181005-iheart_vs_sphygmocor_aopwv.png' class='w-100 mb-0 lazyload blur-up' width='200' alt='' /></a> <a class="w-33 px-2" href="#" type="button" data-bs-target="#entry-carousel" data-bs-slide-to="1" aria-label="Slide 2" > <img src='https://res.cloudinary.com/tbmg/ar_4:3,c_thumb,g_auto:subject,f_auto,q_auto/c_limit,w_200/v1687666428/ctf/entries/2023/0518181005-IMG_0589.jpg' class='w-100 mb-0 lazyload blur-up' width='200' alt='' /></a> <a class="w-33 px-2" href="#" type="button" data-bs-target="#entry-carousel" data-bs-slide-to="2" aria-label="Slide 3" > <img src='https://res.cloudinary.com/tbmg/ar_4:3,c_thumb,g_auto:subject,f_auto,q_auto/c_limit,w_200/v1687666428/ctf/entries/2023/0518181005-139BD5DF-4973-41AE-B2C0-BC87DFB07B04-2967-0000019CA56719AD.png' class='w-100 mb-0 lazyload blur-up' width='200' alt='' /></a></div> <div class="col-1"></div></div></div></div></div> <div class="card-body entry-description border-bottom p-3"> <p>Aortic Stiffness is a ‘master metric’ well known to predict risk of death from all causes. Aortic Stiffness is known to be a surrogate measure of spinal flexibility and Inner Mobility. With youthful Aortic Stiffness there is full mobility of the spine, rib cage, diaphragm muscle and other core tissues allowing each breath to act as an engine of health.<p>With youthful Inner Mobility each breath compressed and releases the abdominal internal organs promoting organ micro circulation and organ function, with each breath air fills the lungs and blood returns to the heart, with each breath cerebrospinal fluid is pumped up the spine to nourish the brain.<p>Aortic Stiffness improves consistently with exercise, healthy diet and stress management. Tracking Aortic Stiffness allows individuals to objectively recognize the benefit of making healthy lifestyle choices on a daily basis. <p>Aortic Stiffness is usually measured using research grade equipment costing over $20K and requiring use of a trained technician. Having a simple to use and affordable way to measure Aortic Stiffness would lead to widespread use of this Master Metric by individuals and medical practitioners. <p>The iHeart Precision Oximeter www.goiheart.com is able to measure Aortic Stiffness using the fingertip arterial pulse signal. iHeart Oximeter measured Aortic Stiffness has been tested against gold standard Aortic Stiffness measurement systems and correlates well.<p></p></div> <div class="card-body entry-voting border-bottom p-3"> <h3 class="mb-0">Voting</h3> <p class="voting-message"> Voting is closed!</p></div> <div class="card-body"></div><ul class="list-group list-group-flush entry-prize-list border-top-0"> <li class="list-group-item"> <h3>ABOUT THE ENTRANT</h3></li> <li class="list-group-item"> <div class="row"> <div class="col-4"><b>Name: </b></div> <div class="col">Jess Goodman</div></div></li> <li class="list-group-item"> <div class="row"> <div class="col-4"><b>Type of entry: </b></div> <div class="col">individual<br/></div></div></li> <li class="list-group-item"> <div class="row"> <div class="col-4"><b>Software used for this entry:</b></div> <div class="col">iOS and Android apps are available</div></div></li> <li class="list-group-item"> <div class="row"> <div class="col-4"><b>Patent status:</b></div> <div class="col">patent</div></div></li></ul></div> <!-- Disqus comments block --> <div class="jwDisqusForm"> <div id="disqus_thread"></div> <script> var disqus_developer = '0'; var disqus_config = function(){ this.page.url = 'https://contest.techbriefs.com/2023/entries/medical/12205-0518-181005-a-master-metric-predicting-lifespan'; this.page.identifier = '0ff07f9d5c_id12205'; this.language = ''; }; (function() { var d = document, s = d.createElement('script'); s.src = 'https://createthefuture.disqus.com/embed.js'; s.setAttribute('data-timestamp', +new Date()); (d.head || d.body).appendChild(s); })(); </script> <noscript> <a href="https://createthefuture.disqus.com/?url=ref_noscript">View the discussion thread.</a> </noscript> <div id="jwDisqusFormFooter"> <a id="jwDisqusBackToTop" href="#startOfPage"> back to top </a> <div class="clr"></div></div></div> <div class="clr"></div> <!-- JoomlaWorks "Disqus Comments (for Joomla)" (v3.7.0) ends here --> </div></div></div> </section> <!--googleoff: all--> <section id="sidebar" class="right-column col-lg-4 col-md-5 d-md-block d-none"> <div><div class="module card text-center mb-3"> <div class="card-header py-1"> <h4>Gold Sponsor</h4></div> <div id="mod-custom237" class="mod-custom custom"> <p><a href="/sponsors/12071" target="_blank" rel="noopener noreferrer"> <img style="padding-top: 10px;" data-src="https://res.cloudinary.com/tbmg/q_auto,f_auto/ctf/extra/sponsors/Zeus-Logo-200.png" alt="Zeus logo" border="0" / class="lazyload"></a></p></div></div> <div class="module card text-center mb-3"> <div class="card-header py-1"> <h4>View Entries by</h4></div> <div id="mod-custom260" class="mod-custom custom"> <div class="card-body"> <h4>Contest Category</h4></div> <ul class="list-group list-group-flush"> <li class="list-group-item"><a href="/2024/entries/aerospace-and-defense/by-date">Aerospace & Defense</a></li> <li class="list-group-item"><a href="/2024/entries/automotive-transportation/by-date">Automotive/Transportation</a></li> <li class="list-group-item"><a href="/2024/entries/medical/by-date">Medical</a></li> <li class="list-group-item"><a href="/2024/entries/electronics/by-date">Electronics</a></li> <li class="list-group-item"><a href="/2024/entries/manufacturing-and-materials/by-date">Manufacturing & Materials</a></li> <li class="list-group-item"><a href="/2024/entries/robotics-and-automation/by-date">Robotics & Automation</a></li> <li class="list-group-item"><a href="/2024/entries/sustainable-technology/by-date">Sustainable Technology</a></li></ul> <div class="card-body"> <h4>Also</h4></div> <ul class="list-group list-group-flush"> <li class="list-group-item"><a href="/tags">Tag Cloud</a></li> <li class="list-group-item"><a href="/2024/entrants">2024 Entrants</a></li> <li class="list-group-item"><a href="/2024/top-votes">Number of Votes</a></li> <li class="list-group-item"><a href="/2024/entries/by-views">Number of Page Views</a></li> <li class="list-group-item"><a href="/2024/entries">View All Entries</a></li></ul></div></div> <div class="module card text-center mb-3"> <div class="card-header py-1"> <h4>2023 Contest Results</h4></div> <div id="mod-custom216" class="mod-custom custom"> <ul class="list-group list-group-flush"> <li class="list-group-item"><a href="/2023/winners">Grand Prize & Category Winners</a></li> <li class="list-group-item"><a href="/2023/top-100">Top 100 Entries</a></li> <li class="list-group-item"><a href="/2023/entries">Browse All the Entries</a></li> <li class="list-group-item"><a href="/2023/top-votes">Final Voting Scoreboard</a></li> <li class="list-group-item"><a href="/2023/judges">Meet the Judges </a></li></ul></div></div> <div class="_right"> <h3>Follow Us</h3> <div id="ctf_followus" class="mt-3"> <a class="text-info fs-5" href="https://www.shareaholic.com/v2/follow/?apikey=18e410eb5fc79f84f064431251ed4713&service_nickname=facebook&username=CreateTheFutureContest" rel="nofollow" target="_blank"><i class="fa-brands fa-facebook fa-2xl"></i></a> <a class="text-info fs-5 ms-4" href="https://www.shareaholic.com/v2/follow/?apikey=18e410eb5fc79f84f064431251ed4713&service_nickname=twitter&username=CTFcontest" rel="nofollow" target="_blank"><i class="fa-brands fa-twitter fa-2xl"></i></a> <a class="text-info fs-5 ms-4" href="https://www.shareaholic.com/v2/follow/?apikey=18e410eb5fc79f84f064431251ed4713&service_nickname=linkedin_company&username=sae-media-group" rel="nofollow" target="_blank"><i class="fa-brands fa-linkedin fa-2xl"></i></a></div></div></div> </section> <!--googlon: all--> </section> <!--googleoff: all--> <div id="footer"> <footer> <div class="loginbar"> <div id="cb-form" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true" > <div class="modal-dialog modal-sm mt-5" role="document"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title" id="exampleModalLabel">Sign In</h5> <button type="button" class="btn btn-secondary" data-bs_dismiss="modal" aria-label="Close"> <span aria-hidden="true">×</span> </button></div> <div class="modal-body"> <form action="https://contest.techbriefs.com/account/login" method="post" id="login-form" class="form-inline cbLoginForm" data-bs-target="#cb-form"> <input type="hidden" name="option" value="com_comprofiler"/> <input type="hidden" name="view" value="login"/> <input type="hidden" name="op2" value="login"/> <input type="hidden" name="return" value="B:aHR0cHM6Ly9jb250ZXN0LnRlY2hicmllZnMuY29tLzIwMjMvZW50cmllcy9tZWRpY2FsLzEyMjA1"/> <input type="hidden" name="message" value="0"/> <input type="hidden" name="loginfrom" value="loginmodule"/> <input type="hidden" name="f45ef576707e1fdcf886f15e026168e7" value="1" /> <div class="form-group mb-3 w-100"> <input name="username" type="username" class="form-control col-8" id="inputUserName" aria-describedby="userNameHelp" placeholder="Username"></div> <div class="form-group mb-3 w-100"> <input name="passwd" type="password" class="form-control col-8" id="inputPassword" placeholder="Password"></div> <button type="submit" class="btn btn-primary offset-2 col-8 mb-3">Submit <i class="fas fa-sign-in"></i></button> <a href="https://contest.techbriefs.com/account/forgot-login" class=" offset-2 col-8"> <span class="fas fa-unlock-alt"></span></span> Forgot Login? </a></form></div></div></div></div></div> <div class=" notify"> <div id="mod-custom142" class="mod-custom custom"> <p> Contest Notifications: <a href="/2023/winners">Click here for the full list of 2023 winning entries</a></p></div></div> <div class=""> <ul class="mod-menu mod-list nav "> <li class="nav-item item-10"><a href="https://www.saemediagroup.com/" >© 2024 SAE Media Group</a></li><li class="nav-item item-9"><a href="/privacy" class="ms-3">Privacy Policy</a></li><li class="nav-item item-854"><a href="https://status.saemediagroup.com/" class="ms-3">Service Status</a></li></ul></div> </footer> <!-- End of footer --> </div> <!--googleon: all--> </div> <!--googleoff: all--> <script src="https://cdnjs.cloudflare.com/ajax/libs/cloudinary-core/2.13.1/cloudinary-core-shrinkwrap.min.js" tb-donotmove crossorigin="anonymous" referrerpolicy="no-referrer" integrity="sha512-stp48jOOmT4TXnB4bMJ0rlcR7XagE92cqr7pEb+oFQox6qNSyKiN31GajDsg5VVn+HgM5mhOZinSRXowsRmgPg=="></script><script src="https://kit.fontawesome.com/796c614b26.js" tb-donotmove async crossorigin="anonymous" referrerpolicy="no-referrer"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/masonry/4.2.2/masonry.pkgd.min.js" tb-donotmove async crossorigin="anonymous" referrerpolicy="no-referrer" integrity="sha512-JRlcvSZAXT8+5SQQAvklXGJuxXTouyq8oIMaYERZQasB8SBDHZaUbeASsJWpk0UUrf89DP3/aefPPrlMR1h1yQ=="></script><script src="https://cdnjs.cloudflare.com/ajax/libs/lazysizes/5.3.2/lazysizes.min.js" tb-donotmove async crossorigin="anonymous" referrerpolicy="no-referrer" integrity="sha512-q583ppKrCRc7N5O0n2nzUiJ+suUv7Et1JGels4bXOaMFQcamPk9HjdUknZuuFjBNs7tsMuadge5k9RzdmO+1GQ=="></script><script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js" tb-donotmove crossorigin="anonymous" referrerpolicy="no-referrer" integrity="sha512-v2CJ7UaYy4JwqLDIrZUI/4hqeoQieOmAZNXBeQyjo21dadnwR+8ZaIJVT8EE2iyI61OV8e6M8PP2/4hpQINQ/g=="></script><script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap/5.2.3/js/bootstrap.bundle.min.js" tb-donotmove crossorigin="anonymous" referrerpolicy="no-referrer" integrity="sha512-i9cEfJwUwViEPFKdC1enz4ZRGBj8YQo6QByFTF92YXHi7waCqyexvRD75S5NVTsSiTv7rKWqG9Y5eFxmRsOn0A=="></script><script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.14.0-beta3/js/bootstrap-select.min.js" defer tb-donotmove crossorigin="anonymous" referrerpolicy="no-referrer" integrity="sha512-yrOmjPdp8qH8hgLfWpSFhC/+R9Cj9USL8uJxYIveJZGAiedxyIxwNw4RsLDlcjNlIRR4kkHaDHSmNHAkxFTmgg=="></script><script type="text/javascript" tb-donotmove> $(function () { var cl = cloudinary.Cloudinary.new({ cloud_name: "tbmg" }); cl.config({ defaultBreakpoints: [100,200,400,500,800,1000,1200], responsive_use_breakpoints: true, }); cl.responsive(); }); var match_md_max = window.matchMedia("(max-width: 991px)"); $(function () { var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]')) var tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) { return new bootstrap.Tooltip(tooltipTriggerEl) }) }); </script> <link rel="preload" href="https://cdn.shareaholic.net/assets/pub/shareaholic.js" as="script"/> <meta name="shareaholic:site_id" content="18e410eb5fc79f84f064431251ed4713"/> <script data-cfasync="false" async src="https://cdn.shareaholic.net/assets/pub/shareaholic.js"></script> <script tb-donotmove> window.fwSettings = { 'widget_id': 30000000144 }; !function () { if ("function" != typeof window.FreshworksWidget) { var n = function () { n.q.push(arguments) }; n.q = [], window.FreshworksWidget = n } }() </script> <script type='text/javascript' src='https://widget.freshworks.com/widgets/30000000144.js' async defer tb-donotmove> </script> <script src="/media/system/js/core.js" tb-donotmove></script> <!--googleon: all--> <!-- moved to end by ntb_minifier --> <link href="https://olytics.omeda.com/olytics/css/v3/p/olytics.css" rel="stylesheet" /> <link href="/components/com_comprofiler/plugin/templates/default/bootstrap.min.css?v=49a2bdfe30936590" rel="stylesheet" /> <link href="/components/com_comprofiler/plugin/templates/default/fontawesome.min.css?v=49a2bdfe30936590" rel="stylesheet" /> <link href="/components/com_comprofiler/plugin/templates/default/template.min.css?v=49a2bdfe30936590" rel="stylesheet" /> <script src="/media/system/js/core.js?37ffe4186289eba9c5df81bea44080aff77b9684"></script> <script src="/media/vendor/bootstrap/js/bootstrap-es5.min.js?5.3.2" nomodule defer></script> <script src="/media/vendor/bootstrap/js/tab.min.js?5.3.2" type="module"></script> <script src="/media/vendor/bootstrap/js/popover.min.js?5.3.2" type="module"></script> <script src="/media/vendor/bootstrap/js/modal.min.js?5.3.2" type="module"></script> <script src="/media/vendor/bootstrap/js/dropdown.min.js?5.3.2" type="module"></script> <script src="/media/vendor/bootstrap/js/carousel.min.js?5.3.2" type="module"></script> <link rel="stylesheet" href="/templates/ctf_2019/css/template.min.css?t=1716788610" crossorigin="anonymous" referrerpolicy="no-referrer" integrity="sha512-F9gZzNqGLMtFzYq2oxq8kTyzLIjCuSsA2lb2mTTPvqkKnEZ0oqTEpujAJ5zywetxQT4izs4tIjAWmpw/QYCXPQ=="/> <script src="https://cdnjs.cloudflare.com/ajax/libs/lazysizes/5.3.2/plugins/print/ls.print.min.js" defer crossorigin="anonymous" referrerpolicy="no-referrer" integrity="sha512-tY3D/iSWSdQE2NSLW/mRWQd/bvHAGjyCLRwSd23sqNbbgVnUaah2t+ZpX7hdBOskZ7PqYvwe4E+qxNARGojJGQ=="></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/limonte-sweetalert2/11.14.5/sweetalert2.all.min.js" crossorigin="anonymous" referrerpolicy="no-referrer" integrity="sha512-m4zOGknNg3h+mK09EizkXi9Nf7B3zwsN9ow+YkYIPZoA6iX2vSzLezg4FnW0Q6Z1CPaJdwgUFQ3WSAUC4E/5Hg=="></script> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.14.0-beta3/css/bootstrap-select.min.css" media="print" onload="this.media='all'" crossorigin="anonymous" referrerpolicy="no-referrer" integrity="sha512-g2SduJKxa4Lbn3GW+Q7rNz+pKP9AWMR++Ta8fgwsZRCUsawjPvF/BxSMkGS61VsR9yinGoEgrHPGPn2mrj8+4w=="/> <!-- inline scripts moved by ntb_minifier --> <script> /*! inlined from /media/system/js/keepalive-es5.min.js by ntb_minifier */ (function(){'use strict';if(!window.Joomla){throw new Error('Joomla API was not properly initialised');} var keepAliveOptions=Joomla.getOptions('system.keepalive');var keepAliveInterval=keepAliveOptions&&keepAliveOptions.interval?parseInt(keepAliveOptions.interval,10):45*1000;var keepAliveUri=keepAliveOptions&&keepAliveOptions.uri?keepAliveOptions.uri.replace(/&/g,'&'):'';if(keepAliveUri===''){var systemPaths=Joomla.getOptions('system.paths');keepAliveUri=(systemPaths?systemPaths.root+"/index.php":window.location.pathname)+"?option=com_ajax&format=json";} setInterval(function(){return fetch(keepAliveUri,{method:'POST'});},keepAliveInterval);})(); /*! inlined from /media/plg_system_webauthn/js/login.min.js by ntb_minifier */ window.Joomla=window.Joomla||{};((Joomla,document)=>{const interpolateParameters=(object,prefix='')=>{let encodedString='';Object.keys(object).forEach(prop=>{if(typeof object[prop]!=='object'){if(encodedString.length>0){encodedString+='&';} if(prefix===''){encodedString+=`${encodeURIComponent(prop)}=${encodeURIComponent(object[prop])}`;}else{encodedString+=`${encodeURIComponent(prefix)}[${encodeURIComponent(prop)}]=${encodeURIComponent(object[prop])}`;} return;} encodedString+=`${interpolateParameters(object[prop], prop)}`;});return encodedString;};const findField=(form,fieldSelector)=>{const elInputs=form.querySelectorAll(fieldSelector);if(!elInputs.length){return null;} return elInputs[0];};const lookForField=(outerElement,fieldSelector)=>{let elInput=null;if(!outerElement){return elInput;} const elElement=outerElement.parentElement;if(elElement.nodeName==='FORM'){elInput=findField(elElement,fieldSelector);return elInput;} const elForms=elElement.querySelectorAll('form');if(elForms.length){for(let i=0;i<elForms.length;i+=1){elInput=findField(elForms[i],fieldSelector);if(elInput!==null){return elInput;}}} return null;};const handleLoginError=message=>{Joomla.renderMessages({error:[message]});};const handleLoginChallenge=publicKey=>{const arrayToBase64String=a=>btoa(String.fromCharCode(...a));const base64url2base64=input=>{let output=input.replace(/-/g,'+').replace(/_/g,'/');const pad=output.length%4;if(pad){if(pad===1){throw new Error('InvalidLengthError: Input base64url string is the wrong length to determine padding');} output+=new Array(5-pad).join('=');} return output;};if(!publicKey.challenge){handleLoginError(Joomla.Text._('PLG_SYSTEM_WEBAUTHN_ERR_INVALID_USERNAME'));return;} publicKey.challenge=Uint8Array.from(window.atob(base64url2base64(publicKey.challenge)),c=>c.charCodeAt(0));if(publicKey.allowCredentials){publicKey.allowCredentials=publicKey.allowCredentials.map(data=>{data.id=Uint8Array.from(window.atob(base64url2base64(data.id)),c=>c.charCodeAt(0));return data;});} navigator.credentials.get({publicKey}).then(data=>{const publicKeyCredential={id:data.id,type:data.type,rawId:arrayToBase64String(new Uint8Array(data.rawId)),response:{authenticatorData:arrayToBase64String(new Uint8Array(data.response.authenticatorData)),clientDataJSON:arrayToBase64String(new Uint8Array(data.response.clientDataJSON)),signature:arrayToBase64String(new Uint8Array(data.response.signature)),userHandle:data.response.userHandle?arrayToBase64String(new Uint8Array(data.response.userHandle)):null}};const paths=Joomla.getOptions('system.paths');window.location=`${paths ? `${paths.base}/index.php` : window.location.pathname}?${Joomla.getOptions('csrf.token')}=1&option=com_ajax&group=system&plugin=webauthn&`+`format=raw&akaction=login&encoding=redirect&data=${btoa(JSON.stringify(publicKeyCredential))}`;}).catch(error=>{handleLoginError(error);});};Joomla.plgSystemWebauthnLogin=formId=>{const elFormContainer=document.getElementById(formId);const elUsername=lookForField(elFormContainer,'input[name=username]');const elReturn=lookForField(elFormContainer,'input[name=return]');if(elUsername===null){Joomla.renderMessages({error:[Joomla.Text._('PLG_SYSTEM_WEBAUTHN_ERR_CANNOT_FIND_USERNAME')]});return false;} const username=elUsername.value;const returnUrl=elReturn?elReturn.value:null;if(username===''){Joomla.renderMessages({error:[Joomla.Text._('PLG_SYSTEM_WEBAUTHN_ERR_EMPTY_USERNAME')]});return false;} const postBackData={option:'com_ajax',group:'system',plugin:'webauthn',format:'raw',akaction:'challenge',encoding:'raw',username,returnUrl};postBackData[Joomla.getOptions('csrf.token')]=1;const paths=Joomla.getOptions('system.paths');Joomla.request({url:`${paths ? `${paths.base}/index.php` : window.location.pathname}?${Joomla.getOptions('csrf.token')}=1`,method:'POST',data:interpolateParameters(postBackData),onSuccess(rawResponse){let jsonData={};try{jsonData=JSON.parse(rawResponse);}catch(e){} handleLoginChallenge(jsonData);},onError:xhr=>{handleLoginError(`${xhr.status} ${xhr.statusText}`);}});return false;};const loginButtons=[].slice.call(document.querySelectorAll('.plg_system_webauthn_login_button'));if(loginButtons.length){loginButtons.forEach(button=>{button.addEventListener('click',({currentTarget})=>{Joomla.plgSystemWebauthnLogin(currentTarget.getAttribute('data-webauthn-form'));});});}})(Joomla,document); /*! inlined from /media/mod_menu/js/menu-es5.min.js by ntb_minifier */ (function(){'use strict';(function(){function topLevelMouseOver(el,settings){var ulChild=el.querySelector('ul');if(ulChild){ulChild.setAttribute('aria-hidden','false');ulChild.classList.add(settings.menuHoverClass);}} function topLevelMouseOut(el,settings){var ulChild=el.querySelector('ul');if(ulChild){ulChild.setAttribute('aria-hidden','true');ulChild.classList.remove(settings.menuHoverClass);}} function setupNavigation(nav){var settings={menuHoverClass:'show-menu',dir:'ltr'};var topLevelChilds=nav.querySelectorAll(':scope > li');topLevelChilds.forEach(function(topLevelEl){var linkEl=topLevelEl.querySelector('a');if(linkEl){linkEl.tabIndex='0';linkEl.addEventListener('mouseover',topLevelMouseOver(topLevelEl,settings));linkEl.addEventListener('mouseout',topLevelMouseOut(topLevelEl,settings));} var spanEl=topLevelEl.querySelector('span');if(spanEl){spanEl.tabIndex='0';spanEl.addEventListener('mouseover',topLevelMouseOver(topLevelEl,settings));spanEl.addEventListener('mouseout',topLevelMouseOut(topLevelEl,settings));} topLevelEl.addEventListener('mouseover',function(_ref){var target=_ref.target;var ulChild=target.querySelector('ul');if(ulChild){ulChild.setAttribute('aria-hidden','false');ulChild.classList.add(settings.menuHoverClass);}});topLevelEl.addEventListener('mouseout',function(_ref2){var target=_ref2.target;var ulChild=target.querySelector('ul');if(ulChild){ulChild.setAttribute('aria-hidden','true');ulChild.classList.remove(settings.menuHoverClass);}});topLevelEl.addEventListener('focus',function(_ref3){var target=_ref3.target;var ulChild=target.querySelector('ul');if(ulChild){ulChild.setAttribute('aria-hidden','true');ulChild.classList.add(settings.menuHoverClass);}});topLevelEl.addEventListener('blur',function(_ref4){var target=_ref4.target;var ulChild=target.querySelector('ul');if(ulChild){ulChild.setAttribute('aria-hidden','false');ulChild.classList.remove(settings.menuHoverClass);}});topLevelEl.addEventListener('keydown',function(event){var keyName=event.key;var curEl=event.target;var curLiEl=curEl.parentElement;var curUlEl=curLiEl.parentElement;var prevLiEl=curLiEl.previousElementSibling;var nextLiEl=curLiEl.nextElementSibling;if(!prevLiEl){prevLiEl=curUlEl.children[curUlEl.children.length-1];} if(!nextLiEl){var _curUlEl$children=curUlEl.children;nextLiEl=_curUlEl$children[0];} switch(keyName){case'ArrowLeft':event.preventDefault();if(settings.dir==='rtl'){nextLiEl.children[0].focus();}else{prevLiEl.children[0].focus();} break;case'ArrowRight':event.preventDefault();if(settings.dir==='rtl'){prevLiEl.children[0].focus();}else{nextLiEl.children[0].focus();} break;case'ArrowUp':{event.preventDefault();var parent=curLiEl.parentElement.parentElement;if(parent.nodeName==='LI'){parent.children[0].focus();}else{prevLiEl.children[0].focus();} break;} case'ArrowDown':event.preventDefault();if(curLiEl.classList.contains('parent')){var child=curLiEl.querySelector('ul');if(child!=null){var childLi=child.querySelector('li');childLi.children[0].focus();}else{nextLiEl.children[0].focus();}}else{nextLiEl.children[0].focus();} break;}});});} document.addEventListener('DOMContentLoaded',function(){var navs=document.querySelectorAll('.nav');[].forEach.call(navs,function(nav){setupNavigation(nav);});});})();})();(function(){var cx='015407278790088682131:yshqqymtj30';var gcse=document.createElement('script');gcse.type='text/javascript';gcse.async=true;gcse.src=(document.location.protocol=='https:'?'https:':'http:')+'//www.google.com/cse/cse.js?cx='+cx;var s=document.getElementsByTagName('script')[0];s.parentNode.insertBefore(gcse,s);})();window.olytics||(window.olytics=[]),window.olytics.methods=["fire","confirm"],window.olytics.factory=function(i){return function(){var t=Array.prototype.slice.call(arguments);return t.unshift(i),window.olytics.push(t),window.olytics}};for(var i=0;i<window.olytics.methods.length;i++){var method=window.olytics.methods[i];window.olytics[method]=window.olytics.factory(method)} olytics.load=function(i){if(!document.getElementById("olyticsImport")){window.a=window.olytics;var t=document.createElement("script");t.async=!0,t.id="olyticsImport",t.type="text/javascript";var o="";void 0!==i&&void 0!==i.oid&&(o=i.oid),t.setAttribute("data-oid",o),t.src="https://olytics.omeda.com/olytics/js/v3/p/olytics.min.js",t.addEventListener("load",function(t){for(olytics.initialize({Olytics:i});window.a.length>0;){var o=window.a.shift(),s=o.shift();olytics[s]&&olytics[s].apply(olytics,o)}},!1);var s=document.getElementsByTagName("script")[0];s.parentNode.insertBefore(t,s)}},olytics.load({oid:"c1d61b8c10b7440fb3c59fe5b6424a6b"});$(document).ready(function(){olytics.fire({behaviorId:'7566A8018245A8G',category:'Entry',tag:'Medical,["Exercise","Health","Mobile","Sensors"]'});});$(document).ready(function(){$('#cb-form').on('shown.bs.modal',function(){$('#inputUserName').focus();})});var _extraWatchParams=_extraWatchParams||[];_extraWatchParams.projectId='db832384-b716-4141-b539-b453c5613e25';(function(){var ew=document.createElement('script');ew.type='text/javascript';ew.async=true;ew.src='https://agent.extrawatch.com/agent/js/ew.js';var s=document.getElementsByTagName('script')[0];s.parentNode.insertBefore(ew,s);})();FreshworksWidget('hide','launcher');FreshworksWidget('identify','ticketForm',{name:'',email:'',});FreshworksWidget('prefill','ticketForm',{group_id:30000055696,});FreshworksWidget('hide','ticketForm',['group_id']);$(function(){$("a.contact-us").click(function(){FreshworksWidget('open');});}); /*! inlined from /templates/ctf_2019/js/custom.min.js by ntb_minifier */ $(window).scroll(function(){if($(document).scrollTop()>202){$('nav').addClass('shrink');$('.main-nav').addClass('main-nav-stick');$('body').addClass('body-pad');}else{$('nav').removeClass('shrink');$('.main-nav').removeClass('main-nav-stick');$('body').removeClass('body-pad');}});$(function(){function showNavbarSide(){$('#navbarSideContainer').addClass('reveal');$('.overlay').show();} function hideNavbarSide(){$('#navbarSideContainer').removeClass('reveal');$('.overlay').hide();} $('[id*=navbar-side-button]').on('click',function(){showNavbarSide();});$('[id*=search-side-button]').on('click',function(){showNavbarSide();$('#searchbox').focus();});$('.overlay').on('click',function(){hideNavbarSide();});$('#navbar-side-close').on('click',function(){hideNavbarSide();});});function checkWidth(){if($(window).width()>=768)$('.tb-filter-show').addClass("show");else $('.tb-filter-show').removeClass("show");} $(document).ready(checkWidth);$(window).resize(checkWidth); </script> <!-- JoomlaWorks "Disqus Comments (for Joomla)" (v3.7.0) --> <script>var disqus_config = function(){this.language = '';};</script> <script id="dsq-count-scr" src="//createthefuture.disqus.com/count.js" async></script> </body> </html>