<!DOCTYPE html>
<!--
  DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.

  Copyright 1997-2010 Oracle and/or its affiliates. All rights reserved.

  Oracle and Java are registered trademarks of Oracle and/or its affiliates.
  Other names may be trademarks of their respective owners.

  The contents of this file are subject to the terms of either the GNU General Public
  License Version 2 only ("GPL") or the Common Development and Distribution
  License("CDDL") (collectively, the "License"). You may not use this file except in
  compliance with the License. You can obtain a copy of the License at
  https://netbeans.org/cddl-gplv2.html or nbbuild/licenses/CDDL-GPL-2-CP. See the
  License for the specific language governing permissions and limitations under the
  License.  When distributing the software, include this License Header Notice in
  each file and include the License file at nbbuild/licenses/CDDL-GPL-2-CP.  Oracle
  designates this particular file as subject to the "Classpath" exception as provided
  by Oracle in the GPL Version 2 section of the License file that accompanied this code.
  If applicable, add the following below the License Header, with the fields enclosed
  by brackets [] replaced by your own identifying information:
  "Portions Copyrighted [year] [name of copyright owner]"
  
  Contributor(s):
  
  The Original Software is NetBeans. The Initial Developer of the Original Software
  is Sun Microsystems, Inc. Portions Copyright 1997-2007 Sun Microsystems, Inc. All
  Rights Reserved.
  
  If you wish your version of this file to be governed by only the CDDL or only the
  GPL Version 2, indicate your decision by adding "[Contributor] elects to include
  this software in this distribution under the [CDDL or GPL Version 2] license." If
  you do not indicate a single choice of license, a recipient has the option to
  distribute your version of this file under either the CDDL, the GPL Version 2 or
  to extend the choice of license to its licensees as provided above. However, if you
  add GPL Version 2 code and therefore, elected the GPL Version 2 license, then the
  option applies only if the new code is made subject to such option by the copyright
  holder.
-->

<html>
    <head>
        <meta charset="UTF-8"> 
        <meta name="nb-nav-wrap" content="N">

        <!-- Do not change the order of the scripts-->
        <script type="text/javascript">
            var PAGE_ARTIFACTS_LOCATION = "";

            var ADDITIONAL_PAGE_ARTIFACTS_LOCATION = "";

        </script>

        <script type="text/javascript">
            var currentLocation = PAGE_ARTIFACTS_LOCATION;

            function getPageArtifactsLocation(another) {
                return anotherLocation(another) ? (ADDITIONAL_PAGE_ARTIFACTS_LOCATION !="" ? ADDITIONAL_PAGE_ARTIFACTS_LOCATION : get_build_info(true).ADDITIONAL_BUILD_LOCATION) : PAGE_ARTIFACTS_LOCATION;
            }

            function getJSLocation(another) {
                return getPageArtifactsLocation(another) + "js/";
            }
            function getCSSLocation() {
                return getPageArtifactsLocation() + "css/";
            }
            function getImagesLocation() {
                return getPageArtifactsLocation(useAnotherLocation()) + "img/";
            }
            function anotherLocation(another) {
                return another ? (another == "true" || another == true) :  false;
            }

            function load_page_js(script_filename, another) {
                currentLocation = getPageArtifactsLocation(another);
                var page_location = getJSLocation(another) + script_filename;
                document.write('<' + 'script ' + 'language="javascript" type="text/javascript" src="' + page_location + '"><' + '/' + 'script' + '>');
            }
        </script>

        <script src="https://netbeans.org/images_www/js/companion-projects.js" type="text/javascript"></script>
        <script type="text/javascript">load_page_js("common.js")</script>
        <script type="text/javascript">load_build_info(false)</script>
        <script type="text/javascript">load_build_info(true)</script>
        <script type="text/javascript">load_languages(false)</script>
        <script type="text/javascript">load_languages(true)</script>
        <script type="text/javascript">load_page_js_locale("common_strings",".js")</script>
        <script type="text/javascript">load_page_js_locale("download_strings",".js")</script>
        <script type="text/javascript">load_files_information(false)</script>
        <script type="text/javascript">load_files_information(true)</script>
        <script type="text/javascript">load_page_js("download.js")</script>
        <script type="text/javascript">load_page_js_locale("components",".js")</script>
        <script type="text/javascript">set_page_title(NETBEANS_DOWNLOAD_PAGE_TITLE.replace('{0}',get_build_info(true).BUILD_DISPLAY_VERSION))</script>
        <script type="text/javascript">set_page_description(NETBEANS_DOWNLOAD_PAGE_DESCRIPTION.replace('{0}',get_build_info(true).BUILD_DISPLAY_VERSION))</script>

        <link rel="stylesheet" type="text/css" href="https://netbeans.org/netbeans3.css" media="screen"/>
        <script type="text/javascript">load_page_css("download.css")</script>
        <link rel="shortcut icon" href="https://netbeans.org/favicon.ico" type="image/x-icon"/>
    </head>

    <body class="blue-bg" onkeyup="handle_keyup(event)">
        <div id="wrapper-fixed">
            <div id="hdr">               
                <div id="lang-sel">
                    <div class="lang-dropdown" id="pagelanguagesbox" style="visibility: hidden;">
                        <ul id="nav">
                            <li><script type="text/javascript">startList()</script>
                                <a href="#" style="text-decoration:none;color:white;">Choose page language<img src="https://netbeans.org/images_www/v7/design/icon_arrow_language.png" border="0" style="margin-left:3px;"/></a>
                                <ul class="submenu">
                                    <script type="text/javascript">write_page_languages()</script>
                                </ul>
                            </li>
                        </ul>
                    </div>                    
                </div>
                <div id="navtabs">
                    <a href="https://netbeans.org/"><img src="//netbeans.org/images_www/v7/design/logo_netbeans_red.png" id="nblogo" width="130" height="32"/></a>
                    <ul>
                        <li class="current first"><a href="https://netbeans.org/features/index.html" title="NetBeans&nbsp;IDE"  >NetBeans IDE</a></li>
                        <li class="hover "><a href="https://netbeans.org/features/platform/index.html" title="NetBeans&nbsp;Platform"  >NetBeans Platform</a></li>
                        <li class="hover "><a href="http://plugins.netbeans.org/PluginPortal/" title="Plugins"  >Plugins</a></li>
                        <li class="hover "><a href="https://netbeans.org/kb/index.html" title="Docs&nbsp;&amp;&nbsp;Support"  >Docs &amp; Support</a></li>
                        <li class="hover "><a href="https://netbeans.org/community/index.html" title="Community"  >Community</a></li>
                        <li class="hover "><a href="https://netbeans.org/community/partners/index.html" title="Partners"  >Partners</a></li>
                    </ul> 
                    <div id="search-div">                        
                        <form action="https://netbeans.org/search_result.html" id="cse-search-box">
                            <input type="hidden" name="cx" value="006102455337629464213:mt38ytkbuak" >
                            <input type="hidden" name="cof" value="FORID:11" >
                            <input type="text" id="search-input" value="Search" name="q"/>
                            <input type="image" src="//netbeans.org/images_www/v7/design/icon_search.png" id="magnifier" alt="search"/>
                        </form>
                        <script type="text/javascript" src="//www.google.com/coop/cse/brand?form=cse-search-box&lang=en"></script>
                        <!-- Google CSE Search Box Ends -->
                    </div>
                </div>
            </div>
            <div id="navig-breadcrumbs"><a href="https://netbeans.org/index.html">HOME</a>  / Download </div>
            <!-- start content area -->
            <div id="middle">
                <table class="colapse full-width f-page-table-2col"> <!-- main content table -->
                    <tr>
                        <td class="valign-top">

                            <!-- =============================================== -->


                            <!-- Top header -->
                            <table class="top_header">
                                <tr>
                                    <td class="title"><script type="text/javascript">message(NETBEANS_DOWNLOAD_HEADER.replace('{0}',get_build_info(true).BUILD_DISPLAY_VERSION))</script></td>
                                    <td class="menu">
                                        <script type="text/javascript">get_build_info(true).add_download_tabs()</script>
                                    </td>
                                </tr>
                            </table>

                            <noscript>
                            <div class="noscript_warning">
                                In order to download NetBeans installers, Javascript must be switched on in your 
                                browser.<br> Please switch it on before proceeding.
                            </div>
                            <style type="text/css">
                                table.l_p_select {
                                    display:    none;
                                }
                                table.components_table {
                                    display:    none;
                                }
                            </style>
                            </noscript>
                            <!--<table><td width="60%" style="padding-right:5px;vertical-align:top;">-->
                            <div class="files_list f-page-auto-cell">
                                <style  type="text/css">ul li {margin-bottom:0px;margin-top:0px;}</style>
                                <script type="text/javascript">write_files_list(ZIP_FILES_LIST_NAME, "zip/")</script>
                                <script type="text/javascript">write_files_list(MODULE_CLUSTERS_FILES_LIST_NAME, "zip/moduleclusters/")</script>
                            </div>
                            <!--
                            </td>
                                <td style="vertical-align:top;">
                                    <div class="black legal_box" style="margin-top:10px">
                                        <div class="bold">
                                                            <script type="text/javascript">message(LEGAL_INFO_HEADER)</script>
                                            <br><br>
                                        </div>
                                        <div>
                                                            <script type="text/javascript">
                                                message(LEGAL_INFO_MESSAGE.
                                                replace("{0}",CDDL_GPLV2_LINK).
                                                replace("{1}",LICENSE_3RD_PARTY_LINK))
                                            </script>
                                        </div>
                                                        </div>
                
                                </td>
                            </table>
                            -->
                            <!-- =============================================== -->
                        </td>
                    </tr><!-- end main content -->
                </table><!-- end main content table -->
            </div>
            <!-- end contentarea -->
            <div id="ftr">
                <ul class="float-right" id="social-media">
                    <li><a href="http://www.facebook.com/NetBeans"><img src="//netbeans.org/images_www/v7/design/icin_facebook.png" width="30" height="30" alt="facebook"></a></li>
                    <li><a href="http://www.youtube.com/user/netbeansvideos"><img src="//netbeans.org/images_www/v7/design/icin_youtube.png" width="30" height="30" alt="youtube"></a></li>
                    <li><a href="https://plus.google.com/105597468329838196909/"><img src="//netbeans.org/images_www/v7/design/icin_google.png" width="30" height="30" alt="google+"></a></li>
                    <li><a href="https://twitter.com/netbeans"><img src="//netbeans.org/images_www/v7/design/icin_twitter.png" width="30" height="30" alt="twitter"></a></li>
                </ul>
                <ul>
                    <li><a href="https://netbeans.org/sitemaps/www_map.html">SiteMap</a></li>
                    <li><a href="https://netbeans.org/about/index.html">About Us</a></li>
                    <li><a href="https://netbeans.org/about/contact.html">Contact</a></li>
                    <li><a href="https://netbeans.org/about/legal/index.html">Legal &amp; Licences</a></li>
                </ul> 

            </div>
            <div id="tof" class="align-right">
                By use of this website, you agree to the <a href="/about/legal/terms-of-use.html">NetBeans Policies and Terms of Use</a>.
                &copy; 2012, Oracle Corporation and/or its affiliates. Sponsored by <img src="//netbeans.org/images_www/v7/design/logo_oracle.png" width="56" height="8" alt="Oracle logo"/>
            </div>
        </div>
        <div id="companion-projects">
            <script type="text/javascript">
                document.write(renderCompanionProjectIcons());
            </script>
        </div>
		<!-- Begin SiteCatalyst code -->
        <script language="JavaScript" src="https://netbeans.org/images_www/js/s_code_remote.js" type="text/javascript"></script>
        <!-- End SiteCatalyst code -->
        
    </body>
</html>
