CINXE.COM

Visual Studio IDE Preview - Download and Test New Features

<!DOCTYPE html> <html class="avada-html-layout-wide avada-html-header-position-top" lang="en-US" > <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <!--- Fav icon for Edge ----> <script> var newrelic_browser_appID = '926586826'; var newrelic_browser_agent_id = '926586826'; </script> <title> Visual Studio IDE Preview - Download and Test New Features</title> <meta name="description" content="Be the first to access the future of Visual Studio 2022. Get the preview today and try out new features not yet released in Visual Studio" /> <meta name="robots" content="max-snippet:-1, max-image-preview:large, max-video-preview:-1"/> <link rel="canonical" href="https://visualstudio.microsoft.com/vs/preview/" /> <meta property="og:locale" content="en_US" /> <meta property="og:type" content="article" /> <meta property="og:title" content="Visual Studio IDE Preview - Download and Test New Features" /> <meta property="og:description" content="Be the first to access the future of Visual Studio 2022. Get the preview today and try out new features not yet released in Visual Studio" /> <meta property="og:url" content="https://visualstudio.microsoft.com/vs/preview/" /> <meta property="og:site_name" content="Visual Studio" /> <meta property="og:image" content="https://visualstudio.microsoft.com/wp-content/uploads/2018/12/vs-preview-social-image.png" /> <meta property="og:image:width" content="1513" /> <meta property="og:image:height" content="775" /> <meta name="twitter:card" content="summary_large_image" /> <meta name="twitter:description" content="Be the first to access the future of Visual Studio 2022. Get the preview today and try out new features not yet released in Visual Studio" /> <meta name="twitter:title" content="Visual Studio IDE Preview - Download and Test New Features" /> <meta name="twitter:image" content="https://visualstudio.microsoft.com/wp-content/uploads/2018/12/vs-preview-social-image.png" /> <script type="application/ld+json"> {"@context": "https://schema.org", "@graph": [ { "@type": "WebSite", "@id": "https://visualstudio.microsoft.com/#website", "url": "https://visualstudio.microsoft.com/", "name": "Visual Studio", "description": "Any Developer, Any App, Any Platform", "potentialAction": { "@type": "SearchAction", "target": "https://visualstudio.microsoft.com/?s={search_term_string}", "query-input": "required name=search_term_string" } }, { "@type": "ImageObject", "@id": "https://visualstudio.microsoft.com/vs/preview/#primaryimage", "url": "https://visualstudio.microsoft.com/wp-content/uploads/2018/12/vs-preview-social-image.png", "width": 1200, "height": 628 }, { "@type": "WebPage", "@id": "https://visualstudio.microsoft.com/vs/preview/#webpage", "url": "https://visualstudio.microsoft.com/vs/preview/", "inLanguage": "en_US", "name": "Visual Studio IDE Preview - Download and Test New Features", "isPartOf": { "@id": "http://localhost/#website" }, "primaryImageOfPage": { "@id": "https://visualstudio.microsoft.com/vs/preview/ '#primaryimage" }, "datePublished": "2019-07-24T10:50:17+00:00", "dateModified": "2025-03-14T09:21:07+00:00", "description": "Be the first to access the future of Visual Studio 2022. Get the preview today and try out new features not yet released in Visual Studio" } ] } </script><meta name='robots' content='max-image-preview:large' /> <style>img:is([sizes="auto" i], [sizes^="auto," i]) { contain-intrinsic-size: 3000px 1500px }</style> <link rel="alternate" type="application/rss+xml" title="Visual Studio &raquo; Feed" href="https://visualstudio.microsoft.com/feed/" /> <link rel="alternate" type="application/rss+xml" title="Visual Studio &raquo; Comments Feed" href="https://visualstudio.microsoft.com/comments/feed/" /> <link rel="shortcut icon" href="https://visualstudio.microsoft.com/wp-content/uploads/2017/02/Microsoft-favicon.png" type="image/x-icon" /> <!-- Apple Touch Icon --> <link rel="apple-touch-icon" sizes="180x180" href="https://visualstudio.microsoft.com/wp-content/uploads/2022/05/Microsoft-180.png"> <!-- Android Icon --> <link rel="icon" sizes="192x192" href="https://visualstudio.microsoft.com/wp-content/uploads/2022/05/Microsoft-120.png"> <!-- MS Edge Icon --> <meta name="msapplication-TileImage" content="https://visualstudio.microsoft.com/wp-content/uploads/2022/05/Microsoft-152.png"> <link rel='stylesheet' id='vscom-swimlane-css-css' href='https://visualstudio.microsoft.com/wp-content/plugins/vscom-fusion-extension/css/vscom-swimlane.css?ver=6.7.2' type='text/css' media='all' /> <style id='safe-svg-svg-icon-style-inline-css' type='text/css'> .safe-svg-cover{text-align:center}.safe-svg-cover .safe-svg-inside{display:inline-block;max-width:100%}.safe-svg-cover svg{height:100%;max-height:100%;max-width:100%;width:100%} </style> <style id='pdfemb-pdf-embedder-viewer-style-inline-css' type='text/css'> .wp-block-pdfemb-pdf-embedder-viewer{max-width:none} </style> <link rel='stylesheet' id='microsoft-uhf-css' href='https://visualstudio.microsoft.com/wp-content/plugins/microsoft-uhf/assets/microsoft-uhf.css?ver=2.3' type='text/css' media='all' /> <link rel='stylesheet' id='vscom-subsup-css-css' href='https://visualstudio.microsoft.com/wp-content/plugins/vscom-core/assets/css/vscom-subsup.min.css?ver=1667498184' type='text/css' media='1' /> <link rel='stylesheet' id='ajax-filter-styles-css' href='https://visualstudio.microsoft.com/wp-content/plugins/vscom-whatsnew/css/style.css' type='text/css' media='all' /> <link rel='stylesheet' id='vscom-video-player-css-css' href='https://visualstudio.microsoft.com/wp-content/plugins/vscom-fusion-extension/css/vscom-video-player.min.css?ver=1667498194' type='text/css' media='all' /> <link rel='stylesheet' id='vscom-feature-hero-css-css' href='https://visualstudio.microsoft.com/wp-content/plugins/vscom-fusion-extension/css/vscom-feature-hero.min.css?ver=1681237298' type='text/css' media='all' /> <link rel='stylesheet' id='vscom-builder-tabs-css-css' href='https://visualstudio.microsoft.com/wp-content/plugins/vscom-fusion-extension/css/vscom-builder-tabs.min.css?ver=1735582150' type='text/css' media='all' /> <link rel='stylesheet' id='vscom-single-box-css-css' href='https://visualstudio.microsoft.com/wp-content/plugins/vscom-fusion-extension/css/vscom-single-box.min.css?ver=1681924015' type='text/css' media='all' /> <link rel='stylesheet' id='vscom-icon-cloud-css-css' href='https://visualstudio.microsoft.com/wp-content/plugins/vscom-fusion-extension/css/vscom-icon-cloud.min.css?ver=1670949096' type='text/css' media='all' /> <link rel='stylesheet' id='vscom-collage-css-css' href='https://visualstudio.microsoft.com/wp-content/plugins/vscom-fusion-extension/css/vscom-collage.min.css?ver=1670949096' type='text/css' media='all' /> <link rel='stylesheet' id='vscom-extension-cards-css-css' href='https://visualstudio.microsoft.com/wp-content/plugins/vscom-fusion-extension/css/vscom-extension-cards.min.css?ver=1740079183' type='text/css' media='all' /> <link rel='stylesheet' id='vscom_video_carousel-css-css' href='https://visualstudio.microsoft.com/wp-content/plugins/vscom-fusion-extension/css/vscom-video-carousel.min.css?ver=1736452972' type='text/css' media='all' /> <link rel='stylesheet' id='fabric-icons-css' href='https://visualstudio.microsoft.com/wp-content/plugins/fabric-icon-manager//assets/css/vscom-icons.css?ver=1743011743' type='text/css' media='all' /> <link rel='stylesheet' id='fusion-dynamic-css-css' href='https://visualstudio.microsoft.com/wp-content/uploads/fusion-styles/d4ab4399f0e849daef67a35380aff1aa.min.css?ver=3.11.14' type='text/css' media='all' /> <link rel='stylesheet' id='avada-fullwidth-md-css' href='https://visualstudio.microsoft.com/wp-content/plugins/fusion-builder/assets/css/media/fullwidth-md.min.css?ver=3.11.14' type='text/css' media='only screen and (max-width: 1084px)' /> <link rel='stylesheet' id='avada-fullwidth-sm-css' href='https://visualstudio.microsoft.com/wp-content/plugins/fusion-builder/assets/css/media/fullwidth-sm.min.css?ver=3.11.14' type='text/css' media='only screen and (max-width: 640px)' /> <link rel='stylesheet' id='avada-image-md-css' href='https://visualstudio.microsoft.com/wp-content/plugins/fusion-builder/assets/css/media/image-md.min.css?ver=7.11.14' type='text/css' media='only screen and (max-width: 1084px)' /> <link rel='stylesheet' id='avada-image-sm-css' href='https://visualstudio.microsoft.com/wp-content/plugins/fusion-builder/assets/css/media/image-sm.min.css?ver=7.11.14' type='text/css' media='only screen and (max-width: 640px)' /> <link rel='stylesheet' id='avada-section-separator-md-css' href='https://visualstudio.microsoft.com/wp-content/plugins/fusion-builder/assets/css/media/section-separator-md.min.css?ver=3.11.14' type='text/css' media='only screen and (max-width: 1084px)' /> <link rel='stylesheet' id='avada-section-separator-sm-css' href='https://visualstudio.microsoft.com/wp-content/plugins/fusion-builder/assets/css/media/section-separator-sm.min.css?ver=3.11.14' type='text/css' media='only screen and (max-width: 640px)' /> <link rel='stylesheet' id='avada-tabs-lg-min-css' href='https://visualstudio.microsoft.com/wp-content/plugins/fusion-builder/assets/css/media/tabs-lg-min.min.css?ver=7.11.14' type='text/css' media='only screen and (min-width: 640px)' /> <link rel='stylesheet' id='avada-tabs-lg-max-css' href='https://visualstudio.microsoft.com/wp-content/plugins/fusion-builder/assets/css/media/tabs-lg-max.min.css?ver=7.11.14' type='text/css' media='only screen and (max-width: 640px)' /> <link rel='stylesheet' id='avada-tabs-md-css' href='https://visualstudio.microsoft.com/wp-content/plugins/fusion-builder/assets/css/media/tabs-md.min.css?ver=7.11.14' type='text/css' media='only screen and (max-width: 1084px)' /> <link rel='stylesheet' id='avada-tabs-sm-css' href='https://visualstudio.microsoft.com/wp-content/plugins/fusion-builder/assets/css/media/tabs-sm.min.css?ver=7.11.14' type='text/css' media='only screen and (max-width: 640px)' /> <link rel='stylesheet' id='awb-title-md-css' href='https://visualstudio.microsoft.com/wp-content/plugins/fusion-builder/assets/css/media/title-md.min.css?ver=3.11.14' type='text/css' media='only screen and (max-width: 1084px)' /> <link rel='stylesheet' id='awb-title-sm-css' href='https://visualstudio.microsoft.com/wp-content/plugins/fusion-builder/assets/css/media/title-sm.min.css?ver=3.11.14' type='text/css' media='only screen and (max-width: 640px)' /> <link rel='stylesheet' id='awb-meta-md-css' href='https://visualstudio.microsoft.com/wp-content/plugins/fusion-builder/assets/css/media/meta-md.min.css?ver=7.11.14' type='text/css' media='only screen and (max-width: 1084px)' /> <link rel='stylesheet' id='awb-meta-sm-css' href='https://visualstudio.microsoft.com/wp-content/plugins/fusion-builder/assets/css/media/meta-sm.min.css?ver=7.11.14' type='text/css' media='only screen and (max-width: 640px)' /> <link rel='stylesheet' id='awb-layout-colums-md-css' href='https://visualstudio.microsoft.com/wp-content/plugins/fusion-builder/assets/css/media/layout-columns-md.min.css?ver=3.11.14' type='text/css' media='only screen and (max-width: 1084px)' /> <link rel='stylesheet' id='awb-layout-colums-sm-css' href='https://visualstudio.microsoft.com/wp-content/plugins/fusion-builder/assets/css/media/layout-columns-sm.min.css?ver=3.11.14' type='text/css' media='only screen and (max-width: 640px)' /> <link rel='stylesheet' id='avada-max-1c-css' href='https://visualstudio.microsoft.com/wp-content/themes/Avada/assets/css/media/max-1c.min.css?ver=7.11.14' type='text/css' media='only screen and (max-width: 644px)' /> <link rel='stylesheet' id='avada-max-2c-css' href='https://visualstudio.microsoft.com/wp-content/themes/Avada/assets/css/media/max-2c.min.css?ver=7.11.14' type='text/css' media='only screen and (max-width: 735px)' /> <link rel='stylesheet' id='avada-min-2c-max-3c-css' href='https://visualstudio.microsoft.com/wp-content/themes/Avada/assets/css/media/min-2c-max-3c.min.css?ver=7.11.14' type='text/css' media='only screen and (min-width: 735px) and (max-width: 826px)' /> <link rel='stylesheet' id='avada-min-3c-max-4c-css' href='https://visualstudio.microsoft.com/wp-content/themes/Avada/assets/css/media/min-3c-max-4c.min.css?ver=7.11.14' type='text/css' media='only screen and (min-width: 826px) and (max-width: 917px)' /> <link rel='stylesheet' id='avada-min-4c-max-5c-css' href='https://visualstudio.microsoft.com/wp-content/themes/Avada/assets/css/media/min-4c-max-5c.min.css?ver=7.11.14' type='text/css' media='only screen and (min-width: 917px) and (max-width: 1008px)' /> <link rel='stylesheet' id='avada-min-5c-max-6c-css' href='https://visualstudio.microsoft.com/wp-content/themes/Avada/assets/css/media/min-5c-max-6c.min.css?ver=7.11.14' type='text/css' media='only screen and (min-width: 1008px) and (max-width: 1099px)' /> <link rel='stylesheet' id='avada-min-shbp-css' href='https://visualstudio.microsoft.com/wp-content/themes/Avada/assets/css/media/min-shbp.min.css?ver=7.11.14' type='text/css' media='only screen and (min-width: 301px)' /> <link rel='stylesheet' id='avada-min-shbp-header-legacy-css' href='https://visualstudio.microsoft.com/wp-content/themes/Avada/assets/css/media/min-shbp-header-legacy.min.css?ver=7.11.14' type='text/css' media='only screen and (min-width: 301px)' /> <link rel='stylesheet' id='avada-max-shbp-css' href='https://visualstudio.microsoft.com/wp-content/themes/Avada/assets/css/media/max-shbp.min.css?ver=7.11.14' type='text/css' media='only screen and (max-width: 300px)' /> <link rel='stylesheet' id='avada-max-shbp-header-legacy-css' href='https://visualstudio.microsoft.com/wp-content/themes/Avada/assets/css/media/max-shbp-header-legacy.min.css?ver=7.11.14' type='text/css' media='only screen and (max-width: 300px)' /> <link rel='stylesheet' id='avada-max-sh-shbp-css' href='https://visualstudio.microsoft.com/wp-content/themes/Avada/assets/css/media/max-sh-shbp.min.css?ver=7.11.14' type='text/css' media='only screen and (max-width: 300px)' /> <link rel='stylesheet' id='avada-max-sh-shbp-header-legacy-css' href='https://visualstudio.microsoft.com/wp-content/themes/Avada/assets/css/media/max-sh-shbp-header-legacy.min.css?ver=7.11.14' type='text/css' media='only screen and (max-width: 300px)' /> <link rel='stylesheet' id='avada-min-768-max-1024-p-css' href='https://visualstudio.microsoft.com/wp-content/themes/Avada/assets/css/media/min-768-max-1024-p.min.css?ver=7.11.14' type='text/css' media='only screen and (min-device-width: 768px) and (max-device-width: 1024px) and (orientation: portrait)' /> <link rel='stylesheet' id='avada-min-768-max-1024-p-header-legacy-css' href='https://visualstudio.microsoft.com/wp-content/themes/Avada/assets/css/media/min-768-max-1024-p-header-legacy.min.css?ver=7.11.14' type='text/css' media='only screen and (min-device-width: 768px) and (max-device-width: 1024px) and (orientation: portrait)' /> <link rel='stylesheet' id='avada-min-768-max-1024-l-css' href='https://visualstudio.microsoft.com/wp-content/themes/Avada/assets/css/media/min-768-max-1024-l.min.css?ver=7.11.14' type='text/css' media='only screen and (min-device-width: 768px) and (max-device-width: 1024px) and (orientation: landscape)' /> <link rel='stylesheet' id='avada-min-768-max-1024-l-header-legacy-css' href='https://visualstudio.microsoft.com/wp-content/themes/Avada/assets/css/media/min-768-max-1024-l-header-legacy.min.css?ver=7.11.14' type='text/css' media='only screen and (min-device-width: 768px) and (max-device-width: 1024px) and (orientation: landscape)' /> <link rel='stylesheet' id='avada-max-sh-cbp-css' href='https://visualstudio.microsoft.com/wp-content/themes/Avada/assets/css/media/max-sh-cbp.min.css?ver=7.11.14' type='text/css' media='only screen and (max-width: 800px)' /> <link rel='stylesheet' id='avada-max-sh-sbp-css' href='https://visualstudio.microsoft.com/wp-content/themes/Avada/assets/css/media/max-sh-sbp.min.css?ver=7.11.14' type='text/css' media='only screen and (max-width: 800px)' /> <link rel='stylesheet' id='avada-max-sh-640-css' href='https://visualstudio.microsoft.com/wp-content/themes/Avada/assets/css/media/max-sh-640.min.css?ver=7.11.14' type='text/css' media='only screen and (max-width: 640px)' /> <link rel='stylesheet' id='avada-max-shbp-18-css' href='https://visualstudio.microsoft.com/wp-content/themes/Avada/assets/css/media/max-shbp-18.min.css?ver=7.11.14' type='text/css' media='only screen and (max-width: 282px)' /> <link rel='stylesheet' id='avada-max-shbp-32-css' href='https://visualstudio.microsoft.com/wp-content/themes/Avada/assets/css/media/max-shbp-32.min.css?ver=7.11.14' type='text/css' media='only screen and (max-width: 268px)' /> <link rel='stylesheet' id='avada-min-sh-cbp-css' href='https://visualstudio.microsoft.com/wp-content/themes/Avada/assets/css/media/min-sh-cbp.min.css?ver=7.11.14' type='text/css' media='only screen and (min-width: 800px)' /> <link rel='stylesheet' id='avada-max-640-css' href='https://visualstudio.microsoft.com/wp-content/themes/Avada/assets/css/media/max-640.min.css?ver=7.11.14' type='text/css' media='only screen and (max-device-width: 640px)' /> <link rel='stylesheet' id='avada-max-main-css' href='https://visualstudio.microsoft.com/wp-content/themes/Avada/assets/css/media/max-main.min.css?ver=7.11.14' type='text/css' media='only screen and (max-width: 1099px)' /> <link rel='stylesheet' id='avada-max-cbp-css' href='https://visualstudio.microsoft.com/wp-content/themes/Avada/assets/css/media/max-cbp.min.css?ver=7.11.14' type='text/css' media='only screen and (max-width: 800px)' /> <link rel='stylesheet' id='avada-max-sh-cbp-social-sharing-css' href='https://visualstudio.microsoft.com/wp-content/themes/Avada/assets/css/media/max-sh-cbp-social-sharing.min.css?ver=7.11.14' type='text/css' media='only screen and (max-width: 800px)' /> <link rel='stylesheet' id='fb-max-sh-cbp-css' href='https://visualstudio.microsoft.com/wp-content/plugins/fusion-builder/assets/css/media/max-sh-cbp.min.css?ver=3.11.14' type='text/css' media='only screen and (max-width: 800px)' /> <link rel='stylesheet' id='fb-min-768-max-1024-p-css' href='https://visualstudio.microsoft.com/wp-content/plugins/fusion-builder/assets/css/media/min-768-max-1024-p.min.css?ver=3.11.14' type='text/css' media='only screen and (min-device-width: 768px) and (max-device-width: 1024px) and (orientation: portrait)' /> <link rel='stylesheet' id='fb-max-640-css' href='https://visualstudio.microsoft.com/wp-content/plugins/fusion-builder/assets/css/media/max-640.min.css?ver=3.11.14' type='text/css' media='only screen and (max-device-width: 640px)' /> <link rel='stylesheet' id='fb-max-1c-css' href='https://visualstudio.microsoft.com/wp-content/plugins/fusion-builder/assets/css/media/max-1c.css?ver=3.11.14' type='text/css' media='only screen and (max-width: 644px)' /> <link rel='stylesheet' id='fb-max-2c-css' href='https://visualstudio.microsoft.com/wp-content/plugins/fusion-builder/assets/css/media/max-2c.css?ver=3.11.14' type='text/css' media='only screen and (max-width: 735px)' /> <link rel='stylesheet' id='fb-min-2c-max-3c-css' href='https://visualstudio.microsoft.com/wp-content/plugins/fusion-builder/assets/css/media/min-2c-max-3c.css?ver=3.11.14' type='text/css' media='only screen and (min-width: 735px) and (max-width: 826px)' /> <link rel='stylesheet' id='fb-min-3c-max-4c-css' href='https://visualstudio.microsoft.com/wp-content/plugins/fusion-builder/assets/css/media/min-3c-max-4c.css?ver=3.11.14' type='text/css' media='only screen and (min-width: 826px) and (max-width: 917px)' /> <link rel='stylesheet' id='fb-min-4c-max-5c-css' href='https://visualstudio.microsoft.com/wp-content/plugins/fusion-builder/assets/css/media/min-4c-max-5c.css?ver=3.11.14' type='text/css' media='only screen and (min-width: 917px) and (max-width: 1008px)' /> <link rel='stylesheet' id='fb-min-5c-max-6c-css' href='https://visualstudio.microsoft.com/wp-content/plugins/fusion-builder/assets/css/media/min-5c-max-6c.css?ver=3.11.14' type='text/css' media='only screen and (min-width: 1008px) and (max-width: 1099px)' /> <link rel='stylesheet' id='avada-child-stylesheet-css' href='https://visualstudio.microsoft.com/wp-content/themes/Avada-Child-Theme/modern-styles.min.css?1741896686' type='text/css' media='all' /> <link rel='stylesheet' id='style-vscom-dist-min-css' href='https://visualstudio.microsoft.com/wp-content/plugins/vscom-asset-minification/assets/css/vscom-dist.min.css?1724260366' type='text/css' media='all' /> <link rel='stylesheet' id='style-en-css' href='https://visualstudio.microsoft.com/wp-content/plugins/vscom-asset-minification/assets/css/en.min.css?1667498184' type='text/css' media='all' /> <meta name="ms.locale_id" content="67858" /> <meta name="ms.locale_slug" content="preview" /> <script type="text/javascript"> // document.onReady document.addEventListener("DOMContentLoaded", function(event) { var locale_slug = "preview"; var locale_id = "67858"; }); </script><script type="text/javascript" src="https://visualstudio.microsoft.com/wp-includes/js/jquery/jquery.min.js?ver=3.7.1" id="jquery-core-js"></script> <script type="text/javascript" src="https://visualstudio.microsoft.com/wp-content/plugins/vscom-utility-plugin/js/utility.min.js?ver=1675795484" id="vscom_common_js-js"></script> <script type="text/javascript" src="https://visualstudio.microsoft.com/wp-content/plugins/vscom-fusion-extension/js/vscom-icon-cloud.min.js?ver=1670949097" id="vscom-icon-cloud-js-js"></script> <script type="text/javascript" src="https://visualstudio.microsoft.com/wp-content/plugins/vscom-fusion-extension/js/vscom-collage.min.js?ver=1670949097" id="vscom-collage-js-js"></script> <link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://visualstudio.microsoft.com/xmlrpc.php?rsd" /> <link rel='shortlink' href='https://visualstudio.microsoft.com/?p=67858' /> <script type="text/javascript"> (function(c,l,a,r,i,t,y){ c[a]=c[a]||function(){(c[a].q=c[a].q||[]).push(arguments)};t=l.createElement(r);t.async=1; t.src="https://www.clarity.ms/tag/"+i+"?ref=wordpress";y=l.getElementsByTagName(r)[0];y.parentNode.insertBefore(t,y); })(window, document, "clarity", "script", "jmjgcz3l72"); </script> <link rel="stylesheet" href="https://www.microsoft.com/onerfstatics/marketingsites-wcus-prod/west-european/shell/_scrf/css/themes=default.device=uplevel_web_pc/60-6a98d7/c9-be0100/a6-e969ef/43-9f2e7c/82-8b5456/a0-5d3913/84-6d4f33/ae-f1ac0c?ver=2.0&amp;_cf=02242021_3231" type="text/css" media="all" /><meta name="ms.shortidmsdn" content="page-67858" /> <meta name="ms.lang" content="en" /> <meta name="ms.loc" content="US" /> <meta name="Ms.Locale" content="en_US" /> <link rel="alternate" hreflang="cs" href="https://visualstudio.microsoft.com/cs/vs/preview/" /><link rel="alternate" hreflang="de" href="https://visualstudio.microsoft.com/de/vs/preview/" /><link rel="alternate" hreflang="en" href="https://visualstudio.microsoft.com/vs/preview/" /><link rel="alternate" hreflang="es" href="https://visualstudio.microsoft.com/es/vs/preview/" /><link rel="alternate" hreflang="fr" href="https://visualstudio.microsoft.com/fr/vs/preview/" /><link rel="alternate" hreflang="it" href="https://visualstudio.microsoft.com/it/vs/preview/" /><link rel="alternate" hreflang="ja" href="https://visualstudio.microsoft.com/ja/vs/preview/" /><link rel="alternate" hreflang="ko" href="https://visualstudio.microsoft.com/ko/vs/preview/" /><link rel="alternate" hreflang="pl" href="https://visualstudio.microsoft.com/pl/vs/preview/" /><link rel="alternate" hreflang="pt-br" href="https://visualstudio.microsoft.com/pt-br/vs/preview/" /><link rel="alternate" hreflang="ru" href="https://visualstudio.microsoft.com/ru/vs/preview/" /><link rel="alternate" hreflang="tr" href="https://visualstudio.microsoft.com/tr/vs/preview/" /><link rel="alternate" hreflang="zh-hans" href="https://visualstudio.microsoft.com/zh-hans/vs/preview/" /><link rel="alternate" hreflang="zh-hant" href="https://visualstudio.microsoft.com/zh-hant/vs/preview/" /><script> var img_placeholder = 'https://visualstudio.microsoft.com/wp-content/themes/Avada-Child-Theme/assets/img/vscom-img-placeholder.png'; </script><style type="text/css" id="css-fb-visibility">@media screen and (max-width: 640px){.fusion-no-small-visibility{display:none !important;}body .sm-text-align-center{text-align:center !important;}body .sm-text-align-left{text-align:left !important;}body .sm-text-align-right{text-align:right !important;}body .sm-flex-align-center{justify-content:center !important;}body .sm-flex-align-flex-start{justify-content:flex-start !important;}body .sm-flex-align-flex-end{justify-content:flex-end !important;}body .sm-mx-auto{margin-left:auto !important;margin-right:auto !important;}body .sm-ml-auto{margin-left:auto !important;}body .sm-mr-auto{margin-right:auto !important;}body .fusion-absolute-position-small{position:absolute;top:auto;width:100%;}.awb-sticky.awb-sticky-small{ position: sticky; top: var(--awb-sticky-offset,0); }}@media screen and (min-width: 641px) and (max-width: 1084px){.fusion-no-medium-visibility{display:none !important;}body .md-text-align-center{text-align:center !important;}body .md-text-align-left{text-align:left !important;}body .md-text-align-right{text-align:right !important;}body .md-flex-align-center{justify-content:center !important;}body .md-flex-align-flex-start{justify-content:flex-start !important;}body .md-flex-align-flex-end{justify-content:flex-end !important;}body .md-mx-auto{margin-left:auto !important;margin-right:auto !important;}body .md-ml-auto{margin-left:auto !important;}body .md-mr-auto{margin-right:auto !important;}body .fusion-absolute-position-medium{position:absolute;top:auto;width:100%;}.awb-sticky.awb-sticky-medium{ position: sticky; top: var(--awb-sticky-offset,0); }}@media screen and (min-width: 1085px){.fusion-no-large-visibility{display:none !important;}body .lg-text-align-center{text-align:center !important;}body .lg-text-align-left{text-align:left !important;}body .lg-text-align-right{text-align:right !important;}body .lg-flex-align-center{justify-content:center !important;}body .lg-flex-align-flex-start{justify-content:flex-start !important;}body .lg-flex-align-flex-end{justify-content:flex-end !important;}body .lg-mx-auto{margin-left:auto !important;margin-right:auto !important;}body .lg-ml-auto{margin-left:auto !important;}body .lg-mr-auto{margin-right:auto !important;}body .fusion-absolute-position-large{position:absolute;top:auto;width:100%;}.awb-sticky.awb-sticky-large{ position: sticky; top: var(--awb-sticky-offset,0); }}</style> <script type="text/javascript"> var doc = document.documentElement; doc.setAttribute( 'data-useragent', navigator.userAgent ); </script> <style type="text/css" id="fusion-builder-page-css">#download-preview { background-size: 100%; } #download-preview .fusion-imageframe { text-align: center; margin: auto; } #download-preview .col.content-box-wrapper { box-shadow: 0 0.6px 1.8px rgb(0 0 0 / 10%), 0 3.2px 7.2px rgb(0 0 0 / 13%); border-radius: 8px; } .vspreview-features .col.content-box-wrapper { padding: 10px; } a.fusion-button.vscom-btn-secondary.vscom-btn-fill-grow.fill-violet { padding: 14px 28px !important; } #main .fusion-fullwidth.vscom-hero-h1 .angled-bottom { padding-bottom: 0; } #main .fusion-fullwidth.vscom-hero-h1 { padding-bottom: 5rem; } #main .fusion-fullwidth.vscom-hero-h1 .vscom-arrow-link { margin-top: 3rem; } /** first on page CSS block **/ .vspreview-features .note-box .fusion-content-boxes.content-boxes-clean-horizontal .fusion-column { border: none; } @media (min-width: 768px) { .note-box .fusion-content-boxes.content-boxes-clean-horizontal .fusion-column { border: none; margin-bottom: 0 !important; } .note-box .fusion-content-boxes.content-boxes-clean-horizontal .col { padding: 25px; } } .fusion-content-boxes .link-type-text .heading a:focus { text-decoration: underline !important;} /** end first on page CSS block **/ /** second on page CSS block **/ .future-releases a.vscom-arrow-link { justify-content: left !important; } .future-releases.fusion-content-boxes .content-wrapper-background { box-shadow: unset; border: 1px solid #393939; border-radius: 8px; } /** end second on page CSS block **/ /** third on page CSS block **/ /**** Layout ****/ .fusion-content-boxes .heading img { height: 3rem; width: auto; } .mac-infoboxes{ background-size:100% auto!important; } /**** Theme****/ @media screen and (min-width: 1084px) { .footer-top-feedback .infobox-row { max-width: 64rem; margin: auto; } } @media screen and (max-width: 1100px) { .fusion-content-boxes.fusion-content-boxes--equal-heights.mac-boxes.four-col { flex-wrap: wrap; padding: 0 5rem; } .mac-boxes.four-col .col-lg-3 { width: 50%; } .mac-boxes.four-col .content-box-column-2 { padding-right: 0; } .mac-boxes.four-col .content-box-column-3 { padding-left: 0; } } @media screen and (max-width: 800px) { .mac-boxes .col-sm-12 { padding-left: 0; padding-right: 0; } .mac-boxes.four-col .col-lg-3 { width: 100%; padding-left: 0; padding-right: 0; } .fusion-content-boxes.content-boxes-icon-on-top .col-sm-4 { width: 100%; } .fusion-content-boxes.fusion-content-boxes--equal-heights.mac-boxes.four-col { padding: 0; } .fusion-content-boxes .heading { margin-bottom: 4px; } .fusion-content-boxes.content-boxes-icon-on-top .heading img { margin-bottom: 12px; } .mac-boxes .content-box-column { margin: 10px 0px !important; } .mac-infoboxes .infobox-row:after { display: none !important; } } .footer-top-feedback .fusion-column-wrapper { z-index: 2; } /** end 3rd on page CSS block **/</style><!--- [Begin] WCP Cookie Consent API Implementation for Vscom !--> <script src="https://wcpstatic.microsoft.com/mscc/lib/v2/wcp-consent.js"></script> <div id="cookie-banner" data-bi-id="Cookie Banner"></div> <script> window.WcpConsent && WcpConsent.init( 'en-us', "cookie-banner", function (err, _siteConsent) { if (!err) { siteConsent = _siteConsent; //siteConsent is used to get the current consent } }, onConsentChanged ); function onConsentChanged(categoryPreferences) { if ( siteConsent.isConsentRequired === true && siteConsent.getConsent().Analytics === true){ loadAdobeTarget(); // Consent for Clarity window.clarity('consent'); } else if (siteConsent.isConsentRequired === false) { // Consent is not required window.clarity('consent'); } } function loadAdobeTarget(){ var head = document.getElementsByTagName("head")[0]; var script = document.createElement("script"); //Assigning the value generated from PHP script.src = adobe_at_config_js; //Executing synchronously. script.async = false; head.appendChild(script); var head = document.getElementsByTagName("head")[0]; var script = document.createElement("script"); //Assigning the value generated from PHP script.src = adobe_at_js; //Executing synchronously. script.async = false; head.appendChild(script); } </script> <!--- [End] WCP Cookie Consent API Implementation for Vscom !--> <!-- [Begin] JSLL SHIM script includes --> <link rel="preconnect" href="//js.monitor.azure.com" crossorigin> <link rel="preconnect" href="//browser.events.data.microsoft.com" crossorigin> <script> var adobePageMarket = 'en' var firstPagePath = window.location.pathname.split('/')[1] if (['zh-hans', 'zh-hant', 'fr', 'de', 'it', 'ja', 'ru', 'es', 'cs', 'ko', 'pl', 'pt-br', 'tr'].indexOf(firstPagePath) >= 0) { adobePageMarket = firstPagePath } </script> <script type="text/javascript" src="https://js.monitor.azure.com/scripts/c/ms.jsll-3.min.js"> </script> <script type="text/javascript"> let userConsentDetailsCallback = function() { return siteConsent ? siteConsent.getConsent() : null }; var config = { useDefaultContentName: true, useShortNameForContentBlob: false, autoCapture: { pageView: true, onLoad: true, onUnload: true, lineage: true, click: true, scroll: true, resize: false, lineage: true, jsError: true, addin: true, perf: true }, urlCollectHash: true, urlCollectQuery: true, instrumentationKey: "f194a55d6cb942d9b0e5b604e01b609b-8c663a24-3636-4cc5-a2bf-267a92b4ee4f-7662", coreData: { appId: "VSCOM", market: adobePageMarket }, // Initially set the GPC_DataSharingOptIn flag property in 1DS (One Data Source) to false advancedConfig: { propertyConfiguration: { gpcDataSharingOptIn: false, callback: { userConsentDetails: userConsentDetailsCallback }, }, // This one is not working , so we are setting the value using awa.sku.addTelemetryInitializer((item) down below (line 53) userConsent: false, cookieCfg: { ignoreCookies: ["MSCC"] // new. check the FAQ to confirm which cookie you want to ignore! }, }, callback: { pageName: function() { return document.title } } }; awa.init(config); //awa.config.extensionConfig.SystemPropertiesCollector //config.extensionConfig.SystemPropertiesCollector.userConsented = userConsentDetailsCallback() awa.sku.config.extensionConfig.SystemPropertiesCollector.callback.userConsentDetails = userConsentDetailsCallback awa.sku.config.extensionConfig.SystemPropertiesCollector.userConsented = false; /*awa.sku.addTelemetryInitializer((item) => { item = item || {}; item.ext = item.ext || {}; item.ext.web = item.ext.web || {}; item.ext.web.userConsent = false; item.ext.web. })*/ //tracking the search button expand click // 1DS not tracking the click on html button element even after tagging data-bi attribute document.addEventListener("DOMContentLoaded", function(event) { const element = document.getElementById('search') if (element) { element.addEventListener("click", () => { var overrideValues = { behavior: awa.behavior.SEARCHINITIATE, actionType: "CL", contentTags: { areaName: 'Search_nav', id: 'Nav Search Bar Open ' } }; if (typeof awa === "object" && typeof awa.ct === "object") { awa.ct.captureContentPageAction(overrideValues); } }); } }); </script> <!-- [End] JSLL Shim script includes --> <script> //load newrelic if user has consent if (typeof siteConsent === "object") { if (siteConsent.isConsentRequired === false || siteConsent.getConsent().Analytics === true) { ; window.NREUM || (NREUM = {}); NREUM.init = { distributed_tracing: { enabled: true }, privacy: { cookies_enabled: true }, ajax: { deny_list: ["bam.nr-data.net"] } };; NREUM.loader_config = { accountID: "3631496", trustKey: "1551542", agentID: newrelic_browser_agent_id, licenseKey: "NRJS-b705b49e5f52f7729c9", applicationID: newrelic_browser_appID };; NREUM.info = { beacon: "bam.nr-data.net", errorBeacon: "bam.nr-data.net", licenseKey: "NRJS-b705b49e5f52f7729c9", applicationID: newrelic_browser_appID, sa: 1 };; (() => { var __webpack_modules__ = { 507: (__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; function detectPolyfillFeatures() { const featureStatus = {}; return checkAndAddFeature("Promise", "PROMISE"), checkAndAddFeature("Array.prototype.includes", "ARRAY_INCLUDES"), checkAndAddFeature("Object.assign", "OBJECT_ASSIGN"), checkAndAddFeature("Object.entries", "OBJECT_ENTRIES"), featureStatus; function checkAndAddFeature(funcString, featName) { try { let func = eval("self." + funcString); - 1 !== func.toString().indexOf("[native code]") ? featureStatus[featName] = Status.NATIVE : featureStatus[featName] = Status.CHANGED } catch { featureStatus[featName] = Status.UNAVAIL } } } __webpack_require__.d(__webpack_exports__, { n: () => detectPolyfillFeatures }); const Status = { UNAVAIL: "NotSupported", NATIVE: "Detected", CHANGED: "Modified" } }, 2687: (e, t, r) => { "use strict"; r.d(t, { Z: () => n }); const n = (0, r(2141).ky)(16) }, 1719: (e, t, r) => { "use strict"; r.d(t, { I: () => n }); var n = 0, i = navigator.userAgent.match(/Firefox[\/\s](\d+\.\d+)/); i && (n = +i[1]) }, 3524: (e, t, r) => { "use strict"; let n; if (r.d(t, { H: () => i }), r(8438).il) { const e = document.createElement("div"); e.innerHTML = "\x3c!--[if lte IE 6]><div></div><![endif]--\x3e\x3c!--[if lte IE 7]><div></div><![endif]--\x3e\x3c!--[if lte IE 8]><div></div><![endif]--\x3e\x3c!--[if lte IE 9]><div></div><![endif]--\x3e", n = e.getElementsByTagName("div").length } var i; i = 4 === n ? 6 : 3 === n ? 7 : 2 === n ? 8 : 1 === n ? 9 : 0 }, 5970: (e, t, r) => { "use strict"; r.d(t, { P_: () => l, Mt: () => h, C5: () => c, DL: () => b, OP: () => R, Yu: () => m, Dg: () => p, CX: () => u, GE: () => g, sU: () => N }); var n = {}; r.r(n), r.d(n, { agent: () => x, match: () => E, version: () => P }); var i = r(4580); class o { constructor(e, t) { return e && "object" == typeof e ? t && "object" == typeof t ? (Object.assign(this, t), void Object.entries(e).forEach((e => { let [t, r] = e; this[t] = r }))) : console.error("setting a Configurable requires a model to set its initial properties") : console.error("setting a Configurable requires an object as input") } } const a = { beacon: i.ce.beacon, errorBeacon: i.ce.errorBeacon, licenseKey: void 0, applicationID: void 0, sa: void 0, queueTime: void 0, applicationTime: void 0, ttGuid: void 0, user: void 0, account: void 0, product: void 0, extra: void 0, jsAttributes: {}, userAttributes: void 0, atts: void 0, transactionName: void 0, tNamePlain: void 0 }, s = {}; function c(e) { if (!e) throw new Error("All info objects require an agent identifier!"); if (!s[e]) throw new Error(`Info for ${e} was never set`); return s[e] } function u(e, t) { if (!e) throw new Error("All info objects require an agent identifier!"); s[e] = new o(t, a), (0, i.Qy)(e, s[e], "info") } const d = { allow_bfcache: !1, privacy: { cookies_enabled: !0 }, ajax: { deny_list: void 0, enabled: !0 }, distributed_tracing: { enabled: void 0, exclude_newrelic_header: void 0, cors_use_newrelic_header: void 0, cors_use_tracecontext_headers: void 0, allowed_origins: void 0 }, ssl: void 0, obfuscate: void 0, jserrors: { enabled: !0 }, metrics: { enabled: !0 }, page_action: { enabled: !0 }, page_view_event: { enabled: !0 }, page_view_timing: { enabled: !0 }, session_trace: { enabled: !0 }, spa: { enabled: !0 } }, f = {}; function l(e) { if (!e) throw new Error("All configuration objects require an agent identifier!"); if (!f[e]) throw new Error(`Configuration for ${e} was never set`); return f[e] } function p(e, t) { if (!e) throw new Error("All configuration objects require an agent identifier!"); f[e] = new o(t, d), (0, i.Qy)(e, f[e], "config") } function h(e, t) { if (!e) throw new Error("All configuration objects require an agent identifier!"); var r = l(e); if (r) { for (var n = t.split("."), i = 0; i < n.length - 1; i++) if ("object" != typeof(r = r[n[i]])) return; r = r[n[n.length - 1]] } return r } const v = { accountID: void 0, trustKey: void 0, agentID: void 0, licenseKey: void 0, applicationID: void 0, xpid: void 0 }, _ = {}; function b(e) { if (!e) throw new Error("All loader-config objects require an agent identifier!"); if (!_[e]) throw new Error(`LoaderConfig for ${e} was never set`); return _[e] } function g(e, t) { if (!e) throw new Error("All loader-config objects require an agent identifier!"); _[e] = new o(t, v), (0, i.Qy)(e, _[e], "loader_config") } const m = (0, i.mF)().o; var w = r(3524), y = r(9206), x = null, P = null; if (navigator.userAgent) { var O = navigator.userAgent, k = O.match(/Version\/(\S+)\s+Safari/); k && -1 === O.indexOf("Chrome") && -1 === O.indexOf("Chromium") && (x = "Safari", P = k[1]) } function E(e, t) { if (!x) return !1; if (e !== x) return !1; if (!t) return !0; if (!P) return !1; for (var r = P.split("."), n = t.split("."), i = 0; i < n.length; i++) if (n[i] !== r[i]) return !1; return !0 } var S = r(2141), C = r(8438); const T = "NRBA_SESSION_ID"; function A() { if (!C.il) return null; try { let e; return null === (e = window.sessionStorage.getItem(T)) && (e = (0, S.ky)(16), window.sessionStorage.setItem(T, e)), e } catch (e) { return null } } var q = C.ZP?.XMLHttpRequest, I = q && q.prototype; const j = {}; function R(e) { if (!e) throw new Error("All runtime objects require an agent identifier!"); if (!j[e]) throw new Error(`Runtime for ${e} was never set`); return j[e] } function N(e, t) { if (!e) throw new Error("All runtime objects require an agent identifier!"); var r; j[e] = new o(t, (r = e, { customTransaction: void 0, disabled: !1, features: {}, loaderType: void 0, maxBytes: 6 === w.H ? 2e3 : 3e4, offset: (0, y.yf)(), onerror: void 0, origin: "" + C.ZP?.location, ptid: void 0, releaseIds: {}, sessionId: 1 == h(r, "privacy.cookies_enabled") ? A() : null, xhrWrappable: q && I && I.addEventListener && !/CriOS/.test(navigator.userAgent), userAgent: n })), (0, i.Qy)(e, j[e], "runtime") } }, 8873: (e, t, r) => { "use strict"; r.d(t, { q: () => n }); const n = ["1222", "PROD"].filter((e => e)).join(".") }, 1925: (e, t, r) => { "use strict"; r.d(t, { w: () => i }); const n = { agentIdentifier: "" }; class i { constructor(e) { if ("object" != typeof e) return console.error("shared context requires an object as input"); this.sharedContext = {}, Object.assign(this.sharedContext, n), Object.entries(e).forEach((e => { let [t, r] = e; Object.keys(n).includes(t) && (this.sharedContext[t] = r) })) } } }, 2071: (e, t, r) => { "use strict"; r.d(t, { c: () => d, ee: () => c }); var n = r(4580), i = r(9010), o = r(9599), a = "nr@context"; let s = (0, n.fP)(); var c; function u() {} function d(e) { return (0, i.X)(e, a, f) } function f() { return new u } function l() { (c.backlog.api || c.backlog.feature) && (c.aborted = !0, c.backlog = {}) } s.ee ? c = s.ee : (c = function e(t, r) { var n = {}, s = {}, d = {}, p = { on: _, addEventListener: _, removeEventListener: b, emit: v, get: m, listeners: g, context: h, buffer: w, abort: l, aborted: !1, isBuffering: y, debugId: r, backlog: t && t.backlog ? t.backlog : {} }; return p; function h(e) { return e && e instanceof u ? e : e ? (0, i.X)(e, a, f) : f() } function v(e, r, n, i, o) { if (!1 !== o && (o = !0), !c.aborted || i) { t && o && t.emit(e, r, n); for (var a = h(n), u = g(e), d = u.length, f = 0; f < d; f++) u[f].apply(a, r); var l = x()[s[e]]; return l && l.push([p, e, r, a]), a } } function _(e, t) { n[e] = g(e).concat(t) } function b(e, t) { var r = n[e]; if (r) for (var i = 0; i < r.length; i++) r[i] === t && r.splice(i, 1) } function g(e) { return n[e] || [] } function m(t) { return d[t] = d[t] || e(p, t) } function w(e, t) { var r = x(); p.aborted || (0, o.D)(e, (function(e, n) { t = t || "feature", s[n] = t, t in r || (r[t] = []) })) } function y(e) { return !!x()[s[e]] } function x() { return p.backlog } }(void 0, "globalEE"), s.ee = c) }, 3195: (e, t, r) => { "use strict"; r.d(t, { E: () => n, p: () => i }); var n = r(2071).ee.get("handle"); function i(e, t, r, i, o) { o ? (o.buffer([e], i), o.emit(e, t, r)) : (n.buffer([e], i), n.emit(e, t, r)) } }, 4539: (e, t, r) => { "use strict"; r.d(t, { X: () => o }); var n = r(3195); o.on = a; var i = o.handlers = {}; function o(e, t, r, o) { a(o || n.E, i, e, t, r) } function a(e, t, r, i, o) { o || (o = "feature"), e || (e = n.E); var a = t[o] = t[o] || {}; (a[r] = a[r] || []).push([e, i]) } }, 3585: (e, t, r) => { "use strict"; r.d(t, { bP: () => s, iz: () => c, m$: () => a }); var n = r(8438), i = !1; try { var o = Object.defineProperty({}, "passive", { get: function() { i = !0 } }); n.ZP?.addEventListener("testPassive", null, o), n.ZP?.removeEventListener("testPassive", null, o) } catch (e) {} function a(e) { return i ? { passive: !0, capture: !!e } : !!e } function s(e, t) { let r = arguments.length > 2 && void 0 !== arguments[2] && arguments[2]; window.addEventListener(e, t, a(r)) } function c(e, t) { let r = arguments.length > 2 && void 0 !== arguments[2] && arguments[2]; document.addEventListener(e, t, a(r)) } }, 2141: (e, t, r) => { "use strict"; r.d(t, { Ht: () => a, M: () => o, Rl: () => i, ky: () => s }); var n = r(8438); function i() { var e = null, t = 0, r = n.ZP?.crypto || n.ZP?.msCrypto; function i() { return e ? 15 & e[t++] : 16 * Math.random() | 0 } r && r.getRandomValues && (e = r.getRandomValues(new Uint8Array(31))); for (var o, a = "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx", s = "", c = 0; c < a.length; c++) s += "x" === (o = a[c]) ? i().toString(16) : "y" === o ? (o = 3 & i() | 8).toString(16) : o; return s } function o() { return s(16) } function a() { return s(32) } function s(e) { var t = null, r = 0, n = self.crypto || self.msCrypto; n && n.getRandomValues && Uint8Array && (t = n.getRandomValues(new Uint8Array(31))); for (var i = [], o = 0; o < e; o++) i.push(a().toString(16)); return i.join(""); function a() { return t ? 15 & t[r++] : 16 * Math.random() | 0 } } }, 9206: (e, t, r) => { "use strict"; r.d(t, { nb: () => c, os: () => u, yf: () => s, zO: () => a }); var n = r(1209), i = (new Date).getTime(), o = i; function a() { return n.G && performance.now ? Math.round(performance.now()) : (i = Math.max((new Date).getTime(), i)) - o } function s() { return i } function c(e) { o = e } function u() { return o } }, 1209: (e, t, r) => { "use strict"; r.d(t, { G: () => n }); const n = void 0 !== r(8438).ZP?.performance?.timing?.navigationStart }, 745: (e, t, r) => { "use strict"; r.d(t, { s: () => c, v: () => u }); var n = r(7036), i = r(1719), o = r(9206), a = r(1209), s = r(8438); let c = !0; function u(e) { var t = function() { if (i.I && i.I < 9) return; if (a.G) return c = !1, s.ZP?.performance?.timing?.navigationStart }(); t && ((0, n.B)(e, "starttime", t), (0, o.nb)(t)) } }, 7036: (e, t, r) => { "use strict"; r.d(t, { B: () => o, L: () => a }); var n = r(9206), i = {}; function o(e, t, r) { void 0 === r && (r = (0, n.zO)() + (0, n.os)()), i[e] = i[e] || {}, i[e][t] = r } function a(e, t, r, n) { const o = e.sharedContext.agentIdentifier; var a = i[o]?.[r], s = i[o]?.[n]; void 0 !== a && void 0 !== s && e.store("measures", t, { value: s - a }) } }, 7233: (e, t, r) => { "use strict"; r.d(t, { e: () => o }); var n = r(8438), i = {}; function o(e) { if (e in i) return i[e]; if (0 === (e || "").indexOf("data:")) return { protocol: "data" }; let t; var r = n.ZP?.location, o = {}; if (n.il) t = document.createElement("a"), t.href = e; else try { t = new URL(e, r.href) } catch { return o } o.port = t.port; var a = t.href.split("://"); !o.port && a[1] && (o.port = a[1].split("/")[0].split("@").pop().split(":")[1]), o.port && "0" !== o.port || (o.port = "https" === a[0] ? "443" : "80"), o.hostname = t.hostname || r.hostname, o.pathname = t.pathname, o.protocol = a[0], "/" !== o.pathname.charAt(0) && (o.pathname = "/" + o.pathname); var s = !t.protocol || ":" === t.protocol || t.protocol === r.protocol, c = t.hostname === r.hostname && t.port === r.port; return o.sameOrigin = s && (!t.hostname || c), "/" === o.pathname && (i[e] = o), o } }, 8547: (e, t, r) => { "use strict"; r.d(t, { T: () => i }); var n = r(8438); const i = { isFileProtocol: function() { let e = Boolean("file:" === (0, n.lW)()?.location?.protocol); e && (i.supportabilityMetricSent = !0); return e }, supportabilityMetricSent: !1 } }, 9011: (e, t, r) => { "use strict"; r.d(t, { K: () => o }); var n = r(5970); const i = ["ajax", "jserrors", "metrics", "page_action", "page_view_event", "page_view_timing", "session_trace", "spa"]; function o(e) { const t = {}; return i.forEach((r => { t[r] = function(e, t) { return !0 !== (0, n.OP)(t).disabled && !1 !== (0, n.Mt)(t, `${e}.enabled`) }(r, e) })), t } }, 8025: (e, t, r) => { "use strict"; r.d(t, { W: () => i }); var n = r(2071); class i { constructor(e, t) { let r = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : []; this.agentIdentifier = e, this.aggregator = t, this.ee = n.ee.get(e), this.externalFeatures = r, this.blocked = !1 } } }, 9010: (e, t, r) => { "use strict"; r.d(t, { X: () => i }); var n = Object.prototype.hasOwnProperty; function i(e, t, r) { if (n.call(e, t)) return e[t]; var i = r(); if (Object.defineProperty && Object.keys) try { return Object.defineProperty(e, t, { value: i, writable: !0, enumerable: !1 }), i } catch (e) {} return e[t] = i, i } }, 8438: (e, t, r) => { "use strict"; r.d(t, { ZP: () => a, il: () => n, lW: () => s, v6: () => i }); const n = Boolean("undefined" != typeof window && window.document), i = Boolean("undefined" != typeof WorkerGlobalScope && self.navigator instanceof WorkerNavigator); let o = (() => { if (n) return window; if (i) { if ("undefined" != typeof globalThis && globalThis instanceof WorkerGlobalScope) return globalThis; if (self instanceof WorkerGlobalScope) return self } throw new Error("New Relic browser agent shutting down due to error: Unable to locate global scope. This is possibly due to code redefining browser global variables like `self` and `window`.") })(); const a = o; function s() { return o } }, 9599: (e, t, r) => { "use strict"; r.d(t, { D: () => i }); var n = Object.prototype.hasOwnProperty; function i(e, t) { var r = [], i = "", o = 0; for (i in e) n.call(e, i) && (r[o] = t(i, e[i]), o += 1); return r } }, 248: (e, t, r) => { "use strict"; r.d(t, { $c: () => c, Ng: () => u, RR: () => s }); var n = r(5970), i = r(1925), o = r(8547), a = { regex: /^file:\/\/(.*)/, replacement: "file://OBFUSCATED" }; class s extends i.w { constructor(e) { super(e) } shouldObfuscate() { return c(this.sharedContext.agentIdentifier).length > 0 } obfuscateString(e) { if (!e || "string" != typeof e) return e; for (var t = c(this.sharedContext.agentIdentifier), r = e, n = 0; n < t.length; n++) { var i = t[n].regex, o = t[n].replacement || "*"; r = r.replace(i, o) } return r } } function c(e) { var t = [], r = (0, n.Mt)(e, "obfuscate") || []; return t = t.concat(r), o.T.isFileProtocol() && t.push(a), t } function u(e) { for (var t = !1, r = !1, n = 0; n < e.length; n++) { "regex" in e[n] ? "string" != typeof e[n].regex && e[n].regex.constructor !== RegExp && (console && console.warn && console.warn('An obfuscation replacement rule contains a "regex" value with an invalid type (must be a string or RegExp)'), r = !0) : (console && console.warn && console.warn('An obfuscation replacement rule was detected missing a "regex" value.'), r = !0); var i = e[n].replacement; i && "string" != typeof i && (console && console.warn && console.warn('An obfuscation replacement rule contains a "replacement" value with an invalid type (must be a string)'), t = !0) } return !t && !r } }, 4580: (e, t, r) => { "use strict"; r.d(t, { EZ: () => u, Qy: () => c, ce: () => o, fP: () => a, gG: () => d, mF: () => s }); var n = r(9206), i = r(8438); const o = { beacon: "bam.nr-data.net", errorBeacon: "bam.nr-data.net" }; function a() { return i.ZP?.NREUM || (i.ZP.NREUM = {}), void 0 === i.ZP?.newrelic && (i.ZP.newrelic = i.ZP.NREUM), i.ZP.NREUM } function s() { let e = a(); if (!e.o) { var t = self, r = t.XMLHttpRequest; e.o = { ST: setTimeout, SI: t.setImmediate, CT: clearTimeout, XHR: r, REQ: t.Request, EV: t.Event, PR: t.Promise, MO: t.MutationObserver, FETCH: t.fetch } } return e } function c(e, t, r) { let i = a(); const o = i.initializedAgents || {}, s = o[e] || {}; return Object.keys(s).length || (s.initializedAt = { ms: (0, n.zO)(), date: new Date }), i.initializedAgents = { ...o, [e]: { ...s, [r]: t } }, i } function u(e, t) { a()[e] = t } function d() { return function() { let e = a(); const t = e.info || {}; e.info = { beacon: o.beacon, errorBeacon: o.errorBeacon, ...t } }(), function() { let e = a(); const t = e.init || {}; e.init = { ...t } }(), s(), function() { let e = a(); const t = e.loader_config || {}; e.loader_config = { ...t } }(), a() } }, 584: (e, t, r) => { "use strict"; r.d(t, { N: () => i, e: () => o }); var n = r(3585); function i(e) { let t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1]; return void(0, n.iz)("visibilitychange", r); function r() { if (t) { if ("hidden" != document.visibilityState) return; e() } e(document.visibilityState) } } function o() { return "hidden" === document.visibilityState ? -1 : 1 / 0 } }, 6023: (e, t, r) => { "use strict"; r.d(t, { W: () => i }); var n = r(8438); function i() { return "function" == typeof n.ZP?.PerformanceObserver } }, 8539: e => { e.exports = function(e, t, r) { t || (t = 0), void 0 === r && (r = e ? e.length : 0); for (var n = -1, i = r - t || 0, o = Array(i < 0 ? 0 : i); ++n < i;) o[n] = e[t + n]; return o } } }, __webpack_module_cache__ = {}, inProgress, dataWebpackPrefix; function __webpack_require__(e) { var t = __webpack_module_cache__[e]; if (void 0 !== t) return t.exports; var r = __webpack_module_cache__[e] = { exports: {} }; return __webpack_modules__[e](r, r.exports, __webpack_require__), r.exports } __webpack_require__.m = __webpack_modules__, __webpack_require__.n = e => { var t = e && e.__esModule ? () => e.default : () => e; return __webpack_require__.d(t, { a: t }), t }, __webpack_require__.d = (e, t) => { for (var r in t) __webpack_require__.o(t, r) && !__webpack_require__.o(e, r) && Object.defineProperty(e, r, { enumerable: !0, get: t[r] }) }, __webpack_require__.f = {}, __webpack_require__.e = e => Promise.all(Object.keys(__webpack_require__.f).reduce(((t, r) => (__webpack_require__.f[r](e, t), t)), [])), __webpack_require__.u = e => e + "." + __webpack_require__.h().slice(0, 8) + "-1222.js", __webpack_require__.h = () => "95d4308d836c4fa71ea6", __webpack_require__.o = (e, t) => Object.prototype.hasOwnProperty.call(e, t), inProgress = {}, dataWebpackPrefix = "NRBA:", __webpack_require__.l = (e, t, r, n) => { if (inProgress[e]) inProgress[e].push(t); else { var i, o; if (void 0 !== r) for (var a = document.getElementsByTagName("script"), s = 0; s < a.length; s++) { var c = a[s]; if (c.getAttribute("src") == e || c.getAttribute("data-webpack") == dataWebpackPrefix + r) { i = c; break } } i || (o = !0, (i = document.createElement("script")).charset = "utf-8", i.timeout = 120, __webpack_require__.nc && i.setAttribute("nonce", __webpack_require__.nc), i.setAttribute("data-webpack", dataWebpackPrefix + r), i.src = e), inProgress[e] = [t]; var u = (t, r) => { i.onerror = i.onload = null, clearTimeout(d); var n = inProgress[e]; if (delete inProgress[e], i.parentNode && i.parentNode.removeChild(i), n && n.forEach((e => e(r))), t) return t(r) }, d = setTimeout(u.bind(null, void 0, { type: "timeout", target: i }), 12e4); i.onerror = u.bind(null, i.onerror), i.onload = u.bind(null, i.onload), o && document.head.appendChild(i) } }, __webpack_require__.r = e => { "undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(e, Symbol.toStringTag, { value: "Module" }), Object.defineProperty(e, "__esModule", { value: !0 }) }, __webpack_require__.p = "https://js-agent.newrelic.com/", (() => { var e = { 450: 0, 566: 0 }; __webpack_require__.f.j = (t, r) => { var n = __webpack_require__.o(e, t) ? e[t] : void 0; if (0 !== n) if (n) r.push(n[2]); else { var i = new Promise(((r, i) => n = e[t] = [r, i])); r.push(n[2] = i); var o = __webpack_require__.p + __webpack_require__.u(t), a = new Error; __webpack_require__.l(o, (r => { if (__webpack_require__.o(e, t) && (0 !== (n = e[t]) && (e[t] = void 0), n)) { var i = r && ("load" === r.type ? "missing" : r.type), o = r && r.target && r.target.src; a.message = "Loading chunk " + t + " failed.\n(" + i + ": " + o + ")", a.name = "ChunkLoadError", a.type = i, a.request = o, n[1](a) } }), "chunk-" + t, t) } }; var t = (t, r) => { var n, i, [o, a, s] = r, c = 0; if (o.some((t => 0 !== e[t]))) { for (n in a) __webpack_require__.o(a, n) && (__webpack_require__.m[n] = a[n]); if (s) s(__webpack_require__) } for (t && t(r); c < o.length; c++) i = o[c], __webpack_require__.o(e, i) && e[i] && e[i][0](), e[i] = 0 }, r = window.webpackChunkNRBA = window.webpackChunkNRBA || []; r.forEach(t.bind(null, 0)), r.push = t.bind(null, r.push.bind(r)) })(); var __webpack_exports__ = {}; (() => { "use strict"; __webpack_require__.r(__webpack_exports__); var e = __webpack_require__(507), t = __webpack_require__(3585); function r(e) { if (!document || "complete" === document.readyState) return e() || !0 } function n(e) { r(e) || (0, t.bP)("load", e) } function i(e) { r(e) || (0, t.iz)("DOMContentLoaded", e) } var o = __webpack_require__(8438), a = __webpack_require__(2071); let s = 0; function c(e) { (async () => { if (!s++) try { const { aggregator: t } = await __webpack_require__.e(859).then(__webpack_require__.bind(__webpack_require__, 7859)); await t(e) } catch (e) { console.error("Failed to successfully load all aggregators. Aborting...\n", e), a.ee.abort() } })() } var u = __webpack_require__(2687), d = __webpack_require__(3195), f = __webpack_require__(9206), l = __webpack_require__(7036), p = __webpack_require__(745), h = __webpack_require__(8025); class v extends h.W { constructor(e) { super(e), o.il && ((0, p.v)(e), (0, l.B)(e, "firstbyte", (0, f.yf)()), n((() => this.measureWindowLoaded())), i((() => this.measureDomContentLoaded()))) } measureWindowLoaded() { var e = (0, f.zO)(); (0, l.B)(this.agentIdentifier, "onload", e + (0, f.os)()), (0, d.p)("timing", ["load", e], void 0, void 0, this.ee) } measureDomContentLoaded() { (0, l.B)(this.agentIdentifier, "domContent", (0, f.zO)() + (0, f.os)()) } } var _ = __webpack_require__(584), b = __webpack_require__(5970); class g extends h.W { constructor(e) { var r; if (super(e), r = this, this.isEnabled() && o.il) { if (this.pageHiddenTime = (0, _.e)(), this.performanceObserver, this.lcpPerformanceObserver, this.clsPerformanceObserver, this.fiRecorded = !1, "PerformanceObserver" in window && "function" == typeof window.PerformanceObserver) { this.performanceObserver = new PerformanceObserver((function() { return r.perfObserver(...arguments) })); try { this.performanceObserver.observe({ entryTypes: ["paint"] }) } catch (e) {} this.lcpPerformanceObserver = new PerformanceObserver((function() { return r.lcpObserver(...arguments) })); try { this.lcpPerformanceObserver.observe({ entryTypes: ["largest-contentful-paint"] }) } catch (e) {} this.clsPerformanceObserver = new PerformanceObserver((function() { return r.clsObserver(...arguments) })); try { this.clsPerformanceObserver.observe({ type: "layout-shift", buffered: !0 }) } catch (e) {} } this.fiRecorded = !1; ["click", "keydown", "mousedown", "pointerdown", "touchstart"].forEach((e => { (0, t.iz)(e, (function() { return r.captureInteraction(...arguments) })) })), (0, _.N)((() => { this.pageHiddenTime = (0, f.zO)(), (0, d.p)("docHidden", [this.pageHiddenTime], void 0, void 0, this.ee) }), !0), (0, t.bP)("pagehide", (() => (0, d.p)("winPagehide", [(0, f.zO)()], void 0, void 0, this.ee))) } } isEnabled() { return !1 !== (0, b.Mt)(this.agentIdentifier, "page_view_timing.enabled") } perfObserver(e, t) { e.getEntries().forEach((e => { "first-paint" === e.name ? (0, d.p)("timing", ["fp", Math.floor(e.startTime)], void 0, void 0, this.ee) : "first-contentful-paint" === e.name && (0, d.p)("timing", ["fcp", Math.floor(e.startTime)], void 0, void 0, this.ee) })) } lcpObserver(e, t) { var r = e.getEntries(); if (r.length > 0) { var n = r[r.length - 1]; if (this.pageHiddenTime < n.startTime) return; var i = [n], o = this.addConnectionAttributes({}); o && i.push(o), (0, d.p)("lcp", i, void 0, void 0, this.ee) } } clsObserver(e) { e.getEntries().forEach((e => { e.hadRecentInput || (0, d.p)("cls", [e], void 0, void 0, this.ee) })) } addConnectionAttributes(e) { var t = navigator.connection || navigator.mozConnection || navigator.webkitConnection; if (t) return t.type && (e["net-type"] = t.type), t.effectiveType && (e["net-etype"] = t.effectiveType), t.rtt && (e["net-rtt"] = t.rtt), t.downlink && (e["net-dlink"] = t.downlink), e } captureInteraction(e) { if (e instanceof b.Yu.EV && !this.fiRecorded) { var t = Math.round(e.timeStamp), r = { type: e.type }; this.addConnectionAttributes(r), t <= (0, f.zO)() ? r.fid = (0, f.zO)() - t : t > (0, f.os)() && t <= Date.now() ? (t -= (0, f.os)(), r.fid = (0, f.zO)() - t) : t = (0, f.zO)(), this.fiRecorded = !0, (0, d.p)("timing", ["fi", t, r], void 0, void 0, this.ee) } } } var m = __webpack_require__(4539), w = "React", y = "Angular", x = "AngularJS", P = "Backbone", O = "Ember", k = "Vue", E = "Meteor", S = "Zepto", C = "Jquery"; function T() { if (!o.il) return []; var e = []; try { (function() { try { if (window.React || window.ReactDOM || window.ReactRedux) return !0; if (document.querySelector("[data-reactroot], [data-reactid]")) return !0; for (var e = document.querySelectorAll("body > div"), t = 0; t < e.length; t++) if (Object.keys(e[t]).indexOf("_reactRootContainer") >= 0) return !0; return !1 } catch (e) { return !1 } })() && e.push(w), function() { try { return !!window.angular || (!!document.querySelector(".ng-binding, [ng-app], [data-ng-app], [ng-controller], [data-ng-controller], [ng-repeat], [data-ng-repeat]") || !!document.querySelector('script[src*="angular.js"], script[src*="angular.min.js"]')) } catch (e) { return !1 } }() && e.push(x), function() { try { return !!(window.hasOwnProperty("ng") && window.ng.hasOwnProperty("coreTokens") && window.ng.coreTokens.hasOwnProperty("NgZone")) || !!document.querySelectorAll("[ng-version]").length } catch (e) { return !1 } }() && e.push(y), window.Backbone && e.push(P), window.Ember && e.push(O), window.Vue && e.push(k), window.Meteor && e.push(E), window.Zepto && e.push(S), window.jQuery && e.push(C) } catch (e) {} return e } var A = __webpack_require__(8547), q = __webpack_require__(248), I = __webpack_require__(8873); const j = Boolean(o.ZP?.Worker), R = Boolean(o.ZP?.SharedWorker), N = Boolean(o.ZP?.navigator?.serviceWorker); let L, Z, H; class z extends h.W { constructor(e) { var t; let r = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}; super(e), t = this, this.PfFeatStatusEnum = r, this.singleChecks(), this.eachSessionChecks(), (0, m.X)("record-supportability", (function() { return t.recordSupportability(...arguments) }), void 0, this.ee), (0, m.X)("record-custom", (function() { return t.recordCustom(...arguments) }), void 0, this.ee) } recordSupportability(e, t) { var r = ["sm", e, { name: e }, t]; return (0, d.p)("storeMetric", r, null, void 0, this.ee), r } recordCustom(e, t) { var r = ["cm", e, { name: e }, t]; return (0, d.p)("storeEventMetrics", r, null, void 0, this.ee), r } singleChecks() { this.recordSupportability(`Generic/Version/${I.q}/Detected`); const { loaderType: e } = (0, b.OP)(this.agentIdentifier); e && this.recordSupportability(`Generic/LoaderType/${e}/Detected`), o.il && i((() => { T().forEach((e => { this.recordSupportability("Framework/" + e + "/Detected") })) })), A.T.isFileProtocol() && (this.recordSupportability("Generic/FileProtocol/Detected"), A.T.supportabilityMetricSent = !0); const t = (0, q.$c)(this.agentIdentifier); t.length > 0 && this.recordSupportability("Generic/Obfuscate/Detected"), t.length > 0 && !(0, q.Ng)(t) && this.recordSupportability("Generic/Obfuscate/Invalid"), o.il && this.reportPolyfillsNeeded(), function(e) { if (!L) { if (j) { L = Worker; try { o.ZP.Worker = r(L, "Dedicated") } catch (e) { a(e, "Dedicated") } if (R) { Z = SharedWorker; try { o.ZP.SharedWorker = r(Z, "Shared") } catch (e) { a(e, "Shared") } } else n("Shared"); if (N) { H = navigator.serviceWorker.register; try { o.ZP.navigator.serviceWorker.register = (t = H, function() { for (var e = arguments.length, r = new Array(e), n = 0; n < e; n++) r[n] = arguments[n]; return i("Service", r[1]?.type), t.apply(navigator.serviceWorker, r) }) } catch (e) { a(e, "Service") } } else n("Service"); var t; return } n("All") } function r(e, t) { return new Proxy(e, { construct: (e, r) => (i(t, r[1]?.type), new e(...r)) }) } function n(t) { o.v6 || e(`Workers/${t}/Unavailable`) } function i(t, r) { e("module" === r ? `Workers/${t}/Module` : `Workers/${t}/Classic`) } function a(t, r) { e(`Workers/${r}/SM/Unsupported`), console.warn(`NR Agent: Unable to capture ${r} workers.`, t) } }(this.recordSupportability.bind(this)) } reportPolyfillsNeeded() { this.recordSupportability(`Generic/Polyfill/Promise/${this.PfFeatStatusEnum.PROMISE}`), this.recordSupportability(`Generic/Polyfill/ArrayIncludes/${this.PfFeatStatusEnum.ARRAY_INCLUDES}`), this.recordSupportability(`Generic/Polyfill/ObjectAssign/${this.PfFeatStatusEnum.OBJECT_ASSIGN}`), this.recordSupportability(`Generic/Polyfill/ObjectEntries/${this.PfFeatStatusEnum.OBJECT_ENTRIES}`) } eachSessionChecks() { o.il && (0, t.bP)("pageshow", (e => { e.persisted && this.recordCustom("Custom/BFCache/PageRestored") })) } } var M = __webpack_require__(9010), D = __webpack_require__(8539), W = __webpack_require__.n(D), B = __webpack_require__(9599), $ = o.ZP, G = "fetch-", F = G + "body-", U = ["arrayBuffer", "blob", "json", "text", "formData"], X = $.Request, V = $.Response, Y = "prototype", J = "nr@context"; const Q = {}; function K(e) { const t = function(e) { return (e || a.ee).get("fetch") }(e); if (!(X && V && $.fetch)) return t; if (Q[t.debugId]) return t; function r(e, r, n) { var i = e[r]; "function" == typeof i && (e[r] = function() { var e, r = W()(arguments), o = {}; t.emit(n + "before-start", [r], o), o[J] && o[J].dt && (e = o[J].dt); var a = i.apply(this, r); return t.emit(n + "start", [r, e], a), a.then((function(e) { return t.emit(n + "end", [null, e], a), e }), (function(e) { throw t.emit(n + "end", [e], a), e })) }) } return Q[t.debugId] = !0, (0, B.D)(U, (function(e, t) { r(X[Y], t, F), r(V[Y], t, F) })), r($, "fetch", G), t.on(G + "end", (function(e, r) { var n = this; if (r) { var i = r.headers.get("content-length"); null !== i && (n.rxSize = i), t.emit(G + "done", [null, r], n) } else t.emit(G + "done", [e], n) })), t } var ee = "nr@original", te = Object.prototype.hasOwnProperty, re = !1; function ne(e, t) { return e || (e = a.ee), r.inPlace = function(e, t, n, i, o) { n || (n = ""); var a, s, c, u = "-" === n.charAt(0); for (c = 0; c < t.length; c++) ae(a = e[s = t[c]]) || (e[s] = r(a, u ? s + n : n, i, s, o)) }, r.flag = ee, r; function r(t, r, i, o, a) { return ae(t) ? t : (r || (r = ""), nrWrapper[ee] = t, oe(t, nrWrapper, e), nrWrapper); function nrWrapper() { var s, c, u, d; try { c = this, s = W()(arguments), u = "function" == typeof i ? i(s, c) : i || {} } catch (t) { ie([t, "", [s, c, o], u], e) } n(r + "start", [s, c, o], u, a); try { return d = t.apply(c, s) } catch (e) { throw n(r + "err", [s, c, e], u, a), e } finally { n(r + "end", [s, c, d], u, a) } } } function n(r, n, i, o) { if (!re || t) { var a = re; re = !0; try { e.emit(r, n, i, t, o) } catch (t) { ie([t, r, n, i], e) } re = a } } } function ie(e, t) { t || (t = a.ee); try { t.emit("internal-error", e) } catch (e) {} } function oe(e, t, r) { if (Object.defineProperty && Object.keys) try { return Object.keys(e).forEach((function(r) { Object.defineProperty(t, r, { get: function() { return e[r] }, set: function(t) { return e[r] = t, t } }) })), t } catch (e) { ie([e], r) } for (var n in e) te.call(e, n) && (t[n] = e[n]); return t } function ae(e) { return !(e && e instanceof Function && e.apply && !e[ee]) } function se(e, t, r) { var n = e[t]; e[t] = function(e, t) { var r = t(e); return r[ee] = e, oe(e, r, a.ee), r }(n, r) } function ce() { for (var e = arguments.length, t = new Array(e), r = 0; r < e; ++r) t[r] = arguments[r]; return t } const ue = {}; function de(e) { const t = function(e) { return (e || a.ee).get("timer") }(e); if (ue[t.debugId]) return t; ue[t.debugId] = !0; var r = ne(t), n = "setTimeout", i = "setInterval", s = "clearTimeout", c = "-start"; return r.inPlace(o.ZP, [n, "setImmediate"], n + "-"), r.inPlace(o.ZP, [i], i + "-"), r.inPlace(o.ZP, [s, "clearImmediate"], s + "-"), t.on(i + c, (function(e, t, n) { e[0] = r(e[0], "fn-", null, n) })), t.on(n + c, (function(e, t, n) { this.method = n, this.timerDuration = isNaN(e[1]) ? 0 : +e[1], e[0] = r(e[0], "fn-", this, n) })), t } const fe = {}; function le(e) { const t = function(e) { return (e || a.ee).get("raf") }(e); if (fe[t.debugId] || !o.il) return t; fe[t.debugId] = !0; var r = ne(t), n = "equestAnimationFrame"; return r.inPlace(window, ["r" + n, "mozR" + n, "webkitR" + n, "msR" + n], "raf-"), t.on("raf-start", (function(e) { e[0] = r(e[0], "fn-") })), t } const pe = {}; function he(e) { const t = function(e) { return (e || a.ee).get("history") }(e); if (pe[t.debugId] || !o.il) return t; pe[t.debugId] = !0; var r = ne(t), n = window.history && window.history.constructor && window.history.constructor.prototype, i = window.history; return n && n.pushState && n.replaceState && (i = n), r.inPlace(i, ["pushState", "replaceState"], "-"), t } const ve = {}; function _e(e) { const r = function(e) { return (e || a.ee).get("jsonp") }(e); if (ve[r.debugId] || !o.il) return r; ve[r.debugId] = !0; var n = ne(r), i = /[?&](?:callback|cb)=([^&#]+)/, s = /(.*)\.([^.]+)/, c = /^(\w+)(\.|$)(.*)$/, u = ["appendChild", "insertBefore", "replaceChild"]; function d(e, t) { var r = e.match(c), n = r[1], i = r[3]; return i ? d(i, t[n]) : t[n] } return "addEventListener" in window && (Node && Node.prototype && Node.prototype.appendChild ? n.inPlace(Node.prototype, u, "dom-") : (n.inPlace(HTMLElement.prototype, u, "dom-"), n.inPlace(HTMLHeadElement.prototype, u, "dom-"), n.inPlace(HTMLBodyElement.prototype, u, "dom-"))), r.on("dom-start", (function(e) { ! function(e) { if (!e || "string" != typeof e.nodeName || "script" !== e.nodeName.toLowerCase()) return; if ("function" != typeof e.addEventListener) return; var o = (a = e.src, c = a.match(i), c ? c[1] : null); var a, c; if (!o) return; var u = function(e) { var t = e.match(s); if (t && t.length >= 3) return { key: t[2], parent: d(t[1], window) }; return { key: e, parent: window } }(o); if ("function" != typeof u.parent[u.key]) return; var f = {}; function l() { r.emit("jsonp-end", [], f), e.removeEventListener("load", l, (0, t.m$)(!1)), e.removeEventListener("error", p, (0, t.m$)(!1)) } function p() { r.emit("jsonp-error", [], f), r.emit("jsonp-end", [], f), e.removeEventListener("load", l, (0, t.m$)(!1)), e.removeEventListener("error", p, (0, t.m$)(!1)) } n.inPlace(u.parent, [u.key], "cb-", f), e.addEventListener("load", l, (0, t.m$)(!1)), e.addEventListener("error", p, (0, t.m$)(!1)), r.emit("new-jsonp", [e.src], f) }(e[0]) })), r } const be = {}; function ge(e) { const t = function(e) { return (e || a.ee).get("mutation") }(e); if (be[t.debugId] || !o.il) return t; be[t.debugId] = !0; var r = ne(t), n = b.Yu.MO; return n && (window.MutationObserver = function(e) { return this instanceof n ? new n(r(e, "fn-")) : n.apply(this, arguments) }, MutationObserver.prototype = n.prototype), t } const me = {}; function we(e) { const t = function(e) { return (e || a.ee).get("promise") }(e); if (me[t.debugId]) return t; me[t.debugId] = !0; var r = a.c, n = ne(t), i = b.Yu.PR; return i && function() { function e(e) { var r = t.context(), o = n(e, "executor-", r, null, !1), a = new i(o); return t.context(a).getCtx = function() { return r }, a } o.ZP.Promise = e, Object.defineProperty(o.ZP.Promise, "name", { value: "Promise" }), ["all", "race"].forEach((function(e) { var r = i[e]; i[e] = function(n) { var o = !1; (0, B.D)(n, (function(t, r) { Promise.resolve(r).then(s("all" === e), s(!1)) })); var a = r.apply(i, arguments); return i.resolve(a); function s(e) { return function() { t.emit("propagate", [null, !o], a, !1, !1), o = o || !e } } } })), ["resolve", "reject"].forEach((function(e) { var r = i[e]; i[e] = function(e) { var n = r.apply(i, arguments); return e !== n && t.emit("propagate", [e, !0], n, !1, !1), n } })), i.prototype.catch = function(e) { return this.then(null, e) }, Object.assign(i.prototype, { constructor: { value: e } }), (0, B.D)(Object.getOwnPropertyNames(i), (function(t, r) { try { e[r] = i[r] } catch (e) {} })), se(i.prototype, "then", (function(e) { return function() { var i = this, o = ce.apply(this, arguments), a = r(i); a.promise = i, o[0] = n(o[0], "cb-", a, null, !1), o[1] = n(o[1], "cb-", a, null, !1); var s = e.apply(this, o); return a.nextPromise = s, t.emit("propagate", [i, !0], s, !1, !1), s } })), t.on("executor-start", (function(e) { e[0] = n(e[0], "resolve-", this, null, !1), e[1] = n(e[1], "resolve-", this, null, !1) })), t.on("executor-err", (function(e, t, r) { e[1](r) })), t.on("cb-end", (function(e, r, n) { t.emit("propagate", [n, !0], this.nextPromise, !1, !1) })), t.on("propagate", (function(e, r, n) { this.getCtx && !r || (this.getCtx = function() { if (e instanceof Promise) var r = t.context(e); return r && r.getCtx ? r.getCtx() : this }) })), e.toString = function() { return "" + i } }(), t } const ye = {}; function xe(e) { var t = function(e) { return (e || a.ee).get("events") }(e); if (ye[t.debugId]) return t; ye[t.debugId] = !0; var r = ne(t, !0), n = XMLHttpRequest, i = "addEventListener", s = "removeEventListener"; function c(e) { for (var t = e; t && !t.hasOwnProperty(i);) t = Object.getPrototypeOf(t); t && u(t) } function u(e) { r.inPlace(e, [i, s], "-", d) } function d(e, t) { return e[1] } return "getPrototypeOf" in Object ? (o.il && c(document), c(o.ZP), c(n.prototype)) : n.prototype.hasOwnProperty(i) && (u(o.ZP), u(n.prototype)), t.on(i + "-start", (function(e, t) { var n = e[1]; if (null !== n && ("function" == typeof n || "object" == typeof n)) { var i = (0, M.X)(n, "nr@wrapped", (function() { var e = { object: function() { if ("function" != typeof n.handleEvent) return; return n.handleEvent.apply(n, arguments) }, function: n } [typeof n]; return e ? r(e, "fn-", null, e.name || "anonymous") : n })); this.wrapped = e[1] = i } })), t.on(s + "-start", (function(e) { e[1] = this.wrapped || e[1] })), t } const Pe = {}; function Oe(e) { var r = e || a.ee; const n = function(e) { return (e || a.ee).get("xhr") }(r); if (Pe[n.debugId]) return n; Pe[n.debugId] = !0, xe(r); var i = ne(n), s = b.Yu.XHR, c = b.Yu.MO, u = b.Yu.PR, d = b.Yu.SI, f = "readystatechange", l = ["onload", "onerror", "onabort", "onloadstart", "onloadend", "onprogress", "ontimeout"], p = [], h = o.ZP.XMLHttpRequest.listeners, v = o.ZP.XMLHttpRequest = function(e) { var r = new s(e); function i() { try { n.emit("new-xhr", [r], r), r.addEventListener(f, g, (0, t.m$)(!1)) } catch (e) { console.error(e); try { n.emit("internal-error", [e]) } catch (e) {} } } return this.listeners = h ? [...h, i] : [i], this.listeners.forEach((e => e())), r }; function _(e, t) { i.inPlace(t, ["onreadystatechange"], "fn-", P) } function g() { var e = this, t = n.context(e); e.readyState > 3 && !t.resolved && (t.resolved = !0, n.emit("xhr-resolved", [], e)), i.inPlace(e, l, "fn-", P) } if (function(e, t) { for (var r in e) t[r] = e[r] }(s, v), v.prototype = s.prototype, i.inPlace(v.prototype, ["open", "send"], "-xhr-", P), n.on("send-xhr-start", (function(e, t) { _(e, t), function(e) { p.push(e), c && (m ? m.then(x) : d ? d(x) : (w = -w, y.data = w)) }(t) })), n.on("open-xhr-start", _), c) { var m = u && u.resolve(); if (!d && !u) { var w = 1, y = document.createTextNode(w); new c(x).observe(y, { characterData: !0 }) } } else r.on("fn-end", (function(e) { e[0] && e[0].type === f || x() })); function x() { for (var e = 0; e < p.length; e++) _(0, p[e]); p.length && (p = []) } function P(e, t) { return t } return n } function ke(e) { return xe(e) } function Ee(e) { return K(e) } function Se(e) { return he(e) } function Ce(e) { return le(e) } function Te(e) { return de(e) } function Ae(e) { return Oe(e) } var qe, Ie = {}; try { qe = localStorage.getItem("__nr_flags").split(","), console && "function" == typeof console.log && (Ie.console = !0, -1 !== qe.indexOf("dev") && (Ie.dev = !0), -1 !== qe.indexOf("nr_dev") && (Ie.nrDev = !0)) } catch (e) {} function je(e) { try { Ie.console && je(e) } catch (e) {} } Ie.nrDev && a.ee.on("internal-error", (function(e) { je(e.stack) })), Ie.dev && a.ee.on("fn-err", (function(e, t, r) { je(r.stack) })), Ie.dev && (je("NR AGENT IN DEVELOPMENT MODE"), je("flags: " + (0, B.D)(Ie, (function(e, t) { return e })).join(", "))); var Re = "nr@seenError"; class Ne extends h.W { constructor(e) { var t; super(e), t = this, this.skipNext = 0, this.handleErrors = !1, this.origOnerror = o.ZP?.onerror; const r = this, n = (0, b.OP)(this.agentIdentifier); n.features.err = !0, r.ee.on("fn-start", (function(e, t, n) { r.handleErrors && (r.skipNext += 1) })), r.ee.on("fn-err", (function(e, t, n) { r.handleErrors && !n[Re] && ((0, M.X)(n, Re, (function() { return !0 })), this.thrown = !0, Ze(n, void 0, r.ee)) })), r.ee.on("fn-end", (function() { r.handleErrors && !this.thrown && r.skipNext > 0 && (r.skipNext -= 1) })), r.ee.on("internal-error", (e => { (0, d.p)("ierr", [e, (0, f.zO)(), !0], void 0, void 0, r.ee) })); const i = o.ZP?.onerror; o.ZP.onerror = function() { return i && i(...arguments), t.onerrorHandler(...arguments), !1 }; try { o.ZP?.addEventListener("unhandledrejection", (e => { const t = new Error(`${e.reason}`); (0, d.p)("err", [t, (0, f.zO)(), !1, { unhandledPromiseRejection: 1 }], void 0, void 0, this.ee) })) } catch (e) {} try { throw new Error } catch (e) { "stack" in e && (Te(this.ee), Ce(this.ee), "addEventListener" in o.ZP && ke(this.ee), n.xhrWrappable && Ae(this.ee), r.handleErrors = !0) } } onerrorHandler(e, t, r, n, i) { try { this.skipNext ? this.skipNext -= 1 : Ze(i || new Le(e, t, r), !0, this.ee) } catch (e) { try { (0, d.p)("ierr", [e, (0, f.zO)(), !0], void 0, void 0, this.ee) } catch (e) {} } return "function" == typeof this.origOnerror && this.origOnerror.apply(this, W()(arguments)) } } function Le(e, t, r) { this.message = e || "Uncaught error with no additional information", this.sourceURL = t, this.line = r } function Ze(e, t, r) { var n = t ? null : (0, f.zO)(); (0, d.p)("err", [e, n], void 0, void 0, r) } var He = 1; function ze(e) { var t = typeof e; return !e || "object" !== t && "function" !== t ? -1 : e === o.ZP ? 0 : (0, M.X)(e, "nr@id", (function() { return He++ })) } var Me = __webpack_require__(1719); function De(e) { if ("string" == typeof e && e.length) return e.length; if ("object" == typeof e) { if ("undefined" != typeof ArrayBuffer && e instanceof ArrayBuffer && e.byteLength) return e.byteLength; if ("undefined" != typeof Blob && e instanceof Blob && e.size) return e.size; if (!("undefined" != typeof FormData && e instanceof FormData)) try { return JSON.stringify(e).length } catch (e) { return } } } var We = __webpack_require__(7233), Be = __webpack_require__(2141); class $e { constructor(e) { this.agentIdentifier = e, this.generateTracePayload = this.generateTracePayload.bind(this), this.shouldGenerateTrace = this.shouldGenerateTrace.bind(this) } generateTracePayload(e) { if (!this.shouldGenerateTrace(e)) return null; var t = (0, b.DL)(this.agentIdentifier); if (!t) return null; var r = (t.accountID || "").toString() || null, n = (t.agentID || "").toString() || null, i = (t.trustKey || "").toString() || null; if (!r || !n) return null; var o = (0, Be.M)(), a = (0, Be.Ht)(), s = Date.now(), c = { spanId: o, traceId: a, timestamp: s }; return (e.sameOrigin || this.isAllowedOrigin(e) && this.useTraceContextHeadersForCors()) && (c.traceContextParentHeader = this.generateTraceContextParentHeader(o, a), c.traceContextStateHeader = this.generateTraceContextStateHeader(o, s, r, n, i)), (e.sameOrigin && !this.excludeNewrelicHeader() || !e.sameOrigin && this.isAllowedOrigin(e) && this.useNewrelicHeaderForCors()) && (c.newrelicHeader = this.generateTraceHeader(o, a, s, r, n, i)), c } generateTraceContextParentHeader(e, t) { return "00-" + t + "-" + e + "-01" } generateTraceContextStateHeader(e, t, r, n, i) { return i + "@nr=0-1-" + r + "-" + n + "-" + e + "----" + t } generateTraceHeader(e, t, r, n, i, a) { if (!("function" == typeof o.ZP?.btoa)) return null; var s = { v: [0, 1], d: { ty: "Browser", ac: n, ap: i, id: e, tr: t, ti: r } }; return a && n !== a && (s.d.tk = a), btoa(JSON.stringify(s)) } shouldGenerateTrace(e) { return this.isDtEnabled() && this.isAllowedOrigin(e) } isAllowedOrigin(e) { var t = !1, r = {}; if ((0, b.Mt)(this.agentIdentifier, "distributed_tracing") && (r = (0, b.P_)(this.agentIdentifier).distributed_tracing), e.sameOrigin) t = !0; else if (r.allowed_origins instanceof Array) for (var n = 0; n < r.allowed_origins.length; n++) { var i = (0, We.e)(r.allowed_origins[n]); if (e.hostname === i.hostname && e.protocol === i.protocol && e.port === i.port) { t = !0; break } } return t } isDtEnabled() { var e = (0, b.Mt)(this.agentIdentifier, "distributed_tracing"); return !!e && !!e.enabled } excludeNewrelicHeader() { var e = (0, b.Mt)(this.agentIdentifier, "distributed_tracing"); return !!e && !!e.exclude_newrelic_header } useNewrelicHeaderForCors() { var e = (0, b.Mt)(this.agentIdentifier, "distributed_tracing"); return !!e && !1 !== e.cors_use_newrelic_header } useTraceContextHeadersForCors() { var e = (0, b.Mt)(this.agentIdentifier, "distributed_tracing"); return !!e && !!e.cors_use_tracecontext_headers } } var Ge = ["load", "error", "abort", "timeout"], Fe = Ge.length, Ue = b.Yu.REQ, Xe = o.ZP?.XMLHttpRequest; class Ve extends h.W { constructor(e) { super(e); const r = (0, b.OP)(this.agentIdentifier); r.xhrWrappable && !r.disabled && (r.features.xhr = !0, this.dt = new $e(this.agentIdentifier), this.handler = (e, t, r, n) => (0, d.p)(e, t, r, n, this.ee), this.wrappedFetch = Ee(this.ee), Ae(this.ee), function(e, r, n, i) { function a(e) { var r = this; r.totalCbs = 0, r.called = 0, r.cbTime = 0, r.end = P, r.ended = !1, r.xhrGuids = {}, r.lastSize = null, r.loadCaptureCalled = !1, r.params = this.params || {}, r.metrics = this.metrics || {}, e.addEventListener("load", (function(t) { k(r, e) }), (0, t.m$)(!1)), Me.I && (Me.I > 34 || Me.I < 10) || e.addEventListener("progress", (function(e) { r.lastSize = e.loaded }), (0, t.m$)(!1)) } function s(e) { this.params = { method: e[0] }, O(this, e[1]), this.metrics = {} } function c(t, r) { var n = (0, b.DL)(e); "xpid" in n && this.sameOrigin && r.setRequestHeader("X-NewRelic-ID", n.xpid); var o = i.generateTracePayload(this.parsedOrigin); if (o) { var a = !1; o.newrelicHeader && (r.setRequestHeader("newrelic", o.newrelicHeader), a = !0), o.traceContextParentHeader && (r.setRequestHeader("traceparent", o.traceContextParentHeader), o.traceContextStateHeader && r.setRequestHeader("tracestate", o.traceContextStateHeader), a = !0), a && (this.dt = o) } } function u(e, n) { var i = this.metrics, o = e[0], a = this; if (i && o) { var s = De(o); s && (i.txSize = s) } this.startTime = (0, f.zO)(), this.listener = function(e) { try { "abort" !== e.type || a.loadCaptureCalled || (a.params.aborted = !0), ("load" !== e.type || a.called === a.totalCbs && (a.onloadCalled || "function" != typeof n.onload)) && a.end(n) } catch (e) { try { r.emit("internal-error", [e]) } catch (e) {} } }; for (var c = 0; c < Fe; c++) n.addEventListener(Ge[c], this.listener, (0, t.m$)(!1)) } function d(e, t, r) { this.cbTime += e, t ? this.onloadCalled = !0 : this.called += 1, this.called !== this.totalCbs || !this.onloadCalled && "function" == typeof r.onload || this.end(r) } function l(e, t) { var r = "" + ze(e) + !!t; this.xhrGuids && !this.xhrGuids[r] && (this.xhrGuids[r] = !0, this.totalCbs += 1) } function p(e, t) { var r = "" + ze(e) + !!t; this.xhrGuids && this.xhrGuids[r] && (delete this.xhrGuids[r], this.totalCbs -= 1) } function h() { this.endTime = (0, f.zO)() } function v(e, t) { t instanceof Xe && "load" === e[0] && r.emit("xhr-load-added", [e[1], e[2]], t) } function _(e, t) { t instanceof Xe && "load" === e[0] && r.emit("xhr-load-removed", [e[1], e[2]], t) } function g(e, t, r) { t instanceof Xe && ("onload" === r && (this.onload = !0), ("load" === (e[0] && e[0].type) || this.onload) && (this.xhrCbStart = (0, f.zO)())) } function m(e, t) { this.xhrCbStart && r.emit("xhr-cb-time", [(0, f.zO)() - this.xhrCbStart, this.onload, t], t) } function w(e) { var t, r = e[1] || {}; "string" == typeof e[0] ? t = e[0] : e[0] && e[0].url ? t = e[0].url : o.ZP?.URL && e[0] && e[0] instanceof URL && (t = e[0].href), t && (this.parsedOrigin = (0, We.e)(t), this.sameOrigin = this.parsedOrigin.sameOrigin); var n = i.generateTracePayload(this.parsedOrigin); if (n && (n.newrelicHeader || n.traceContextParentHeader)) if ("string" == typeof e[0] || o.ZP?.URL && e[0] && e[0] instanceof URL) { var a = {}; for (var s in r) a[s] = r[s]; a.headers = new Headers(r.headers || {}), c(a.headers, n) && (this.dt = n), e.length > 1 ? e[1] = a : e.push(a) } else e[0] && e[0].headers && c(e[0].headers, n) && (this.dt = n); function c(e, t) { var r = !1; return t.newrelicHeader && (e.set("newrelic", t.newrelicHeader), r = !0), t.traceContextParentHeader && (e.set("traceparent", t.traceContextParentHeader), t.traceContextStateHeader && e.set("tracestate", t.traceContextStateHeader), r = !0), r } } function y(e, t) { this.params = {}, this.metrics = {}, this.startTime = (0, f.zO)(), this.dt = t, e.length >= 1 && (this.target = e[0]), e.length >= 2 && (this.opts = e[1]); var r, n = this.opts || {}, i = this.target; "string" == typeof i ? r = i : "object" == typeof i && i instanceof Ue ? r = i.url : o.ZP?.URL && "object" == typeof i && i instanceof URL && (r = i.href), O(this, r); var a = ("" + (i && i instanceof Ue && i.method || n.method || "GET")).toUpperCase(); this.params.method = a, this.txSize = De(n.body) || 0 } function x(e, t) { var r; this.endTime = (0, f.zO)(), this.params || (this.params = {}), this.params.status = t ? t.status : 0, "string" == typeof this.rxSize && this.rxSize.length > 0 && (r = +this.rxSize); var i = { txSize: this.txSize, rxSize: r, duration: (0, f.zO)() - this.startTime }; n("xhr", [this.params, i, this.startTime, this.endTime, "fetch"], this) } function P(e) { var t = this.params, r = this.metrics; if (!this.ended) { this.ended = !0; for (var i = 0; i < Fe; i++) e.removeEventListener(Ge[i], this.listener, !1); t.aborted || (r.duration = (0, f.zO)() - this.startTime, this.loadCaptureCalled || 4 !== e.readyState ? null == t.status && (t.status = 0) : k(this, e), r.cbTime = this.cbTime, n("xhr", [t, r, this.startTime, this.endTime, "xhr"], this)) } } function O(e, t) { var r = (0, We.e)(t), n = e.params; n.hostname = r.hostname, n.port = r.port, n.protocol = r.protocol, n.host = r.hostname + ":" + r.port, n.pathname = r.pathname, e.parsedOrigin = r, e.sameOrigin = r.sameOrigin } function k(e, t) { e.params.status = t.status; var r = function(e, t) { var r = e.responseType; return "json" === r && null !== t ? t : "arraybuffer" === r || "blob" === r || "json" === r ? De(e.response) : "text" === r || "" === r || void 0 === r ? De(e.responseText) : void 0 }(t, e.lastSize); if (r && (e.metrics.rxSize = r), e.sameOrigin) { var n = t.getResponseHeader("X-NewRelic-App-Data"); n && (e.params.cat = n.split(", ").pop()) } e.loadCaptureCalled = !0 } r.on("new-xhr", a), r.on("open-xhr-start", s), r.on("open-xhr-end", c), r.on("send-xhr-start", u), r.on("xhr-cb-time", d), r.on("xhr-load-added", l), r.on("xhr-load-removed", p), r.on("xhr-resolved", h), r.on("addEventListener-end", v), r.on("removeEventListener-end", _), r.on("fn-end", m), r.on("fetch-before-start", w), r.on("fetch-start", y), r.on("fn-start", g), r.on("fetch-done", x) }(this.agentIdentifier, this.ee, this.handler, this.dt)) } } var Ye = __webpack_require__(6023), Je = "learResourceTimings", Qe = "addEventListener", Ke = "removeEventListener", et = "resourcetimingbufferfull", tt = "bstResource", rt = "-start", nt = "-end", it = "fn" + rt, ot = "fn" + nt, at = "bstTimer", st = "pushState", ct = b.Yu.EV; class ut extends h.W { constructor(e) { if (super(e), !o.il) return; if (!(window.performance && window.performance.timing && window.performance.getEntriesByType)) return; (0, b.OP)(this.agentIdentifier).features.stn = !0; const r = this.ee; function n(e) { if ((0, d.p)(tt, [window.performance.getEntriesByType("resource")], void 0, void 0, r), window.performance["c" + Je]) try { window.performance[Ke](et, n, !1) } catch (e) {} else try { window.performance[Ke]("webkit" + et, n, !1) } catch (e) {} } this.timerEE = Te(this.ee), this.rafEE = Ce(this.ee), Se(this.ee), ke(this.ee), this.ee.on(it, (function(e, t) { e[0] instanceof ct && (this.bstStart = (0, f.zO)()) })), this.ee.on(ot, (function(e, t) { var n = e[0]; n instanceof ct && (0, d.p)("bst", [n, t, this.bstStart, (0, f.zO)()], void 0, void 0, r) })), this.timerEE.on(it, (function(e, t, r) { this.bstStart = (0, f.zO)(), this.bstType = r })), this.timerEE.on(ot, (function(e, t) { (0, d.p)(at, [t, this.bstStart, (0, f.zO)(), this.bstType], void 0, void 0, r) })), this.rafEE.on(it, (function() { this.bstStart = (0, f.zO)() })), this.rafEE.on(ot, (function(e, t) { (0, d.p)(at, [t, this.bstStart, (0, f.zO)(), "requestAnimationFrame"], void 0, void 0, r) })), this.ee.on(st + rt, (function(e) { this.time = (0, f.zO)(), this.startPath = location.pathname + location.hash })), this.ee.on(st + nt, (function(e) { (0, d.p)("bstHist", [location.pathname + location.hash, this.startPath, this.time], void 0, void 0, r) })), (0, Ye.W)() ? ((0, d.p)(tt, [window.performance.getEntriesByType("resource")], void 0, void 0, r), function() { var e = new PerformanceObserver(((e, t) => { var n = e.getEntries(); (0, d.p)(tt, [n], void 0, void 0, r) })); try { e.observe({ entryTypes: ["resource"] }) } catch (e) {} }()) : Qe in window.performance && (window.performance["c" + Je] ? window.performance[Qe](et, n, (0, t.m$)(!1)) : window.performance[Qe]("webkit" + et, n, (0, t.m$)(!1))), document[Qe]("scroll", this.noOp, (0, t.m$)(!1)), document[Qe]("keypress", this.noOp, (0, t.m$)(!1)), document[Qe]("click", this.noOp, (0, t.m$)(!1)) } noOp(e) {} } class dt extends h.W { constructor(e) { super(e); (0, b.OP)(this.agentIdentifier).features.ins = !0 } } var ft = "-start", lt = "-end", pt = "-body", ht = "fn" + ft, vt = "fn" + lt, _t = "cb" + ft, bt = "cb" + lt, gt = "jsTime", mt = "fetch", wt = "addEventListener", yt = o.ZP, xt = yt.location; class Pt extends h.W { constructor(e) { if (super(e), !o.il) return; const r = (0, b.OP)(this.agentIdentifier); if (!yt[wt] || !r.xhrWrappable || r.disabled) return; r.features.spa = !0; let n, i = 0; const a = this.ee.get("tracer"), s = _e(this.ee); const c = function(e) { return we(e) }(this.ee), u = ke(this.ee), d = Te(this.ee), l = Ae(this.ee), p = Ee(this.ee), h = Se(this.ee), v = function(e) { return ge(e) }(this.ee); function _(e, t) { h.emit("newURL", ["" + xt, t]) } function g() { i++, n = xt.hash, this[ht] = (0, f.zO)() } function m() { i--, xt.hash !== n && _(0, !0); var e = (0, f.zO)(); this[gt] = ~~this[gt] + e - this[ht], this[vt] = e } function w(e, t) { e.on(t, (function() { this[t] = (0, f.zO)() })) } this.ee.on(ht, g), c.on(_t, g), s.on(_t, g), this.ee.on(vt, m), c.on(bt, m), s.on(bt, m), this.ee.buffer([ht, vt, "xhr-resolved"]), u.buffer([ht]), d.buffer(["setTimeout" + lt, "clearTimeout" + ft, ht]), l.buffer([ht, "new-xhr", "send-xhr" + ft]), p.buffer([mt + ft, mt + "-done", mt + pt + ft, mt + pt + lt]), h.buffer(["newURL"]), v.buffer([ht]), c.buffer(["propagate", _t, bt, "executor-err", "resolve" + ft]), a.buffer([ht, "no-" + ht]), s.buffer(["new-jsonp", "cb-start", "jsonp-error", "jsonp-end"]), w(p, mt + ft), w(p, mt + "-done"), w(s, "new-jsonp"), w(s, "jsonp-end"), w(s, "cb-start"), h.on("pushState-end", _), h.on("replaceState-end", _), yt[wt]("hashchange", _, (0, t.m$)(!0)), yt[wt]("load", _, (0, t.m$)(!0)), yt[wt]("popstate", (function() { _(0, i > 1) }), (0, t.m$)(!0)) } } var Ot = __webpack_require__(9011), kt = __webpack_require__(4580); let Et = !1; const St = (0, e.n)(); try { ! function(e) { if (Et) return; const t = (0, kt.gG)(); o.v6 && (t.info.jsAttributes = { ...t.info.jsAttributes, isWorker: !0 }); try { (0, b.CX)(u.Z, t.info), (0, b.Dg)(u.Z, t.init), (0, b.GE)(u.Z, t.loader_config), (0, b.sU)(u.Z, { loaderType: e }), function(e) { var t = (0, kt.fP)(), r = a.ee.get(e), n = r.get("tracer"), i = "api-", o = i + "ixn-"; function s() {}(0, B.D)(["setErrorHandler", "finished", "addToTrace", "inlineHit", "addRelease"], (function(e, r) { t[r] = u(i, r, !0, "api") })), t.addPageAction = u(i, "addPageAction", !0), t.setCurrentRouteName = u(i, "routeName", !0), t.setPageViewName = function(t, r) { if ("string" == typeof t) return "/" !== t.charAt(0) && (t = "/" + t), (0, b.OP)(e).customTransaction = (r || "http://custom.transaction") + t, u(i, "setPageViewName", !0, "api")() }, t.setCustomAttribute = function(t, r) { const n = (0, b.C5)(e); return (0, b.CX)(e, { ...n, jsAttributes: { ...n.jsAttributes, [t]: r } }), u(i, "setCustomAttribute", !0, "api")() }, t.interaction = function() { return (new s).get() }; var c = s.prototype = { createTracer: function(e, t) { var i = {}, a = this, s = "function" == typeof t; return (0, d.p)(o + "tracer", [(0, f.zO)(), e, i], a, void 0, r), function() { if (n.emit((s ? "" : "no-") + "fn-start", [(0, f.zO)(), a, s], i), s) try { return t.apply(this, arguments) } catch (e) { throw n.emit("fn-err", [arguments, this, "string" == typeof e ? new Error(e) : e], i), e } finally { n.emit("fn-end", [(0, f.zO)()], i) } } } }; function u(e, t, n, i) { return function() { return (0, d.p)("record-supportability", ["API/" + t + "/called"], void 0, void 0, r), (0, d.p)(e + t, [(0, f.zO)()].concat(W()(arguments)), n ? null : this, i, r), n ? void 0 : this } }(0, B.D)("actionText,setName,setAttribute,save,ignore,onEnd,getContext,end,get".split(","), (function(e, t) { c[t] = u(o, t) })), t.noticeError = function(e, t) { "string" == typeof e && (e = new Error(e)), (0, d.p)("record-supportability", ["API/noticeError/called"], void 0, void 0, r), (0, d.p)("err", [e, (0, f.zO)(), !1, t], void 0, void 0, r) } }(u.Z), Et = !0 } catch (e) {} }("spa"); const e = (0, Ot.K)(u.Z); e.page_view_event && new v(u.Z), e.page_view_timing && new g(u.Z), e.metrics && new z(u.Z, St), e.jserrors && new Ne(u.Z), e.ajax && new Ve(u.Z), e.session_trace && new ut(u.Z), e.page_action && new dt(u.Z), e.spa && new Pt(u.Z), function(e, t) { let r = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : 1e3; t ? setTimeout((() => c(e)), r) : o.il ? n((() => c(e))) : c(e) }("spa") } catch (e) { o.ZP?.newrelic?.ee?.abort && o.ZP.newrelic.ee.abort() } })(), window.NRBA = __webpack_exports__ })(); } } </script> <script type="text/javascript"> var vscom_browser_redirect_params = {"pageLanguage":"en","languageUrls":{"en_US":"https:\/\/visualstudio.microsoft.com\/vs\/preview\/","en":"https:\/\/visualstudio.microsoft.com\/vs\/preview\/","US":"https:\/\/visualstudio.microsoft.com\/vs\/preview\/","zh_CN":"https:\/\/visualstudio.microsoft.com\/zh-hans\/vs\/preview\/","zh-hans":"https:\/\/visualstudio.microsoft.com\/zh-hans\/vs\/preview\/","CN":"https:\/\/visualstudio.microsoft.com\/zh-hans\/vs\/preview\/","zh_TW":"https:\/\/visualstudio.microsoft.com\/zh-hant\/vs\/preview\/","zh-hant":"https:\/\/visualstudio.microsoft.com\/zh-hant\/vs\/preview\/","TW":"https:\/\/visualstudio.microsoft.com\/zh-hant\/vs\/preview\/","fr_FR":"https:\/\/visualstudio.microsoft.com\/fr\/vs\/preview\/","fr":"https:\/\/visualstudio.microsoft.com\/fr\/vs\/preview\/","FR":"https:\/\/visualstudio.microsoft.com\/fr\/vs\/preview\/","de_DE":"https:\/\/visualstudio.microsoft.com\/de\/vs\/preview\/","de":"https:\/\/visualstudio.microsoft.com\/de\/vs\/preview\/","DE":"https:\/\/visualstudio.microsoft.com\/de\/vs\/preview\/","it_IT":"https:\/\/visualstudio.microsoft.com\/it\/vs\/preview\/","it":"https:\/\/visualstudio.microsoft.com\/it\/vs\/preview\/","IT":"https:\/\/visualstudio.microsoft.com\/it\/vs\/preview\/","ja_JP":"https:\/\/visualstudio.microsoft.com\/ja\/vs\/preview\/","ja":"https:\/\/visualstudio.microsoft.com\/ja\/vs\/preview\/","JP":"https:\/\/visualstudio.microsoft.com\/ja\/vs\/preview\/","ru_RU":"https:\/\/visualstudio.microsoft.com\/ru\/vs\/preview\/","ru":"https:\/\/visualstudio.microsoft.com\/ru\/vs\/preview\/","RU":"https:\/\/visualstudio.microsoft.com\/ru\/vs\/preview\/","es_ES":"https:\/\/visualstudio.microsoft.com\/es\/vs\/preview\/","es":"https:\/\/visualstudio.microsoft.com\/es\/vs\/preview\/","ES":"https:\/\/visualstudio.microsoft.com\/es\/vs\/preview\/","cs_CZ":"https:\/\/visualstudio.microsoft.com\/cs\/vs\/preview\/","cs":"https:\/\/visualstudio.microsoft.com\/cs\/vs\/preview\/","CZ":"https:\/\/visualstudio.microsoft.com\/cs\/vs\/preview\/","ko_KR":"https:\/\/visualstudio.microsoft.com\/ko\/vs\/preview\/","ko":"https:\/\/visualstudio.microsoft.com\/ko\/vs\/preview\/","KR":"https:\/\/visualstudio.microsoft.com\/ko\/vs\/preview\/","pl_PL":"https:\/\/visualstudio.microsoft.com\/pl\/vs\/preview\/","pl":"https:\/\/visualstudio.microsoft.com\/pl\/vs\/preview\/","PL":"https:\/\/visualstudio.microsoft.com\/pl\/vs\/preview\/","pt_BR":"https:\/\/visualstudio.microsoft.com\/pt-br\/vs\/preview\/","pt-br":"https:\/\/visualstudio.microsoft.com\/pt-br\/vs\/preview\/","BR":"https:\/\/visualstudio.microsoft.com\/pt-br\/vs\/preview\/","tr_TR":"https:\/\/visualstudio.microsoft.com\/tr\/vs\/preview\/","tr":"https:\/\/visualstudio.microsoft.com\/tr\/vs\/preview\/","TR":"https:\/\/visualstudio.microsoft.com\/tr\/vs\/preview\/"},"cookie":{"name":"_icl_visitor_lang_js","domain":"visualstudio.microsoft.com","path":"\/","expiration":720},"is404":false,"urlLocale":""}; var VScomMLBrowserRedirect=function(vscom_browser_redirect_params){"use strict";var self=this,vscom_browser_redirect_params=vscom_browser_redirect_params||window.vscom_browser_redirect_params;self.vscom_browser_redirect_params=vscom_browser_redirect_params,self.init=function(){var redirectUrl,browserLanguages;if(self.is404())self.status="404";else if(!vscom_browser_redirect_params.urlLocale){var cookieLanguage=self.readCookie(vscom_browser_redirect_params.cookie.name);if(cookieLanguage)return redirectUrl=self.redirectIfNeeded(cookieLanguage),void(self.status="cookie");browserLanguages=self.getBrowserLanguage(),redirectUrl=self.lookUpRedirectParams(browserLanguages),self.status="new";var pageLanguage=vscom_browser_redirect_params.pageLanguage.toLowerCase();void 0===redirectUrl||!1===redirectUrl.url||!1!==navigator.cookieEnabled||redirectUrl.url!==vscom_browser_redirect_params.languageUrls[pageLanguage]?void 0!==redirectUrl&&!1!==redirectUrl.url&&redirectUrl.url!==vscom_browser_redirect_params.languageUrls[pageLanguage]&&(self.status="redirect",self.redirectWithQueryString(redirectUrl.url)):self.status="no cookies"}},self.lookUpRedirectParams=function(browserLanguages){for(var redirectUrl,browserLanguagesLength=browserLanguages.length,pageLanguage=vscom_browser_redirect_params.pageLanguage.toLowerCase(),i=0;i<browserLanguagesLength;i++){var browserLanguage=browserLanguages[i];if(pageLanguage===browserLanguage)break;if(!1!==(redirectUrl=self.mapBrowserToVSCOMLang(browserLanguage)).url)break}return redirectUrl},self.getRedirectUrl=function(browserLanguage){if(!1===browserLanguage)return{url:!1,language:!1};var redirectUrl=!1,redirectLanguage=!1,languageUrls=vscom_browser_redirect_params.languageUrls,languageFirstPart=browserLanguage.substr(0,2),languageLastPart=browserLanguage.substr(3,2);return void 0===languageUrls[browserLanguage]?void 0!==languageUrls[languageFirstPart]?(redirectUrl=languageUrls[languageFirstPart],redirectLanguage=languageFirstPart):void 0!==languageUrls[languageLastPart]&&(redirectUrl=languageUrls[languageLastPart],redirectLanguage=languageLastPart):(redirectUrl=languageUrls[browserLanguage],redirectLanguage=browserLanguage),{url:redirectUrl,language:redirectLanguage}},self.is404=function(){return vscom_browser_redirect_params.is404},self.mapBrowserToVSCOMLang=function(browserLanguage){var redirectUrl;return browserLanguage=self.maybeCovertChinese(browserLanguage),redirectUrl=self.getRedirectUrl(browserLanguage)},self.redirectIfNeeded=function(language){var pageLanguage=vscom_browser_redirect_params.pageLanguage.toLowerCase(),languageUrls=vscom_browser_redirect_params.languageUrls,redirectUrl;return pageLanguage!==(language=self.maybeCovertChinese(language))&&language.substr(0,2)!==pageLanguage&&languageUrls[language]!==languageUrls[pageLanguage]&&!1!==(redirectUrl=self.getRedirectUrl(language)).url&&self.redirectWithQueryString(redirectUrl.url),redirectUrl},self.maybeCovertChinese=function(language){var simpleChinese=["hans","cn","CN"];return"zh"===language.substr(0,2)&&-1===simpleChinese.indexOf(language.substr(3,4))&&language.length>3||"TW"==language?language="zh-hant":("zh"==language||"zh"===language.substr(0,2)&&simpleChinese.indexOf(language.substr(3,4))>=0||"CN"==language)&&(language="zh-hans"),language},self.redirectWithQueryString=function(redirectTo){""===window.location.search||redirectTo.includes("?")||(redirectTo+=window.location.search),window.location=redirectTo},self.getExpirationDate=function(){var date=new Date,currentTime=date.getTime();return date.setTime(currentTime+60*vscom_browser_redirect_params.cookie.expiration*60*1e3),date},self.readCookie=function(a){var b=document.cookie.match("(^|;)\\s*"+a+"\\s*=\\s*([^;]+)");return b?b.pop():""},self.setCookie=function(browserLanguage){var cookieParams=vscom_browser_redirect_params.cookie,cookieName=cookieParams.name,path="/";cookieParams.path&&(path=cookieParams.path),window.dataLayer=window.dataLayer||[],window.dataLayer.push({event:"language-picker",label:browserLanguage}),document.cookie=cookieName+"= ; expires=Thu, 01 Jan 1970 00:00:01 GMT;",document.cookie=cookieName+"= ; expires=Thu, 01 Jan 1970 00:00:01 GMT; path=/;",document.cookie=cookieName+"= ; domain= ; expires=Thu, 01 Jan 1970 00:00:01 GMT;",document.cookie=cookieName+"= ; domain= ; expires=Thu, 01 Jan 1970 00:00:01 GMT; path=/;",document.cookie=cookieName+"= ; domain=."+cookieParams.domain+"; expires=Thu, 01 Jan 1970 00:00:01 GMT;",document.cookie=cookieName+"= ; domain=."+cookieParams.domain+"; expires=Thu, 01 Jan 1970 00:00:01 GMT; path=/;",document.cookie=cookieName+"="+browserLanguage+"; expires="+self.getExpirationDate().toGMTString()+"; path="+path},self.getBrowserLanguage=function(){var browserLanguages=[];return navigator.languages&&(browserLanguages=navigator.languages),0===browserLanguages.length&&(navigator.language||navigator.userLanguage)&&browserLanguages.push(navigator.language||navigator.userLanguage),0===browserLanguages.length&&(navigator.browserLanguage||navigator.systemLanguage)&&browserLanguages.push(navigator.browserLanguage||navigator.systemLanguage),0!==browserLanguages.length&&(browserLanguages=browserLanguages.join("|").toLowerCase().split("|")),browserLanguages}};"undefined"!=typeof module&&module.exports&&(module.exports={VScomMLBrowserRedirect:VScomMLBrowserRedirect}); VScomMLBrowserRedirect = new VScomMLBrowserRedirect(); VScomMLBrowserRedirect.init(); </script> <script> /*! lazysizes - v4.1.3 | For lazy loading images */ ! function(a, b) { var c = b(a, a.document); a.lazySizes = c, "object" == typeof module && module.exports && (module.exports = c) }(window, function(a, b) { "use strict"; if (b.getElementsByClassName) { var c, d, e = b.documentElement, f = a.Date, g = a.HTMLPictureElement, h = "addEventListener", i = "getAttribute", j = a[h], k = a.setTimeout, l = a.requestAnimationFrame || k, m = a.requestIdleCallback, n = /^picture$/i, o = ["load", "error", "lazyincluded", "_lazyloaded"], p = {}, q = Array.prototype.forEach, r = function(a, b) { return p[b] || (p[b] = new RegExp("(\\s|^)" + b + "(\\s|$)")), p[b].test(a[i]("class") || "") && p[b] }, s = function(a, b) { r(a, b) || a.setAttribute("class", (a[i]("class") || "").trim() + " " + b) }, t = function(a, b) { var c; (c = r(a, b)) && a.setAttribute("class", (a[i]("class") || "").replace(c, " ")) }, u = function(a, b, c) { var d = c ? h : "removeEventListener"; c && u(a, b), o.forEach(function(c) { a[d](c, b) }) }, v = function(a, d, e, f, g) { var h = b.createEvent("Event"); return e || (e = {}), e.instance = c, h.initEvent(d, !f, !g), h.detail = e, a.dispatchEvent(h), h }, w = function(b, c) { var e; !g && (e = a.picturefill || d.pf) ? (c && c.src && !b[i]("srcset") && b.setAttribute("srcset", c.src), e({ reevaluate: !0, elements: [b] })) : c && c.src && (b.src = c.src) }, x = function(a, b) { return (getComputedStyle(a, null) || {})[b] }, y = function(a, b, c) { for (c = c || a.offsetWidth; c < d.minSize && b && !a._lazysizesWidth;) c = b.offsetWidth, b = b.parentNode; return c }, z = function() { var a, c, d = [], e = [], f = d, g = function() { var b = f; for (f = d.length ? e : d, a = !0, c = !1; b.length;) b.shift()(); a = !1 }, h = function(d, e) { a && !e ? d.apply(this, arguments) : (f.push(d), c || (c = !0, (b.hidden ? k : l)(g))) }; return h._lsFlush = g, h }(), A = function(a, b) { return b ? function() { z(a) } : function() { var b = this, c = arguments; z(function() { a.apply(b, c) }) } }, B = function(a) { var b, c = 0, e = d.throttleDelay, g = d.ricTimeout, h = function() { b = !1, c = f.now(), a() }, i = m && g > 49 ? function() { m(h, { timeout: g }), g !== d.ricTimeout && (g = d.ricTimeout) } : A(function() { k(h) }, !0); return function(a) { var d; (a = a === !0) && (g = 33), b || (b = !0, d = e - (f.now() - c), 0 > d && (d = 0), a || 9 > d ? i() : k(i, d)) } }, C = function(a) { var b, c, d = 99, e = function() { b = null, a() }, g = function() { var a = f.now() - c; d > a ? k(g, d - a) : (m || e)(e) }; return function() { c = f.now(), b || (b = k(g, d)) } }; ! function() { var b, c = { lazyClass: "lazyload", loadedClass: "lazyloaded", loadingClass: "lazyloading", preloadClass: "lazypreload", errorClass: "lazyerror", autosizesClass: "lazyautosizes", srcAttr: "data-src", srcsetAttr: "data-srcset", sizesAttr: "data-sizes", minSize: 40, customMedia: {}, init: !0, expFactor: 1.5, hFac: .8, loadMode: 2, loadHidden: !0, ricTimeout: 0, throttleDelay: 125 }; d = a.lazySizesConfig || a.lazysizesConfig || {}; for (b in c) b in d || (d[b] = c[b]); a.lazySizesConfig = d, k(function() { d.init && F() }) }(); var D = function() { var g, l, m, o, p, y, D, F, G, H, I, J, K, L, M = /^img$/i, N = /^iframe$/i, O = "onscroll" in a && !/(gle|ing)bot/.test(navigator.userAgent), P = 0, Q = 0, R = 0, S = -1, T = function(a) { R--, a && a.target && u(a.target, T), (!a || 0 > R || !a.target) && (R = 0) }, U = function(a, c) { var d, f = a, g = "hidden" == x(b.body, "visibility") || "hidden" != x(a.parentNode, "visibility") && "hidden" != x(a, "visibility"); for (F -= c, I += c, G -= c, H += c; g && (f = f.offsetParent) && f != b.body && f != e;) g = (x(f, "opacity") || 1) > 0, g && "visible" != x(f, "overflow") && (d = f.getBoundingClientRect(), g = H > d.left && G < d.right && I > d.top - 1 && F < d.bottom + 1); return g }, V = function() { var a, f, h, j, k, m, n, p, q, r = c.elements; if ((o = d.loadMode) && 8 > R && (a = r.length)) { f = 0, S++, null == K && ("expand" in d || (d.expand = e.clientHeight > 500 && e.clientWidth > 500 ? 500 : 370), J = d.expand, K = J * d.expFactor), K > Q && 1 > R && S > 2 && o > 2 && !b.hidden ? (Q = K, S = 0) : Q = o > 1 && S > 1 && 6 > R ? J : P; for (; a > f; f++) if (r[f] && !r[f]._lazyRace) if (O) if ((p = r[f][i]("data-expand")) && (m = 1 * p) || (m = Q), q !== m && (y = innerWidth + m * L, D = innerHeight + m, n = -1 * m, q = m), h = r[f].getBoundingClientRect(), (I = h.bottom) >= n && (F = h.top) <= D && (H = h.right) >= n * L && (G = h.left) <= y && (I || H || G || F) && (d.loadHidden || "hidden" != x(r[f], "visibility")) && (l && 3 > R && !p && (3 > o || 4 > S) || U(r[f], m))) { if (ba(r[f]), k = !0, R > 9) break } else !k && l && !j && 4 > R && 4 > S && o > 2 && (g[0] || d.preloadAfterLoad) && (g[0] || !p && (I || H || G || F || "auto" != r[f][i](d.sizesAttr))) && (j = g[0] || r[f]); else ba(r[f]); j && !k && ba(j) } }, W = B(V), X = function(a) { s(a.target, d.loadedClass), t(a.target, d.loadingClass), u(a.target, Z), v(a.target, "lazyloaded") }, Y = A(X), Z = function(a) { Y({ target: a.target }) }, $ = function(a, b) { try { a.contentWindow.location.replace(b) } catch (c) { a.src = b } }, _ = function(a) { var b, c = a[i](d.srcsetAttr); (b = d.customMedia[a[i]("data-media") || a[i]("media")]) && a.setAttribute("media", b), c && a.setAttribute("srcset", c) }, aa = A(function(a, b, c, e, f) { var g, h, j, l, o, p; (o = v(a, "lazybeforeunveil", b)).defaultPrevented || (e && (c ? s(a, d.autosizesClass) : a.setAttribute("sizes", e)), h = a[i](d.srcsetAttr), g = a[i](d.srcAttr), f && (j = a.parentNode, l = j && n.test(j.nodeName || "")), p = b.firesLoad || "src" in a && (h || g || l), o = { target: a }, p && (u(a, T, !0), clearTimeout(m), m = k(T, 2500), s(a, d.loadingClass), u(a, Z, !0)), l && q.call(j.getElementsByTagName("source"), _), h ? a.setAttribute("srcset", h) : g && !l && (N.test(a.nodeName) ? $(a, g) : a.src = g), f && (h || l) && w(a, { src: g })), a._lazyRace && delete a._lazyRace, t(a, d.lazyClass), z(function() { (!p || a.complete && a.naturalWidth > 1) && (p ? T(o) : R--, X(o)) }, !0) }), ba = function(a) { var b, c = M.test(a.nodeName), e = c && (a[i](d.sizesAttr) || a[i]("sizes")), f = "auto" == e; (!f && l || !c || !a[i]("src") && !a.srcset || a.complete || r(a, d.errorClass) || !r(a, d.lazyClass)) && (b = v(a, "lazyunveilread").detail, f && E.updateElem(a, !0, a.offsetWidth), a._lazyRace = !0, R++, aa(a, b, f, e, c)) }, ca = function() { if (!l) { if (f.now() - p < 999) return void k(ca, 999); var a = C(function() { d.loadMode = 3, W() }); l = !0, d.loadMode = 3, W(), j("scroll", function() { 3 == d.loadMode && (d.loadMode = 2), a() }, !0) } }; return { _: function() { p = f.now(), c.elements = b.getElementsByClassName(d.lazyClass), g = b.getElementsByClassName(d.lazyClass + " " + d.preloadClass), L = d.hFac, j("scroll", W, !0), j("resize", W, !0), a.MutationObserver ? new MutationObserver(W).observe(e, { childList: !0, subtree: !0, attributes: !0 }) : (e[h]("DOMNodeInserted", W, !0), e[h]("DOMAttrModified", W, !0), setInterval(W, 999)), j("hashchange", W, !0), ["focus", "mouseover", "click", "load", "transitionend", "animationend", "webkitAnimationEnd"].forEach(function(a) { b[h](a, W, !0) }), /d$|^c/.test(b.readyState) ? ca() : (j("load", ca), b[h]("DOMContentLoaded", W), k(ca, 2e4)), c.elements.length ? (V(), z._lsFlush()) : W() }, checkElems: W, unveil: ba } }(), E = function() { var a, c = A(function(a, b, c, d) { var e, f, g; if (a._lazysizesWidth = d, d += "px", a.setAttribute("sizes", d), n.test(b.nodeName || "")) for (e = b.getElementsByTagName("source"), f = 0, g = e.length; g > f; f++) e[f].setAttribute("sizes", d); c.detail.dataAttr || w(a, c.detail) }), e = function(a, b, d) { var e, f = a.parentNode; f && (d = y(a, f, d), e = v(a, "lazybeforesizes", { width: d, dataAttr: !!b }), e.defaultPrevented || (d = e.detail.width, d && d !== a._lazysizesWidth && c(a, f, e, d))) }, f = function() { var b, c = a.length; if (c) for (b = 0; c > b; b++) e(a[b]) }, g = C(f); return { _: function() { a = b.getElementsByClassName(d.autosizesClass), j("resize", g) }, checkElems: g, updateElem: e } }(), F = function() { F.i || (F.i = !0, E._(), D._()) }; return c = { cfg: d, autoSizer: E, loader: D, init: F, uP: w, aC: s, rC: t, hC: r, fire: v, gW: y, rAF: z } } }); </script> <meta name="format-detection" content="telephone=no" /> <meta name="baidu-site-verification" content="codeva-dhhqsW34IG" /> <meta name="viewport" content="width=device-width, initial-scale=1" /> <script type="text/javascript"> var doc = document.documentElement; doc.setAttribute('data-useragent', navigator.userAgent); </script> <script> function searchbuttonclick() { if (!isSearchFieldVisible()) { displaySearchField(); focusSearchField(); } else if (document.getElementById('searchinput').value) { document.getElementById('searchform').submit(); } else { closeSearchBox(); } } function focusSearchField() { var textBox = jQuery("#searchfield"); textBox = textBox.length > 0 ? textBox[0] : null; jQuery("#searchfield").focus(); if (!!textBox && textBox != document.activeElement) { textBox.focus(); } } function clearSearchText() { document.getElementById('searchinput').value=''; } function isSearchFieldVisible() { return document.getElementById('searchfield').style.display !== 'none'; } function displaySearchField() { document.getElementById('searchfield').style.display = 'inline-block'; } function closeSearchBox(){ clearSearchText(); document.getElementById('searchfield').style.display = 'none'; } </script> <script> window.performance && performance.mark && performance.mark("HeadAreaEnd") </script> </head> <body class="page-template page-template-100-modern page-template-100-modern-php page page-id-67858 page-parent page-child parent-pageid-175 microsoft-uhf awb-no-sidebars fusion-image-hovers fusion-pagination-sizing fusion-button_type-flat fusion-button_span-no fusion-button_gradient-linear avada-image-rollover-circle-yes avada-image-rollover-yes avada-image-rollover-direction-left fusion-body ltr no-tablet-sticky-header no-mobile-sticky-header no-mobile-slidingbar no-desktop-totop no-mobile-totop fusion-sub-menu-fade mobile-logo-pos-left layout-wide-mode avada-has-boxed-modal-shadow-none layout-scroll-offset-full avada-has-zero-margin-offset-top avada-has-header-hidden mobile-menu-design-modern fusion-show-pagination-text fusion-header-layout-v1 avada-responsive avada-footer-fx-none avada-menu-highlight-style-bar fusion-search-form-classic fusion-main-menu-search-dropdown fusion-avatar-square avada-dropdown-styles avada-blog-layout-medium alternate avada-blog-archive-layout-large avada-header-shadow-no avada-menu-icon-position-left avada-has-100-footer avada-has-breadcrumb-mobile-hidden avada-has-titlebar-bar_and_content avada-has-pagination-padding avada-flyout-menu-direction-fade avada-ec-views-v1"> <!-- Loading Accessibility Automation Tool in all non prod env --> <!-- Loading Accessibility Automation Tool in all non prod env --> <div id="headerArea" class="uhf" data-m='{"cN":"headerArea","cT":"Area_coreuiArea","id":"a1Body","sN":1,"aN":"Body"}'> <div id="headerRegion" data-region-key="headerregion" data-m='{"cN":"headerRegion","cT":"Region_coreui-region","id":"r1a1","sN":1,"aN":"a1"}' > <div id="headerUniversalHeader" data-m='{"cN":"headerUniversalHeader","cT":"Module_coreui-universalheader","id":"m1r1a1","sN":1,"aN":"r1a1"}' data-module-id="Category|headerRegion|coreui-region|headerUniversalHeader|coreui-universalheader"> <div data-m='{"cN":"cookiebanner_cont","cT":"Container","id":"c1m1r1a1","sN":1,"aN":"m1r1a1"}'> <div id="uhfCookieAlert" data-locale="en-us"> <div id="msccBannerV2"></div> </div> </div> <a id="uhfSkipToMain" class="m-skip-to-main" href="javascript:void(0)" data-href="#main" tabindex="0" data-m='{"cN":"Skip to content_nonnav","id":"nn2m1r1a1","sN":2,"aN":"m1r1a1"}'>Skip to main content</a> <header class="c-uhfh context-uhf no-js c-sgl-stck c-category-header " itemscope="itemscope" data-header-footprint="/VisualStudio/VisualStudioHeaderMsftPROD-Dark-1, fromService: True" data-magict="true" itemtype="http://schema.org/Organization"> <div class="theme-dark js-global-head f-closed global-head-cont" data-m='{"cN":"Universal Header_cont","cT":"Container","id":"c3m1r1a1","sN":3,"aN":"m1r1a1"}'> <div class="c-uhfh-gcontainer-st"> <button type="button" class="c-action-trigger c-glyph glyph-global-nav-button" aria-label="All Microsoft expand to see list of Microsoft products and services" initialState-label="All Microsoft expand to see list of Microsoft products and services" toggleState-label="Close All Microsoft list" aria-expanded="false" data-m='{"cN":"Mobile menu button_nonnav","id":"nn1c3m1r1a1","sN":1,"aN":"c3m1r1a1"}'></button> <button type="button" class="c-action-trigger c-glyph glyph-arrow-htmllegacy c-close-search" aria-label="Close search" aria-expanded="false" data-m='{"cN":"Close Search_nonnav","id":"nn2c3m1r1a1","sN":2,"aN":"c3m1r1a1"}'></button> <a id="uhfLogo" class="c-logo c-sgl-stk-uhfLogo" itemprop="url" href="https://www.microsoft.com" aria-label="Microsoft" data-m='{"cN":"GlobalNav_Logo_cont","cT":"Container","id":"c3c3m1r1a1","sN":3,"aN":"c3m1r1a1"}'> <img alt="" itemprop="logo" class="c-image" src="https://uhf.microsoft.com/images/microsoft/RE1MmB8.png" role="presentation" aria-hidden="true" /> <span itemprop="name" role="presentation" aria-hidden="true">Microsoft</span> </a> <div class="f-mobile-title"> <button type="button" class="c-action-trigger c-glyph glyph-chevron-left" aria-label="See more menu options" data-m='{"cN":"Mobile back button_nonnav","id":"nn4c3m1r1a1","sN":4,"aN":"c3m1r1a1"}'></button> <span data-global-title="Microsoft home" class="js-mobile-title">Visual Studio</span> <button type="button" class="c-action-trigger c-glyph glyph-chevron-right" aria-label="See more menu options" data-m='{"cN":"Mobile forward button_nonnav","id":"nn5c3m1r1a1","sN":5,"aN":"c3m1r1a1"}'></button> </div> <div class="c-show-pipe x-hidden-vp-mobile-st"> <a id="uhfCatLogo" class="c-logo c-cat-logo" href="https://visualstudio.microsoft.com/" aria-label="Visual Studio" itemprop="url" data-m='{"cN":"CatNav_Visual Studio_nav","id":"n6c3m1r1a1","sN":6,"aN":"c3m1r1a1"}'> <span>Visual Studio</span> </a> </div> <div class="cat-logo-button-cont x-hidden"> <button type="button" id="uhfCatLogoButton" class="c-cat-logo-button x-hidden" aria-expanded="false" aria-label="Visual Studio" data-m='{"cN":"Visual Studio_nonnav","id":"nn7c3m1r1a1","sN":7,"aN":"c3m1r1a1"}'> Visual Studio </button> </div> <nav id="uhf-g-nav" aria-label="Contextual menu" class="c-uhfh-gnav" data-m='{"cN":"Category nav_cont","cT":"Container","id":"c8c3m1r1a1","sN":8,"aN":"c3m1r1a1"}'> <ul class="js-paddle-items"> <li class="single-link js-nav-menu x-hidden-none-mobile-vp uhf-menu-item"> <a class="c-uhf-nav-link" href="https://visualstudio.microsoft.com/" data-m='{"cN":"CatNav_Home_nav","id":"n1c8c3m1r1a1","sN":1,"aN":"c8c3m1r1a1"}' > Home </a> </li> <li class="nested-menu uhf-menu-item"> <div class="c-uhf-menu js-nav-menu"> <button type="button" id="devblogs-menu-item" aria-expanded="false" data-m='{"cN":"CatNav_Developer Tools_nonnav","id":"nn2c8c3m1r1a1","sN":2,"aN":"c8c3m1r1a1"}'>Developer Tools</button> <ul class="f-multi-column f-multi-column-2" data-class-idn="f-multi-column f-multi-column-2" aria-hidden="true" data-m='{"cN":"Developer Tools_cont","cT":"Container","id":"c3c8c3m1r1a1","sN":3,"aN":"c8c3m1r1a1"}'> <li class="f-sub-menu js-nav-menu nested-menu" data-m='{"cN":"Visual Studio 2022_cont","cT":"Container","id":"c1c3c8c3m1r1a1","sN":1,"aN":"c3c8c3m1r1a1"}'> <span id="uhf-navspn-shellmenu_41-span" style="display:none" f-multi-parent="true" aria-expanded="false" data-m='{"cN":"CatNav_Visual Studio 2022_nonnav","id":"nn1c1c3c8c3m1r1a1","sN":1,"aN":"c1c3c8c3m1r1a1"}'>Visual Studio 2022</span> <button id="uhf-navbtn-shellmenu_41-button" type="button" f-multi-parent="true" aria-expanded="false" data-m='{"cN":"CatNav_Visual Studio 2022_nonnav","id":"nn2c1c3c8c3m1r1a1","sN":2,"aN":"c1c3c8c3m1r1a1"}'>Visual Studio 2022</button> <ul aria-hidden="true" aria-labelledby="uhf-navspn-shellmenu_41-span"> <li class="js-nav-menu single-link" data-m='{"cN":"Overview_cont","cT":"Container","id":"c3c1c3c8c3m1r1a1","sN":3,"aN":"c1c3c8c3m1r1a1"}'> <a id="shellmenu_42" class="js-subm-uhf-nav-link" href="https://visualstudio.microsoft.com/vs/" data-m='{"cN":"CatNav_Overview_nav","id":"n1c3c1c3c8c3m1r1a1","sN":1,"aN":"c3c1c3c8c3m1r1a1"}'>Overview</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Features_cont","cT":"Container","id":"c4c1c3c8c3m1r1a1","sN":4,"aN":"c1c3c8c3m1r1a1"}'> <a id="shellmenu_43" class="js-subm-uhf-nav-link" href="https://visualstudio.microsoft.com/vs/features/" data-m='{"cN":"CatNav_Features_nav","id":"n1c4c1c3c8c3m1r1a1","sN":1,"aN":"c4c1c3c8c3m1r1a1"}'>Features</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Editions_cont","cT":"Container","id":"c5c1c3c8c3m1r1a1","sN":5,"aN":"c1c3c8c3m1r1a1"}'> <a id="shellmenu_44" class="js-subm-uhf-nav-link" href="https://visualstudio.microsoft.com/vs/compare/" data-m='{"cN":"CatNav_Editions_nav","id":"n1c5c1c3c8c3m1r1a1","sN":1,"aN":"c5c1c3c8c3m1r1a1"}'>Editions</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Extensions_cont","cT":"Container","id":"c6c1c3c8c3m1r1a1","sN":6,"aN":"c1c3c8c3m1r1a1"}'> <a id="shellmenu_45" class="js-subm-uhf-nav-link" href="https://marketplace.visualstudio.com/vs" data-m='{"cN":"CatNav_Extensions_nav","id":"n1c6c1c3c8c3m1r1a1","sN":1,"aN":"c6c1c3c8c3m1r1a1"}'>Extensions</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Get Started_cont","cT":"Container","id":"c7c1c3c8c3m1r1a1","sN":7,"aN":"c1c3c8c3m1r1a1"}'> <a id="shellmenu_46" class="js-subm-uhf-nav-link" href="https://visualstudio.microsoft.com/vs/getting-started/" data-m='{"cN":"CatNav_Get Started_nav","id":"n1c7c1c3c8c3m1r1a1","sN":1,"aN":"c7c1c3c8c3m1r1a1"}'>Get Started</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Service Status_cont","cT":"Container","id":"c8c1c3c8c3m1r1a1","sN":8,"aN":"c1c3c8c3m1r1a1"}'> <a id="shellmenu_47" class="js-subm-uhf-nav-link" href="https://aka.ms/vsstatus" data-m='{"cN":"CatNav_Service Status_nav","id":"n1c8c1c3c8c3m1r1a1","sN":1,"aN":"c8c1c3c8c3m1r1a1"}'>Service Status</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"FAQ Support_cont","cT":"Container","id":"c9c1c3c8c3m1r1a1","sN":9,"aN":"c1c3c8c3m1r1a1"}'> <a id="shellmenu_48" class="js-subm-uhf-nav-link" href="https://visualstudio.microsoft.com/vs/support/" data-m='{"cN":"CatNav_FAQ Support_nav","id":"n1c9c1c3c8c3m1r1a1","sN":1,"aN":"c9c1c3c8c3m1r1a1"}'>FAQ Support</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Documentation_cont","cT":"Container","id":"c10c1c3c8c3m1r1a1","sN":10,"aN":"c1c3c8c3m1r1a1"}'> <a id="shellmenu_49" class="js-subm-uhf-nav-link" href="https://learn.microsoft.com/visualstudio/" data-m='{"cN":"CatNav_Documentation_nav","id":"n1c10c1c3c8c3m1r1a1","sN":1,"aN":"c10c1c3c8c3m1r1a1"}'>Documentation</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Blog_cont","cT":"Container","id":"c11c1c3c8c3m1r1a1","sN":11,"aN":"c1c3c8c3m1r1a1"}'> <a id="shellmenu_50" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/visualstudio/" data-m='{"cN":"CatNav_Blog_nav","id":"n1c11c1c3c8c3m1r1a1","sN":1,"aN":"c11c1c3c8c3m1r1a1"}'>Blog</a> </li> </ul> </li> <li class="f-sub-menu js-nav-menu nested-menu" data-m='{"cN":"Visual Studio Code_cont","cT":"Container","id":"c2c3c8c3m1r1a1","sN":2,"aN":"c3c8c3m1r1a1"}'> <span id="uhf-navspn-shellmenu_51-span" style="display:none" f-multi-parent="true" aria-expanded="false" data-m='{"cN":"CatNav_Visual Studio Code_nonnav","id":"nn1c2c3c8c3m1r1a1","sN":1,"aN":"c2c3c8c3m1r1a1"}'>Visual Studio Code</span> <button id="uhf-navbtn-shellmenu_51-button" type="button" f-multi-parent="true" aria-expanded="false" data-m='{"cN":"CatNav_Visual Studio Code_nonnav","id":"nn2c2c3c8c3m1r1a1","sN":2,"aN":"c2c3c8c3m1r1a1"}'>Visual Studio Code</button> <ul aria-hidden="true" aria-labelledby="uhf-navspn-shellmenu_51-span"> <li class="js-nav-menu single-link" data-m='{"cN":"Overview_cont","cT":"Container","id":"c3c2c3c8c3m1r1a1","sN":3,"aN":"c2c3c8c3m1r1a1"}'> <a id="shellmenu_52" class="js-subm-uhf-nav-link" href="https://code.visualstudio.com/?wt.mc_id=DX_841432" data-m='{"cN":"CatNav_Overview_nav","id":"n1c3c2c3c8c3m1r1a1","sN":1,"aN":"c3c2c3c8c3m1r1a1"}'>Overview</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Extensions_cont","cT":"Container","id":"c4c2c3c8c3m1r1a1","sN":4,"aN":"c2c3c8c3m1r1a1"}'> <a id="shellmenu_53" class="js-subm-uhf-nav-link" href="https://marketplace.visualstudio.com/vscode" data-m='{"cN":"CatNav_Extensions_nav","id":"n1c4c2c3c8c3m1r1a1","sN":1,"aN":"c4c2c3c8c3m1r1a1"}'>Extensions</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Support_cont","cT":"Container","id":"c5c2c3c8c3m1r1a1","sN":5,"aN":"c2c3c8c3m1r1a1"}'> <a id="shellmenu_54" class="js-subm-uhf-nav-link" href="https://support.serviceshub.microsoft.com/supportforbusiness/create?sapId=d66407ed-3967-b000-4cfb-2c318cad363d" data-m='{"cN":"CatNav_Support_nav","id":"n1c5c2c3c8c3m1r1a1","sN":1,"aN":"c5c2c3c8c3m1r1a1"}'>Support</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Documentation_cont","cT":"Container","id":"c6c2c3c8c3m1r1a1","sN":6,"aN":"c2c3c8c3m1r1a1"}'> <a id="shellmenu_55" class="js-subm-uhf-nav-link" href="https://code.visualstudio.com/docs" data-m='{"cN":"CatNav_Documentation_nav","id":"n1c6c2c3c8c3m1r1a1","sN":1,"aN":"c6c2c3c8c3m1r1a1"}'>Documentation</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Blog_cont","cT":"Container","id":"c7c2c3c8c3m1r1a1","sN":7,"aN":"c2c3c8c3m1r1a1"}'> <a id="shellmenu_56" class="js-subm-uhf-nav-link" href="https://code.visualstudio.com/blogs" data-m='{"cN":"CatNav_Blog_nav","id":"n1c7c2c3c8c3m1r1a1","sN":1,"aN":"c7c2c3c8c3m1r1a1"}'>Blog</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"VS Code for Education_cont","cT":"Container","id":"c8c2c3c8c3m1r1a1","sN":8,"aN":"c2c3c8c3m1r1a1"}'> <a id="shellmenu_57" class="js-subm-uhf-nav-link" href="https://visualstudio.microsoft.com/vscode-edu/" data-m='{"cN":"CatNav_VS Code for Education_nav","id":"n1c8c2c3c8c3m1r1a1","sN":1,"aN":"c8c2c3c8c3m1r1a1"}'>VS Code for Education</a> </li> </ul> </li> </ul> </div> </li> <li class="single-link js-nav-menu uhf-menu-item"> <a id="c-shellmenu_58" class="c-uhf-nav-link" href="https://visualstudio.microsoft.com/downloads/" data-m='{"cN":"CatNav_Downloads_nav","id":"n4c8c3m1r1a1","sN":4,"aN":"c8c3m1r1a1"}'>Downloads</a> </li> <li class="single-link js-nav-menu uhf-menu-item"> <a id="c-shellmenu_59" class="c-uhf-nav-link" href="https://visualstudio.microsoft.com/vs/pricing/?tab=paid-subscriptions" data-m='{"cN":"CatNav_Buy_nav","id":"n5c8c3m1r1a1","sN":5,"aN":"c8c3m1r1a1"}'>Buy</a> </li> <li class="nested-menu uhf-menu-item"> <div class="c-uhf-menu js-nav-menu"> <button type="button" id="c-shellmenu_60" aria-expanded="false" data-m='{"cN":"CatNav_Subscriptions_nonnav","id":"nn6c8c3m1r1a1","sN":6,"aN":"c8c3m1r1a1"}'>Subscriptions</button> <ul class="" data-class-idn="" aria-hidden="true" data-m='{"cN":"Subscriptions_cont","cT":"Container","id":"c7c8c3m1r1a1","sN":7,"aN":"c8c3m1r1a1"}'> <li class="js-nav-menu single-link" data-m='{"cN":"Overview_cont","cT":"Container","id":"c1c7c8c3m1r1a1","sN":1,"aN":"c7c8c3m1r1a1"}'> <a id="c-shellmenu_61" class="js-subm-uhf-nav-link" href="https://visualstudio.microsoft.com/subscriptions/" data-m='{"cN":"CatNav_Overview_nav","id":"n1c1c7c8c3m1r1a1","sN":1,"aN":"c1c7c8c3m1r1a1"}'>Overview</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Support​_cont","cT":"Container","id":"c2c7c8c3m1r1a1","sN":2,"aN":"c7c8c3m1r1a1"}'> <a id="c-shellmenu_62" class="js-subm-uhf-nav-link" href="https://visualstudio.microsoft.com/subscriptions/support/" data-m='{"cN":"CatNav_Support​_nav","id":"n1c2c7c8c3m1r1a1","sN":1,"aN":"c2c7c8c3m1r1a1"}'>Support​</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Administrator Portal​_cont","cT":"Container","id":"c3c7c8c3m1r1a1","sN":3,"aN":"c7c8c3m1r1a1"}'> <a id="c-shellmenu_63" class="js-subm-uhf-nav-link" href="https://manage.visualstudio.com/GetHelp" data-m='{"cN":"CatNav_Administrator Portal​_nav","id":"n1c3c7c8c3m1r1a1","sN":1,"aN":"c3c7c8c3m1r1a1"}'>Administrator Portal​</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Subscriber Portal​_cont","cT":"Container","id":"c4c7c8c3m1r1a1","sN":4,"aN":"c7c8c3m1r1a1"}'> <a id="c-shellmenu_64" class="js-subm-uhf-nav-link" href="https://my.visualstudio.com/GetHelp" data-m='{"cN":"CatNav_Subscriber Portal​_nav","id":"n1c4c7c8c3m1r1a1","sN":1,"aN":"c4c7c8c3m1r1a1"}'>Subscriber Portal​</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Dev Essentials_cont","cT":"Container","id":"c5c7c8c3m1r1a1","sN":5,"aN":"c7c8c3m1r1a1"}'> <a id="c-shellmenu_65" class="js-subm-uhf-nav-link" href="https://visualstudio.microsoft.com/dev-essentials/" data-m='{"cN":"CatNav_Dev Essentials_nav","id":"n1c5c7c8c3m1r1a1","sN":1,"aN":"c5c7c8c3m1r1a1"}'>Dev Essentials</a> </li> </ul> </div> </li> <li class="single-link js-nav-menu uhf-menu-item"> <a id="c-shellmenu_66" class="c-uhf-nav-link" href="https://visualstudio.microsoft.com/hub/" data-m='{"cN":"CatNav_Visual Studio Hub_nav","id":"n8c8c3m1r1a1","sN":8,"aN":"c8c3m1r1a1"}'>Visual Studio Hub</a> </li> <li id="overflow-menu" class="overflow-menu x-hidden uhf-menu-item"> <div class="c-uhf-menu js-nav-menu"> <button data-m='{"pid":"More","id":"nn9c8c3m1r1a1","sN":9,"aN":"c8c3m1r1a1"}' type="button" aria-label="More" aria-expanded="false">More</button> <ul id="overflow-menu-list" aria-hidden="true" class="overflow-menu-list"> </ul> </div> </li> <li class="single-link js-nav-menu" id="c-uhf-nav-cta"> <a class="c-uhf-nav-link" href="https://visualstudio.microsoft.com/free-developer-offers/" data-m='{"cN":"CatNav_cta_Free Visual Studio_nav","id":"n10c8c3m1r1a1","sN":10,"aN":"c8c3m1r1a1"}'>Free Visual Studio</a> </li> </ul> </nav> <div class="c-uhfh-actions" data-m='{"cN":"Header actions_cont","cT":"Container","id":"c9c3m1r1a1","sN":9,"aN":"c3m1r1a1"}'> <div class="wf-menu"> <nav id="uhf-c-nav" aria-label="All Microsoft menu" data-m='{"cN":"GlobalNav_cont","cT":"Container","id":"c1c9c3m1r1a1","sN":1,"aN":"c9c3m1r1a1"}'> <ul class="js-paddle-items"> <li> <div class="c-uhf-menu js-nav-menu"> <button type="button" class="c-button-logo all-ms-nav" aria-expanded="false" data-m='{"cN":"GlobalNav_More_nonnav","id":"nn1c1c9c3m1r1a1","sN":1,"aN":"c1c9c3m1r1a1"}'> <span>All Microsoft</span></button> <ul class="f-multi-column f-multi-column-4" aria-hidden="true" data-m='{"cN":"More_cont","cT":"Container","id":"c2c1c9c3m1r1a1","sN":2,"aN":"c1c9c3m1r1a1"}'> <li class="c-w0-contr"> <h2 class="c-uhf-sronly">Global</h2> <ul class="c-w0"> <li class="js-nav-menu single-link" data-m='{"cN":"Microsoft Security_cont","cT":"Container","id":"c1c2c1c9c3m1r1a1","sN":1,"aN":"c2c1c9c3m1r1a1"}'> <a id="shellmenu_0" class="js-subm-uhf-nav-link" href="https://www.microsoft.com/en-us/security" data-m='{"cN":"W0Nav_Microsoft Security_nav","id":"n1c1c2c1c9c3m1r1a1","sN":1,"aN":"c1c2c1c9c3m1r1a1"}'>Microsoft Security</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Azure_cont","cT":"Container","id":"c2c2c1c9c3m1r1a1","sN":2,"aN":"c2c1c9c3m1r1a1"}'> <a id="shellmenu_1" class="js-subm-uhf-nav-link" href="https://azure.microsoft.com/en-us/" data-m='{"cN":"W0Nav_Azure_nav","id":"n1c2c2c1c9c3m1r1a1","sN":1,"aN":"c2c2c1c9c3m1r1a1"}'>Azure</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Dynamics 365_cont","cT":"Container","id":"c3c2c1c9c3m1r1a1","sN":3,"aN":"c2c1c9c3m1r1a1"}'> <a id="shellmenu_2" class="js-subm-uhf-nav-link" href="https://dynamics.microsoft.com/en-us/" data-m='{"cN":"W0Nav_Dynamics 365_nav","id":"n1c3c2c1c9c3m1r1a1","sN":1,"aN":"c3c2c1c9c3m1r1a1"}'>Dynamics 365</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Microsoft 365_cont","cT":"Container","id":"c4c2c1c9c3m1r1a1","sN":4,"aN":"c2c1c9c3m1r1a1"}'> <a id="shellmenu_3" class="js-subm-uhf-nav-link" href="https://www.microsoft.com/en-us/microsoft-365/business/" data-m='{"cN":"W0Nav_Microsoft 365_nav","id":"n1c4c2c1c9c3m1r1a1","sN":1,"aN":"c4c2c1c9c3m1r1a1"}'>Microsoft 365</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Microsoft Teams_cont","cT":"Container","id":"c5c2c1c9c3m1r1a1","sN":5,"aN":"c2c1c9c3m1r1a1"}'> <a id="shellmenu_4" class="js-subm-uhf-nav-link" href="https://www.microsoft.com/en-us/microsoft-teams/group-chat-software" data-m='{"cN":"W0Nav_Microsoft Teams_nav","id":"n1c5c2c1c9c3m1r1a1","sN":1,"aN":"c5c2c1c9c3m1r1a1"}'>Microsoft Teams</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Windows 365_cont","cT":"Container","id":"c6c2c1c9c3m1r1a1","sN":6,"aN":"c2c1c9c3m1r1a1"}'> <a id="shellmenu_5" class="js-subm-uhf-nav-link" href="https://www.microsoft.com/en-us/windows-365" data-m='{"cN":"W0Nav_Windows 365_nav","id":"n1c6c2c1c9c3m1r1a1","sN":1,"aN":"c6c2c1c9c3m1r1a1"}'>Windows 365</a> </li> </ul> </li> <li class="f-sub-menu js-nav-menu nested-menu" data-m='{"cT":"Container","id":"c7c2c1c9c3m1r1a1","sN":7,"aN":"c2c1c9c3m1r1a1"}'> <span id="uhf-navspn-shellmenu_7-span" style="display:none" f-multi-parent="true" aria-expanded="false" data-m='{"id":"nn1c7c2c1c9c3m1r1a1","sN":1,"aN":"c7c2c1c9c3m1r1a1"}'>Tech &amp; innovation</span> <button id="uhf-navbtn-shellmenu_7-button" type="button" f-multi-parent="true" aria-expanded="false" data-m='{"id":"nn2c7c2c1c9c3m1r1a1","sN":2,"aN":"c7c2c1c9c3m1r1a1"}'>Tech &amp; innovation</button> <ul aria-hidden="true" aria-labelledby="uhf-navspn-shellmenu_7-span"> <li class="js-nav-menu single-link" data-m='{"cN":"More_TechInnovation_MicrosoftCloud_cont","cT":"Container","id":"c3c7c2c1c9c3m1r1a1","sN":3,"aN":"c7c2c1c9c3m1r1a1"}'> <a id="shellmenu_8" class="js-subm-uhf-nav-link" href="https://www.microsoft.com/en-us/microsoft-cloud" data-m='{"cN":"GlobalNav_More_TechInnovation_MicrosoftCloud_nav","id":"n1c3c7c2c1c9c3m1r1a1","sN":1,"aN":"c3c7c2c1c9c3m1r1a1"}'>Microsoft Cloud</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"More_TechInnovation__AI_cont","cT":"Container","id":"c4c7c2c1c9c3m1r1a1","sN":4,"aN":"c7c2c1c9c3m1r1a1"}'> <a id="shellmenu_9" class="js-subm-uhf-nav-link" href="https://www.microsoft.com/en-us/ai" data-m='{"cN":"GlobalNav_More_TechInnovation__AI_nav","id":"n1c4c7c2c1c9c3m1r1a1","sN":1,"aN":"c4c7c2c1c9c3m1r1a1"}'>AI</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"More_TechInnovation_AzureSpace_cont","cT":"Container","id":"c5c7c2c1c9c3m1r1a1","sN":5,"aN":"c7c2c1c9c3m1r1a1"}'> <a id="shellmenu_10" class="js-subm-uhf-nav-link" href="https://azure.microsoft.com/en-us/solutions/space/" data-m='{"cN":"GlobalNav_More_TechInnovation_AzureSpace_nav","id":"n1c5c7c2c1c9c3m1r1a1","sN":1,"aN":"c5c7c2c1c9c3m1r1a1"}'>Azure Space</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"More_TechInnovation_MixedReality_cont","cT":"Container","id":"c6c7c2c1c9c3m1r1a1","sN":6,"aN":"c7c2c1c9c3m1r1a1"}'> <a id="shellmenu_11" class="js-subm-uhf-nav-link" href="https://www.microsoft.com/en-us/mixed-reality/windows-mixed-reality" data-m='{"cN":"GlobalNav_More_TechInnovation_MixedReality_nav","id":"n1c6c7c2c1c9c3m1r1a1","sN":1,"aN":"c6c7c2c1c9c3m1r1a1"}'>Mixed reality</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"More_TechInnovation_MicrosoftHololens_cont","cT":"Container","id":"c7c7c2c1c9c3m1r1a1","sN":7,"aN":"c7c2c1c9c3m1r1a1"}'> <a id="shellmenu_12" class="js-subm-uhf-nav-link" href="https://www.microsoft.com/en-us/hololens" data-m='{"cN":"GlobalNav_More_TechInnovation_MicrosoftHololens_nav","id":"n1c7c7c2c1c9c3m1r1a1","sN":1,"aN":"c7c7c2c1c9c3m1r1a1"}'>Microsoft HoloLens</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"More_TechInnovation_Microsoft Viva_cont","cT":"Container","id":"c8c7c2c1c9c3m1r1a1","sN":8,"aN":"c7c2c1c9c3m1r1a1"}'> <a id="shellmenu_13" class="js-subm-uhf-nav-link" href="https://www.microsoft.com/en-us/microsoft-viva" data-m='{"cN":"GlobalNav_More_TechInnovation_Microsoft Viva_nav","id":"n1c8c7c2c1c9c3m1r1a1","sN":1,"aN":"c8c7c2c1c9c3m1r1a1"}'>Microsoft Viva</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"More_TechInnovation_QuantumComputing_cont","cT":"Container","id":"c9c7c2c1c9c3m1r1a1","sN":9,"aN":"c7c2c1c9c3m1r1a1"}'> <a id="shellmenu_14" class="js-subm-uhf-nav-link" href="https://azure.microsoft.com/en-us/solutions/quantum-computing/" data-m='{"cN":"GlobalNav_More_TechInnovation_QuantumComputing_nav","id":"n1c9c7c2c1c9c3m1r1a1","sN":1,"aN":"c9c7c2c1c9c3m1r1a1"}'>Quantum computing</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"More_TechInnovation_Sustainability_cont","cT":"Container","id":"c10c7c2c1c9c3m1r1a1","sN":10,"aN":"c7c2c1c9c3m1r1a1"}'> <a id="shellmenu_15" class="js-subm-uhf-nav-link" href="https://www.microsoft.com/en-us/sustainability/" data-m='{"cN":"GlobalNav_More_TechInnovation_Sustainability_nav","id":"n1c10c7c2c1c9c3m1r1a1","sN":1,"aN":"c10c7c2c1c9c3m1r1a1"}'>Sustainability</a> </li> </ul> </li> <li class="f-sub-menu js-nav-menu nested-menu" data-m='{"cT":"Container","id":"c8c2c1c9c3m1r1a1","sN":8,"aN":"c2c1c9c3m1r1a1"}'> <span id="uhf-navspn-shellmenu_16-span" style="display:none" f-multi-parent="true" aria-expanded="false" data-m='{"id":"nn1c8c2c1c9c3m1r1a1","sN":1,"aN":"c8c2c1c9c3m1r1a1"}'>Industries</span> <button id="uhf-navbtn-shellmenu_16-button" type="button" f-multi-parent="true" aria-expanded="false" data-m='{"id":"nn2c8c2c1c9c3m1r1a1","sN":2,"aN":"c8c2c1c9c3m1r1a1"}'>Industries</button> <ul aria-hidden="true" aria-labelledby="uhf-navspn-shellmenu_16-span"> <li class="js-nav-menu single-link" data-m='{"cN":"More_Industries_Education_cont","cT":"Container","id":"c3c8c2c1c9c3m1r1a1","sN":3,"aN":"c8c2c1c9c3m1r1a1"}'> <a id="shellmenu_17" class="js-subm-uhf-nav-link" href="https://www.microsoft.com/en-us/education" data-m='{"cN":"GlobalNav_More_Industries_Education_nav","id":"n1c3c8c2c1c9c3m1r1a1","sN":1,"aN":"c3c8c2c1c9c3m1r1a1"}'>Education</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"More_Industries_Automotive_cont","cT":"Container","id":"c4c8c2c1c9c3m1r1a1","sN":4,"aN":"c8c2c1c9c3m1r1a1"}'> <a id="shellmenu_18" class="js-subm-uhf-nav-link" href="https://www.microsoft.com/en-us/industry/automotive" data-m='{"cN":"GlobalNav_More_Industries_Automotive_nav","id":"n1c4c8c2c1c9c3m1r1a1","sN":1,"aN":"c4c8c2c1c9c3m1r1a1"}'>Automotive</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"More_Industries_Financialservices_cont","cT":"Container","id":"c5c8c2c1c9c3m1r1a1","sN":5,"aN":"c8c2c1c9c3m1r1a1"}'> <a id="shellmenu_19" class="js-subm-uhf-nav-link" href="https://www.microsoft.com/en-us/industry/financial-services/banking" data-m='{"cN":"GlobalNav_More_Industries_Financialservices_nav","id":"n1c5c8c2c1c9c3m1r1a1","sN":1,"aN":"c5c8c2c1c9c3m1r1a1"}'>Financial services</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"More_Industries_Government_cont","cT":"Container","id":"c6c8c2c1c9c3m1r1a1","sN":6,"aN":"c8c2c1c9c3m1r1a1"}'> <a id="shellmenu_20" class="js-subm-uhf-nav-link" href="https://www.microsoft.com/en-us/industry/government" data-m='{"cN":"GlobalNav_More_Industries_Government_nav","id":"n1c6c8c2c1c9c3m1r1a1","sN":1,"aN":"c6c8c2c1c9c3m1r1a1"}'>Government</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"More_Industries_Health_cont","cT":"Container","id":"c7c8c2c1c9c3m1r1a1","sN":7,"aN":"c8c2c1c9c3m1r1a1"}'> <a id="shellmenu_21" class="js-subm-uhf-nav-link" href="https://www.microsoft.com/en-us/industry/health/microsoft-cloud-for-healthcare" data-m='{"cN":"GlobalNav_More_Industries_Health_nav","id":"n1c7c8c2c1c9c3m1r1a1","sN":1,"aN":"c7c8c2c1c9c3m1r1a1"}'>Healthcare</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"More_Industries_Manufacturing_cont","cT":"Container","id":"c8c8c2c1c9c3m1r1a1","sN":8,"aN":"c8c2c1c9c3m1r1a1"}'> <a id="shellmenu_22" class="js-subm-uhf-nav-link" href="https://www.microsoft.com/en-us/industry/manufacturing/microsoft-cloud-for-manufacturing" data-m='{"cN":"GlobalNav_More_Industries_Manufacturing_nav","id":"n1c8c8c2c1c9c3m1r1a1","sN":1,"aN":"c8c8c2c1c9c3m1r1a1"}'>Manufacturing</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"More_Industries_Retail_cont","cT":"Container","id":"c9c8c2c1c9c3m1r1a1","sN":9,"aN":"c8c2c1c9c3m1r1a1"}'> <a id="shellmenu_23" class="js-subm-uhf-nav-link" href="https://www.microsoft.com/en-us/industry/consumer-goods" data-m='{"cN":"GlobalNav_More_Industries_Retail_nav","id":"n1c9c8c2c1c9c3m1r1a1","sN":1,"aN":"c9c8c2c1c9c3m1r1a1"}'>Retail</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"More_Industries_Allindustries_cont","cT":"Container","id":"c10c8c2c1c9c3m1r1a1","sN":10,"aN":"c8c2c1c9c3m1r1a1"}'> <a id="shellmenu_24" class="js-subm-uhf-nav-link" href="https://www.microsoft.com/en-us/industry" data-m='{"cN":"GlobalNav_More_Industries_Allindustries_nav","id":"n1c10c8c2c1c9c3m1r1a1","sN":1,"aN":"c10c8c2c1c9c3m1r1a1"}'>All industries</a> </li> </ul> </li> <li class="f-sub-menu js-nav-menu nested-menu" data-m='{"cT":"Container","id":"c9c2c1c9c3m1r1a1","sN":9,"aN":"c2c1c9c3m1r1a1"}'> <span id="uhf-navspn-shellmenu_25-span" style="display:none" f-multi-parent="true" aria-expanded="false" data-m='{"id":"nn1c9c2c1c9c3m1r1a1","sN":1,"aN":"c9c2c1c9c3m1r1a1"}'>Partners</span> <button id="uhf-navbtn-shellmenu_25-button" type="button" f-multi-parent="true" aria-expanded="false" data-m='{"id":"nn2c9c2c1c9c3m1r1a1","sN":2,"aN":"c9c2c1c9c3m1r1a1"}'>Partners</button> <ul aria-hidden="true" aria-labelledby="uhf-navspn-shellmenu_25-span"> <li class="js-nav-menu single-link" data-m='{"cN":"More_Partner_FindPartner_cont","cT":"Container","id":"c3c9c2c1c9c3m1r1a1","sN":3,"aN":"c9c2c1c9c3m1r1a1"}'> <a id="shellmenu_26" class="js-subm-uhf-nav-link" href="https://partner.microsoft.com/en-US/" data-m='{"cN":"GlobalNav_More_Partner_FindPartner_nav","id":"n1c3c9c2c1c9c3m1r1a1","sN":1,"aN":"c3c9c2c1c9c3m1r1a1"}'>Find a partner</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"More_Partner_BecomePartner_cont","cT":"Container","id":"c4c9c2c1c9c3m1r1a1","sN":4,"aN":"c9c2c1c9c3m1r1a1"}'> <a id="shellmenu_27" class="js-subm-uhf-nav-link" href="https://partner.microsoft.com/en-US/membership/cloud-solution-provider" data-m='{"cN":"GlobalNav_More_Partner_BecomePartner_nav","id":"n1c4c9c2c1c9c3m1r1a1","sN":1,"aN":"c4c9c2c1c9c3m1r1a1"}'>Become a partner</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"More_Partner_PartnerNetwork_cont","cT":"Container","id":"c5c9c2c1c9c3m1r1a1","sN":5,"aN":"c9c2c1c9c3m1r1a1"}'> <a id="shellmenu_28" class="js-subm-uhf-nav-link" href="https://partner.microsoft.com/en-us/membership" data-m='{"cN":"GlobalNav_More_Partner_PartnerNetwork_nav","id":"n1c5c9c2c1c9c3m1r1a1","sN":1,"aN":"c5c9c2c1c9c3m1r1a1"}'>Partner Network</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"More_Partner_AzureMarketplace_cont","cT":"Container","id":"c6c9c2c1c9c3m1r1a1","sN":6,"aN":"c9c2c1c9c3m1r1a1"}'> <a id="shellmenu_29" class="js-subm-uhf-nav-link" href="https://azuremarketplace.microsoft.com/en-us/" data-m='{"cN":"GlobalNav_More_Partner_AzureMarketplace_nav","id":"n1c6c9c2c1c9c3m1r1a1","sN":1,"aN":"c6c9c2c1c9c3m1r1a1"}'>Azure Marketplace</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"More_Partner_AppSource_cont","cT":"Container","id":"c7c9c2c1c9c3m1r1a1","sN":7,"aN":"c9c2c1c9c3m1r1a1"}'> <a id="shellmenu_30" class="js-subm-uhf-nav-link" href="https://appsource.microsoft.com/en-us/" data-m='{"cN":"GlobalNav_More_Partner_AppSource_nav","id":"n1c7c9c2c1c9c3m1r1a1","sN":1,"aN":"c7c9c2c1c9c3m1r1a1"}'>AppSource</a> </li> </ul> </li> <li class="f-sub-menu js-nav-menu nested-menu" data-m='{"cT":"Container","id":"c10c2c1c9c3m1r1a1","sN":10,"aN":"c2c1c9c3m1r1a1"}'> <span id="uhf-navspn-shellmenu_31-span" style="display:none" f-multi-parent="true" aria-expanded="false" data-m='{"id":"nn1c10c2c1c9c3m1r1a1","sN":1,"aN":"c10c2c1c9c3m1r1a1"}'>Resources</span> <button id="uhf-navbtn-shellmenu_31-button" type="button" f-multi-parent="true" aria-expanded="false" data-m='{"id":"nn2c10c2c1c9c3m1r1a1","sN":2,"aN":"c10c2c1c9c3m1r1a1"}'>Resources</button> <ul aria-hidden="true" aria-labelledby="uhf-navspn-shellmenu_31-span"> <li class="js-nav-menu single-link" data-m='{"cN":"More_Resources_Blog_cont","cT":"Container","id":"c3c10c2c1c9c3m1r1a1","sN":3,"aN":"c10c2c1c9c3m1r1a1"}'> <a id="shellmenu_32" class="js-subm-uhf-nav-link" href="https://blogs.microsoft.com/" data-m='{"cN":"GlobalNav_More_Resources_Blog_nav","id":"n1c3c10c2c1c9c3m1r1a1","sN":1,"aN":"c3c10c2c1c9c3m1r1a1"}'>Blog</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"More_Resources_MicrosoftAdvertising_cont","cT":"Container","id":"c4c10c2c1c9c3m1r1a1","sN":4,"aN":"c10c2c1c9c3m1r1a1"}'> <a id="shellmenu_33" class="js-subm-uhf-nav-link" href="https://about.ads.microsoft.com/en-us?s_cid=dig-src_uhfcomm" data-m='{"cN":"GlobalNav_More_Resources_MicrosoftAdvertising_nav","id":"n1c4c10c2c1c9c3m1r1a1","sN":1,"aN":"c4c10c2c1c9c3m1r1a1"}'>Microsoft Advertising</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"More_Resources_DeveloperCenter_cont","cT":"Container","id":"c5c10c2c1c9c3m1r1a1","sN":5,"aN":"c10c2c1c9c3m1r1a1"}'> <a id="shellmenu_34" class="js-subm-uhf-nav-link" href="https://developer.microsoft.com/en-us/" data-m='{"cN":"GlobalNav_More_Resources_DeveloperCenter_nav","id":"n1c5c10c2c1c9c3m1r1a1","sN":1,"aN":"c5c10c2c1c9c3m1r1a1"}'>Developer Center</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"More_Resources_Documentation_cont","cT":"Container","id":"c6c10c2c1c9c3m1r1a1","sN":6,"aN":"c10c2c1c9c3m1r1a1"}'> <a id="shellmenu_35" class="js-subm-uhf-nav-link" href="https://learn.microsoft.com/docs/" data-m='{"cN":"GlobalNav_More_Resources_Documentation_nav","id":"n1c6c10c2c1c9c3m1r1a1","sN":1,"aN":"c6c10c2c1c9c3m1r1a1"}'>Documentation</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"More_Resources_Events_cont","cT":"Container","id":"c7c10c2c1c9c3m1r1a1","sN":7,"aN":"c10c2c1c9c3m1r1a1"}'> <a id="shellmenu_36" class="js-subm-uhf-nav-link" href="https://www.microsoft.com/en-us/events" data-m='{"cN":"GlobalNav_More_Resources_Events_nav","id":"n1c7c10c2c1c9c3m1r1a1","sN":1,"aN":"c7c10c2c1c9c3m1r1a1"}'>Events</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"More_Resources_Licensing_cont","cT":"Container","id":"c8c10c2c1c9c3m1r1a1","sN":8,"aN":"c10c2c1c9c3m1r1a1"}'> <a id="shellmenu_37" class="js-subm-uhf-nav-link" href="https://www.microsoft.com/en-us/licensing/" data-m='{"cN":"GlobalNav_More_Resources_Licensing_nav","id":"n1c8c10c2c1c9c3m1r1a1","sN":1,"aN":"c8c10c2c1c9c3m1r1a1"}'>Licensing</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"More_Resources_MicrosoftLearn_cont","cT":"Container","id":"c9c10c2c1c9c3m1r1a1","sN":9,"aN":"c10c2c1c9c3m1r1a1"}'> <a id="shellmenu_38" class="js-subm-uhf-nav-link" href="https://learn.microsoft.com/" data-m='{"cN":"GlobalNav_More_Resources_MicrosoftLearn_nav","id":"n1c9c10c2c1c9c3m1r1a1","sN":1,"aN":"c9c10c2c1c9c3m1r1a1"}'>Microsoft Learn</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"More_Resources_MicrosoftResearch_cont","cT":"Container","id":"c10c10c2c1c9c3m1r1a1","sN":10,"aN":"c10c2c1c9c3m1r1a1"}'> <a id="shellmenu_39" class="js-subm-uhf-nav-link" href="https://www.microsoft.com/en-us/research/" data-m='{"cN":"GlobalNav_More_Resources_MicrosoftResearch_nav","id":"n1c10c10c2c1c9c3m1r1a1","sN":1,"aN":"c10c10c2c1c9c3m1r1a1"}'>Microsoft Research</a> </li> </ul> </li> <li class="f-multi-column-info"> <a data-m='{"id":"n11c2c1c9c3m1r1a1","sN":11,"aN":"c2c1c9c3m1r1a1"}' href="https://www.microsoft.com/en-us/sitemap" aria-label="" class="c-glyph">View Sitemap</a> </li> </ul> </div> </li> </ul> </nav> </div> <form class="c-search" autocomplete="off" id="searchForm" name="searchForm" role="search" action="/en-us/search/" method="GET" data-seAutoSuggest='{"isAutosuggestDisabled":false,"queryParams":{"market":"en-us","clientId":"7F27B536-CF6B-4C65-8638-A0F8CBDFCA65","sources":"Microsoft-Terms,Iris-Products,DCatAll-Products","filter":"+ClientType:StoreWeb","counts":"5,1,5"},"familyNames":{"Apps":"App","Books":"Book","Bundles":"Bundle","Devices":"Device","Fees":"Fee","Games":"Game","MusicAlbums":"Album","MusicTracks":"Song","MusicVideos":"Video","MusicArtists":"Artist","OperatingSystem":"Operating System","Software":"Software","Movies":"Movie","TV":"TV","CSV":"Gift Card","VideoActor":"Actor"}}' data-seautosuggestapi="https://www.microsoft.com/msstoreapiprod/api/autosuggest" data-m='{"cN":"GlobalNav_Search_cont","cT":"Container","id":"c3c1c9c3m1r1a1","sN":3,"aN":"c1c9c3m1r1a1"}' aria-expanded="false"> <input id="cli_shellHeaderSearchInput" aria-label="Search Expanded" aria-expanded="false" aria-controls="universal-header-search-auto-suggest-transparent" aria-owns="universal-header-search-auto-suggest-ul" type="search" name="query" placeholder="Search" data-m='{"cN":"SearchBox_nav","id":"n1c3c1c9c3m1r1a1","sN":1,"aN":"c3c1c9c3m1r1a1"}' data-toggle="tooltip" data-placement="right" title="Search" /> <button id="search" aria-label="Search" class="c-glyph" data-m='{"cN":"Search_nav","id":"n2c3c1c9c3m1r1a1","sN":2,"aN":"c3c1c9c3m1r1a1"}' data-bi-mto="true" aria-expanded="false" disabled="disabled"> <span role="presentation">Search</span> <span role="tooltip" class="c-uhf-tooltip c-uhf-search-tooltip">Search</span> </button> <div class="m-auto-suggest" id="universal-header-search-auto-suggest-transparent" role="group"> <ul class="c-menu" id="universal-header-search-auto-suggest-ul" aria-label="Search Suggestions" aria-hidden="true" data-bi-dnt="true" data-bi-mto="true" data-js-auto-suggest-position="default" role="listbox" data-tel="jsll" data-m='{"cN":"search suggestions_cont","cT":"Container","id":"c3c3c1c9c3m1r1a1","sN":3,"aN":"c3c1c9c3m1r1a1"}'></ul> <ul class="c-menu f-auto-suggest-no-results" aria-hidden="true" data-js-auto-suggest-postion="default" data-js-auto-suggest-position="default" role="listbox"> <li class="c-menu-item"> <span tabindex="-1">No results</span></li> </ul> </div> </form> <button data-m='{"cN":"cancel-search","pid":"Cancel Search","id":"nn4c1c9c3m1r1a1","sN":4,"aN":"c1c9c3m1r1a1"}' id="cancel-search" class="cancel-search" aria-label="Cancel Search"> <span>Cancel</span> </button> <div id="meControl" class="c-me" data-signinsettings='{"containerId":"meControl","enabled":true,"headerHeight":48,"debug":false,"extensibleLinks":[],"userData":{"idp":"msa","firstName":"","lastName":"","memberName":"","cid":"","authenticatedState":"3"},"rpData":{"preferredIdp":"msa","msaInfo":{"signInUrl":"https://app.vsaex.visualstudio.com/go/profile?mkt=en-us\u0026wt.mc_id=o~msft~vscom~signin\u0026_ga=1.106715523.1812220160.1467138837","signOutUrl":"https://app.vssps.visualstudio.com/_signout?mkt=en-us\u0026_ga=1.265116815.1812220160.1467138837\u0026redirectUrl=https%3A%2F%2Fvisualstudio.microsoft.com","meUrl":"https://login.live.com/me.srf?wa=wsignin1.0"},"aadInfo":{"signOutUrl":"https://app.vssps.visualstudio.com/_signout?mkt=en-us\u0026_ga=1.265116815.1812220160.1467138837\u0026redirectUrl=https%3A%2F%2Fvisualstudio.microsoft.com","appId":"","siteUrl":"","blockMsaFed":true}}}' data-m='{"cN":"GlobalNav_Account_cont","cT":"Container","id":"c5c1c9c3m1r1a1","sN":5,"aN":"c1c9c3m1r1a1"}'> <div class="msame_Header"> <div class="msame_Header_name st_msame_placeholder">Sign in</div> </div> </div> </div> </div> </div> </header> </div> </div> </div> <div id="wrapper" class="vscom-win-browser "> <div class="vscom-modal-window-wrapper vscom-modal-window-wrapper--hidden" id="vscom-mobile-download-dialog"> <style> #vscom-mobile-download-dialog .vscom-modal-window-content { display: none; } #vscom-mobile-download-dialog .vscom-modal-window-content.active { display: block; } </style> <div class="vscom-modal-window vscom-modal-window--mdd"> <button class="vscom-mobile-dialog-close white-focus-outline" aria-label="Close modal"> <i class="vscom-icon vscom-icon--Cancel" id="vscom-mobile-download-dialog-close"></i> </button> <div class="vscom-modal-window-content mobile-download-dialog-form"> <div data-form-block-id="0ddbaebe-5157-ea11-a811-000d3a3b1bf3"></div> <div id="doS-uJoaJ8L9cVnALebcBTdlxs9zZdFZ4Myv2ygU4Sbg"></div> </div> <div class="vscom-modal-window-content mobile-download-dialog-generic"> <div class="vscom-modal-window-content-inner x-hidden-focus"> <h2 class="vscom-mobile-dialog-header"> This device is not currently supported for these products. </h2> <div class="vscom-mobile-dialog-products"> <a class="black-focus-outline" href="/vs/" id="vscom-mobile-dialog-click-vs"> <img src="https://visualstudio.microsoft.com/wp-content/uploads/2019/02/BrandVisualStudioWin2019-2.svg"> Visual Studio IDE <i class="vscom-icon vscom-icon--ChevronRightSmall"></i> </a> <a class="black-focus-outline" href="/vs/mac" id="vscom-mobile-dialog-click-vs-mac"> <img src="https://visualstudio.microsoft.com/wp-content/uploads/2019/09/VSforMacIcon2019-2.svg"> Visual Studio for Mac <i class="vscom-icon vscom-icon--ChevronRightSmall"></i> </a> <a class="black-focus-outline" href="https://code.visualstudio.com/?wt.mc_id=DX_841432" id="vscom-mobile-dialog-click-vscode"> <img src="https://visualstudio.microsoft.com/wp-content/uploads/2019/09/vs-code-responsive-01-1.png"> Visual Studio Code <i class="vscom-icon vscom-icon--ChevronRightSmall"></i> </a> </div> </div> <div class="vscom-modal-window-footer"> <a class="vscom-mobile-dialog-download" href="#" id="vscom-mobile-dialog-continue-download-click-generic"> <span class="vscom-mobile-dialog-download-text x-hidden-focus"> To continue downloading, click here <i class="vscom-icon vscom-icon--ChevronRightSmall"></i> </span> </a> </div> </div> </div> </div> <div id="home" style="position:relative;top:-1px;"></div> <section class="avada-page-titlebar-wrapper" aria-label="Page Title Bar"> <div class="fusion-page-title-bar fusion-page-title-bar-breadcrumbs fusion-page-title-bar-center"> <div class="fusion-page-title-row"> <div class="fusion-page-title-wrapper"> <div class="fusion-page-title-captions"> </div> </div> </div> </div> </section> <script> window.performance && performance.mark && performance.mark("MainAreaBegin") </script> <main id="main" role="main" class="clearfix width-100" style="padding-left:0px;padding-right:0px;"> <div class="fusion-row" style="max-width:100%;"><div id="content" class="full-width"> <div id="post-67858" class="post-67858 page type-page status-publish has-post-thumbnail hentry"> <span class="entry-title rich-snippet-hidden">Visual Studio Preview | Visual Studio</span><span class="updated rich-snippet-hidden">2025-03-14T09:21:07-07:00</span> <div class="post-content post-vs_preview"> <div class="fusion-fullwidth fullwidth-box fusion-builder-row-1 fusion-flex-container has-pattern-background has-mask-background fusion-parallax-none vscom-hero-h1 nonhundred-percent-fullwidth non-hundred-percent-height-scrolling" style="--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-background-color:#171717;--awb-background-image:url(&quot;https://visualstudio.microsoft.com/wp-content/uploads/2023/01/vscom-hero-h1-bg.svg&quot;);--awb-background-size:cover;--awb-flex-wrap:wrap;" ><div class="fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap" style="max-width:calc( 1600px + );margin-left: calc(- / 2 );margin-right: calc(- / 2 );"><div class="fusion-layout-column fusion_builder_column fusion-builder-column-0 fusion_builder_column_1_1 1_1 fusion-flex-column" style="--awb-bg-size:cover;--awb-width-large:100%;--awb-margin-top-large:15px;--awb-margin-bottom-large:15px;--awb-width-medium:100%;--awb-order-medium:0;--awb-width-small:100%;--awb-order-small:0;"><div class="fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column"> <div class="vscom-feature-hero--body text-center clr-white angled-bottom" data-bi-id=""> <h1 class="vscom-feature-hero-title">Visual Studio 2022 Preview</h1> <p>Join us in shaping the next release of Visual Studio</p> <div class="vscom-btn-box"> <a href="#download-preview" class="vscom-btn-primary vscom-btn-fill-grow fill-violet" >Download Preview</a> </div> </div> <div class="fusion-text fusion-text-1" style="--awb-content-alignment:center;--awb-margin-right:15px;"><div class="vscom-link-wrapper"><a class="vscom-arrow-link clr-white" href="https://learn.microsoft.com/visualstudio/releases/2022/release-notes-preview" target="_self" rel="noopener"><br /> <span class="vscom-link-text">Visual Studio 2022 Preview release notes </span> <i class="vscom-icon vscom-icon--arrow-right"></i><br /> </a></div> </div><script type="text/javascript"> if (window.location.hash) { document.body.style.visibility = "hidden"; document.body.style.height = "0px"; window.onload = function () { setTimeout(function () { if (location.hash) location.href = location.hash; document.body.style.visibility = "visible"; document.body.style.height = "auto"; }, 100); }; } </script></div></div></div></div><div class="fusion-fullwidth fullwidth-box fusion-builder-row-2 has-pattern-background has-mask-background note-lane nonhundred-percent-fullwidth non-hundred-percent-height-scrolling" style="--awb-border-style:dashed;--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-padding-top:2rem;--awb-flex-wrap:wrap;" ><div class="fusion-builder-row fusion-row"><div class="fusion-layout-column fusion_builder_column fusion-builder-column-1 fusion_builder_column_1_1 1_1 fusion-one-full fusion-column-first fusion-column-last note-box" style="--awb-bg-size:cover;"><div class="fusion-column-wrapper fusion-column-has-shadow fusion-flex-column-wrapper-legacy"><div class="fusion-content-boxes content-boxes columns row fusion-columns-3 fusion-columns-total-6 fusion-content-boxes-1 content-boxes-icon-with-title content-left fusion-content-boxes--equal-heights multi-rows vspreview-features" data-animationOffset="top-into-view" style="margin-top:60px;margin-bottom:60px;" data-bi-id='Preview release note' data-bi-slot='' data-bi-id=''><style type="text/css">.fusion-content-boxes-1 .heading .content-box-heading {color:#000000;} .fusion-content-boxes-1 .fusion-content-box-hover .link-area-link-icon-hover .heading .content-box-heading, .fusion-content-boxes-1 .fusion-content-box-hover .link-area-link-icon-hover .heading .heading-link .content-box-heading, .fusion-content-boxes-1 .fusion-content-box-hover .link-area-box-hover .heading .content-box-heading, .fusion-content-boxes-1 .fusion-content-box-hover .link-area-box-hover .heading .heading-link .content-box-heading, .fusion-content-boxes-1 .fusion-content-box-hover .link-area-link-icon-hover.link-area-box .fusion-read-more, .fusion-content-boxes-1 .fusion-content-box-hover .link-area-link-icon-hover.link-area-box .fusion-read-more::after, .fusion-content-boxes-1 .fusion-content-box-hover .link-area-link-icon-hover.link-area-box .fusion-read-more::before, .fusion-content-boxes-1 .fusion-content-box-hover .fusion-read-more:hover:after, .fusion-content-boxes-1 .fusion-content-box-hover .fusion-read-more:hover:before, .fusion-content-boxes-1 .fusion-content-box-hover .fusion-read-more:hover, .fusion-content-boxes-1 .fusion-content-box-hover .link-area-box-hover.link-area-box .fusion-read-more, .fusion-content-boxes-1 .fusion-content-box-hover .link-area-box-hover.link-area-box .fusion-read-more::after, .fusion-content-boxes-1 .fusion-content-box-hover .link-area-box-hover.link-area-box .fusion-read-more::before, .fusion-content-boxes-1 .fusion-content-box-hover .link-area-link-icon-hover .icon .circle-no, .fusion-content-boxes-1 .heading .heading-link:hover .content-box-heading { color: #000000; } .fusion-content-boxes-1 .fusion-content-box-hover .link-area-box-hover .icon .circle-no { color: #000000 !important; }.fusion-content-boxes-1 .fusion-content-box-hover .link-area-box.link-area-box-hover .fusion-content-box-button {background: #32145a;color: #ffffff;}.fusion-content-boxes-1 .fusion-content-box-hover .link-area-box.link-area-box-hover .fusion-content-box-button .fusion-button-text {color: #ffffff;} .fusion-content-boxes-1 .fusion-content-box-hover .link-area-link-icon-hover .heading .icon > span { background-color: transparent !important; } .fusion-content-boxes-1 .fusion-content-box-hover .link-area-box-hover .heading .icon > span { border-color: #000000 !important; } .fusion-content-boxes-1 .fusion-content-box-hover .link-area-link-icon-hover.icon-hover-animation-pulsate .fontawesome-icon:after, .fusion-content-boxes-1 .fusion-content-box-hover .link-area-box-hover.icon-hover-animation-pulsate .fontawesome-icon:after, .fusion-content-boxes-1 .fusion-content-box-hover .link-area-link-icon-hover.icon-wrapper-hover-animation-pulsate .icon span:after, .fusion-content-boxes-1 .fusion-content-box-hover .link-area-box-hover.icon-wrapper-hover-animation-pulsate .icon span:after { -webkit-box-shadow:0 0 0 2px rgba(255,255,255,0.1), 0 0 10px 10px #000000, 0 0 0 10px rgba(255,255,255,0.5); -moz-box-shadow:0 0 0 2px rgba(255,255,255,0.1), 0 0 10px 10px #000000, 0 0 0 10px rgba(255,255,255,0.5); box-shadow: 0 0 0 2px rgba(255,255,255,0.1), 0 0 10px 10px #000000, 0 0 0 10px rgba(255,255,255,0.5); } </style><div class="fusion-column content-box-column reveal content-box-column content-box-column-1 col-lg-4 col-md-4 col-sm-4 fusion-content-box-hover content-box-column-first-in-row"><div class="col content-box-wrapper content-wrapper link-area-link-icon icon-hover-animation-pulsate" style="background-color:rgba(255,255,255,0);" data-animationOffset="top-into-view"><div class="heading icon-left"><h3 class="content-box-heading fusion-responsive-typography-calculated" style="font-size:32px;--fontSize:32;line-height:;">Our 64-bit upgrade</h3></div><div class="fusion-clearfix"></div><div class="content-container" style="color:#333333;"> <p>Take advantage of all your computer’s resources to scale Visual Studio to the largest of projects and complex workloads without running out of memory. You can continue to run and debug your 32-bit apps.</p> </div></div></div><div class="fusion-column content-box-column reveal content-box-column content-box-column-2 col-lg-4 col-md-4 col-sm-4 fusion-content-box-hover "><div class="col content-box-wrapper content-wrapper link-area-link-icon icon-hover-animation-pulsate" style="background-color:rgba(255,255,255,0);" data-animationOffset="top-into-view"><div class="heading icon-left"><h3 class="content-box-heading fusion-responsive-typography-calculated" style="font-size:32px;--fontSize:32;line-height:;">Comes with .NET 9</h3></div><div class="fusion-clearfix"></div><div class="content-container" style="color:#333333;"> <p>Develop cross-platform apps with C# and .NET MAUI. Build responsive Web UIs with Blazor. Build, debug, and test .NET apps in Linux environments. Use hot reload capabilities across .NET apps. Edit ASP.NET Web pages with Web Live Preview.</p> </div></div></div><div class="fusion-column content-box-column reveal content-box-column content-box-column-3 col-lg-4 col-md-4 col-sm-4 fusion-content-box-hover content-box-column-last-in-row"><div class="col content-box-wrapper content-wrapper link-area-link-icon icon-hover-animation-pulsate" style="background-color:rgba(255,255,255,0);" data-animationOffset="top-into-view"><div class="heading icon-left"><h3 class="content-box-heading fusion-responsive-typography-calculated" style="font-size:32px;--fontSize:32;line-height:;">C++20 Support</h3></div><div class="fusion-clearfix"></div><div class="content-container" style="color:#333333;"> <p>Visual Studio 2022 comes with our latest toolchain for targeting C++20 and is binary-compatible with 2022. Develop cross-platform C++ projects from Windows and leverage the best the ecosystem has to offer.</p> </div></div></div><div class="fusion-column content-box-column reveal content-box-column content-box-column-4 col-lg-4 col-md-4 col-sm-4 fusion-content-box-hover content-box-column-first-in-row"><div class="col content-box-wrapper content-wrapper link-area-link-icon icon-hover-animation-pulsate" style="background-color:rgba(255,255,255,0);" data-animationOffset="top-into-view"><div class="heading icon-left"><h3 class="content-box-heading fusion-responsive-typography-calculated" style="font-size:32px;--fontSize:32;line-height:;">GitHub Copilot</h3></div><div class="fusion-clearfix"></div><div class="content-container" style="color:#333333;"> <p>GitHub Copilot&#8217;s power is seamlessly woven into Visual Studio 2022, enhancing your everyday tasks and bringing you the latest AI-driven coding experiences. Copilot is designed to elevate your efficiency, by offering personalized code suggestions, answering coding-related queries, and <a href="https://devblogs.microsoft.com/visualstudio/github-copilot-in-visual-studio-a-recap-of-2023/" target="_blank" rel="noopener">much more</a>.</p> </div></div></div><div class="fusion-column content-box-column reveal content-box-column content-box-column-5 col-lg-4 col-md-4 col-sm-4 fusion-content-box-hover "><div class="col content-box-wrapper content-wrapper link-area-link-icon icon-hover-animation-pulsate" style="background-color:rgba(255,255,255,0);" data-animationOffset="top-into-view"><div class="heading icon-left"><h3 class="content-box-heading fusion-responsive-typography-calculated" style="font-size:32px;--fontSize:32;line-height:;">IDE built for you</h3></div><div class="fusion-clearfix"></div><div class="content-container" style="color:#333333;"> <p>Visual Studio 2022 has a refreshed look with new icons and theme that’s improves clarity and consistency, while keeping familiarity. More than what comes out of the box Visual Studio has 100s of options for you to customize to make Visual Studio truly yours.</p> </div></div></div><div class="fusion-column content-box-column reveal content-box-column content-box-column-6 col-lg-4 col-md-4 col-sm-4 fusion-content-box-hover content-box-column-last content-box-column-last-in-row"><div class="col content-box-wrapper content-wrapper link-area-link-icon icon-hover-animation-pulsate" style="background-color:rgba(255,255,255,0);" data-animationOffset="top-into-view"><div class="heading icon-left"><h3 class="content-box-heading fusion-responsive-typography-calculated" style="font-size:32px;--fontSize:32;line-height:;">Enhanced Debugging </h3></div><div class="fusion-clearfix"></div><div class="content-container" style="color:#333333;"> <p>Unlock your potential as a developer with debugging tools that empower you to quickly diagnose issues. Use async visualizations, automatic analyzers, time travel debugging, and a dozens of others tools.</p> </div></div></div><style type="text/css"> .fusion-content-boxes-1 .fusion-content-box-hover .heading-link:hover .icon i.circle-yes, .fusion-content-boxes-1 .fusion-content-box-hover .link-area-box:hover .heading-link .icon i.circle-yes, .fusion-content-boxes-1 .fusion-content-box-hover .link-area-link-icon-hover .heading .icon i.circle-yes, .fusion-content-boxes-1 .fusion-content-box-hover .link-area-box-hover .heading .icon i.circle-yes { background-color: transparent !important; border-color: #000000 !important; }</style><div class="fusion-clearfix"></div></div><div class="fusion-clearfix"></div></div></div><div class="fusion-layout-column fusion_builder_column fusion-builder-column-2 fusion_builder_column_1_1 1_1 fusion-one-full fusion-column-first fusion-column-last note-text" style="--awb-padding-top:2rem;--awb-padding-bottom:2rem;--awb-bg-size:cover;"><div class="fusion-column-wrapper fusion-column-has-shadow fusion-flex-column-wrapper-legacy"><div class="fusion-clearfix"></div></div></div></div></div><div class="fusion-fullwidth fullwidth-box fusion-builder-row-3 has-pattern-background has-mask-background nonhundred-percent-fullwidth non-hundred-percent-height-scrolling" style="--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-padding-top:0px;--awb-padding-right:0px;--awb-padding-bottom:0px;--awb-padding-left:0px;--awb-background-color:#ffffff;--awb-flex-wrap:wrap;" ><div class="fusion-builder-row fusion-row"><div class="fusion-layout-column fusion_builder_column fusion-builder-column-3 fusion_builder_column_1_1 1_1 fusion-one-full fusion-column-first fusion-column-last video-col" style="--awb-bg-color:transparent;--awb-bg-color-hover:transparent;--awb-bg-size:cover;"><div class="fusion-column-wrapper fusion-column-has-shadow fusion-flex-column-wrapper-legacy"><div data-bi-id="" data-bi-area="Hero" data-bi-vidid="wu3BIeP1WD8" data-bi-vidnm="Visual Studio 2022 preview video" id="vscom-video-player-1" class="vscom-video-player vscom-video-player--default vscom-video-player--ytplayer"><a id="player-wu3BIeP1WD8" href="#" data-ytvidtitle="Visual Studio 2022 preview video" data-ytvidid="wu3BIeP1WD8" data-ytvideo="https://www.youtube.com/embed/wu3BIeP1WD8?enablejsapi=1&autoplay=1&rel=0" aria-label="Visual Studio 2022 preview video" class="vsgtm-click-video vscom-video-player-anchor ytvideo button set-aspect-ratio" target="_self" role="button" data-caption=""><div class="vscom-video-player-container msccVideoPlayer aspect-ratio-wrapper ar-16x9"><div class="vscom-video-player-thumb-wrapper msccVideoThumbnail aspect-ratio-inner" style="border: 1px solid rgba(0, 0, 0, 0.1);"><img decoding="async" class="vscom-video-player-thumbnail" src="https://visualstudio.microsoft.com/wp-content/uploads/2023/01/VisualStudioLogo.webp" alt=""/><div class="vscom-video-player-play-wrapper vscom-video-player-play-wrapper--center-center vscom-video-player-play-wrapper--dark x-hidden-focus"><div class="vscom-video-play-inner"><span class="vscom-video-play-button-wrapper" style="border: none; background: unset"><i class="vscom-video-player-play-button vscom-icon vscom-icon--Play" aria-hidden="true"></i></span></div></div></div></div></a><div class="vscom-ytplayer-top set-aspect-ratio"><div class="aspect-ratio-wrapper ar-16x9"><div class="vscom-ytplayer-container aspect-ratio-inner"></div></div></div><div class="fusion-clearfix"></div><meta property="name" content="Visual Studio 2022 preview video"><meta name="description" content=""><meta name="thumbnailUrl" content="https://visualstudio.microsoft.com/wp-content/uploads/2023/01/VisualStudioLogo.webp"><meta name="uploadDate" content=""></div><div class="fusion-clearfix"></div></div></div></div></div><div class="fusion-fullwidth fullwidth-box fusion-builder-row-4 fusion-flex-container has-pattern-background has-mask-background fusion-parallax-none download-lane nonhundred-percent-fullwidth non-hundred-percent-height-scrolling" style="--link_hover_color: #ffffff;--awb-background-position:center bottom;--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-padding-top:2rem;--awb-background-image:url(&quot;https://visualstudio.microsoft.com/wp-content/uploads/2022/10/s6-two-column-bg.svg&quot;);--awb-background-size:cover;--awb-flex-wrap:wrap;" id="download-preview" ><div class="fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap" style="max-width:calc( 1600px + );margin-left: calc(- / 2 );margin-right: calc(- / 2 );"><div class="fusion-layout-column fusion_builder_column fusion-builder-column-4 fusion_builder_column_1_1 1_1 fusion-flex-column" style="--awb-bg-size:cover;--awb-width-large:100%;--awb-margin-top-large:15px;--awb-margin-bottom-large:15px;--awb-width-medium:100%;--awb-order-medium:0;--awb-width-small:100%;--awb-order-small:0;"><div class="fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column"><span class=" fusion-imageframe imageframe-none imageframe-1 hover-type-none text-center" style="width:100%;max-width:px;"><img decoding="async" src="https://visualstudio.microsoft.com/wp-content/uploads/2022/11/vs-pre-icon.svg" alt class="img-responsive wp-image-200352 lazyload "/></span><div class="fusion-title title fusion-title-1 fusion-sep-none fusion-title-center fusion-title-text fusion-title-size-two title-col"><h2 class="fusion-title-heading title-heading-center fusion-responsive-typography-calculated" style="margin:0;--fontSize:;line-height:;">Try the Preview</h2></div><div class="fusion-text fusion-text-2 sub-title-col" style="--awb-content-alignment:center;"><p>Install Visual Studio 2022 Preview side-by-side with previous versions.</p> </div></div></div><div class="fusion-layout-column fusion_builder_column fusion-builder-column-5 fusion_builder_column_1_1 1_1 fusion-flex-column" style="--awb-bg-size:cover;--awb-width-large:100%;--awb-margin-top-large:15px;--awb-margin-bottom-large:15px;--awb-width-medium:100%;--awb-order-medium:0;--awb-width-small:100%;--awb-order-small:0;"><div class="fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column"><div class="fusion-content-boxes content-boxes columns row fusion-columns-1 fusion-columns-total-3 fusion-content-boxes-2 content-boxes-icon-with-title content-left fusion-content-boxes--equal-heights" data-animationOffset="top-into-view" style="margin-top:60px;margin-bottom:60px;" data-bi-id='' data-bi-slot='' data-bi-id=''><style type="text/css">.fusion-content-boxes-2 .heading .content-box-heading {color:#000000;} .fusion-content-boxes-2 .fusion-content-box-hover .link-area-link-icon-hover .heading .content-box-heading, .fusion-content-boxes-2 .fusion-content-box-hover .link-area-link-icon-hover .heading .heading-link .content-box-heading, .fusion-content-boxes-2 .fusion-content-box-hover .link-area-box-hover .heading .content-box-heading, .fusion-content-boxes-2 .fusion-content-box-hover .link-area-box-hover .heading .heading-link .content-box-heading, .fusion-content-boxes-2 .fusion-content-box-hover .link-area-link-icon-hover.link-area-box .fusion-read-more, .fusion-content-boxes-2 .fusion-content-box-hover .link-area-link-icon-hover.link-area-box .fusion-read-more::after, .fusion-content-boxes-2 .fusion-content-box-hover .link-area-link-icon-hover.link-area-box .fusion-read-more::before, .fusion-content-boxes-2 .fusion-content-box-hover .fusion-read-more:hover:after, .fusion-content-boxes-2 .fusion-content-box-hover .fusion-read-more:hover:before, .fusion-content-boxes-2 .fusion-content-box-hover .fusion-read-more:hover, .fusion-content-boxes-2 .fusion-content-box-hover .link-area-box-hover.link-area-box .fusion-read-more, .fusion-content-boxes-2 .fusion-content-box-hover .link-area-box-hover.link-area-box .fusion-read-more::after, .fusion-content-boxes-2 .fusion-content-box-hover .link-area-box-hover.link-area-box .fusion-read-more::before, .fusion-content-boxes-2 .fusion-content-box-hover .link-area-link-icon-hover .icon .circle-no, .fusion-content-boxes-2 .heading .heading-link:hover .content-box-heading { color: #000000; } .fusion-content-boxes-2 .fusion-content-box-hover .link-area-box-hover .icon .circle-no { color: #000000 !important; }.fusion-content-boxes-2 .fusion-content-box-hover .link-area-box.link-area-box-hover .fusion-content-box-button {background: #32145a;color: #ffffff;}.fusion-content-boxes-2 .fusion-content-box-hover .link-area-box.link-area-box-hover .fusion-content-box-button .fusion-button-text {color: #ffffff;} .fusion-content-boxes-2 .fusion-content-box-hover .link-area-link-icon-hover .heading .icon > span { background-color: transparent !important; } .fusion-content-boxes-2 .fusion-content-box-hover .link-area-box-hover .heading .icon > span { border-color: #000000 !important; } .fusion-content-boxes-2 .fusion-content-box-hover .link-area-link-icon-hover.icon-hover-animation-pulsate .fontawesome-icon:after, .fusion-content-boxes-2 .fusion-content-box-hover .link-area-box-hover.icon-hover-animation-pulsate .fontawesome-icon:after, .fusion-content-boxes-2 .fusion-content-box-hover .link-area-link-icon-hover.icon-wrapper-hover-animation-pulsate .icon span:after, .fusion-content-boxes-2 .fusion-content-box-hover .link-area-box-hover.icon-wrapper-hover-animation-pulsate .icon span:after { -webkit-box-shadow:0 0 0 2px rgba(255,255,255,0.1), 0 0 10px 10px #000000, 0 0 0 10px rgba(255,255,255,0.5); -moz-box-shadow:0 0 0 2px rgba(255,255,255,0.1), 0 0 10px 10px #000000, 0 0 0 10px rgba(255,255,255,0.5); box-shadow: 0 0 0 2px rgba(255,255,255,0.1), 0 0 10px 10px #000000, 0 0 0 10px rgba(255,255,255,0.5); } </style><div class="fusion-column content-box-column reveal content-box-column content-box-column-1 col-lg-12 col-md-12 col-sm-12 fusion-content-box-hover content-box-column-last-in-row"><div class="col content-box-wrapper content-wrapper-background link-area-link-icon content-icon-wrapper-yes icon-wrapper-hover-animation-pulsate" style="background-color:#ffffff;" data-animationOffset="top-into-view"><div class="heading icon-left"><h3 class="content-box-heading fusion-responsive-typography-calculated" style="font-size:24px;--fontSize:24;line-height:;">Visual Studio Community </h3></div><div class="fusion-clearfix"></div><div class="content-container" style="color:#333333;"> <p>Visual Studio Community is a free, fully-featured IDE for students, open-source contributors, and individual developers.</p> <div class="fusion-button-wrapper"><style type="text/css">.fusion-button.button-1 {border-radius:0px;}</style><a class="fusion-button button-flat fusion-button-default-size button-default fusion-button-default button-1 fusion-button-default-span fusion-button-default-type vscom-btn-secondary vscom-btn-fill-grow fill-violet" style="--button_bevel_color:#5c2d91;--button_bevel_color_hover:#5c2d91;--button-border-radius-top-left:0;--button-border-radius-top-right:0;--button-border-radius-bottom-right:0;--button-border-radius-bottom-left:0;--button_typography-letter-spacing:;--button_margin-top:;--button_margin-right:;--button_margin-bottom:;--button_margin-left:;" target="_self" href="/thank-you-downloading-visual-studio/?sku=Community&amp;channel=Preview&amp;version=VS2022&amp;source=VSLandingPage&amp;cid=2060&amp;passive=false"><span class="fusion-button-text">Download Preview</span></a></div> </div></div></div><div class="fusion-column content-box-column reveal content-box-column content-box-column-2 col-lg-12 col-md-12 col-sm-12 fusion-content-box-hover content-box-column-last-in-row"><div class="col content-box-wrapper content-wrapper-background link-area-link-icon content-icon-wrapper-yes icon-wrapper-hover-animation-pulsate" style="background-color:#ffffff;" data-animationOffset="top-into-view"><div class="heading icon-left"><h3 class="content-box-heading fusion-responsive-typography-calculated" style="font-size:24px;--fontSize:24;line-height:;">Visual Studio Professional </h3></div><div class="fusion-clearfix"></div><div class="content-container" style="color:#333333;"> <p>Visual Studio Professional is a powerful, fully-featured IDE for developers designing, building, and deploying innovative applications for any platform.</p> <div class="fusion-button-wrapper"><style type="text/css">.fusion-button.button-2 {border-radius:1px;}</style><a class="fusion-button button-flat fusion-button-default-size button-default fusion-button-default button-2 fusion-button-default-span fusion-button-default-type vscom-btn-secondary vscom-btn-fill-grow fill-violet" style="--button_bevel_color:#5c2d91;--button_bevel_color_hover:#5c2d91;--button-border-radius-top-left:0;--button-border-radius-top-right:0;--button-border-radius-bottom-right:0;--button-border-radius-bottom-left:0;--button_typography-letter-spacing:;--button_margin-top:;--button_margin-right:;--button_margin-bottom:;--button_margin-left:;" target="_self" href="/thank-you-downloading-visual-studio/?sku=Professional&amp;channel=Preview&amp;version=VS2022&amp;source=VSLandingPage&amp;cid=2060&amp;passive=false"><span class="fusion-button-text">Download Preview</span></a></div> </div></div></div><div class="fusion-column content-box-column reveal content-box-column content-box-column-3 col-lg-12 col-md-12 col-sm-12 fusion-content-box-hover content-box-column-last content-box-column-last-in-row"><div class="col content-box-wrapper content-wrapper-background link-area-link-icon content-icon-wrapper-yes icon-wrapper-hover-animation-pulsate" style="background-color:#ffffff;" data-animationOffset="top-into-view"><div class="heading icon-left"><h3 class="content-box-heading fusion-responsive-typography-calculated" style="font-size:24px;--fontSize:24;line-height:;">Visual Studio Enterprise </h3></div><div class="fusion-clearfix"></div><div class="content-container" style="color:#333333;"> <p>Visual Studio Enterprise is a powerful, comprehensive IDE for developers designing, building, testing, and deploying complex applications for any platform—including the Microsoft stack.</p> <div class="fusion-button-wrapper"><style type="text/css">.fusion-button.button-3 {border-radius:1px;}</style><a class="fusion-button button-flat fusion-button-default-size button-default fusion-button-default button-3 fusion-button-default-span fusion-button-default-type vscom-btn-secondary vscom-btn-fill-grow fill-violet" style="--button_bevel_color:#5c2d91;--button_bevel_color_hover:#5c2d91;--button-border-radius-top-left:0;--button-border-radius-top-right:0;--button-border-radius-bottom-right:0;--button-border-radius-bottom-left:0;--button_typography-letter-spacing:;--button_margin-top:;--button_margin-right:;--button_margin-bottom:;--button_margin-left:;" target="_self" href="/thank-you-downloading-visual-studio/?sku=Enterprise&amp;channel=Preview&amp;version=VS2022&amp;source=VSLandingPage&amp;cid=2060&amp;passive=false"><span class="fusion-button-text">Download Preview</span></a></div> </div></div></div><style type="text/css"> .fusion-content-boxes-2 .fusion-content-box-hover .heading-link:hover .icon i.circle-yes, .fusion-content-boxes-2 .fusion-content-box-hover .link-area-box:hover .heading-link .icon i.circle-yes, .fusion-content-boxes-2 .fusion-content-box-hover .link-area-link-icon-hover .heading .icon i.circle-yes, .fusion-content-boxes-2 .fusion-content-box-hover .link-area-box-hover .heading .icon i.circle-yes { background-color: transparent !important; border-color: #000000 !important; }</style><div class="fusion-clearfix"></div></div></div></div><div class="fusion-layout-column fusion_builder_column fusion-builder-column-6 fusion_builder_column_1_1 1_1 fusion-flex-column" style="--awb-bg-size:cover;--awb-width-large:100%;--awb-margin-top-large:0px;--awb-margin-bottom-large:15px;--awb-width-medium:100%;--awb-order-medium:0;--awb-width-small:100%;--awb-order-small:0;"><div class="fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column"><div class="fusion-text fusion-text-3" style="--awb-content-alignment:center;"><p>This Preview is not licensed to build production applications. For production<br /> applications please download stable release of Visual Studio from our <a style="color: #8661c5;" data-bi-id="Try the preview" href="/downloads" class="underline-link content-link">downloads page</a>.</p> </div></div></div></div></div><div class="fusion-fullwidth fullwidth-box fusion-builder-row-5 fusion-flex-container has-pattern-background has-mask-background nonhundred-percent-fullwidth non-hundred-percent-height-scrolling" style="--awb-background-position:center bottom;--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-padding-top:2rem;--awb-padding-bottom:4rem;--awb-flex-wrap:wrap;" ><div class="fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap" style="max-width:calc( 1600px + );margin-left: calc(- / 2 );margin-right: calc(- / 2 );"><div class="fusion-layout-column fusion_builder_column fusion-builder-column-7 fusion_builder_column_1_1 1_1 fusion-flex-column" style="--awb-bg-size:cover;--awb-width-large:100%;--awb-margin-top-large:15px;--awb-margin-bottom-large:15px;--awb-width-medium:100%;--awb-order-medium:0;--awb-width-small:100%;--awb-order-small:0;"><div class="fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column"><div class="vscom-swimlane-content vscom-swimlane-bg vscom-swimlane-content--s2-bg-image-left vscom-swimlane-content--1" data-bi-id="" data-bi-id="" data-bi-slot=""><div class="vscom-swimlane--fifty-fifty vscom-swimlane--img-left"> <span class="vscom-imageframe vscom-image--dropshadow reveal"> <img decoding="async" src="https://visualstudio.microsoft.com/wp-content/uploads/2023/01/tools-img.webp" alt="" class="img-responsive vscom-not-lazy-image wp-image-0" > </span></div> <div class="vscom-swimlane--fifty-fifty"> <div class="vscom-swimlane-body"> <h2>Additional tools for Visual Studio 2022 Preview</h2> <div class="fusion-title title fusion-sep-none vscom-swimlane-subtitle"> <h3>Build tools for Visual Studio 2022 Preview</h3> </div> <p>These Build Tools allow you to build Visual Studio projects from a command-line interface. Supported projects include: ASP.NET, Azure, C++ desktop, ClickOnce, containers, .NET Core, .NET Desktop, Node.js, Office and SharePoint, Python, TypeScript, Unit Tests, <span>WinUI 3</span>, WCF, and <span>.NET MAUI</span>.</p> <p><a role="button" class="vscom-btn-secondary vscom-btn-fill-grow fill-violet" target="_self" href="/thank-you-downloading-visual-studio/?sku=BuildTools&amp;ch=pre&amp;rel=17" rel="noopener"><span class="fusion-button-text">Download Preview</span></a></p> </div> </div></div></div></div></div></div><div class="fusion-fullwidth fullwidth-box fusion-builder-row-6 fusion-flex-container has-pattern-background has-mask-background fusion-parallax-none vscom-swimlane download-lane vscom-swimlane--dark vscom-remove-bg-mobile nonhundred-percent-fullwidth non-hundred-percent-height-scrolling" style="--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-padding-top:170px;--awb-padding-bottom:15px;--awb-background-image:url(&quot;https://visualstudio.microsoft.com/wp-content/uploads/2023/01/footer-bk-img-dark.webp&quot;);--awb-background-size:cover;--awb-flex-wrap:wrap;" ><div class="fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap" style="max-width:calc( 1600px + );margin-left: calc(- / 2 );margin-right: calc(- / 2 );"><div class="fusion-layout-column fusion_builder_column fusion-builder-column-8 fusion_builder_column_1_1 1_1 fusion-flex-column" style="--awb-bg-size:cover;--awb-width-large:100%;--awb-margin-top-large:15px;--awb-margin-bottom-large:10px;--awb-width-medium:100%;--awb-order-medium:0;--awb-width-small:100%;--awb-order-small:0;"><div class="fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column"><div class="fusion-content-boxes content-boxes columns row fusion-columns-1 fusion-columns-total-3 fusion-content-boxes-3 content-boxes-icon-with-title content-left fusion-content-boxes--equal-heights future-releases" data-animationOffset="top-into-view" style="margin-top:60px;margin-bottom:60px;" data-bi-id='' data-bi-slot='' data-bi-id=''><style type="text/css">.fusion-content-boxes-3 .heading .content-box-heading {color:#ffffff;} .fusion-content-boxes-3 .fusion-content-box-hover .link-area-link-icon-hover .heading .content-box-heading, .fusion-content-boxes-3 .fusion-content-box-hover .link-area-link-icon-hover .heading .heading-link .content-box-heading, .fusion-content-boxes-3 .fusion-content-box-hover .link-area-box-hover .heading .content-box-heading, .fusion-content-boxes-3 .fusion-content-box-hover .link-area-box-hover .heading .heading-link .content-box-heading, .fusion-content-boxes-3 .fusion-content-box-hover .link-area-link-icon-hover.link-area-box .fusion-read-more, .fusion-content-boxes-3 .fusion-content-box-hover .link-area-link-icon-hover.link-area-box .fusion-read-more::after, .fusion-content-boxes-3 .fusion-content-box-hover .link-area-link-icon-hover.link-area-box .fusion-read-more::before, .fusion-content-boxes-3 .fusion-content-box-hover .fusion-read-more:hover:after, .fusion-content-boxes-3 .fusion-content-box-hover .fusion-read-more:hover:before, .fusion-content-boxes-3 .fusion-content-box-hover .fusion-read-more:hover, .fusion-content-boxes-3 .fusion-content-box-hover .link-area-box-hover.link-area-box .fusion-read-more, .fusion-content-boxes-3 .fusion-content-box-hover .link-area-box-hover.link-area-box .fusion-read-more::after, .fusion-content-boxes-3 .fusion-content-box-hover .link-area-box-hover.link-area-box .fusion-read-more::before, .fusion-content-boxes-3 .fusion-content-box-hover .link-area-link-icon-hover .icon .circle-no, .fusion-content-boxes-3 .heading .heading-link:hover .content-box-heading { color: #ffffff; } .fusion-content-boxes-3 .fusion-content-box-hover .link-area-box-hover .icon .circle-no { color: #ffffff !important; }.fusion-content-boxes-3 .fusion-content-box-hover .link-area-box.link-area-box-hover .fusion-content-box-button {background: #32145a;color: #ffffff;}.fusion-content-boxes-3 .fusion-content-box-hover .link-area-box.link-area-box-hover .fusion-content-box-button .fusion-button-text {color: #ffffff;} .fusion-content-boxes-3 .fusion-content-box-hover .link-area-link-icon-hover .heading .icon > span { background-color: transparent !important; } .fusion-content-boxes-3 .fusion-content-box-hover .link-area-box-hover .heading .icon > span { border-color: #ffffff !important; } .fusion-content-boxes-3 .fusion-content-box-hover .link-area-link-icon-hover.icon-hover-animation-pulsate .fontawesome-icon:after, .fusion-content-boxes-3 .fusion-content-box-hover .link-area-box-hover.icon-hover-animation-pulsate .fontawesome-icon:after, .fusion-content-boxes-3 .fusion-content-box-hover .link-area-link-icon-hover.icon-wrapper-hover-animation-pulsate .icon span:after, .fusion-content-boxes-3 .fusion-content-box-hover .link-area-box-hover.icon-wrapper-hover-animation-pulsate .icon span:after { -webkit-box-shadow:0 0 0 2px rgba(255,255,255,0.1), 0 0 10px 10px #ffffff, 0 0 0 10px rgba(255,255,255,0.5); -moz-box-shadow:0 0 0 2px rgba(255,255,255,0.1), 0 0 10px 10px #ffffff, 0 0 0 10px rgba(255,255,255,0.5); box-shadow: 0 0 0 2px rgba(255,255,255,0.1), 0 0 10px 10px #ffffff, 0 0 0 10px rgba(255,255,255,0.5); } </style><div class="fusion-column content-box-column reveal content-box-column content-box-column-1 col-lg-12 col-md-12 col-sm-12 content-box-column-last-in-row"><div class="col content-box-wrapper content-wrapper-background link-area-link-icon link-type-text content-icon-wrapper-yes icon-wrapper-hover-animation-pulsate" style="background-color:#212121;" data-animationOffset="top-into-view"><div class="heading icon-left"><h3 class="content-box-heading fusion-responsive-typography-calculated" style="font-size:24px;--fontSize:24;line-height:;">Future releases</h3></div><div class="fusion-clearfix"></div><div class="content-container" style="color:#ffffff;"> <p>The Visual Studio 2022 roadmap shows you a high-level overview of the key capabilities and features that we’re working on.</p> </div><a href="https://aka.ms/vs2022roadmap" data-bi-id=""class="vscom-arrow-link" ><span class="vscom-link-text">Visual Studio 2022 roadmap</span> <i class="vscom-icon vscom-icon--arrow-right"></i></a><div class="fusion-clearfix"></div></div></div><div class="fusion-column content-box-column reveal content-box-column content-box-column-2 col-lg-12 col-md-12 col-sm-12 content-box-column-last-in-row"><div class="col content-box-wrapper content-wrapper-background link-area-link-icon link-type-text content-icon-wrapper-yes icon-wrapper-hover-animation-pulsate" style="background-color:#212121;" data-animationOffset="top-into-view"><div class="heading icon-left"><h3 class="content-box-heading fusion-responsive-typography-calculated" style="font-size:24px;--fontSize:24;line-height:;">Our vision</h3></div><div class="fusion-clearfix"></div><div class="content-container" style="color:#ffffff;"> <p>Developer Division CVP Amanda Silver shares the big ideas behind Visual Studio 2022 and offers a glimpse at our plans for the future.</p> </div><a href="https://devblogs.microsoft.com/visualstudio/visual-studio-2022/" data-bi-id=""class="vscom-arrow-link" ><span class="vscom-link-text">Read our vision for Visual Studio 2022</span> <i class="vscom-icon vscom-icon--arrow-right"></i></a><div class="fusion-clearfix"></div></div></div><div class="fusion-column content-box-column reveal content-box-column content-box-column-3 col-lg-12 col-md-12 col-sm-12 content-box-column-last content-box-column-last-in-row"><div class="col content-box-wrapper content-wrapper-background link-area-link-icon link-type-text content-icon-wrapper-yes icon-wrapper-hover-animation-pulsate" style="background-color:#212121;" data-animationOffset="top-into-view"><div class="heading icon-left"><h3 class="content-box-heading fusion-responsive-typography-calculated" style="font-size:24px;--fontSize:24;line-height:;">Remote Office Hours</h3></div><div class="fusion-clearfix"></div><div class="content-container" style="color:#ffffff;"> <p>Microsoft program managers Mads Kristensen and Andy Sterland take a deep dive into what the 64-bit Visual Studio will mean to you.</p> </div><a href="https://www.youtube.com/watch?v=nvQIoPDHP6c" data-bi-id=""class="vscom-arrow-link" ><span class="vscom-link-text">Watch on YouTube</span> <i class="vscom-icon vscom-icon--arrow-right"></i></a><div class="fusion-clearfix"></div></div></div><style type="text/css"> .fusion-content-boxes-3 .fusion-content-box-hover .heading-link:hover .icon i.circle-yes, .fusion-content-boxes-3 .fusion-content-box-hover .link-area-box:hover .heading-link .icon i.circle-yes, .fusion-content-boxes-3 .fusion-content-box-hover .link-area-link-icon-hover .heading .icon i.circle-yes, .fusion-content-boxes-3 .fusion-content-box-hover .link-area-box-hover .heading .icon i.circle-yes { background-color: transparent !important; border-color: #ffffff !important; }</style><div class="fusion-clearfix"></div></div></div></div></div></div><div class="fusion-fullwidth fullwidth-box fusion-builder-row-7 fusion-flex-container has-pattern-background has-mask-background fusion-parallax-none mac-infoboxes footer-top-feedback vscom-swimlane--dark vscom-remove-bg-mobile nonhundred-percent-fullwidth non-hundred-percent-height-scrolling" style="--awb-background-position:center bottom;--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-padding-top:2rem;--awb-padding-bottom:3rem;--awb-background-color:#212121;--awb-background-image:url(&quot;https://visualstudio.microsoft.com/wp-content/uploads/2022/12/vs-preview-footer-shapes.svg&quot;);--awb-background-size:cover;--awb-flex-wrap:wrap;" ><div class="fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap" style="max-width:calc( 1600px + );margin-left: calc(- / 2 );margin-right: calc(- / 2 );"><div class="fusion-layout-column fusion_builder_column fusion-builder-column-9 fusion_builder_column_1_1 1_1 fusion-flex-column infobox-row" style="--awb-padding-top:2rem;--awb-padding-bottom:2rem;--awb-bg-size:cover;--awb-width-large:100%;--awb-margin-top-large:15px;--awb-margin-bottom-large:15px;--awb-width-medium:100%;--awb-order-medium:0;--awb-width-small:100%;--awb-order-small:0;"><div class="fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column"><div class="fusion-title title fusion-title-2 fusion-sep-none fusion-title-center fusion-title-text fusion-title-size-three" style="--awb-text-color:#ffffff;"><h3 class="fusion-title-heading title-heading-center fusion-responsive-typography-calculated" style="margin:0;--fontSize:;line-height:;">Your feedback makes our products better</h3></div><div class="fusion-text fusion-text-4" style="--awb-content-alignment:center;--awb-text-color:#ffffff;"><p>As you evaluate Visual Studio 2022 Preview, you can interact directly with Microsoft engineers in our Developer Community. Your bug reports, feature suggestions, upvotes, and comments all help us build the best IDE that we possibly can.</p> <div class="vscom-link-wrapper"><a class="vscom-arrow-link " href="https://developercommunity.visualstudio.com/search?space=8" target="_self" rel="noopener"><br /> <span class="vscom-link-text">Join the conversation </span> <i class="vscom-icon vscom-icon--arrow-right"></i><br /> </a></div> </div></div></div></div></div> </div> </div> </div> </div> <!-- fusion-row --> </main> <!-- #main --> <script>window.performance && performance.mark && performance.mark("MainAreaEnd")</script> </div> <!-- wrapper --> <div id="social-experiment-footer" class="vscom-social-media vscom-social-media--dividers"> <div class="vscom-social-media-inner"> <div class="vscom-social-media-column flex-start"> <span class="vscom-social-media-text">Follow us</span> <a data-bi-id="footer-follow-social-media" data-bi-name="twitter-x" href="https://twitter.com/visualstudio" target="_blank" rel="nofollow noopener"><img src="https://visualstudio.microsoft.com/wp-content/uploads/2024/01/X-logo.svg" alt="Visual Studio on Twitter" /></a> <a data-bi-id="footer-follow-social-media" data-bi-name="facebook" href="https://www.facebook.com/visualstudio/" target="_blank" rel="nofollow noopener"><img src="https://visualstudio.microsoft.com/wp-content/uploads/2024/01/Facebook.svg" alt="Visual Studio on Facebook" /></a> <a data-bi-id="footer-follow-social-media" data-bi-name="linkedin" href="https://www.linkedin.com/showcase/microsoft-visual-studio" target="_blank" rel="nofollow noopener"><img src="https://visualstudio.microsoft.com/wp-content/uploads/2024/01/Linkedin.svg" alt="Visual Studio on Linkedin" /></a> <a data-bi-id="footer-follow-social-media" data-bi-name="youtube" href="https://www.youtube.com/user/VisualStudio/featured" target="_blank" rel="nofollow noopener"><img src="https://visualstudio.microsoft.com/wp-content/uploads/2024/01/Youtube.svg" alt="Visual Studio on Youtube" /></a> <a data-bi-id="footer-follow-social-media" data-bi-name="tiktok" href="https://www.tiktok.com/@visualstudio" target="_blank" rel="nofollow noopener"><img src="https://visualstudio.microsoft.com/wp-content/uploads/2024/10/Tiktok.svg" alt="Visual Studio on TikTok" /></a> <a data-bi-id="footer-follow-social-media" data-bi-name="bluesky" href="https://bsky.app/profile/visualstudio.com" target="_blank" rel="nofollow noopener"><img src="https://visualstudio.microsoft.com/wp-content/uploads/2025/03/footer-social-bluesky.svg" alt="Visual Studio on Bluesky" /></a> </div> <div class="vscom-social-media-column flex-end vscom-social-media-column--col-sm"> <a data-bi-id="footer-follow-sites" href="https://visualstudio.microsoft.com/dev-essentials/">Dev Essentials</a> <span class="vscom-media-link-divider"></span> <a data-bi-id="footer-follow-sites" href="https://developercommunity.microsoft.com/VisualStudio" target="_blank" rel="nofollow noopener">Developer Community</a> <span class="vscom-media-link-divider"></span> </div> <div class="vscom-social-media-column flex-end"> <span class="vscom-social-media-text">Blogs:</span> <a data-bi-id="footer-follow-blogs" href="https://devblogs.microsoft.com/visualstudio" target="_blank" rel="nofollow noopener">Visual Studio</a> <a data-bi-id="footer-follow-blogs" href="https://devblogs.microsoft.com/dotnet" target="_blank" rel="nofollow noopener">.NET</a> <a data-bi-id="footer-follow-blogs" href="https://devblogs.microsoft.com/cppblog" target="_blank" rel="nofollow noopener">C++</a> </div> </div> </div> <a class="fusion-one-page-text-link fusion-page-load-link"></a> <!-- W3TC-include-js-head --> <!-- Fix for Multi Language picker options loading on 404 page --> <script>var domReadyScripts =[{"handle":"vscom","src":"https:\/\/visualstudio.microsoft.com\/wp-content\/plugins\/vscom-core\/assets\/js\/vscom.min.js","ver":1694020635,"deps":["classlist-polyfill"]},{"handle":"classlist-polyfill","src":"https:\/\/visualstudio.microsoft.com\/wp-content\/themes\/Avada-Child-Theme\/assets\/js\/classList.min.js","ver":1667498206},{"handle":"vscom-video-player-js","src":"https:\/\/visualstudio.microsoft.com\/wp-content\/plugins\/vscom-fusion-extension\/js\/vscom-video-player.min.js","ver":1667498195,"deps":["object-fit-polyfill-js"]},{"handle":"object-fit-polyfill-js","src":"https:\/\/visualstudio.microsoft.com\/wp-content\/plugins\/vscom-fusion-extension\/js\/ofi.min.js","ver":1667498194},{"handle":"media-element-js","src":"https:\/\/visualstudio.microsoft.com\/wp-content\/plugins\/vscom-fusion-extension\/js\/video-player\/mediaelement.min.js","ver":1667498194}];</script><script id="vscom-dom-ready-inline" type="text/javascript">var VSCOM_Language = {"dropdown":"<select id=\"js-lang-picker\" class=\"vs-language-picker\" aria-label=\"Select Language\"><option value=\"https:\/\/visualstudio.microsoft.com\/vs\/preview\/\" selected=\"selected\">English<\/option><option value=\"https:\/\/visualstudio.microsoft.com\/zh-hans\/vs\/preview\/\" data-lang-code=\"zh-hans\">\u7b80\u4f53\u4e2d\u6587 (Chinese, Simplified)<\/option><option value=\"https:\/\/visualstudio.microsoft.com\/zh-hant\/vs\/preview\/\" data-lang-code=\"zh-hant\">\u7e41\u9ad4\u4e2d\u6587 (Chinese, Traditional)<\/option><option value=\"https:\/\/visualstudio.microsoft.com\/fr\/vs\/preview\/\" data-lang-code=\"fr\">Fran\u00e7ais<\/option><option value=\"https:\/\/visualstudio.microsoft.com\/de\/vs\/preview\/\" data-lang-code=\"de\">Deutsch<\/option><option value=\"https:\/\/visualstudio.microsoft.com\/it\/vs\/preview\/\" data-lang-code=\"it\">Italiano<\/option><option value=\"https:\/\/visualstudio.microsoft.com\/ja\/vs\/preview\/\" data-lang-code=\"ja\">\u65e5\u672c\u8a9e (Japanese)<\/option><option value=\"https:\/\/visualstudio.microsoft.com\/ru\/vs\/preview\/\" data-lang-code=\"ru\">\u0420\u0443\u0441\u0441\u043a\u0438\u0439 (Russian)<\/option><option value=\"https:\/\/visualstudio.microsoft.com\/es\/vs\/preview\/\" data-lang-code=\"es\">Espa\u00f1ol<\/option><option value=\"https:\/\/visualstudio.microsoft.com\/cs\/vs\/preview\/\" data-lang-code=\"cs\">\u010ce\u0161tina<\/option><option value=\"https:\/\/visualstudio.microsoft.com\/ko\/vs\/preview\/\" data-lang-code=\"ko\">\ud55c\uad6d\uc5b4 (Korean)<\/option><option value=\"https:\/\/visualstudio.microsoft.com\/pl\/vs\/preview\/\" data-lang-code=\"pl\">polski<\/option><option value=\"https:\/\/visualstudio.microsoft.com\/pt-br\/vs\/preview\/\" data-lang-code=\"pt-br\">Portugu\u00eas (Brasil)<\/option><option value=\"https:\/\/visualstudio.microsoft.com\/tr\/vs\/preview\/\" data-lang-code=\"tr\">T\u00fcrk\u00e7e<\/option><\/select>"};var microsoftUhfSettings = {"loginUrl":"https:\/\/app.vsaex.visualstudio.com\/go\/profile?wt.mc_id=o~msft~vscom~vssignin","logoutUrl":"https:\/\/app.vssps.visualstudio.com\/_signout?mkt=en-us&_ga=1.265116815.1812220160.1467138837","profileEndpoint":"https:\/\/app.vssps.visualstudio.com\/_apis\/profile\/profiles\/me","clientId":"d03813425c8362d0","label_profile":"Visual Studio profile","connectionDataEndpoint":"https:\/\/app.vssps.visualstudio.com\/_apis\/connectionData","ga":{"vsid_dimension":"dimension12"}};</script><script type="text/javascript" id="ajax-filter-js-extra"> /* <![CDATA[ */ var ajaxFilter = {"ajax_url":"https:\/\/visualstudio.microsoft.com\/wp-admin\/admin-ajax.php"}; /* ]]> */ </script> <script type="text/javascript" src="https://visualstudio.microsoft.com/wp-content/plugins/vscom-whatsnew/js/ajax-filter.js" id="ajax-filter-js"></script> <script type="text/javascript" src="https://visualstudio.microsoft.com/wp-content/plugins/vscom-dom-ready-js/js/vscomDomReady.min.js?ver=1667498194" id="vscom-dom-ready-js-js"></script> <script type="text/javascript" src="https://visualstudio.microsoft.com/wp-content/themes/Avada-Child-Theme/assets/js/common.min.js?1742319959" id="vscom-common-script-js"></script> <script type="text/javascript" src="https://visualstudio.microsoft.com/wp-content/plugins/vscom-fusion-extension/js/dropdown-menu.min.js?ver=6.7.2" id="vscom-dropdown-js-js"></script> <script type="text/javascript" src="https://visualstudio.microsoft.com/wp-content/uploads/fusion-scripts/52d4fdc56afe2178180893e2e53c6eac.min.js?ver=3.11.14" id="fusion-scripts-js"></script> <script>var sliderBackgrounds = [];</script><script src="https://wcpstatic.microsoft.com/mscc/lib/v2/wcp-consent.js"></script><script src="https://www.microsoft.com/onerfstatics/marketingsites-wcus-prod/shell/_scrf/js/themes=default/54-af9f9f/d4-fb1f57/e1-a50eee/e7-954872/d8-97d509/f0-251fe2/46-be1318/77-04a268/11-240c7b/63-077520/a4-34de62/77-380647/db-bc0148/dc-7e9864/6d-c07ea1/6f-dafe8c/f6-aa5278/b5-71fe28/6d-1e7ed0/b7-cadaa7/c4-898cf2/ca-40b7b0/4e-ee3a55/3e-f5c39b/c3-6454d7/f9-7592d3/d0-e64f3e/92-10345d/79-499886/7e-cda2d3/58-ab4971/57-c14418/38-b93a9e/de-884374/1f-100dea/33-abe4df/2b-8e0ae6?ver=2.0&_cf=02242021_3231&iife=1"></script><script src="https://mem.gfx.ms/meversion?partner=VisualStudio&market=en-us&uhf=1" defer></script> <!--[if lte IE 8]> <script type="text/javascript" src="https://visualstudio.microsoft.com/wp-content/themes/Avada/assets/js/respond.js"></script> <![endif]--> <div id="footerArea" class="uhf" data-m='{"cN":"footerArea","cT":"Area_coreuiArea","id":"a2Body","sN":2,"aN":"Body"}'> <div id="footerRegion" data-region-key="footerregion" data-m='{"cN":"footerRegion","cT":"Region_coreui-region","id":"r1a2","sN":1,"aN":"a2"}' > <div id="footerUniversalFooter" data-m='{"cN":"footerUniversalFooter","cT":"Module_coreui-universalfooter","id":"m1r1a2","sN":1,"aN":"r1a2"}' data-module-id="Category|footerRegion|coreui-region|footerUniversalFooter|coreui-universalfooter"> <footer id="uhf-footer" class="c-uhff context-uhf" data-uhf-mscc-rq="false" data-footer-footprint="/VisualStudio/VisualStudioFooterMsft, fromService: True" data-m='{"cN":"Uhf footer_cont","cT":"Container","id":"c1m1r1a2","sN":1,"aN":"m1r1a2"}'> <nav class="c-uhff-nav" aria-label="Footer Resource links" data-m='{"cN":"Footer nav_cont","cT":"Container","id":"c1c1m1r1a2","sN":1,"aN":"c1m1r1a2"}'> <div class="c-uhff-nav-row"> <div class="c-uhff-nav-group" data-m='{"cN":"footerNavColumn1_cont","cT":"Container","id":"c1c1c1m1r1a2","sN":1,"aN":"c1c1m1r1a2"}'> <div class="c-heading-4" role="heading" aria-level="2">What&#39;s new</div> <ul class="c-list f-bare"> <li> <a aria-label="Surface Pro What&#39;s new" class="c-uhff-link" href="https://www.microsoft.com/en-us/surface/devices/surface-pro-11th-edition" data-m='{"cN":"Footer_WhatsNew_NewSurfacePro_nav","id":"n1c1c1c1m1r1a2","sN":1,"aN":"c1c1c1m1r1a2"}'>Surface Pro</a> </li> <li> <a aria-label="Surface Laptop What&#39;s new" class="c-uhff-link" href="https://www.microsoft.com/en-us/surface/devices/surface-laptop-7th-edition" data-m='{"cN":"Footer_WhatsNew_SurfaceLaptop_nav","id":"n2c1c1c1m1r1a2","sN":2,"aN":"c1c1c1m1r1a2"}'>Surface Laptop</a> </li> <li> <a aria-label="Surface Laptop Studio 2 What&#39;s new" class="c-uhff-link" href="https://www.microsoft.com/en-us/d/Surface-Laptop-Studio-2/8rqr54krf1dz" data-m='{"cN":"Footer_WhatsNew_SurfaceLaptopStudio2_nav","id":"n3c1c1c1m1r1a2","sN":3,"aN":"c1c1c1m1r1a2"}'>Surface Laptop Studio 2</a> </li> <li> <a aria-label="Surface Laptop Go 3 What&#39;s new" class="c-uhff-link" href="https://www.microsoft.com/en-us/d/Surface-Laptop-Go-3/8p0wwgj6c6l2" data-m='{"cN":"Footer_WhatsNew_SurfaceLaptopGo3_nav","id":"n4c1c1c1m1r1a2","sN":4,"aN":"c1c1c1m1r1a2"}'>Surface Laptop Go 3</a> </li> <li> <a aria-label="Microsoft Copilot What&#39;s new" class="c-uhff-link" href="https://www.microsoft.com/en-us/microsoft-copilot" data-m='{"cN":"Footer_WhatsNew_CopilotMicrosoft_nav","id":"n5c1c1c1m1r1a2","sN":5,"aN":"c1c1c1m1r1a2"}'>Microsoft Copilot</a> </li> <li> <a aria-label="AI in Windows What&#39;s new" class="c-uhff-link" href="https://www.microsoft.com/en-us/windows/copilot-ai-features" data-m='{"cN":"Whatsnew_AIinWindows_nav","id":"n6c1c1c1m1r1a2","sN":6,"aN":"c1c1c1m1r1a2"}'>AI in Windows</a> </li> <li> <a aria-label="Explore Microsoft products What&#39;s new" class="c-uhff-link" href="https://www.microsoft.com/en-us/microsoft-products-and-apps" data-m='{"cN":"Footer_WhatsNew_ExploreMicrosoftProducts_nav","id":"n7c1c1c1m1r1a2","sN":7,"aN":"c1c1c1m1r1a2"}'>Explore Microsoft products</a> </li> <li> <a aria-label="Windows 11 apps What&#39;s new" class="c-uhff-link" href="https://www.microsoft.com/windows/windows-11-apps" data-m='{"cN":"Footer_WhatsNew_Windows_11_apps_nav","id":"n8c1c1c1m1r1a2","sN":8,"aN":"c1c1c1m1r1a2"}'>Windows 11 apps</a> </li> </ul> </div> <div class="c-uhff-nav-group" data-m='{"cN":"footerNavColumn2_cont","cT":"Container","id":"c2c1c1m1r1a2","sN":2,"aN":"c1c1m1r1a2"}'> <div class="c-heading-4" role="heading" aria-level="2">Microsoft Store</div> <ul class="c-list f-bare"> <li> <a aria-label="Account profile Microsoft Store" class="c-uhff-link" href="https://account.microsoft.com/" data-m='{"cN":"Footer_StoreandSupport_AccountProfile_nav","id":"n1c2c1c1m1r1a2","sN":1,"aN":"c2c1c1m1r1a2"}'>Account profile</a> </li> <li> <a aria-label="Download Center Microsoft Store" class="c-uhff-link" href="https://www.microsoft.com/en-us/download" data-m='{"cN":"Footer_StoreandSupport_DownloadCenter_nav","id":"n2c2c1c1m1r1a2","sN":2,"aN":"c2c1c1m1r1a2"}'>Download Center</a> </li> <li> <a aria-label="Microsoft Store support Microsoft Store" class="c-uhff-link" href="https://go.microsoft.com/fwlink/?linkid=2139749" data-m='{"cN":"Footer_StoreandSupport_SalesAndSupport_nav","id":"n3c2c1c1m1r1a2","sN":3,"aN":"c2c1c1m1r1a2"}'>Microsoft Store support</a> </li> <li> <a aria-label="Returns Microsoft Store" class="c-uhff-link" href="https://www.microsoft.com/en-us/store/b/returns" data-m='{"cN":"Footer_StoreandSupport_Returns_nav","id":"n4c2c1c1m1r1a2","sN":4,"aN":"c2c1c1m1r1a2"}'>Returns</a> </li> <li> <a aria-label="Order tracking Microsoft Store" class="c-uhff-link" href="https://www.microsoft.com/en-us/store/b/order-tracking" data-m='{"cN":"Footer_StoreandSupport_OrderTracking_nav","id":"n5c2c1c1m1r1a2","sN":5,"aN":"c2c1c1m1r1a2"}'>Order tracking</a> </li> <li> <a aria-label="Certified Refurbished Microsoft Store" class="c-uhff-link" href="https://www.microsoft.com/en-us/store/b/certified-refurbished-products" data-m='{"cN":"Footer_StoreandSupport_StoreLocations_nav","id":"n6c2c1c1m1r1a2","sN":6,"aN":"c2c1c1m1r1a2"}'>Certified Refurbished</a> </li> <li> <a aria-label="Microsoft Store Promise Microsoft Store" class="c-uhff-link" href="https://www.microsoft.com/en-us/store/b/why-microsoft-store?icid=footer_why-msft-store_7102020" data-m='{"cN":"Footer_StoreandSupport_MicrosoftPromise_nav","id":"n7c2c1c1m1r1a2","sN":7,"aN":"c2c1c1m1r1a2"}'>Microsoft Store Promise</a> </li> <li> <a aria-label="Flexible Payments Microsoft Store" class="c-uhff-link" href="https://www.microsoft.com/en-us/store/b/payment-financing-options?icid=footer_financing_vcc" data-m='{"cN":"Footer_StoreandSupport_Financing_nav","id":"n8c2c1c1m1r1a2","sN":8,"aN":"c2c1c1m1r1a2"}'>Flexible Payments</a> </li> </ul> </div> <div class="c-uhff-nav-group" data-m='{"cN":"footerNavColumn3_cont","cT":"Container","id":"c3c1c1m1r1a2","sN":3,"aN":"c1c1m1r1a2"}'> <div class="c-heading-4" role="heading" aria-level="2">Education</div> <ul class="c-list f-bare"> <li> <a aria-label="Microsoft in education Education" class="c-uhff-link" href="https://www.microsoft.com/en-us/education" data-m='{"cN":"Footer_Education_MicrosoftInEducation_nav","id":"n1c3c1c1m1r1a2","sN":1,"aN":"c3c1c1m1r1a2"}'>Microsoft in education</a> </li> <li> <a aria-label="Devices for education Education" class="c-uhff-link" href="https://www.microsoft.com/en-us/education/devices/overview" data-m='{"cN":"Footer_Education_DevicesforEducation_nav","id":"n2c3c1c1m1r1a2","sN":2,"aN":"c3c1c1m1r1a2"}'>Devices for education</a> </li> <li> <a aria-label="Microsoft Teams for Education Education" class="c-uhff-link" href="https://www.microsoft.com/en-us/education/products/teams" data-m='{"cN":"Footer_Education_MicrosoftTeamsforEducation_nav","id":"n3c3c1c1m1r1a2","sN":3,"aN":"c3c1c1m1r1a2"}'>Microsoft Teams for Education</a> </li> <li> <a aria-label="Microsoft 365 Education Education" class="c-uhff-link" href="https://www.microsoft.com/en-us/education/products/microsoft-365" data-m='{"cN":"Footer_Education_Microsoft365Education_nav","id":"n4c3c1c1m1r1a2","sN":4,"aN":"c3c1c1m1r1a2"}'>Microsoft 365 Education</a> </li> <li> <a aria-label="How to buy for your school Education" class="c-uhff-link" href="https://www.microsoft.com/education/how-to-buy" data-m='{"cN":"Footer_Howtobuyforyourschool_nav","id":"n5c3c1c1m1r1a2","sN":5,"aN":"c3c1c1m1r1a2"}'>How to buy for your school</a> </li> <li> <a aria-label="Educator training and development Education" class="c-uhff-link" href="https://education.microsoft.com/" data-m='{"cN":"Footer_Education_EducatorTrainingDevelopment_nav","id":"n6c3c1c1m1r1a2","sN":6,"aN":"c3c1c1m1r1a2"}'>Educator training and development</a> </li> <li> <a aria-label="Deals for students and parents Education" class="c-uhff-link" href="https://www.microsoft.com/en-us/store/b/education" data-m='{"cN":"Footer_Education_DealsForStudentsandParents_nav","id":"n7c3c1c1m1r1a2","sN":7,"aN":"c3c1c1m1r1a2"}'>Deals for students and parents</a> </li> <li> <a aria-label="Azure for students Education" class="c-uhff-link" href="https://azure.microsoft.com/en-us/free/students/" data-m='{"cN":"Footer_Education_Azureforstudents_nav","id":"n8c3c1c1m1r1a2","sN":8,"aN":"c3c1c1m1r1a2"}'>Azure for students</a> </li> </ul> </div> </div> <div class="c-uhff-nav-row"> <div class="c-uhff-nav-group" data-m='{"cN":"footerNavColumn4_cont","cT":"Container","id":"c4c1c1m1r1a2","sN":4,"aN":"c1c1m1r1a2"}'> <div class="c-heading-4" role="heading" aria-level="2">Business</div> <ul class="c-list f-bare"> <li> <a aria-label="Microsoft Cloud Business" class="c-uhff-link" href="https://www.microsoft.com/en-us/microsoft-cloud" data-m='{"cN":"Footer_Business_Microsoft_Cloud_nav","id":"n1c4c1c1m1r1a2","sN":1,"aN":"c4c1c1m1r1a2"}'>Microsoft Cloud</a> </li> <li> <a aria-label="Microsoft Security Business" class="c-uhff-link" href="https://www.microsoft.com/en-us/security" data-m='{"cN":"Footer_Business_Microsoft Security_nav","id":"n2c4c1c1m1r1a2","sN":2,"aN":"c4c1c1m1r1a2"}'>Microsoft Security</a> </li> <li> <a aria-label="Dynamics 365 Business" class="c-uhff-link" href="https://www.microsoft.com/en-us/dynamics-365" data-m='{"cN":"Footer_Business_MicrosoftDynamics365_nav","id":"n3c4c1c1m1r1a2","sN":3,"aN":"c4c1c1m1r1a2"}'>Dynamics 365</a> </li> <li> <a aria-label="Microsoft 365 Business" class="c-uhff-link" href="https://www.microsoft.com/en-us/microsoft-365/business" data-m='{"cN":"Footer_Business_M365_nav","id":"n4c4c1c1m1r1a2","sN":4,"aN":"c4c1c1m1r1a2"}'>Microsoft 365</a> </li> <li> <a aria-label="Microsoft Power Platform Business" class="c-uhff-link" href="https://www.microsoft.com/en-us/power-platform" data-m='{"cN":"Footer_DeveloperAndIT_Power Platform_nav","id":"n5c4c1c1m1r1a2","sN":5,"aN":"c4c1c1m1r1a2"}'>Microsoft Power Platform</a> </li> <li> <a aria-label="Microsoft Teams Business" class="c-uhff-link" href="https://www.microsoft.com/en-us/microsoft-teams/group-chat-software" data-m='{"cN":"Footer_Business_Microsoft365_nav","id":"n6c4c1c1m1r1a2","sN":6,"aN":"c4c1c1m1r1a2"}'>Microsoft Teams</a> </li> <li> <a aria-label="Microsoft 365 Copilot Business" class="c-uhff-link" href="https://www.microsoft.com/en-us/microsoft-365/copilot/copilot-for-work" data-m='{"cN":"Footer_CopilotMicrosoft365_nav","id":"n7c4c1c1m1r1a2","sN":7,"aN":"c4c1c1m1r1a2"}'>Microsoft 365 Copilot</a> </li> <li> <a aria-label="Small Business Business" class="c-uhff-link" href="https://www.microsoft.com/en-us/store/b/business?icid=CNavBusinessStore" data-m='{"cN":"Footer_Business-SmallBusiness_nav","id":"n8c4c1c1m1r1a2","sN":8,"aN":"c4c1c1m1r1a2"}'>Small Business</a> </li> </ul> </div> <div class="c-uhff-nav-group" data-m='{"cN":"footerNavColumn5_cont","cT":"Container","id":"c5c1c1m1r1a2","sN":5,"aN":"c1c1m1r1a2"}'> <div class="c-heading-4" role="heading" aria-level="2">Developer &amp; IT</div> <ul class="c-list f-bare"> <li> <a aria-label="Azure Developer &amp; IT" class="c-uhff-link" href="https://azure.microsoft.com/en-us/" data-m='{"cN":"Footer_DeveloperAndIT_MicrosoftAzure_nav","id":"n1c5c1c1m1r1a2","sN":1,"aN":"c5c1c1m1r1a2"}'>Azure</a> </li> <li> <a aria-label="Microsoft Developer Developer &amp; IT" class="c-uhff-link" href="https://developer.microsoft.com/en-us/" data-m='{"cN":"Footer_DeveloperAndIT_MicrosoftDeveloper_nav","id":"n2c5c1c1m1r1a2","sN":2,"aN":"c5c1c1m1r1a2"}'>Microsoft Developer</a> </li> <li> <a aria-label="Microsoft Learn Developer &amp; IT" class="c-uhff-link" href="https://learn.microsoft.com/" data-m='{"cN":"Footer_DeveloperAndIT_MicrosoftLearn_nav","id":"n3c5c1c1m1r1a2","sN":3,"aN":"c5c1c1m1r1a2"}'>Microsoft Learn</a> </li> <li> <a aria-label="Explore ISV Success Developer &amp; IT" class="c-uhff-link" href="https://www.microsoft.com/isv/isv-success?ocid=cmm3atxvn98" data-m='{"cN":"Footer_DeveloperAndIT_ExploreISVSuccess_nav","id":"n4c5c1c1m1r1a2","sN":4,"aN":"c5c1c1m1r1a2"}'>Explore ISV Success</a> </li> <li> <a aria-label="Microsoft Tech Community Developer &amp; IT" class="c-uhff-link" href="https://techcommunity.microsoft.com/" data-m='{"cN":"Footer_DeveloperAndIT_MicrosoftTechCommunity_nav","id":"n5c5c1c1m1r1a2","sN":5,"aN":"c5c1c1m1r1a2"}'>Microsoft Tech Community</a> </li> <li> <a aria-label="Azure Marketplace Developer &amp; IT" class="c-uhff-link" href="https://azuremarketplace.microsoft.com/en-us/" data-m='{"cN":"Footer_DeveloperAndIT_AzureMarketplace_nav","id":"n6c5c1c1m1r1a2","sN":6,"aN":"c5c1c1m1r1a2"}'>Azure Marketplace</a> </li> <li> <a aria-label="AppSource Developer &amp; IT" class="c-uhff-link" href="https://appsource.microsoft.com/en-us/" data-m='{"cN":"Footer_DeveloperAndIT_AppSource_nav","id":"n7c5c1c1m1r1a2","sN":7,"aN":"c5c1c1m1r1a2"}'>AppSource</a> </li> <li> <a aria-label="Visual Studio Developer &amp; IT" class="c-uhff-link" href="https://visualstudio.microsoft.com/" data-m='{"cN":"Footer_DeveloperAndIT_MicrosoftVisualStudio_nav","id":"n8c5c1c1m1r1a2","sN":8,"aN":"c5c1c1m1r1a2"}'>Visual Studio</a> </li> </ul> </div> <div class="c-uhff-nav-group" data-m='{"cN":"footerNavColumn6_cont","cT":"Container","id":"c6c1c1m1r1a2","sN":6,"aN":"c1c1m1r1a2"}'> <div class="c-heading-4" role="heading" aria-level="2">Company</div> <ul class="c-list f-bare"> <li> <a aria-label="Careers Company" class="c-uhff-link" href="https://careers.microsoft.com/" data-m='{"cN":"Footer_Company_Careers_nav","id":"n1c6c1c1m1r1a2","sN":1,"aN":"c6c1c1m1r1a2"}'>Careers</a> </li> <li> <a aria-label="About Microsoft Company" class="c-uhff-link" href="https://www.microsoft.com/about" data-m='{"cN":"Footer_Company_AboutMicrosoft_nav","id":"n2c6c1c1m1r1a2","sN":2,"aN":"c6c1c1m1r1a2"}'>About Microsoft</a> </li> <li> <a aria-label="Company news Company" class="c-uhff-link" href="https://news.microsoft.com/" data-m='{"cN":"Footer_Company_CompanyNews_nav","id":"n3c6c1c1m1r1a2","sN":3,"aN":"c6c1c1m1r1a2"}'>Company news</a> </li> <li> <a aria-label="Privacy at Microsoft Company" class="c-uhff-link" href="https://privacy.microsoft.com/en-us" data-m='{"cN":"Footer_Company_PrivacyAtMicrosoft_nav","id":"n4c6c1c1m1r1a2","sN":4,"aN":"c6c1c1m1r1a2"}'>Privacy at Microsoft</a> </li> <li> <a aria-label="Investors Company" class="c-uhff-link" href="https://www.microsoft.com/investor/default.aspx" data-m='{"cN":"Footer_Company_Investors_nav","id":"n5c6c1c1m1r1a2","sN":5,"aN":"c6c1c1m1r1a2"}'>Investors</a> </li> <li> <a aria-label="Diversity and inclusion Company" class="c-uhff-link" href="https://www.microsoft.com/en-us/diversity/" data-m='{"cN":"Footer_Company_DiversityAndInclusion_nav","id":"n6c6c1c1m1r1a2","sN":6,"aN":"c6c1c1m1r1a2"}'>Diversity and inclusion</a> </li> <li> <a aria-label="Accessibility Company" class="c-uhff-link" href="https://www.microsoft.com/en-us/accessibility" data-m='{"cN":"Footer_Company_Accessibility_nav","id":"n7c6c1c1m1r1a2","sN":7,"aN":"c6c1c1m1r1a2"}'>Accessibility</a> </li> <li> <a aria-label="Sustainability Company" class="c-uhff-link" href="https://www.microsoft.com/en-us/sustainability/" data-m='{"cN":"Footer_Company_Sustainability_nav","id":"n8c6c1c1m1r1a2","sN":8,"aN":"c6c1c1m1r1a2"}'>Sustainability</a> </li> </ul> </div> </div> </nav> <div class="c-uhff-base"> <a id="locale-picker-link" aria-label="Content Language Selector. Currently set to English (United States)" class="c-uhff-link c-uhff-lang-selector c-glyph glyph-world" href="#" data-m='{"cN":"locale_picker(US)_nav","id":"n7c1c1m1r1a2","sN":7,"aN":"c1c1m1r1a2"}'>English (United States)</a> <a data-m='{"id":"n8c1c1m1r1a2","sN":8,"aN":"c1c1m1r1a2"}' href="https://aka.ms/yourcaliforniaprivacychoices" class='c-uhff-link c-uhff-ccpa'> <svg role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 30 14" xml:space="preserve" height="16" width="43"> <title>Your Privacy Choices Opt-Out Icon</title> <path d="M7.4 12.8h6.8l3.1-11.6H7.4C4.2 1.2 1.6 3.8 1.6 7s2.6 5.8 5.8 5.8z" style="fill-rule:evenodd;clip-rule:evenodd;fill:#fff"/> <path d="M22.6 0H7.4c-3.9 0-7 3.1-7 7s3.1 7 7 7h15.2c3.9 0 7-3.1 7-7s-3.2-7-7-7zm-21 7c0-3.2 2.6-5.8 5.8-5.8h9.9l-3.1 11.6H7.4c-3.2 0-5.8-2.6-5.8-5.8z" style="fill-rule:evenodd;clip-rule:evenodd;fill:#06f"/> <path d="M24.6 4c.2.2.2.6 0 .8L22.5 7l2.2 2.2c.2.2.2.6 0 .8-.2.2-.6.2-.8 0l-2.2-2.2-2.2 2.2c-.2.2-.6.2-.8 0-.2-.2-.2-.6 0-.8L20.8 7l-2.2-2.2c-.2-.2-.2-.6 0-.8.2-.2.6-.2.8 0l2.2 2.2L23.8 4c.2-.2.6-.2.8 0z" style="fill:#fff"/> <path d="M12.7 4.1c.2.2.3.6.1.8L8.6 9.8c-.1.1-.2.2-.3.2-.2.1-.5.1-.7-.1L5.4 7.7c-.2-.2-.2-.6 0-.8.2-.2.6-.2.8 0L8 8.6l3.8-4.5c.2-.2.6-.2.9 0z" style="fill:#06f"/> </svg> <span>Your Privacy Choices</span> </a> <noscript> <a data-m='{"id":"n9c1c1m1r1a2","sN":9,"aN":"c1c1m1r1a2"}' href="https://aka.ms/yourcaliforniaprivacychoices" class='c-uhff-link c-uhff-ccpa'> <svg role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 30 14" xml:space="preserve" height="16" width="43"> <title>Your Privacy Choices Opt-Out Icon</title> <path d="M7.4 12.8h6.8l3.1-11.6H7.4C4.2 1.2 1.6 3.8 1.6 7s2.6 5.8 5.8 5.8z" style="fill-rule:evenodd;clip-rule:evenodd;fill:#fff"/> <path d="M22.6 0H7.4c-3.9 0-7 3.1-7 7s3.1 7 7 7h15.2c3.9 0 7-3.1 7-7s-3.2-7-7-7zm-21 7c0-3.2 2.6-5.8 5.8-5.8h9.9l-3.1 11.6H7.4c-3.2 0-5.8-2.6-5.8-5.8z" style="fill-rule:evenodd;clip-rule:evenodd;fill:#06f"/> <path d="M24.6 4c.2.2.2.6 0 .8L22.5 7l2.2 2.2c.2.2.2.6 0 .8-.2.2-.6.2-.8 0l-2.2-2.2-2.2 2.2c-.2.2-.6.2-.8 0-.2-.2-.2-.6 0-.8L20.8 7l-2.2-2.2c-.2-.2-.2-.6 0-.8.2-.2.6-.2.8 0l2.2 2.2L23.8 4c.2-.2.6-.2.8 0z" style="fill:#fff"/> <path d="M12.7 4.1c.2.2.3.6.1.8L8.6 9.8c-.1.1-.2.2-.3.2-.2.1-.5.1-.7-.1L5.4 7.7c-.2-.2-.2-.6 0-.8.2-.2.6-.2.8 0L8 8.6l3.8-4.5c.2-.2.6-.2.9 0z" style="fill:#06f"/> </svg> <span>Your Privacy Choices</span> </a> </noscript> <a data-m='{"id":"n10c1c1m1r1a2","sN":10,"aN":"c1c1m1r1a2"}' href="https://go.microsoft.com/fwlink/?linkid=2259814" class="c-uhff-link c-uhff-consumer"> <span>Consumer Health Privacy</span> </a> <nav aria-label="Microsoft corporate links"> <ul class="c-list f-bare" data-m='{"cN":"Corp links_cont","cT":"Container","id":"c11c1c1m1r1a2","sN":11,"aN":"c1c1m1r1a2"}'> <li id="c-uhff-footer_contactus"> <a class="c-uhff-link" href="https://visualstudio.microsoft.com/support/" data-mscc-ic="false" data-m='{"cN":"Footer_ContactUs_nav","id":"n1c11c1c1m1r1a2","sN":1,"aN":"c11c1c1m1r1a2"}'>Contact us</a> </li> <li id="c-uhff-footer_privacyandcookies"> <a class="c-uhff-link" href="https://go.microsoft.com/fwlink/?LinkId=521839" data-mscc-ic="false" data-m='{"cN":"Footer_PrivacyandCookies_nav","id":"n2c11c1c1m1r1a2","sN":2,"aN":"c11c1c1m1r1a2"}'>Privacy &amp; cookies</a> </li> <li class=" x-hidden" id="c-uhff-footer_managecookies"> <a class="c-uhff-link" href="#" data-mscc-ic="false" data-m='{"cN":"Footer_ManageCookies_nav","id":"n3c11c1c1m1r1a2","sN":3,"aN":"c11c1c1m1r1a2"}'>Manage cookies</a> </li> <li id="c-uhff-footer_termsofuse"> <a class="c-uhff-link" href="https://azure.microsoft.com/en-us/support/legal/" data-mscc-ic="false" data-m='{"cN":"Footer_TermsOfUse_nav","id":"n4c11c1c1m1r1a2","sN":4,"aN":"c11c1c1m1r1a2"}'>Terms of use</a> </li> <li id="c-uhff-footer_trademarks"> <a class="c-uhff-link" href="https://www.microsoft.com/trademarks" data-mscc-ic="false" data-m='{"cN":"Footer_Trademarks_nav","id":"n5c11c1c1m1r1a2","sN":5,"aN":"c11c1c1m1r1a2"}'>Trademarks</a> </li> <li id="c-uhff-footer_aboutourads"> <a class="c-uhff-link" href="https://choice.microsoft.com/" data-mscc-ic="false" data-m='{"cN":"Footer_Aboutourads_nav","id":"n6c11c1c1m1r1a2","sN":6,"aN":"c11c1c1m1r1a2"}'>About our ads</a> </li> <li>&#169; Microsoft 2025</li> </ul> </nav> </div> </footer> <script id="uhf-footer-ccpa"> const globalPrivacyControlEnabled = navigator.globalPrivacyControl; const GPC_DataSharingOptIn = (globalPrivacyControlEnabled) ? false : checkThirdPartyAdsOptOutCookie(); if(window.onGPCLoaded) { window.onGPCLoaded(); } function checkThirdPartyAdsOptOutCookie() { try { const ThirdPartyAdsOptOutCookieName = '3PAdsOptOut'; var cookieValue = getCookie(ThirdPartyAdsOptOutCookieName); return cookieValue != 1; } catch { return true; } } function getCookie(cookieName) { var cookieValue = document.cookie.match('(^|;)\\s*' + cookieName + '\\s*=\\s*([^;]+)'); return (cookieValue) ? cookieValue[2] : ''; } </script> </div> </div> </div> <!-- Usabilla feedback button --> <div id="usabilla-button" class="vscom-usabilla-button"> <a tabindex="0" id="usbl-integrated-button" data-bi-id="Usabilla" href="javascript:" class="vscom-usabilla-link" role="button" onclick="custom_vs_usabilla_call()" onkeypress="if(event.keyCode==32||event.keyCode==13){event.preventDefault();var bt = document.getElementById('usbl-integrated-button');bt.click(event);};"> <p class="vscom-usabilla-text"> Feedback <img class="vscom-usabilla-icon" src="https://visualstudio.microsoft.com/wp-content/themes/Avada-Child-Theme/assets/img/edit-outline.svg" alt="" /> </p> </a> </div> <script type="text/javascript"> function custom_vs_usabilla_call() { window.lightningjs||function(n){var e="lightningjs";function t(e,t){var r,i,a,o,d,c;return t&&(t+=(/\?/.test(t)?"&":"?")+"lv=1"),n[e]||(r=window,i=document,a=e,o=i.location.protocol,d="load",c=0,function(){n[a]=function(){var t=arguments,i=this,o=++c,d=i&&i!=r&&i.id||0;function s(){return s.id=o,n[a].apply(s,arguments)}return(e.s=e.s||[]).push([o,d,t]),s.then=function(n,t,r){var i=e.fh[o]=e.fh[o]||[],a=e.eh[o]=e.eh[o]||[],d=e.ph[o]=e.ph[o]||[];return n&&i.push(n),t&&a.push(t),r&&d.push(r),s},s};var e=n[a]._={};function s(){e.P(d),e.w=1,n[a]("_load")}e.fh={},e.eh={},e.ph={},e.l=t?t.replace(/^\/\//,("https:"==o?o:"http:")+"//"):t,e.p={0:+new Date},e.P=function(n){e.p[n]=new Date-e.p[0]},e.w&&s(),r.addEventListener?r.addEventListener(d,s,!1):r.attachEvent("onload",s);var l=function(){function n(){return["<!DOCTYPE ",o,"><",o,"><head></head><",t,"><",r,' src="',e.l,'"></',r,"></",t,"></",o,">"].join("")}var t="body",r="script",o="html",d=i[t];if(!d)return setTimeout(l,100);e.P(1);var c,s=i.createElement("div"),h=s.appendChild(i.createElement("div")),u=i.createElement("iframe");s.style.display="none",d.insertBefore(s,d.firstChild).id="lightningjs-"+a,u.frameBorder="0",u.id="lightningjs-frame-"+a,/MSIE[ ]+6/.test(navigator.userAgent)&&(u.src="javascript:false"),u.allowTransparency="true",h.appendChild(u);try{u.contentWindow.document.open()}catch(n){e.domain=i.domain,c="javascript:var d=document.open();d.domain='"+i.domain+"';",u.src=c+"void(0);"}try{var p=u.contentWindow.document;p.write(n()),p.close()}catch(e){u.src=c+'d.write("'+n().replace(/"/g,String.fromCharCode(92)+'"')+'");d.close();'}e.P(2)};e.l&&l()}()),n[e].lv="1",n[e]}var r=window.lightningjs=t(e);r.require=t,r.modules=n}({});window.usabilla_live = lightningjs.require("usabilla_live", "//w.usabilla.com/c1a9f67c29cb.js"); window.usabilla_live("hide"); window.usabilla_live("click"); //document.getElementById("usbl-integrated-button").addEventListener("click",function(){ //window.usabilla_live("click"); //}); } </script> <!-- Implementation of the 3PDS (Third-Party Data Sharing) process is followed by embedding the Usabilla Live code --> <script type="text/javascript"> // Check if GPC_DataSharingOptIn is a boolean before setting the property to 1DS if (typeof GPC_DataSharingOptIn === 'boolean') { awa.sku.getPropertyManager().getPropertiesContext().web.gpcDataSharingOptIn = GPC_DataSharingOptIn } </script> <!-- end usabilla live embed code --> <script src="/wp-content/themes/Avada-Child-Theme/assets/js/vscom-usabilla-a11y.js"></script> <script>window.performance && performance.mark && performance.mark("BodyAreaEnd")</script> </body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10