<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<link href="main.css" rel="stylesheet" type="text/css" />
</head>
<body leftmargin="10" topmargin="10">
<font size="2">
<p>Flash Builder contains the Flex 4 SDK, but if you would like to download the SDK separately or for the documentation downloads visit this link:
<a target="_new" href="http://www.adobe.com/products/flex/">Download Flex 4</a>
</p>

<p>

Other useful Flex 4 links out are listed below:
<UL>
<li><a target="_new" href="http://www.adobe.com/devnet/flex/articles/flex4sdk_whatsnew.html/">What's new in Flex 4 article</a>
<li><a target="_new" href="http://www.adobe.com/devnet/flex/testdrive/articles/1_build_a_flex_app.html">Test Drive with Flex - Build an app in an hour</a>
<li><a target="_new" href="http://www.adobe.com/products/flex/">Flex 4 SDK Info</a>
<li><a target="_new" href="http://www.adobe.com/devnet/flex/videotraining/">Flex 4 Tutorials and Videos</a>
<li><a target="_new" href="http://www.adobe.com/devnet/flex/articles/flex3and4_differences.html/">Differences Between Flex 3 and Flex 4
<li><a target="_new" href="http://forums.adobe.com/community/flex/">Flex Community Forums</a>
<li><a target="_new" href="http://flex.org/">Flex.org</a>
<li><a target="_new" href="http://www.firststepsinflex.com/">First Steps in Flex Screencasts</a>
<li><a target="_new" href="http://www.lynda.com/home/DisplayCourse.aspx?lpk2=52343">Flex 4 SDK and Flash Builder Video Training on Lynda.com</a>
<li><a target="_new" href="http://flex.org/resources">Tons of resource links</a>
<li><a target="_new" href="http://blogs.adobe.com/flex/">The official Flex Team Blog</a>
<li><a target="_new" href="http://blog.flexexamples.com/">Adobe - Peter DeHaan's Flex Examples Blog</a>
<li><a target="_new" href="http://butterfliesandbugs.wordpress.com/">Adobe - Joan Lafferty's Blog</a>
<li><a target="_new" href="http://devgirl.wordpress.com/2010/03/22/major-tour-de-flex-updates-for-flex-4/">About these Samples and More Flex 4 Links - Holly Schinsky's Blog</a>

</UL>

</p>
<p>
Additional Note: These samples are best viewed in the AIR version of Tour de Flex. In Web mode we recommend using the expand 
button in the top right corner to expand the illustration to the full window. Sizing issues are currently being worked on.
</p>
</body>
</html>