diff options
| author | Andras Becsi <andras.becsi@digia.com> | 2014-03-18 13:16:26 +0100 |
|---|---|---|
| committer | Frederik Gladhorn <frederik.gladhorn@digia.com> | 2014-03-20 15:55:39 +0100 |
| commit | 3f0f86b0caed75241fa71c95a5d73bc0164348c5 (patch) | |
| tree | 92b9fb00f2e9e90b0be2262093876d4f43b6cd13 /chromium/chrome/browser/resources/chromeos | |
| parent | e90d7c4b152c56919d963987e2503f9909a666d2 (diff) | |
| download | qtwebengine-chromium-3f0f86b0caed75241fa71c95a5d73bc0164348c5.tar.gz | |
Update to new stable branch 1750
This also includes an updated ninja and chromium dependencies
needed on Windows.
Change-Id: Icd597d80ed3fa4425933c9f1334c3c2e31291c42
Reviewed-by: Zoltan Arvai <zarvai@inf.u-szeged.hu>
Reviewed-by: Zeno Albisser <zeno.albisser@digia.com>
Diffstat (limited to 'chromium/chrome/browser/resources/chromeos')
264 files changed, 69441 insertions, 0 deletions
diff --git a/chromium/chrome/browser/resources/chromeos/OWNERS b/chromium/chrome/browser/resources/chromeos/OWNERS new file mode 100644 index 00000000000..418c659dd6f --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/OWNERS @@ -0,0 +1,9 @@ +xiyuan@chromium.org +nkostylev@chromium.org +achuith@chromium.org +zelidrag@chromium.org +rbyers@chromium.org +satorux@chromium.org + +per-file drive_internals*=hashimoto@chromium.org +per-file drive_internals*=kinaba@chromium.org diff --git a/chromium/chrome/browser/resources/chromeos/about_os_credits.html b/chromium/chrome/browser/resources/chromeos/about_os_credits.html new file mode 100644 index 00000000000..b97d9e3e6f9 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/about_os_credits.html @@ -0,0 +1,25153 @@ +<!DOCTYPE HTML> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> +<title>Credits</title> +<style> +body { + font-family:Helvetica,Arial,sans-serif; + background-color:white; + font-size:84%; + max-width:1020px; +} +.page-title { + font-size:164%; + font-weight:bold; +} +.product { + background-color:#c3d9ff; + overflow:auto; + padding:2px; + margin-top:16px; + border-radius:5px; +} +.product .title { + font-size:110%; + font-weight:bold; + float:left; + margin:3px; +} +.product .homepage { + text-align:right; + float:right; + margin:3px; +} +.product .homepage:after { + content:" - "; +} +.product .show { + text-align:right; + float:right; + margin:3px; +} +.licence { + clear:both; + background-color:#e8eef7; + padding:16px; + border-radius:3px; + display:none; +} +.licence h3 { + margin-top:0px; +} +.license-packages { + font-size:80%; +} +</style> +<script> +function $(o) {return document.getElementById(o);} +function toggle(o) { + var licence = o.nextSibling; + + while (licence.className != 'licence') { + if (!licence) return false; + licence = licence.nextSibling; + } + + if (licence.style && licence.style.display == 'block') { + licence.style.display = 'none'; + o.innerHTML = 'show license text'; + } else { + licence.style.display = 'block'; + o.innerHTML = 'hide license text'; + } + return false; +} +</script> +</head> +<body> +<span class="page-title" style="float:left;">Credits</span> +<a href="javascript:window.print();" style="float:right;">Print</a> +<div style="clear:both; overflow:auto;"> +<h2>List of Packages used in Google Chrome OS:</h2> +<!-- Chromium <3s the following projects --> +<div class="product"> +<span class="title">acl-2.2.51</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://savannah.nongnu.org/projects/acl">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#LGPL-2.1'>Gentoo Package Stock License LGPL-2.1</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">adhd-0.0.1</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.chromium.org">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#GPL-2'>Gentoo Package Stock License GPL-2</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">alsa-headers-1.0.25</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.alsa-project.org/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#GPL-2'>Gentoo Package Stock License GPL-2</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">alsa-lib-1.0.25</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.alsa-project.org/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#LGPL-2.1'>Gentoo Package Stock License LGPL-2.1</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">alsa-plugins-1.0.25</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.alsa-project.org/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#LGPL-2.1'>Gentoo Package Stock License LGPL-2.1</a></li> +<li><a href='#GPL-2'>Gentoo Package Stock License GPL-2</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">alsa-utils-1.0.25</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.alsa-project.org/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#GPL-2'>Gentoo Package Stock License GPL-2</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">ath3k-0.0.1</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.atheros.com/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#Atheros'>Custom License Atheros</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">ath6k-34</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.atheros.com/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#Atheros'>Custom License Atheros</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">atk-1.32.0</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://projects.gnome.org/accessibility/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#LGPL-2'>Gentoo Package Stock License LGPL-2</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">attr-2.4.46</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://savannah.nongnu.org/projects/attr">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#LGPL-2.1'>Gentoo Package Stock License LGPL-2.1</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">autoconf-2.13</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.gnu.org/software/autoconf/autoconf.html">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#GPL-2'>Gentoo Package Stock License GPL-2</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">autoconf-2.68</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.gnu.org/software/autoconf/autoconf.html">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#GPL-3'>Gentoo Package Stock License GPL-3</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">autoconf-wrapper-10</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.gentoo.org/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#GPL-2'>Gentoo Package Stock License GPL-2</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">automake-1.11.1</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://sources.redhat.com/automake/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#GPL-2'>Gentoo Package Stock License GPL-2</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">automake-wrapper-5</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.gentoo.org/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#GPL-2'>Gentoo Package Stock License GPL-2</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">avahi-0.6.31</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://avahi.org/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#LGPL-2.1'>Gentoo Package Stock License LGPL-2.1</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">avfs-1.0.1</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://sourceforge.net/projects/avf">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#GPL-2'>Gentoo Package Stock License GPL-2</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">baselayout-2.0.1</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://src.chromium.org/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#GPL-2'>Gentoo Package Stock License GPL-2</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">bash-4.2_p20</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://tiswww.case.edu/php/chet/bash/bashtop.html">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#GPL-3'>Gentoo Package Stock License GPL-3</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">binutils-2.22</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://sources.redhat.com/binutils/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#GPL-3'>Gentoo Package Stock License GPL-3</a></li> +<li><a href='#LGPL-3'>Gentoo Package Stock License LGPL-3</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">binutils-config-3</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.gentoo.org/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#GPL-2'>Gentoo Package Stock License GPL-2</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">bluez-5.4</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.bluez.org/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#LGPL-2.1'>Gentoo Package Stock License LGPL-2.1</a></li> +<li><a href='#GPL-2'>Gentoo Package Stock License GPL-2</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">brltty-4.5</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://mielke.cc/brltty/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#LGPL-2.1'>Gentoo Package Stock License LGPL-2.1</a></li> +<li><a href='#GPL-2'>Gentoo Package Stock License GPL-2</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">bsdiff-4.3</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.daemonology.net/bsdiff/">homepage</a></span> +<div class="licence"> +<pre>Copyright Attribution License chromiumos-overlay/licenses/copyright-attribution/dev-util/bsdiff: + +Copyright 2003-2005 Colin Percival +All rights reserved + +Redistribution and use in source and binary forms, with or without +modification, are permitted providing that the following conditions· +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING +IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +</pre> +<ul> + +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">bzip2-1.0.6</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.bzip.org/">homepage</a></span> +<div class="licence"> +<pre>Scanned Source License bzip2-1.0.6/LICENSE: + + +-------------------------------------------------------------------------- + +This program, "bzip2", the associated library "libbzip2", and all +documentation, are copyright (C) 1996-2010 Julian R Seward. All +rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. The origin of this software must not be misrepresented; you must + not claim that you wrote the original software. If you use this + software in a product, an acknowledgment in the product + documentation would be appreciated but is not required. + +3. Altered source versions must be plainly marked as such, and must + not be misrepresented as being the original software. + +4. The name of the author may not be used to endorse or promote + products derived from this software without specific prior written + permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS +OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Julian Seward, jseward@bzip.org +bzip2/libbzip2 version 1.0.6 of 6 September 2010 + +-------------------------------------------------------------------------- + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Gentoo Package Stock License BZIP2: + +<copyright notice> +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. The origin of this software must not be misrepresented; you must + not claim that you wrote the original software. If you use this + software in a product, an acknowledgment in the product + documentation would be appreciated but is not required. + +3. Altered source versions must be plainly marked as such, and must + not be misrepresented as being the original software. + +4. The name of the author may not be used to endorse or promote + products derived from this software without specific prior written + permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS +OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +</pre> +<ul> + +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">c-ares-1.7.5</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://c-ares.haxx.se/">homepage</a></span> +<div class="licence"> +<pre>Copyright Attribution License chromiumos-overlay/licenses/copyright-attribution/net-dns/c-ares: + +Copyright 1998 by the Massachusetts Institute of Technology. + +Permission to use, copy, modify, and distribute this +software and its documentation for any purpose and without +fee is hereby granted, provided that the above copyright +notice appear in all copies and that both that copyright +notice and this permission notice appear in supporting +documentation, and that the name of M.I.T. not be used in +advertising or publicity pertaining to distribution of the +software without specific, written prior permission. +M.I.T. makes no representations about the suitability of +this software for any purpose. It is provided "as is" +without express or implied warranty. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +</pre> +<ul> + +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">cairo-1.12.12</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://cairographics.org/">homepage</a></span> +<div class="licence"> +<pre>Gentoo Package Stock License MPL-1.1: + + MOZILLA PUBLIC LICENSE + Version 1.1 + + --------------- + +1. Definitions. + + 1.0.1. "Commercial Use" means distribution or otherwise making the + Covered Code available to a third party. + + 1.1. "Contributor" means each entity that creates or contributes to + the creation of Modifications. + + 1.2. "Contributor Version" means the combination of the Original + Code, prior Modifications used by a Contributor, and the Modifications + made by that particular Contributor. + + 1.3. "Covered Code" means the Original Code or Modifications or the + combination of the Original Code and Modifications, in each case + including portions thereof. + + 1.4. "Electronic Distribution Mechanism" means a mechanism generally + accepted in the software development community for the electronic + transfer of data. + + 1.5. "Executable" means Covered Code in any form other than Source + Code. + + 1.6. "Initial Developer" means the individual or entity identified + as the Initial Developer in the Source Code notice required by Exhibit + A. + + 1.7. "Larger Work" means a work which combines Covered Code or + portions thereof with code not governed by the terms of this License. + + 1.8. "License" means this document. + + 1.8.1. "Licensable" means having the right to grant, to the maximum + extent possible, whether at the time of the initial grant or + subsequently acquired, any and all of the rights conveyed herein. + + 1.9. "Modifications" means any addition to or deletion from the + substance or structure of either the Original Code or any previous + Modifications. When Covered Code is released as a series of files, a + Modification is: + A. Any addition to or deletion from the contents of a file + containing Original Code or previous Modifications. + + B. Any new file that contains any part of the Original Code or + previous Modifications. + + 1.10. "Original Code" means Source Code of computer software code + which is described in the Source Code notice required by Exhibit A as + Original Code, and which, at the time of its release under this + License is not already Covered Code governed by this License. + + 1.10.1. "Patent Claims" means any patent claim(s), now owned or + hereafter acquired, including without limitation, method, process, + and apparatus claims, in any patent Licensable by grantor. + + 1.11. "Source Code" means the preferred form of the Covered Code for + making modifications to it, including all modules it contains, plus + any associated interface definition files, scripts used to control + compilation and installation of an Executable, or source code + differential comparisons against either the Original Code or another + well known, available Covered Code of the Contributor's choice. The + Source Code can be in a compressed or archival form, provided the + appropriate decompression or de-archiving software is widely available + for no charge. + + 1.12. "You" (or "Your") means an individual or a legal entity + exercising rights under, and complying with all of the terms of, this + License or a future version of this License issued under Section 6.1. + For legal entities, "You" includes any entity which controls, is + controlled by, or is under common control with You. For purposes of + this definition, "control" means (a) the power, direct or indirect, + to cause the direction or management of such entity, whether by + contract or otherwise, or (b) ownership of more than fifty percent + (50%) of the outstanding shares or beneficial ownership of such + entity. + +2. Source Code License. + + 2.1. The Initial Developer Grant. + The Initial Developer hereby grants You a world-wide, royalty-free, + non-exclusive license, subject to third party intellectual property + claims: + (a) under intellectual property rights (other than patent or + trademark) Licensable by Initial Developer to use, reproduce, + modify, display, perform, sublicense and distribute the Original + Code (or portions thereof) with or without Modifications, and/or + as part of a Larger Work; and + + (b) under Patents Claims infringed by the making, using or + selling of Original Code, to make, have made, use, practice, + sell, and offer for sale, and/or otherwise dispose of the + Original Code (or portions thereof). + + (c) the licenses granted in this Section 2.1(a) and (b) are + effective on the date Initial Developer first distributes + Original Code under the terms of this License. + + (d) Notwithstanding Section 2.1(b) above, no patent license is + granted: 1) for code that You delete from the Original Code; 2) + separate from the Original Code; or 3) for infringements caused + by: i) the modification of the Original Code or ii) the + combination of the Original Code with other software or devices. + + 2.2. Contributor Grant. + Subject to third party intellectual property claims, each Contributor + hereby grants You a world-wide, royalty-free, non-exclusive license + + (a) under intellectual property rights (other than patent or + trademark) Licensable by Contributor, to use, reproduce, modify, + display, perform, sublicense and distribute the Modifications + created by such Contributor (or portions thereof) either on an + unmodified basis, with other Modifications, as Covered Code + and/or as part of a Larger Work; and + + (b) under Patent Claims infringed by the making, using, or + selling of Modifications made by that Contributor either alone + and/or in combination with its Contributor Version (or portions + of such combination), to make, use, sell, offer for sale, have + made, and/or otherwise dispose of: 1) Modifications made by that + Contributor (or portions thereof); and 2) the combination of + Modifications made by that Contributor with its Contributor + Version (or portions of such combination). + + (c) the licenses granted in Sections 2.2(a) and 2.2(b) are + effective on the date Contributor first makes Commercial Use of + the Covered Code. + + (d) Notwithstanding Section 2.2(b) above, no patent license is + granted: 1) for any code that Contributor has deleted from the + Contributor Version; 2) separate from the Contributor Version; + 3) for infringements caused by: i) third party modifications of + Contributor Version or ii) the combination of Modifications made + by that Contributor with other software (except as part of the + Contributor Version) or other devices; or 4) under Patent Claims + infringed by Covered Code in the absence of Modifications made by + that Contributor. + +3. Distribution Obligations. + + 3.1. Application of License. + The Modifications which You create or to which You contribute are + governed by the terms of this License, including without limitation + Section 2.2. The Source Code version of Covered Code may be + distributed only under the terms of this License or a future version + of this License released under Section 6.1, and You must include a + copy of this License with every copy of the Source Code You + distribute. You may not offer or impose any terms on any Source Code + version that alters or restricts the applicable version of this + License or the recipients' rights hereunder. However, You may include + an additional document offering the additional rights described in + Section 3.5. + + 3.2. Availability of Source Code. + Any Modification which You create or to which You contribute must be + made available in Source Code form under the terms of this License + either on the same media as an Executable version or via an accepted + Electronic Distribution Mechanism to anyone to whom you made an + Executable version available; and if made available via Electronic + Distribution Mechanism, must remain available for at least twelve (12) + months after the date it initially became available, or at least six + (6) months after a subsequent version of that particular Modification + has been made available to such recipients. You are responsible for + ensuring that the Source Code version remains available even if the + Electronic Distribution Mechanism is maintained by a third party. + + 3.3. Description of Modifications. + You must cause all Covered Code to which You contribute to contain a + file documenting the changes You made to create that Covered Code and + the date of any change. You must include a prominent statement that + the Modification is derived, directly or indirectly, from Original + Code provided by the Initial Developer and including the name of the + Initial Developer in (a) the Source Code, and (b) in any notice in an + Executable version or related documentation in which You describe the + origin or ownership of the Covered Code. + + 3.4. Intellectual Property Matters + (a) Third Party Claims. + If Contributor has knowledge that a license under a third party's + intellectual property rights is required to exercise the rights + granted by such Contributor under Sections 2.1 or 2.2, + Contributor must include a text file with the Source Code + distribution titled "LEGAL" which describes the claim and the + party making the claim in sufficient detail that a recipient will + know whom to contact. If Contributor obtains such knowledge after + the Modification is made available as described in Section 3.2, + Contributor shall promptly modify the LEGAL file in all copies + Contributor makes available thereafter and shall take other steps + (such as notifying appropriate mailing lists or newsgroups) + reasonably calculated to inform those who received the Covered + Code that new knowledge has been obtained. + + (b) Contributor APIs. + If Contributor's Modifications include an application programming + interface and Contributor has knowledge of patent licenses which + are reasonably necessary to implement that API, Contributor must + also include this information in the LEGAL file. + + (c) Representations. + Contributor represents that, except as disclosed pursuant to + Section 3.4(a) above, Contributor believes that Contributor's + Modifications are Contributor's original creation(s) and/or + Contributor has sufficient rights to grant the rights conveyed by + this License. + + 3.5. Required Notices. + You must duplicate the notice in Exhibit A in each file of the Source + Code. If it is not possible to put such notice in a particular Source + Code file due to its structure, then You must include such notice in a + location (such as a relevant directory) where a user would be likely + to look for such a notice. If You created one or more Modification(s) + You may add your name as a Contributor to the notice described in + Exhibit A. You must also duplicate this License in any documentation + for the Source Code where You describe recipients' rights or ownership + rights relating to Covered Code. You may choose to offer, and to + charge a fee for, warranty, support, indemnity or liability + obligations to one or more recipients of Covered Code. However, You + may do so only on Your own behalf, and not on behalf of the Initial + Developer or any Contributor. You must make it absolutely clear than + any such warranty, support, indemnity or liability obligation is + offered by You alone, and You hereby agree to indemnify the Initial + Developer and every Contributor for any liability incurred by the + Initial Developer or such Contributor as a result of warranty, + support, indemnity or liability terms You offer. + + 3.6. Distribution of Executable Versions. + You may distribute Covered Code in Executable form only if the + requirements of Section 3.1-3.5 have been met for that Covered Code, + and if You include a notice stating that the Source Code version of + the Covered Code is available under the terms of this License, + including a description of how and where You have fulfilled the + obligations of Section 3.2. The notice must be conspicuously included + in any notice in an Executable version, related documentation or + collateral in which You describe recipients' rights relating to the + Covered Code. You may distribute the Executable version of Covered + Code or ownership rights under a license of Your choice, which may + contain terms different from this License, provided that You are in + compliance with the terms of this License and that the license for the + Executable version does not attempt to limit or alter the recipient's + rights in the Source Code version from the rights set forth in this + License. If You distribute the Executable version under a different + license You must make it absolutely clear that any terms which differ + from this License are offered by You alone, not by the Initial + Developer or any Contributor. You hereby agree to indemnify the + Initial Developer and every Contributor for any liability incurred by + the Initial Developer or such Contributor as a result of any such + terms You offer. + + 3.7. Larger Works. + You may create a Larger Work by combining Covered Code with other code + not governed by the terms of this License and distribute the Larger + Work as a single product. In such a case, You must make sure the + requirements of this License are fulfilled for the Covered Code. + +4. Inability to Comply Due to Statute or Regulation. + + If it is impossible for You to comply with any of the terms of this + License with respect to some or all of the Covered Code due to + statute, judicial order, or regulation then You must: (a) comply with + the terms of this License to the maximum extent possible; and (b) + describe the limitations and the code they affect. Such description + must be included in the LEGAL file described in Section 3.4 and must + be included with all distributions of the Source Code. Except to the + extent prohibited by statute or regulation, such description must be + sufficiently detailed for a recipient of ordinary skill to be able to + understand it. + +5. Application of this License. + + This License applies to code to which the Initial Developer has + attached the notice in Exhibit A and to related Covered Code. + +6. Versions of the License. + + 6.1. New Versions. + Netscape Communications Corporation ("Netscape") may publish revised + and/or new versions of the License from time to time. Each version + will be given a distinguishing version number. + + 6.2. Effect of New Versions. + Once Covered Code has been published under a particular version of the + License, You may always continue to use it under the terms of that + version. You may also choose to use such Covered Code under the terms + of any subsequent version of the License published by Netscape. No one + other than Netscape has the right to modify the terms applicable to + Covered Code created under this License. + + 6.3. Derivative Works. + If You create or use a modified version of this License (which you may + only do in order to apply it to code which is not already Covered Code + governed by this License), You must (a) rename Your license so that + the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape", + "MPL", "NPL" or any confusingly similar phrase do not appear in your + license (except to note that your license differs from this License) + and (b) otherwise make it clear that Your version of the license + contains terms which differ from the Mozilla Public License and + Netscape Public License. (Filling in the name of the Initial + Developer, Original Code or Contributor in the notice described in + Exhibit A shall not of themselves be deemed to be modifications of + this License.) + +7. DISCLAIMER OF WARRANTY. + + COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF + DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. + THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE + IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, + YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE + COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER + OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF + ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER. + +8. TERMINATION. + + 8.1. This License and the rights granted hereunder will terminate + automatically if You fail to comply with terms herein and fail to cure + such breach within 30 days of becoming aware of the breach. All + sublicenses to the Covered Code which are properly granted shall + survive any termination of this License. Provisions which, by their + nature, must remain in effect beyond the termination of this License + shall survive. + + 8.2. If You initiate litigation by asserting a patent infringement + claim (excluding declatory judgment actions) against Initial Developer + or a Contributor (the Initial Developer or Contributor against whom + You file such action is referred to as "Participant") alleging that: + + (a) such Participant's Contributor Version directly or indirectly + infringes any patent, then any and all rights granted by such + Participant to You under Sections 2.1 and/or 2.2 of this License + shall, upon 60 days notice from Participant terminate prospectively, + unless if within 60 days after receipt of notice You either: (i) + agree in writing to pay Participant a mutually agreeable reasonable + royalty for Your past and future use of Modifications made by such + Participant, or (ii) withdraw Your litigation claim with respect to + the Contributor Version against such Participant. If within 60 days + of notice, a reasonable royalty and payment arrangement are not + mutually agreed upon in writing by the parties or the litigation claim + is not withdrawn, the rights granted by Participant to You under + Sections 2.1 and/or 2.2 automatically terminate at the expiration of + the 60 day notice period specified above. + + (b) any software, hardware, or device, other than such Participant's + Contributor Version, directly or indirectly infringes any patent, then + any rights granted to You by such Participant under Sections 2.1(b) + and 2.2(b) are revoked effective as of the date You first made, used, + sold, distributed, or had made, Modifications made by that + Participant. + + 8.3. If You assert a patent infringement claim against Participant + alleging that such Participant's Contributor Version directly or + indirectly infringes any patent where such claim is resolved (such as + by license or settlement) prior to the initiation of patent + infringement litigation, then the reasonable value of the licenses + granted by such Participant under Sections 2.1 or 2.2 shall be taken + into account in determining the amount or value of any payment or + license. + + 8.4. In the event of termination under Sections 8.1 or 8.2 above, + all end user license agreements (excluding distributors and resellers) + which have been validly granted by You or any distributor hereunder + prior to termination shall survive termination. + +9. LIMITATION OF LIABILITY. + + UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT + (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL + DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE, + OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR + ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY + CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, + WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER + COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN + INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF + LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY + RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW + PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE + EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO + THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU. + +10. U.S. GOVERNMENT END USERS. + + The Covered Code is a "commercial item," as that term is defined in + 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer + software" and "commercial computer software documentation," as such + terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 + C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), + all U.S. Government End Users acquire Covered Code with only those + rights set forth herein. + +11. MISCELLANEOUS. + + This License represents the complete agreement concerning subject + matter hereof. If any provision of this License is held to be + unenforceable, such provision shall be reformed only to the extent + necessary to make it enforceable. This License shall be governed by + California law provisions (except to the extent applicable law, if + any, provides otherwise), excluding its conflict-of-law provisions. + With respect to disputes in which at least one party is a citizen of, + or an entity chartered or registered to do business in the United + States of America, any litigation relating to this License shall be + subject to the jurisdiction of the Federal Courts of the Northern + District of California, with venue lying in Santa Clara County, + California, with the losing party responsible for costs, including + without limitation, court costs and reasonable attorneys' fees and + expenses. The application of the United Nations Convention on + Contracts for the International Sale of Goods is expressly excluded. + Any law or regulation which provides that the language of a contract + shall be construed against the drafter shall not apply to this + License. + +12. RESPONSIBILITY FOR CLAIMS. + + As between Initial Developer and the Contributors, each party is + responsible for claims and damages arising, directly or indirectly, + out of its utilization of rights under this License and You agree to + work with Initial Developer and Contributors to distribute such + responsibility on an equitable basis. Nothing herein is intended or + shall be deemed to constitute any admission of liability. + +13. MULTIPLE-LICENSED CODE. + + Initial Developer may designate portions of the Covered Code as + "Multiple-Licensed". "Multiple-Licensed" means that the Initial + Developer permits you to utilize portions of the Covered Code under + Your choice of the NPL or the alternative licenses, if any, specified + by the Initial Developer in the file described in Exhibit A. + +EXHIBIT A -Mozilla Public License. + + ``The contents of this file are subject to the Mozilla Public License + Version 1.1 (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.mozilla.org/MPL/ + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the + License for the specific language governing rights and limitations + under the License. + + The Original Code is ______________________________________. + + The Initial Developer of the Original Code is ________________________. + Portions created by ______________________ are Copyright (C) ______ + _______________________. All Rights Reserved. + + Contributor(s): ______________________________________. + + Alternatively, the contents of this file may be used under the terms + of the _____ license (the "[___] License"), in which case the + provisions of [______] License are applicable instead of those + above. If you wish to allow use of your version of this file only + under the terms of the [____] License and not to allow others to use + your version of this file under the MPL, indicate your decision by + deleting the provisions above and replace them with the notice and + other provisions required by the [___] License. If you do not delete + the provisions above, a recipient may use your version of this file + under either the MPL or the [___] License." + + [NOTE: The text of this Exhibit A may differ slightly from the text of + the notices in the Source Code files of the Original Code. You should + use the text of this Exhibit A rather than the text found in the + Original Code Source Code for Your Modifications.] + + ---------------------------------------------------------------------- + + AMENDMENTS + + The Netscape Public License Version 1.1 ("NPL") consists of the + Mozilla Public License Version 1.1 with the following Amendments, + including Exhibit A-Netscape Public License. Files identified with + "Exhibit A-Netscape Public License" are governed by the Netscape + Public License Version 1.1. + + Additional Terms applicable to the Netscape Public License. + I. Effect. + These additional terms described in this Netscape Public + License -- Amendments shall apply to the Mozilla Communicator + client code and to all Covered Code under this License. + + II. "Netscape's Branded Code" means Covered Code that Netscape + distributes and/or permits others to distribute under one or more + trademark(s) which are controlled by Netscape but which are not + licensed for use under this License. + + III. Netscape and logo. + This License does not grant any rights to use the trademarks + "Netscape", the "Netscape N and horizon" logo or the "Netscape + lighthouse" logo, "Netcenter", "Gecko", "Java" or "JavaScript", + "Smart Browsing" even if such marks are included in the Original + Code or Modifications. + + IV. Inability to Comply Due to Contractual Obligation. + Prior to licensing the Original Code under this License, Netscape + has licensed third party code for use in Netscape's Branded Code. + To the extent that Netscape is limited contractually from making + such third party code available under this License, Netscape may + choose to reintegrate such code into Covered Code without being + required to distribute such code in Source Code form, even if + such code would otherwise be considered "Modifications" under + this License. + + V. Use of Modifications and Covered Code by Initial Developer. + V.1. In General. + The obligations of Section 3 apply to Netscape, except to + the extent specified in this Amendment, Section V.2 and V.3. + + V.2. Other Products. + Netscape may include Covered Code in products other than the + Netscape's Branded Code which are released by Netscape + during the two (2) years following the release date of the + Original Code, without such additional products becoming + subject to the terms of this License, and may license such + additional products on different terms from those contained + in this License. + + V.3. Alternative Licensing. + Netscape may license the Source Code of Netscape's Branded + Code, including Modifications incorporated therein, without + such Netscape Branded Code becoming subject to the terms of + this License, and may license such Netscape Branded Code on + different terms from those contained in this License. + + VI. Litigation. + Notwithstanding the limitations of Section 11 above, the + provisions regarding litigation in Section 11(a), (b) and (c) of + the License shall apply to all disputes relating to this License. + + EXHIBIT A-Netscape Public License. + + "The contents of this file are subject to the Netscape Public + License Version 1.1 (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.mozilla.org/NPL/ + + Software distributed under the License is distributed on an "AS + IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or + implied. See the License for the specific language governing + rights and limitations under the License. + + The Original Code is Mozilla Communicator client code, released + March 31, 1998. + + The Initial Developer of the Original Code is Netscape + Communications Corporation. Portions created by Netscape are + Copyright (C) 1998-1999 Netscape Communications Corporation. All + Rights Reserved. + + Contributor(s): ______________________________________. + + Alternatively, the contents of this file may be used under the + terms of the _____ license (the "[___] License"), in which case + the provisions of [______] License are applicable instead of + those above. If you wish to allow use of your version of this + file only under the terms of the [____] License and not to allow + others to use your version of this file under the NPL, indicate + your decision by deleting the provisions above and replace them + with the notice and other provisions required by the [___] + License. If you do not delete the provisions above, a recipient + may use your version of this file under either the NPL or the + [___] License." + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +</pre> +<ul> +<li><a href='#LGPL-2.1'>Gentoo Package Stock License LGPL-2.1</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">chinese-input-1.1.0.0</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.google.com/inputtools/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#Apache-2.0'>Gentoo Package Stock License Apache-2.0</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">chromeos-hangul-1.1.0.0</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="https://code.google.com/p/google-input-tools/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#Apache-2.0'>Gentoo Package Stock License Apache-2.0</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">chromeos-keyboards-1.1.4.0</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="https://code.google.com/p/google-input-tools">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#Apache-2.0'>Gentoo Package Stock License Apache-2.0</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">chvt-0.0.1</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#GPL-2'>Gentoo Package Stock License GPL-2</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">coreboot-2013.04</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.coreboot.org/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#GPL-2'>Gentoo Package Stock License GPL-2</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">coreutils-8.20</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.gnu.org/software/coreutils/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#GPL-3'>Gentoo Package Stock License GPL-3</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">crda-1.1.1</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://wireless.kernel.org/en/developers/Regulatory">homepage</a></span> +<div class="licence"> +<pre>Scanned Source License crda-1.1.1/LICENSE: + +Copyright (c) 2008, Luis R. Rodriguez <mcgrof@gmail.com> +Copyright (c) 2008, Johannes Berg <johannes@sipsolutions.net> +Copyright (c) 2008, Michael Green <Michael.Green@Atheros.com> + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License crda-1.1.1/debian-example/copyright: + +This package was debianized by Luis Rodriguez <mcgrof@gmail.com> on +Thu, 22 Jan 2009 16:00:00 +0100. + +The crda packages was downloaded from <http://wireless.kernel.org/download/crda/> + +Copyright (c) 2008, Luis R. Rodriguez <mcgrof@gmail.com> +Copyright (c) 2008, Johannes Berg <johannes@sipsolutions.net> +Copyright (c) 2008, Michael Green <Michael.Green@Atheros.com> + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +</pre> +<ul> +<li><a href='#as-is'>Gentoo Package Stock License as-is</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">croscorefonts-1.23.0</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#Apache-2.0'>Gentoo Package Stock License Apache-2.0</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">crosextrafonts-20130214</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#Apache-2.0'>Gentoo Package Stock License Apache-2.0</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">crosextrafonts-carlito-20130920</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="">homepage</a></span> +<div class="licence"> +<pre>Scanned Source License crosextrafonts-carlito-20130920/LICENSE: + +Copyright (c) 2010-2013 by tyPoland Lukasz Dziedzic with Reserved Font Name "Carlito". + +This Font Software is licensed under the SIL Open Font License, +Version 1.1 as shown below. + +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 + +PREAMBLE The goals of the Open Font License (OFL) are to stimulate +worldwide development of collaborative font projects, to support the font +creation efforts of academic and linguistic communities, and to provide +a free and open framework in which fonts may be shared and improved in +partnership with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. +The fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply to +any document created using the fonts or their derivatives. + + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. +This may include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components +as distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting ? in part or in whole ? +any of the components of the Original Version, by changing formats or +by porting the Font Software to a new environment. + +"Author" refers to any designer, engineer, programmer, technical writer +or other person who contributed to the Font Software. + + +PERMISSION & CONDITIONS + +Permission is hereby granted, free of charge, to any person obtaining a +copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components,in + Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, + redistributed and/or sold with any software, provided that each copy + contains the above copyright notice and this license. These can be + included either as stand-alone text files, human-readable headers or + in the appropriate machine-readable metadata fields within text or + binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font + Name(s) unless explicit written permission is granted by the + corresponding Copyright Holder. This restriction only applies to the + primary font name as presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font + Software shall not be used to promote, endorse or advertise any + Modified Version, except to acknowledge the contribution(s) of the + Copyright Holder(s) and the Author(s) or with their explicit written + permission. + +5) The Font Software, modified or unmodified, in part or in whole, must + be distributed entirely under this license, and must not be distributed + under any other license. The requirement for fonts to remain under + this license does not apply to any document created using the Font + Software. + + + +TERMINATION +This license becomes null and void if any of the above conditions are not met. + + + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER +DEALINGS IN THE FONT SOFTWARE. + + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +</pre> +<ul> +<li><a href='#OFL-1.1'>Gentoo Package Stock License OFL-1.1</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">ctemplate-1.0</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://code.google.com/p/google-ctemplate/">homepage</a></span> +<div class="licence"> +<pre>Scanned Source License ctemplate-1.0/COPYING: + +Copyright (c) 2005, Google Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License ctemplate-1.0/packages/deb/copyright: + +This package was debianized by Google Inc. <opensource@google.com> on +13 March 2006. + +It was downloaded from http://code.google.com/ + +Upstream Author: opensource@google.com + +Copyright (c) 2006, Google Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +</pre> +<ul> + +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">curl-7.31.0</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://curl.haxx.se/">homepage</a></span> +<div class="licence"> +<pre>Scanned Source License curl-7.31.0/COPYING: + +COPYRIGHT AND PERMISSION NOTICE + +Copyright (c) 1996 - 2013, Daniel Stenberg, <daniel@haxx.se>. + +All rights reserved. + +Permission to use, copy, modify, and distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright +notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN +NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE +OR OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of a copyright holder shall not +be used in advertising or otherwise to promote the sale, use or other dealings +in this Software without prior written authorization of the copyright holder. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +</pre> +<ul> + +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">dash-0.5.5.1.7</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://gondor.apana.org.au/~herbert/dash/">homepage</a></span> +<div class="licence"> +<pre>Scanned Source License dash-0.5.5.1/COPYING: + +Copyright (c) 1989-1994 + The Regents of the University of California. All rights reserved. +Copyright (c) 1997 Christos Zoulas. All rights reserved. +Copyright (c) 1997-2005 + Herbert Xu <herbert@gondor.apana.org.au>. All rights reserved. + +This code is derived from software contributed to Berkeley by Kenneth Almquist. + + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. Neither the name of the University nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +mksignames.c: + +This file is not directly linked with dash. However, its output is. + +Copyright (C) 1992 Free Software Foundation, Inc. + +This file is part of GNU Bash, the Bourne Again SHell. + +Bash is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation; either version 2, or (at your option) any later +version. + +Bash is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License with +your Debian GNU/Linux system, in /usr/share/common-licenses/GPL, or with the +Debian GNU/Linux hello source package as the file COPYING. If not, +write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, +Boston, MA 02111 USA. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +</pre> +<ul> + +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">dbus-1.6.8</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://dbus.freedesktop.org/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#AFL-2.1'>Gentoo Package Stock License AFL-2.1</a></li> +<li><a href='#GPL-2'>Gentoo Package Stock License GPL-2</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">dbus-c++-0.0.2</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.freedesktop.org/wiki/Software/dbus-c%2B%2B">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#LGPL-2'>Gentoo Package Stock License LGPL-2</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">dbus-glib-0.100.2</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://dbus.freedesktop.org/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#AFL-2.1'>Gentoo Package Stock License AFL-2.1</a></li> +<li><a href='#GPL-2'>Gentoo Package Stock License GPL-2</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">dejavu-2.33</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://dejavu.sourceforge.net/">homepage</a></span> +<div class="licence"> +<pre>Gentoo Package Stock License BitstreamVera: + +Bitstream Vera Fonts Copyright + +The fonts have a generous copyright, allowing derivative works (as +long as "Bitstream" or "Vera" are not in the names), and full +redistribution (so long as they are not *sold* by themselves). They +can be be bundled, redistributed and sold with any software. + +The fonts are distributed under the following copyright: + +Copyright +========= + +Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream +Vera is a trademark of Bitstream, Inc. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the fonts accompanying this license ("Fonts") and associated +documentation files (the "Font Software"), to reproduce and distribute +the Font Software, including without limitation the rights to use, +copy, merge, publish, distribute, and/or sell copies of the Font +Software, and to permit persons to whom the Font Software is furnished +to do so, subject to the following conditions: + +The above copyright and trademark notices and this permission notice +shall be included in all copies of one or more of the Font Software +typefaces. + +The Font Software may be modified, altered, or added to, and in +particular the designs of glyphs or characters in the Fonts may be +modified and additional glyphs or characters may be added to the +Fonts, only if the fonts are renamed to names not containing either +the words "Bitstream" or the word "Vera". + +This License becomes null and void to the extent applicable to Fonts +or Font Software that has been modified and is distributed under the +"Bitstream Vera" names. + +The Font Software may be sold as part of a larger software package but +no copy of one or more of the Font Software typefaces may be sold by +itself. + +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL +BITSTREAM OR THE GNOME FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, +OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT +SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE. + +Except as contained in this notice, the names of Gnome, the Gnome +Foundation, and Bitstream Inc., shall not be used in advertising or +otherwise to promote the sale, use or other dealings in this Font +Software without prior written authorization from the Gnome Foundation +or Bitstream Inc., respectively. For further information, contact: +fonts at gnome dot org. + +Copyright FAQ +============= + + 1. I don't understand the resale restriction... What gives? + + Bitstream is giving away these fonts, but wishes to ensure its + competitors can't just drop the fonts as is into a font sale system + and sell them as is. It seems fair that if Bitstream can't make money + from the Bitstream Vera fonts, their competitors should not be able to + do so either. You can sell the fonts as part of any software package, + however. + + 2. I want to package these fonts separately for distribution and + sale as part of a larger software package or system. Can I do so? + + Yes. A RPM or Debian package is a "larger software package" to begin + with, and you aren't selling them independently by themselves. + See 1. above. + + 3. Are derivative works allowed? + Yes! + + 4. Can I change or add to the font(s)? + Yes, but you must change the name(s) of the font(s). + + 5. Under what terms are derivative works allowed? + + You must change the name(s) of the fonts. This is to ensure the + quality of the fonts, both to protect Bitstream and Gnome. We want to + ensure that if an application has opened a font specifically of these + names, it gets what it expects (though of course, using fontconfig, + substitutions could still could have occurred during font + opening). You must include the Bitstream copyright. Additional + copyrights can be added, as per copyright law. Happy Font Hacking! + + 6. If I have improvements for Bitstream Vera, is it possible they might get + adopted in future versions? + + Yes. The contract between the Gnome Foundation and Bitstream has + provisions for working with Bitstream to ensure quality additions to + the Bitstream Vera font family. Please contact us if you have such + additions. Note, that in general, we will want such additions for the + entire family, not just a single font, and that you'll have to keep + both Gnome and Jim Lyles, Vera's designer, happy! To make sense to add + glyphs to the font, they must be stylistically in keeping with Vera's + design. Vera cannot become a "ransom note" font. Jim Lyles will be + providing a document describing the design elements used in Vera, as a + guide and aid for people interested in contributing to Vera. + + 7. I want to sell a software package that uses these fonts: Can I do so? + + Sure. Bundle the fonts with your software and sell your software + with the fonts. That is the intent of the copyright. + + 8. If applications have built the names "Bitstream Vera" into them, + can I override this somehow to use fonts of my choosing? + + This depends on exact details of the software. Most open source + systems and software (e.g., Gnome, KDE, etc.) are now converting to + use fontconfig (see www.fontconfig.org) to handle font configuration, + selection and substitution; it has provisions for overriding font + names and subsituting alternatives. An example is provided by the + supplied local.conf file, which chooses the family Bitstream Vera for + "sans", "serif" and "monospace". Other software (e.g., the XFree86 + core server) has other mechanisms for font substitution. + + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +</pre> +<ul> + +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">dhcpcd-5.1.4</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://roy.marples.name/projects/dhcpcd/">homepage</a></span> +<div class="licence"> +<pre>Copyright Attribution License chromiumos-overlay/licenses/copyright-attribution/net-misc/dhcpcd: + +Copyright (c) 2006-2010 Roy Marples <roy@marples.name> +All rights reserved + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +</pre> +<ul> + +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">diffutils-3.2</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.gnu.org/software/diffutils/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#GPL-2'>Gentoo Package Stock License GPL-2</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">dmidecode-2.11</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.nongnu.org/dmidecode/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#GPL-2'>Gentoo Package Stock License GPL-2</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">docbook-xml-dtd-4.1.2</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.docbook.org/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#as-is'>Gentoo Package Stock License as-is</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">dosfstools-3.0.9</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.daniel-baumann.ch/software/dosfstools/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#GPL-3'>Gentoo Package Stock License GPL-3</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">droidfonts-cros-20121206</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#Apache-2.0'>Gentoo Package Stock License Apache-2.0</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">dtc-1.3.0</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.t2-project.org/packages/dtc.html">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#GPL-2'>Gentoo Package Stock License GPL-2</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">e2fsprogs-1.42</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://e2fsprogs.sourceforge.net/">homepage</a></span> +<div class="licence"> +<pre>Scanned Source License e2fsprogs-1.42/COPYING: + +This package, the EXT2 filesystem utilities, are made available under +the GNU Public License version 2, with the exception of the lib/ext2fs +and lib/e2p libraries, which are made available under the GNU Library +General Public License Version 2, the lib/uuid library which is made +available under a BSD-style license and the lib/et and lib/ss +libraries which are made available under an MIT-style license. Please +see lib/uuid/COPYING for more details for the license for the files +comprising the libuuid library, and the source file headers of the +libet and libss libraries for more information. + +The most recent officially distributed version can be found at +http://e2fsprogs.sourceforge.net. If you need to make a distribution, +that's the one you should use. If there is some reason why you'd like +a more recent version that is still in ALPHA testing (i.e., either +using the "WIP" test distributions or one from the hg or git +repository from the development branch, please contact me +(tytso@mit.edu) before you ship. The release schedules for this +package are flexible, if you give me enough lead time. + + + Theodore Ts'o + 23-June-2007 + +---------------------------------------------------------------------- + + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. + +---------------------------------------------------------------------- + + GNU LIBRARY GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the library GPL. It is + numbered 2 because it goes with version 2 of the ordinary GPL.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Library General Public License, applies to some +specially designated Free Software Foundation software, and to any +other libraries whose authors decide to use it. You can use it for +your libraries, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if +you distribute copies of the library, or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link a program with the library, you must provide +complete object files to the recipients so that they can relink them +with the library, after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + Our method of protecting your rights has two steps: (1) copyright +the library, and (2) offer you this license which gives you legal +permission to copy, distribute and/or modify the library. + + Also, for each distributor's protection, we want to make certain +that everyone understands that there is no warranty for this free +library. If the library is modified by someone else and passed on, we +want its recipients to know that what they have is not the original +version, so that any problems introduced by others will not reflect on +the original authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that companies distributing free +software will individually obtain patent licenses, thus in effect +transforming the program into proprietary software. To prevent this, +we have made it clear that any patent must be licensed for everyone's +free use or not licensed at all. + + Most GNU software, including some libraries, is covered by the ordinary +GNU General Public License, which was designed for utility programs. This +license, the GNU Library General Public License, applies to certain +designated libraries. This license is quite different from the ordinary +one; be sure to read it in full, and don't assume that anything in it is +the same as in the ordinary license. + + The reason we have a separate public license for some libraries is that +they blur the distinction we usually make between modifying or adding to a +program and simply using it. Linking a program with a library, without +changing the library, is in some sense simply using the library, and is +analogous to running a utility program or application program. However, in +a textual and legal sense, the linked executable is a combined work, a +derivative of the original library, and the ordinary General Public License +treats it as such. + + Because of this blurred distinction, using the ordinary General +Public License for libraries did not effectively promote software +sharing, because most developers did not use the libraries. We +concluded that weaker conditions might promote sharing better. + + However, unrestricted linking of non-free programs would deprive the +users of those programs of all benefit from the free status of the +libraries themselves. This Library General Public License is intended to +permit developers of non-free programs to use free libraries, while +preserving your freedom as a user of such programs to change the free +libraries that are incorporated in them. (We have not seen how to achieve +this as regards changes in header files, but we have achieved it as regards +changes in the actual functions of the Library.) The hope is that this +will lead to faster development of free libraries. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, while the latter only +works together with the library. + + Note that it is possible for a library to be covered by the ordinary +General Public License rather than by this special one. + + GNU LIBRARY GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library which +contains a notice placed by the copyright holder or other authorized +party saying it may be distributed under the terms of this Library +General Public License (also called "this License"). Each licensee is +addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also compile or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + c) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + d) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the source code distributed need not include anything that is normally +distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Library General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + <one line to give the library's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random Hacker. + + <signature of Ty Coon>, 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License e2fsprogs-1.42/debian/copyright: + +This is the Debian GNU/Linux prepackaged version of the EXT2 file +system utilities (e2fsck, mke2fs, etc.). The EXT2 utilities were +written by Theodore Ts'o <tytso@mit.edu> and Remy Card <card@masi.ibp.fr>. + +Sources were obtained from http://sourceforge.net/projects/e2fsprogs + +Packaging is Copyright (c) 2003-2007 Theodore Ts'o <tytso@mit.edu> + Copyright (c) 1997-2003 Yann Dirson <dirson@debian.org> + Copyright (c) 2001 Alcove <http://www.alcove.com/> + Copyright (c) 1997 Klee Dienes + Copyright (c) 1995-1996 Michael Nonweiler <mrn20@cam.ac.uk> + +Upstream Author: Theodore Ts'o <tytso@mit.edu> + +Copyright notice: + +This package, the EXT2 filesystem utilities, are made available under +the GNU Public License version 2, with the exception of the lib/ext2fs +and lib/e2p libraries, which are made available under the GNU Library +General Public License Version 2, the lib/uuid library which is made +available under a BSD-style license and the lib/et and lib/ss +libraries which are made available under an MIT-style license. + + Copyright (c) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, + 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 by Theodore Ts'o + +On Debian GNU systems, the complete text of the GNU General Public +License can be found in `/usr/share/common-licenses/GPL-2'. The +complete text of the GNU Library General Public License can be found +in '/usr/share/common-licenses/LGPL-2'. + + +The license used for lib/et and lib/ss libraries is: + + Copyright 1987 by the Student Information Processing Board + of the Massachusetts Institute of Technology + + Permission to use, copy, modify, and distribute this software and + its documentation for any purpose is hereby granted, provided that + the names of M.I.T. and the M.I.T. S.I.P.B. not be used in + advertising or publicity pertaining to distribution of the software + without specific, written prior permission. M.I.T. and the + M.I.T. S.I.P.B. make no representations about the suitability of + this software for any purpose. It is provided "as is" without + express or implied warranty. + +The license used for lib/uuid is: + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, and the entire permission notice in its entirety, + including the disclaimer of warranties. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote + products derived from this software without specific prior + written permission. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED + WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF + WHICH ARE HEREBY DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR + BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + USE OF THIS SOFTWARE, EVEN IF NOT ADVISED OF THE POSSIBILITY OF SUCH + DAMAGE. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License e2fsprogs-1.42/ext2ed/COPYRIGHT: + +EXT2ED is hereby placed under the terms of the GNU General Public License. +Follows the GNU license. + +Gadi Oxman, August 1995 + +--------------------------------------------------------------------------- + + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 675 Mass Ave, Cambridge, MA 02139, USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + Appendix: How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) 19yy <name of author> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) 19yy name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License e2fsprogs-1.42/lib/ext2fs/tdb/patches/copyright: + +Index: tdbsa/tdb.c +=================================================================== +--- tdbsa.orig/tdb.c ++++ tdbsa/tdb.c +@@ -4,11 +4,11 @@ Rev: 23371 + Last Changed Date: 2007-06-06 20:14:06 -0400 (Wed, 06 Jun 2007) + */ + /* +- Unix SMB/CIFS implementation. ++ trivial database library - standalone version + +- trivial database library - private includes +- +- Copyright (C) Andrew Tridgell 2005 ++ Copyright (C) Andrew Tridgell 1999-2005 ++ Copyright (C) Jeremy Allison 2000-2006 ++ Copyright (C) Paul `Rusty' Russell 2000 + + ** NOTE! The following LGPL license applies to the tdb + ** library. This does NOT imply that all of Samba is released + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License e2fsprogs-1.42/lib/uuid/COPYING: + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, and the entire permission notice in its entirety, + including the disclaimer of warranties. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. The name of the author may not be used to endorse or promote + products derived from this software without specific prior + written permission. + +THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED +WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF +WHICH ARE HEREBY DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT +OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE +USE OF THIS SOFTWARE, EVEN IF NOT ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +</pre> +<ul> +<li><a href='#GPL-2'>Gentoo Package Stock License GPL-2</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">e2fsprogs-libs-1.42</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://e2fsprogs.sourceforge.net/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#GPL-2'>Gentoo Package Stock License GPL-2</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">ecryptfs-utils-101</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="https://launchpad.net/ecryptfs">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#GPL-2'>Gentoo Package Stock License GPL-2</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">eject-2.1.5</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://eject.sourceforge.net/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#GPL-2'>Gentoo Package Stock License GPL-2</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">elfutils-0.154</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="https://fedorahosted.org/elfutils/">homepage</a></span> +<div class="licence"> +<pre>Gentoo Package Stock License GPL-2-with-exceptions: + +NOTE: This is the GPL with specific exceptions added by packages to extend your rights under the GPL. The specific exception(s) for the package can be found in the source tarball. + +Exceptions follow, + +// As a special exception, if other files instantiate templates or use macros +// or inline functions from this file, or you compile this file and link it +// with other works to produce a work based on this file, this file does not +// by itself cause the resulting work to be covered by the GNU General Public +// License. This exception does not invalidate any other reasons why a work +// based on this file might be covered by the GNU General Public License. + +End of exceptions. The rest of this file is the GPL. + + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +</pre> +<ul> + +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">engine_pkcs11-0.1.8</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.opensc-project.org/engine_pkcs11">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#LGPL-2.1'>Gentoo Package Stock License LGPL-2.1</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">eselect-opengl-1.2.4</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.gentoo.org/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#GPL-2'>Gentoo Package Stock License GPL-2</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">eselect-python-20100321</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.gentoo.org">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#GPL-2'>Gentoo Package Stock License GPL-2</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">ethtool-6</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://sourceforge.net/projects/gkernel/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#GPL-2'>Gentoo Package Stock License GPL-2</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">exfat-utils-1.0.1</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://code.google.com/p/exfat/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#GPL-3'>Gentoo Package Stock License GPL-3</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">expat-2.1.0</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://expat.sourceforge.net/">homepage</a></span> +<div class="licence"> +<pre>Scanned Source License expat-2.1.0/COPYING: + +Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd + and Clark Cooper +Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006 Expat maintainers. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +</pre> +<ul> + +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">findutils-4.4.2</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.gnu.org/software/findutils/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#GPL-2'>Gentoo Package Stock License GPL-2</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">flashmap-0.3</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://flashmap.googlecode.com">homepage</a></span> +<div class="licence"> +<pre>Scanned Source License flashmap-0.3/COPYING: + +2010, Google Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +* Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. +* Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Alternatively, this software may be distributed under the terms of the +GNU General Public License ("GPL") version 2 as published by the Free +Software Foundation. + + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +</pre> +<ul> + +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">flashrom-0.9.4</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://flashrom.org/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#GPL-2'>Gentoo Package Stock License GPL-2</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">flex-2.5.35_p10</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://flex.sourceforge.net/">homepage</a></span> +<div class="licence"> +<pre>Gentoo Package Stock License FLEX: + +Flex carries the copyright used for BSD software, slightly modified +because it originated at the Lawrence Berkeley (not Livermore!) Laboratory, +which operates under a contract with the Department of Energy: + + Copyright (c) 1990 The Regents of the University of California. + All rights reserved. + + This code is derived from software contributed to Berkeley by + Vern Paxson. + + The United States Government has rights in this work pursuant + to contract no. DE-AC03-76SF00098 between the United States + Department of Energy and the University of California. + + Redistribution and use in source and binary forms with or without + modification are permitted provided that: (1) source distributions + retain this entire copyright notice and comment, and (2) + distributions including binaries display the following + acknowledgement: ``This product includes software developed by the + University of California, Berkeley and its contributors'' in the + documentation or other materials provided with the distribution and + in all advertising materials mentioning features or use of this + software. Neither the name of the University nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE. + +This basically says "do whatever you please with this software except +remove this notice or take advantage of the University's (or the flex +authors') name". + +Note that the "flex.skl" scanner skeleton carries no copyright notice. +You are free to do whatever you please with scanners generated using flex; +for them, you are not even bound by the above copyright. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +</pre> +<ul> + +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">font-util-1.2.0</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://xorg.freedesktop.org/">homepage</a></span> +<div class="licence"> +<pre>Scanned Source License font-util-1.2.0/COPYING: + +Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice (including the next +paragraph) shall be included in all copies or substantial portions of the +Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + + ------------------------------------------------------------------------ + +Copyright (c) 2003 The NetBSD Foundation, Inc. +All rights reserved. + +This code is derived from software contributed to The NetBSD Foundation +by Ben Collver <collver1@attbi.com>. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS +``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS +BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + + ------------------------------------------------------------------------ + +Copyright (c) 2006 Martin Husemann. +Copyright (c) 2007 Joerg Sonnenberger. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. The name of the author may not be used to endorse or promote + products derived from this software without specific prior + written permission. + +THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS +``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS +BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + + ------------------------------------------------------------------------ + +Copyright 2005 Red Hat, Inc + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation. + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of the copyright holders shall +not be used in advertising or otherwise to promote the sale, use or +other dealings in this Software without prior written authorization +from the copyright holders. + + ------------------------------------------------------------------------ + +Copyright (c) 1991-2003 Unicode, Inc. All Rights reserved. + +This file is provided as-is by Unicode, Inc. (The Unicode Consortium). +No claims are made as to fitness for any particular purpose. No +warranties of any kind are expressed or implied. The recipient +agrees to determine applicability of information provided. If this +file has been provided on optical media by Unicode, Inc., the sole +remedy for any claim will be exchange of defective media within 90 +days of receipt. + +Unicode, Inc. hereby grants the right to freely use the information +supplied in this file in the creation of products supporting the +Unicode Standard, and to make copies of this file in any form for +internal or external distribution as long as this notice remains +attached. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +</pre> +<ul> + +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">fontconfig-2.7.1</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://fontconfig.org/">homepage</a></span> +<div class="licence"> +<pre>Scanned Source License fontconfig-2.7.1/COPYING: + +fontconfig/COPYING + +Copyright © 2001,2003 Keith Packard + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the name of Keith Packard not be used in +advertising or publicity pertaining to distribution of the software without +specific, written prior permission. Keith Packard makes no +representations about the suitability of this software for any purpose. It +is provided "as is" without express or implied warranty. + +THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +</pre> +<ul> + +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">freetype-2.4.12</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.freetype.org/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#GPL-2'>Gentoo Package Stock License GPL-2</a></li> +<li><a href='#FTL'>Gentoo Package Stock License FTL</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">fuse-2.8.6</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://fuse.sourceforge.net">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#GPL-2'>Gentoo Package Stock License GPL-2</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">fuse-exfat-1.0.1</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://code.google.com/p/exfat/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#GPL-3'>Gentoo Package Stock License GPL-3</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">gcc-libs-4.7.2</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="">homepage</a></span> +<div class="licence"> +<pre>Gentoo Package Stock License FDL-1.2: + + GNU Free Documentation License + Version 1.2, November 2002 + + + Copyright (C) 2000,2001,2002 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + +0. PREAMBLE + +The purpose of this License is to make a manual, textbook, or other +functional and useful document "free" in the sense of freedom: to +assure everyone the effective freedom to copy and redistribute it, +with or without modifying it, either commercially or noncommercially. +Secondarily, this License preserves for the author and publisher a way +to get credit for their work, while not being considered responsible +for modifications made by others. + +This License is a kind of "copyleft", which means that derivative +works of the document must themselves be free in the same sense. It +complements the GNU General Public License, which is a copyleft +license designed for free software. + +We have designed this License in order to use it for manuals for free +software, because free software needs free documentation: a free +program should come with manuals providing the same freedoms that the +software does. But this License is not limited to software manuals; +it can be used for any textual work, regardless of subject matter or +whether it is published as a printed book. We recommend this License +principally for works whose purpose is instruction or reference. + + +1. APPLICABILITY AND DEFINITIONS + +This License applies to any manual or other work, in any medium, that +contains a notice placed by the copyright holder saying it can be +distributed under the terms of this License. Such a notice grants a +world-wide, royalty-free license, unlimited in duration, to use that +work under the conditions stated herein. The "Document", below, +refers to any such manual or work. Any member of the public is a +licensee, and is addressed as "you". You accept the license if you +copy, modify or distribute the work in a way requiring permission +under copyright law. + +A "Modified Version" of the Document means any work containing the +Document or a portion of it, either copied verbatim, or with +modifications and/or translated into another language. + +A "Secondary Section" is a named appendix or a front-matter section of +the Document that deals exclusively with the relationship of the +publishers or authors of the Document to the Document's overall subject +(or to related matters) and contains nothing that could fall directly +within that overall subject. (Thus, if the Document is in part a +textbook of mathematics, a Secondary Section may not explain any +mathematics.) The relationship could be a matter of historical +connection with the subject or with related matters, or of legal, +commercial, philosophical, ethical or political position regarding +them. + +The "Invariant Sections" are certain Secondary Sections whose titles +are designated, as being those of Invariant Sections, in the notice +that says that the Document is released under this License. If a +section does not fit the above definition of Secondary then it is not +allowed to be designated as Invariant. The Document may contain zero +Invariant Sections. If the Document does not identify any Invariant +Sections then there are none. + +The "Cover Texts" are certain short passages of text that are listed, +as Front-Cover Texts or Back-Cover Texts, in the notice that says that +the Document is released under this License. A Front-Cover Text may +be at most 5 words, and a Back-Cover Text may be at most 25 words. + +A "Transparent" copy of the Document means a machine-readable copy, +represented in a format whose specification is available to the +general public, that is suitable for revising the document +straightforwardly with generic text editors or (for images composed of +pixels) generic paint programs or (for drawings) some widely available +drawing editor, and that is suitable for input to text formatters or +for automatic translation to a variety of formats suitable for input +to text formatters. A copy made in an otherwise Transparent file +format whose markup, or absence of markup, has been arranged to thwart +or discourage subsequent modification by readers is not Transparent. +An image format is not Transparent if used for any substantial amount +of text. A copy that is not "Transparent" is called "Opaque". + +Examples of suitable formats for Transparent copies include plain +ASCII without markup, Texinfo input format, LaTeX input format, SGML +or XML using a publicly available DTD, and standard-conforming simple +HTML, PostScript or PDF designed for human modification. Examples of +transparent image formats include PNG, XCF and JPG. Opaque formats +include proprietary formats that can be read and edited only by +proprietary word processors, SGML or XML for which the DTD and/or +processing tools are not generally available, and the +machine-generated HTML, PostScript or PDF produced by some word +processors for output purposes only. + +The "Title Page" means, for a printed book, the title page itself, +plus such following pages as are needed to hold, legibly, the material +this License requires to appear in the title page. For works in +formats which do not have any title page as such, "Title Page" means +the text near the most prominent appearance of the work's title, +preceding the beginning of the body of the text. + +A section "Entitled XYZ" means a named subunit of the Document whose +title either is precisely XYZ or contains XYZ in parentheses following +text that translates XYZ in another language. (Here XYZ stands for a +specific section name mentioned below, such as "Acknowledgements", +"Dedications", "Endorsements", or "History".) To "Preserve the Title" +of such a section when you modify the Document means that it remains a +section "Entitled XYZ" according to this definition. + +The Document may include Warranty Disclaimers next to the notice which +states that this License applies to the Document. These Warranty +Disclaimers are considered to be included by reference in this +License, but only as regards disclaiming warranties: any other +implication that these Warranty Disclaimers may have is void and has +no effect on the meaning of this License. + + +2. VERBATIM COPYING + +You may copy and distribute the Document in any medium, either +commercially or noncommercially, provided that this License, the +copyright notices, and the license notice saying this License applies +to the Document are reproduced in all copies, and that you add no other +conditions whatsoever to those of this License. You may not use +technical measures to obstruct or control the reading or further +copying of the copies you make or distribute. However, you may accept +compensation in exchange for copies. If you distribute a large enough +number of copies you must also follow the conditions in section 3. + +You may also lend copies, under the same conditions stated above, and +you may publicly display copies. + + +3. COPYING IN QUANTITY + +If you publish printed copies (or copies in media that commonly have +printed covers) of the Document, numbering more than 100, and the +Document's license notice requires Cover Texts, you must enclose the +copies in covers that carry, clearly and legibly, all these Cover +Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on +the back cover. Both covers must also clearly and legibly identify +you as the publisher of these copies. The front cover must present +the full title with all words of the title equally prominent and +visible. You may add other material on the covers in addition. +Copying with changes limited to the covers, as long as they preserve +the title of the Document and satisfy these conditions, can be treated +as verbatim copying in other respects. + +If the required texts for either cover are too voluminous to fit +legibly, you should put the first ones listed (as many as fit +reasonably) on the actual cover, and continue the rest onto adjacent +pages. + +If you publish or distribute Opaque copies of the Document numbering +more than 100, you must either include a machine-readable Transparent +copy along with each Opaque copy, or state in or with each Opaque copy +a computer-network location from which the general network-using +public has access to download using public-standard network protocols +a complete Transparent copy of the Document, free of added material. +If you use the latter option, you must take reasonably prudent steps, +when you begin distribution of Opaque copies in quantity, to ensure +that this Transparent copy will remain thus accessible at the stated +location until at least one year after the last time you distribute an +Opaque copy (directly or through your agents or retailers) of that +edition to the public. + +It is requested, but not required, that you contact the authors of the +Document well before redistributing any large number of copies, to give +them a chance to provide you with an updated version of the Document. + + +4. MODIFICATIONS + +You may copy and distribute a Modified Version of the Document under +the conditions of sections 2 and 3 above, provided that you release +the Modified Version under precisely this License, with the Modified +Version filling the role of the Document, thus licensing distribution +and modification of the Modified Version to whoever possesses a copy +of it. In addition, you must do these things in the Modified Version: + +A. Use in the Title Page (and on the covers, if any) a title distinct + from that of the Document, and from those of previous versions + (which should, if there were any, be listed in the History section + of the Document). You may use the same title as a previous version + if the original publisher of that version gives permission. +B. List on the Title Page, as authors, one or more persons or entities + responsible for authorship of the modifications in the Modified + Version, together with at least five of the principal authors of the + Document (all of its principal authors, if it has fewer than five), + unless they release you from this requirement. +C. State on the Title page the name of the publisher of the + Modified Version, as the publisher. +D. Preserve all the copyright notices of the Document. +E. Add an appropriate copyright notice for your modifications + adjacent to the other copyright notices. +F. Include, immediately after the copyright notices, a license notice + giving the public permission to use the Modified Version under the + terms of this License, in the form shown in the Addendum below. +G. Preserve in that license notice the full lists of Invariant Sections + and required Cover Texts given in the Document's license notice. +H. Include an unaltered copy of this License. +I. Preserve the section Entitled "History", Preserve its Title, and add + to it an item stating at least the title, year, new authors, and + publisher of the Modified Version as given on the Title Page. If + there is no section Entitled "History" in the Document, create one + stating the title, year, authors, and publisher of the Document as + given on its Title Page, then add an item describing the Modified + Version as stated in the previous sentence. +J. Preserve the network location, if any, given in the Document for + public access to a Transparent copy of the Document, and likewise + the network locations given in the Document for previous versions + it was based on. These may be placed in the "History" section. + You may omit a network location for a work that was published at + least four years before the Document itself, or if the original + publisher of the version it refers to gives permission. +K. For any section Entitled "Acknowledgements" or "Dedications", + Preserve the Title of the section, and preserve in the section all + the substance and tone of each of the contributor acknowledgements + and/or dedications given therein. +L. Preserve all the Invariant Sections of the Document, + unaltered in their text and in their titles. Section numbers + or the equivalent are not considered part of the section titles. +M. Delete any section Entitled "Endorsements". Such a section + may not be included in the Modified Version. +N. Do not retitle any existing section to be Entitled "Endorsements" + or to conflict in title with any Invariant Section. +O. Preserve any Warranty Disclaimers. + +If the Modified Version includes new front-matter sections or +appendices that qualify as Secondary Sections and contain no material +copied from the Document, you may at your option designate some or all +of these sections as invariant. To do this, add their titles to the +list of Invariant Sections in the Modified Version's license notice. +These titles must be distinct from any other section titles. + +You may add a section Entitled "Endorsements", provided it contains +nothing but endorsements of your Modified Version by various +parties--for example, statements of peer review or that the text has +been approved by an organization as the authoritative definition of a +standard. + +You may add a passage of up to five words as a Front-Cover Text, and a +passage of up to 25 words as a Back-Cover Text, to the end of the list +of Cover Texts in the Modified Version. Only one passage of +Front-Cover Text and one of Back-Cover Text may be added by (or +through arrangements made by) any one entity. If the Document already +includes a cover text for the same cover, previously added by you or +by arrangement made by the same entity you are acting on behalf of, +you may not add another; but you may replace the old one, on explicit +permission from the previous publisher that added the old one. + +The author(s) and publisher(s) of the Document do not by this License +give permission to use their names for publicity for or to assert or +imply endorsement of any Modified Version. + + +5. COMBINING DOCUMENTS + +You may combine the Document with other documents released under this +License, under the terms defined in section 4 above for modified +versions, provided that you include in the combination all of the +Invariant Sections of all of the original documents, unmodified, and +list them all as Invariant Sections of your combined work in its +license notice, and that you preserve all their Warranty Disclaimers. + +The combined work need only contain one copy of this License, and +multiple identical Invariant Sections may be replaced with a single +copy. If there are multiple Invariant Sections with the same name but +different contents, make the title of each such section unique by +adding at the end of it, in parentheses, the name of the original +author or publisher of that section if known, or else a unique number. +Make the same adjustment to the section titles in the list of +Invariant Sections in the license notice of the combined work. + +In the combination, you must combine any sections Entitled "History" +in the various original documents, forming one section Entitled +"History"; likewise combine any sections Entitled "Acknowledgements", +and any sections Entitled "Dedications". You must delete all sections +Entitled "Endorsements". + + +6. COLLECTIONS OF DOCUMENTS + +You may make a collection consisting of the Document and other documents +released under this License, and replace the individual copies of this +License in the various documents with a single copy that is included in +the collection, provided that you follow the rules of this License for +verbatim copying of each of the documents in all other respects. + +You may extract a single document from such a collection, and distribute +it individually under this License, provided you insert a copy of this +License into the extracted document, and follow this License in all +other respects regarding verbatim copying of that document. + + +7. AGGREGATION WITH INDEPENDENT WORKS + +A compilation of the Document or its derivatives with other separate +and independent documents or works, in or on a volume of a storage or +distribution medium, is called an "aggregate" if the copyright +resulting from the compilation is not used to limit the legal rights +of the compilation's users beyond what the individual works permit. +When the Document is included in an aggregate, this License does not +apply to the other works in the aggregate which are not themselves +derivative works of the Document. + +If the Cover Text requirement of section 3 is applicable to these +copies of the Document, then if the Document is less than one half of +the entire aggregate, the Document's Cover Texts may be placed on +covers that bracket the Document within the aggregate, or the +electronic equivalent of covers if the Document is in electronic form. +Otherwise they must appear on printed covers that bracket the whole +aggregate. + + +8. TRANSLATION + +Translation is considered a kind of modification, so you may +distribute translations of the Document under the terms of section 4. +Replacing Invariant Sections with translations requires special +permission from their copyright holders, but you may include +translations of some or all Invariant Sections in addition to the +original versions of these Invariant Sections. You may include a +translation of this License, and all the license notices in the +Document, and any Warranty Disclaimers, provided that you also include +the original English version of this License and the original versions +of those notices and disclaimers. In case of a disagreement between +the translation and the original version of this License or a notice +or disclaimer, the original version will prevail. + +If a section in the Document is Entitled "Acknowledgements", +"Dedications", or "History", the requirement (section 4) to Preserve +its Title (section 1) will typically require changing the actual +title. + + +9. TERMINATION + +You may not copy, modify, sublicense, or distribute the Document except +as expressly provided for under this License. Any other attempt to +copy, modify, sublicense or distribute the Document is void, and will +automatically terminate your rights under this License. However, +parties who have received copies, or rights, from you under this +License will not have their licenses terminated so long as such +parties remain in full compliance. + + +10. FUTURE REVISIONS OF THIS LICENSE + +The Free Software Foundation may publish new, revised versions +of the GNU Free Documentation License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. See +http://www.gnu.org/copyleft/. + +Each version of the License is given a distinguishing version number. +If the Document specifies that a particular numbered version of this +License "or any later version" applies to it, you have the option of +following the terms and conditions either of that specified version or +of any later version that has been published (not as a draft) by the +Free Software Foundation. If the Document does not specify a version +number of this License, you may choose any version ever published (not +as a draft) by the Free Software Foundation. + + +ADDENDUM: How to use this License for your documents + +To use this License in a document you have written, include a copy of +the License in the document and put the following copyright and +license notices just after the title page: + + Copyright (c) YEAR YOUR NAME. + Permission is granted to copy, distribute and/or modify this document + under the terms of the GNU Free Documentation License, Version 1.2 + or any later version published by the Free Software Foundation; + with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. + A copy of the license is included in the section entitled "GNU + Free Documentation License". + +If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, +replace the "with...Texts." line with this: + + with the Invariant Sections being LIST THEIR TITLES, with the + Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. + +If you have Invariant Sections without Cover Texts, or some other +combination of the three, merge those two alternatives to suit the +situation. + +If your document contains nontrivial examples of program code, we +recommend releasing these examples in parallel under your choice of +free software license, such as the GNU General Public License, +to permit their use in free software. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +</pre> +<ul> +<li><a href='#GPL-3'>Gentoo Package Stock License GPL-3</a></li> +<li><a href='#LGPL-3'>Gentoo Package Stock License LGPL-3</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">gdbm-1.9.1</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.gnu.org/software/gdbm/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#GPL-3'>Gentoo Package Stock License GPL-3</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">gflags-1.2</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://code.google.com/p/google-gflags/">homepage</a></span> +<div class="licence"> +<pre>Scanned Source License gflags-1.2/COPYING: + +Copyright (c) 2006, Google Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License gflags-1.2/packages/deb/copyright: + +This package was debianized by Google Inc. <opensource@google.com> on +13 December 2006. + +It was downloaded from http://code.google.com/ + +Upstream Author: opensource@google.com + +Copyright (c) 2006, Google Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +</pre> +<ul> + +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">glew-1.5.6</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://glew.sourceforge.net/">homepage</a></span> +<div class="licence"> +<pre>Scanned Source License glew-1.5.6/LICENSE.txt: + +The OpenGL Extension Wrangler Library +Copyright (C) 2002-2007, Milan Ikits <milan ikits[]ieee org> +Copyright (C) 2002-2007, Marcelo E. Magallon <mmagallo[]debian org> +Copyright (C) 2002, Lev Povalahev +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. +* The name of the author may be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF +THE POSSIBILITY OF SUCH DAMAGE. + + +Mesa 3-D graphics library +Version: 7.0 + +Copyright (C) 1999-2007 Brian Paul All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +Copyright (c) 2007 The Khronos Group Inc. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and/or associated documentation files (the +"Materials"), to deal in the Materials without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Materials, and to +permit persons to whom the Materials are furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Materials. + +THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +</pre> +<ul> + +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">glib-2.34.3</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.gtk.org/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#LGPL-2+'>Gentoo Package Stock License LGPL-2+</a></li> +<li><a href='#LGPL-2'>Gentoo Package Stock License LGPL-2</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">glog-0.3.2</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://code.google.com/p/google-glog/">homepage</a></span> +<div class="licence"> +<pre>Scanned Source License glog-0.3.2/COPYING: + +Copyright (c) 2008, Google Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +A function gettimeofday in utilities.cc is based on + +http://www.google.com/codesearch/p?hl=en#dR3YEbitojA/COPYING&q=GetSystemTimeAsFileTime%20license:bsd + +The license of this code is: + +Copyright (c) 2003-2008, Jouni Malinen <j@w1.fi> and contributors +All Rights Reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +3. Neither the name(s) of the above-listed copyright holder(s) nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License glog-0.3.2/packages/deb/copyright: + +This package was debianized by Google Inc. <opensource@google.com> on +13 June 2008. + +It was downloaded from http://code.google.com/ + +Upstream Author: opensource@google.com + +Copyright (c) 2008, Google Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +</pre> +<ul> + +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">glproto-1.4.14</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://xorg.freedesktop.org/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#SGI-B-2.0'>Gentoo Package Stock License SGI-B-2.0</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">glu-9.0.0</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://cgit.freedesktop.org/mesa/glu/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#SGI-B-2.0'>Gentoo Package Stock License SGI-B-2.0</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">gmock-1.6.0</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://code.google.com/p/googlemock/">homepage</a></span> +<div class="licence"> +<pre>Scanned Source License gmock-1.6.0/COPYING: + +Copyright 2008, Google Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License gmock-1.6.0/gtest/COPYING: + +Copyright 2008, Google Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License gmock-1.6.0/scripts/generator/COPYING: + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [2007] Neal Norwitz + Portions Copyright [2007] Google Inc. + + Licensed 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. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +</pre> +<ul> + +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">gmp-5.0.2_p1</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://gmplib.org/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#LGPL-3'>Gentoo Package Stock License LGPL-3</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">grep-2.14</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.gnu.org/software/grep/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#GPL-3'>Gentoo Package Stock License GPL-3</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">gtest-1.6.0</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://code.google.com/p/googletest/">homepage</a></span> +<div class="licence"> +<pre>Scanned Source License gtest-1.6.0/COPYING: + +Copyright 2008, Google Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +</pre> +<ul> + +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">gtk+-2.20.1</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.gtk.org/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#LGPL-2'>Gentoo Package Stock License LGPL-2</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">gtk-doc-am-1.18</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.gtk.org/gtk-doc/">homepage</a></span> +<div class="licence"> +<pre>Gentoo Package Stock License FDL-1.1: + + GNU Free Documentation License + Version 1.1, March 2000 + + Copyright (C) 2000 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + +0. PREAMBLE + +The purpose of this License is to make a manual, textbook, or other +written document "free" in the sense of freedom: to assure everyone +the effective freedom to copy and redistribute it, with or without +modifying it, either commercially or noncommercially. Secondarily, +this License preserves for the author and publisher a way to get +credit for their work, while not being considered responsible for +modifications made by others. + +This License is a kind of "copyleft", which means that derivative +works of the document must themselves be free in the same sense. It +complements the GNU General Public License, which is a copyleft +license designed for free software. + +We have designed this License in order to use it for manuals for free +software, because free software needs free documentation: a free +program should come with manuals providing the same freedoms that the +software does. But this License is not limited to software manuals; +it can be used for any textual work, regardless of subject matter or +whether it is published as a printed book. We recommend this License +principally for works whose purpose is instruction or reference. + + +1. APPLICABILITY AND DEFINITIONS + +This License applies to any manual or other work that contains a +notice placed by the copyright holder saying it can be distributed +under the terms of this License. The "Document", below, refers to any +such manual or work. Any member of the public is a licensee, and is +addressed as "you". + +A "Modified Version" of the Document means any work containing the +Document or a portion of it, either copied verbatim, or with +modifications and/or translated into another language. + +A "Secondary Section" is a named appendix or a front-matter section of +the Document that deals exclusively with the relationship of the +publishers or authors of the Document to the Document's overall subject +(or to related matters) and contains nothing that could fall directly +within that overall subject. (For example, if the Document is in part a +textbook of mathematics, a Secondary Section may not explain any +mathematics.) The relationship could be a matter of historical +connection with the subject or with related matters, or of legal, +commercial, philosophical, ethical or political position regarding +them. + +The "Invariant Sections" are certain Secondary Sections whose titles +are designated, as being those of Invariant Sections, in the notice +that says that the Document is released under this License. + +The "Cover Texts" are certain short passages of text that are listed, +as Front-Cover Texts or Back-Cover Texts, in the notice that says that +the Document is released under this License. + +A "Transparent" copy of the Document means a machine-readable copy, +represented in a format whose specification is available to the +general public, whose contents can be viewed and edited directly and +straightforwardly with generic text editors or (for images composed of +pixels) generic paint programs or (for drawings) some widely available +drawing editor, and that is suitable for input to text formatters or +for automatic translation to a variety of formats suitable for input +to text formatters. A copy made in an otherwise Transparent file +format whose markup has been designed to thwart or discourage +subsequent modification by readers is not Transparent. A copy that is +not "Transparent" is called "Opaque". + +Examples of suitable formats for Transparent copies include plain +ASCII without markup, Texinfo input format, LaTeX input format, SGML +or XML using a publicly available DTD, and standard-conforming simple +HTML designed for human modification. Opaque formats include +PostScript, PDF, proprietary formats that can be read and edited only +by proprietary word processors, SGML or XML for which the DTD and/or +processing tools are not generally available, and the +machine-generated HTML produced by some word processors for output +purposes only. + +The "Title Page" means, for a printed book, the title page itself, +plus such following pages as are needed to hold, legibly, the material +this License requires to appear in the title page. For works in +formats which do not have any title page as such, "Title Page" means +the text near the most prominent appearance of the work's title, +preceding the beginning of the body of the text. + + +2. VERBATIM COPYING + +You may copy and distribute the Document in any medium, either +commercially or noncommercially, provided that this License, the +copyright notices, and the license notice saying this License applies +to the Document are reproduced in all copies, and that you add no other +conditions whatsoever to those of this License. You may not use +technical measures to obstruct or control the reading or further +copying of the copies you make or distribute. However, you may accept +compensation in exchange for copies. If you distribute a large enough +number of copies you must also follow the conditions in section 3. + +You may also lend copies, under the same conditions stated above, and +you may publicly display copies. + + +3. COPYING IN QUANTITY + +If you publish printed copies of the Document numbering more than 100, +and the Document's license notice requires Cover Texts, you must enclose +the copies in covers that carry, clearly and legibly, all these Cover +Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on +the back cover. Both covers must also clearly and legibly identify +you as the publisher of these copies. The front cover must present +the full title with all words of the title equally prominent and +visible. You may add other material on the covers in addition. +Copying with changes limited to the covers, as long as they preserve +the title of the Document and satisfy these conditions, can be treated +as verbatim copying in other respects. + +If the required texts for either cover are too voluminous to fit +legibly, you should put the first ones listed (as many as fit +reasonably) on the actual cover, and continue the rest onto adjacent +pages. + +If you publish or distribute Opaque copies of the Document numbering +more than 100, you must either include a machine-readable Transparent +copy along with each Opaque copy, or state in or with each Opaque copy +a publicly-accessible computer-network location containing a complete +Transparent copy of the Document, free of added material, which the +general network-using public has access to download anonymously at no +charge using public-standard network protocols. If you use the latter +option, you must take reasonably prudent steps, when you begin +distribution of Opaque copies in quantity, to ensure that this +Transparent copy will remain thus accessible at the stated location +until at least one year after the last time you distribute an Opaque +copy (directly or through your agents or retailers) of that edition to +the public. + +It is requested, but not required, that you contact the authors of the +Document well before redistributing any large number of copies, to give +them a chance to provide you with an updated version of the Document. + + +4. MODIFICATIONS + +You may copy and distribute a Modified Version of the Document under +the conditions of sections 2 and 3 above, provided that you release +the Modified Version under precisely this License, with the Modified +Version filling the role of the Document, thus licensing distribution +and modification of the Modified Version to whoever possesses a copy +of it. In addition, you must do these things in the Modified Version: + +A. Use in the Title Page (and on the covers, if any) a title distinct + from that of the Document, and from those of previous versions + (which should, if there were any, be listed in the History section + of the Document). You may use the same title as a previous version + if the original publisher of that version gives permission. +B. List on the Title Page, as authors, one or more persons or entities + responsible for authorship of the modifications in the Modified + Version, together with at least five of the principal authors of the + Document (all of its principal authors, if it has less than five). +C. State on the Title page the name of the publisher of the + Modified Version, as the publisher. +D. Preserve all the copyright notices of the Document. +E. Add an appropriate copyright notice for your modifications + adjacent to the other copyright notices. +F. Include, immediately after the copyright notices, a license notice + giving the public permission to use the Modified Version under the + terms of this License, in the form shown in the Addendum below. +G. Preserve in that license notice the full lists of Invariant Sections + and required Cover Texts given in the Document's license notice. +H. Include an unaltered copy of this License. +I. Preserve the section entitled "History", and its title, and add to + it an item stating at least the title, year, new authors, and + publisher of the Modified Version as given on the Title Page. If + there is no section entitled "History" in the Document, create one + stating the title, year, authors, and publisher of the Document as + given on its Title Page, then add an item describing the Modified + Version as stated in the previous sentence. +J. Preserve the network location, if any, given in the Document for + public access to a Transparent copy of the Document, and likewise + the network locations given in the Document for previous versions + it was based on. These may be placed in the "History" section. + You may omit a network location for a work that was published at + least four years before the Document itself, or if the original + publisher of the version it refers to gives permission. +K. In any section entitled "Acknowledgements" or "Dedications", + preserve the section's title, and preserve in the section all the + substance and tone of each of the contributor acknowledgements + and/or dedications given therein. +L. Preserve all the Invariant Sections of the Document, + unaltered in their text and in their titles. Section numbers + or the equivalent are not considered part of the section titles. +M. Delete any section entitled "Endorsements". Such a section + may not be included in the Modified Version. +N. Do not retitle any existing section as "Endorsements" + or to conflict in title with any Invariant Section. + +If the Modified Version includes new front-matter sections or +appendices that qualify as Secondary Sections and contain no material +copied from the Document, you may at your option designate some or all +of these sections as invariant. To do this, add their titles to the +list of Invariant Sections in the Modified Version's license notice. +These titles must be distinct from any other section titles. + +You may add a section entitled "Endorsements", provided it contains +nothing but endorsements of your Modified Version by various +parties--for example, statements of peer review or that the text has +been approved by an organization as the authoritative definition of a +standard. + +You may add a passage of up to five words as a Front-Cover Text, and a +passage of up to 25 words as a Back-Cover Text, to the end of the list +of Cover Texts in the Modified Version. Only one passage of +Front-Cover Text and one of Back-Cover Text may be added by (or +through arrangements made by) any one entity. If the Document already +includes a cover text for the same cover, previously added by you or +by arrangement made by the same entity you are acting on behalf of, +you may not add another; but you may replace the old one, on explicit +permission from the previous publisher that added the old one. + +The author(s) and publisher(s) of the Document do not by this License +give permission to use their names for publicity for or to assert or +imply endorsement of any Modified Version. + + +5. COMBINING DOCUMENTS + +You may combine the Document with other documents released under this +License, under the terms defined in section 4 above for modified +versions, provided that you include in the combination all of the +Invariant Sections of all of the original documents, unmodified, and +list them all as Invariant Sections of your combined work in its +license notice. + +The combined work need only contain one copy of this License, and +multiple identical Invariant Sections may be replaced with a single +copy. If there are multiple Invariant Sections with the same name but +different contents, make the title of each such section unique by +adding at the end of it, in parentheses, the name of the original +author or publisher of that section if known, or else a unique number. +Make the same adjustment to the section titles in the list of +Invariant Sections in the license notice of the combined work. + +In the combination, you must combine any sections entitled "History" +in the various original documents, forming one section entitled +"History"; likewise combine any sections entitled "Acknowledgements", +and any sections entitled "Dedications". You must delete all sections +entitled "Endorsements." + + +6. COLLECTIONS OF DOCUMENTS + +You may make a collection consisting of the Document and other documents +released under this License, and replace the individual copies of this +License in the various documents with a single copy that is included in +the collection, provided that you follow the rules of this License for +verbatim copying of each of the documents in all other respects. + +You may extract a single document from such a collection, and distribute +it individually under this License, provided you insert a copy of this +License into the extracted document, and follow this License in all +other respects regarding verbatim copying of that document. + + +7. AGGREGATION WITH INDEPENDENT WORKS + +A compilation of the Document or its derivatives with other separate +and independent documents or works, in or on a volume of a storage or +distribution medium, does not as a whole count as a Modified Version +of the Document, provided no compilation copyright is claimed for the +compilation. Such a compilation is called an "aggregate", and this +License does not apply to the other self-contained works thus compiled +with the Document, on account of their being thus compiled, if they +are not themselves derivative works of the Document. + +If the Cover Text requirement of section 3 is applicable to these +copies of the Document, then if the Document is less than one quarter +of the entire aggregate, the Document's Cover Texts may be placed on +covers that surround only the Document within the aggregate. +Otherwise they must appear on covers around the whole aggregate. + + +8. TRANSLATION + +Translation is considered a kind of modification, so you may +distribute translations of the Document under the terms of section 4. +Replacing Invariant Sections with translations requires special +permission from their copyright holders, but you may include +translations of some or all Invariant Sections in addition to the +original versions of these Invariant Sections. You may include a +translation of this License provided that you also include the +original English version of this License. In case of a disagreement +between the translation and the original English version of this +License, the original English version will prevail. + + +9. TERMINATION + +You may not copy, modify, sublicense, or distribute the Document except +as expressly provided for under this License. Any other attempt to +copy, modify, sublicense or distribute the Document is void, and will +automatically terminate your rights under this License. However, +parties who have received copies, or rights, from you under this +License will not have their licenses terminated so long as such +parties remain in full compliance. + + +10. FUTURE REVISIONS OF THIS LICENSE + +The Free Software Foundation may publish new, revised versions +of the GNU Free Documentation License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. See +http://www.gnu.org/copyleft/. + +Each version of the License is given a distinguishing version number. +If the Document specifies that a particular numbered version of this +License "or any later version" applies to it, you have the option of +following the terms and conditions either of that specified version or +of any later version that has been published (not as a draft) by the +Free Software Foundation. If the Document does not specify a version +number of this License, you may choose any version ever published (not +as a draft) by the Free Software Foundation. + + +ADDENDUM: How to use this License for your documents + +To use this License in a document you have written, include a copy of +the License in the document and put the following copyright and +license notices just after the title page: + + Copyright (c) YEAR YOUR NAME. + Permission is granted to copy, distribute and/or modify this document + under the terms of the GNU Free Documentation License, Version 1.1 + or any later version published by the Free Software Foundation; + with the Invariant Sections being LIST THEIR TITLES, with the + Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. + A copy of the license is included in the section entitled "GNU + Free Documentation License". + +If you have no Invariant Sections, write "with no Invariant Sections" +instead of saying which ones are invariant. If you have no +Front-Cover Texts, write "no Front-Cover Texts" instead of +"Front-Cover Texts being LIST"; likewise for Back-Cover Texts. + +If your document contains nontrivial examples of program code, we +recommend releasing these examples in parallel under your choice of +free software license, such as the GNU General Public License, +to permit their use in free software. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +</pre> +<ul> +<li><a href='#GPL-2'>Gentoo Package Stock License GPL-2</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">gzip-1.5</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.gnu.org/software/gzip/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#GPL-3'>Gentoo Package Stock License GPL-3</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">harfbuzz-0.9.18</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.freedesktop.org/wiki/Software/HarfBuzz">homepage</a></span> +<div class="licence"> +<pre>Scanned Source License harfbuzz-0.9.18/COPYING: + +HarfBuzz is licensed under the so-called "Old MIT" license. Details follow. +For parts of HarfBuzz that are licensed under different licenses see individual +files names COPYING in subdirectories where applicable. + +Copyright © 2010,2011,2012 Google, Inc. +Copyright © 2012 Mozilla Foundation +Copyright © 2011 Codethink Limited +Copyright © 2008,2010 Nokia Corporation and/or its subsidiary(-ies) +Copyright © 2009 Keith Stribley +Copyright © 2009 Martin Hosken and SIL International +Copyright © 2007 Chris Wilson +Copyright © 2006 Behdad Esfahbod +Copyright © 2005 David Turner +Copyright © 2004,2007,2008,2009,2010 Red Hat, Inc. +Copyright © 1998-2004 David Turner and Werner Lemberg + +For full copyright notices consult the individual files in the package. + + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License harfbuzz-0.9.18/src/hb-icu-le/COPYING: + +The contents of this directory are licensed under the ICU license. +See file license.html. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License harfbuzz-0.9.18/src/hb-old/COPYING: + +HarfBuzz-old was previously licensed under different licenses. This was +changed in January 2008. If you need to relicense your old copies, +consult the announcement of the license change on the internet. +Other than that, each copy of HarfBuzz-old is licensed under the COPYING +file included with it. The actual license follows: + + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License harfbuzz-0.9.18/src/hb-ucdn/COPYING: + +The contents of this directory are licensed under the following terms: + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Gentoo Package Stock License icu: + +ICU License - ICU 1.8.1 and later + +COPYRIGHT AND PERMISSION NOTICE + +Copyright (c) 1995-2003 International Business Machines Corporation and others +All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, and/or sell copies of the Software, and to permit persons +to whom the Software is furnished to do so, provided that the above +copyright notice(s) and this permission notice appear in all copies of +the Software and that both the above copyright notice(s) and this +permission notice appear in supporting documentation. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL +INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING +FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, +NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION +WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, use +or other dealings in this Software without prior written authorization +of the copyright holder. + +-------------------------------------------------------------------------------- +All trademarks and registered trademarks mentioned herein are the property of their respective owners. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +</pre> +<ul> +<li><a href='#ISC'>Gentoo Package Stock License ISC</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">hdparm-9.39</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://sourceforge.net/projects/hdparm/">homepage</a></span> +<div class="licence"> +<pre>Scanned Source License hdparm-9.39/LICENSE.TXT: + +BSD-Style Open Source License: + +You may freely use, modify, and redistribute the hdparm program, +as either binary or source, or both. + +The only condition is that my name and copyright notice +remain in the source code as-is. + +Mark Lord (mlord@pobox.com) + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License hdparm-9.39/debian/copyright: + +This package was debianized by Christopher L Cheney <ccheney@debian.org> on +Wed, 21 Nov 2001 15:51:14 -0600. + +It was downloaded from http://www.ibiblio.org/pub/Linux/system/hardware + +Upstream Author: Mark S. Lord <mlord@pobox.com> + +Copyright: + +/* hdparm.c - Command line interface to get/set hard disk parameters */ +/* - by Mark Lord © 1994-2008 -- freely distributable */ + +You are free to distribute this software under the terms of the BSD License. +On Debian systems, the complete text of the BSD License can be found in +/usr/share/common-licenses/BSD + + + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +</pre> +<ul> +<li><a href='#GPL-2'>Gentoo Package Stock License GPL-2</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">hwids-20120922</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="https://github.com/gentoo/hwids">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#GPL-2'>Gentoo Package Stock License GPL-2</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">ibus-1.4.99.20120314</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://code.google.com/p/ibus/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#LGPL-2.1'>Gentoo Package Stock License LGPL-2.1</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">iniparser-3.0b</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://ndevilla.free.fr/iniparser/">homepage</a></span> +<div class="licence"> +<pre>Scanned Source License iniparser3.0b/LICENSE: + +Copyright (c) 2000-2007 by Nicolas Devillard. +MIT License + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +</pre> +<ul> + +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">input-tools-3.0.0.0</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.google.com/inputtools">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#BSD-Google'>Custom License BSD-Google</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">intltool-0.41.0</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://edge.launchpad.net/intltool/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#GPL-2'>Gentoo Package Stock License GPL-2</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">iotools-1.4</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://code.google.com/p/iotools/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#GPL-2'>Gentoo Package Stock License GPL-2</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">iptables-1.4.8</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.iptables.org/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#GPL-2'>Gentoo Package Stock License GPL-2</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">iputils-20100418</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.linux-foundation.org/en/Net:Iputils">homepage</a></span> +<div class="licence"> +<pre>Copyright Attribution License chromiumos-overlay/licenses/copyright-attribution/net-misc/iputils: + +Copyright (c) 1989 The Regents of the University of California. +All rights reserved. + +This code is derived from software contributed to Berkeley by +Mike Muuss. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. All advertising materials mentioning features or use of this software + must display the following acknowledgement: + This product includes software developed by the University of + California, Berkeley and its contributors. +4. Neither the name of the University nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +</pre> +<ul> + +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">iw-3.6</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://wireless.kernel.org/en/users/Documentation/iw">homepage</a></span> +<div class="licence"> +<pre>Scanned Source License iw-3.6/COPYING: + +Copyright (c) 2007, 2008 Johannes Berg +Copyright (c) 2007 Andy Lutomirski +Copyright (c) 2007 Mike Kershaw +Copyright (c) 2008-2009 Luis R. Rodriguez + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +</pre> +<ul> +<li><a href='#as-is'>Gentoo Package Stock License as-is</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">kbd-1.15.3</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://freshmeat.net/projects/kbd/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#GPL-2'>Gentoo Package Stock License GPL-2</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">keyutils-1.1</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.kernel.org/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#LGPL-2.1'>Gentoo Package Stock License LGPL-2.1</a></li> +<li><a href='#GPL-2'>Gentoo Package Stock License GPL-2</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">ko-nanumfonts-3.10.0</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://hangeul.naver.com/index.nhn">homepage</a></span> +<div class="licence"> +<pre>Scanned Source License ko-nanumfonts-3.10.0/LICENSE: + +Copyright (c) 2010, NHN Corporation (http://www.nhncorp.com), +with Reserved Font Name Nanum, Naver Nanum, NanumGothic, Naver +NanumGothic, NanumMyeongjo, Naver NanumMyeongjo, NanumBrush, Naver +NanumBrush, NanumPen, Naver NanumPen + +This Font Software is licensed under the SIL Open Font License, +Version 1.1. + +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 + +PREAMBLE The goals of the Open Font License (OFL) are to stimulate +worldwide development of collaborative font projects, to support the font +creation efforts of academic and linguistic communities, and to provide +a free and open framework in which fonts may be shared and improved in +partnership with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. +The fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply to +any document created using the fonts or their derivatives. + + + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. +This may include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components +as distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting ? in part or in whole ? +any of the components of the Original Version, by changing formats or +by porting the Font Software to a new environment. + +"Author" refers to any designer, engineer, programmer, technical writer +or other person who contributed to the Font Software. + + +PERMISSION & CONDITIONS + +Permission is hereby granted, free of charge, to any person obtaining a +copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components,in + Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, + redistributed and/or sold with any software, provided that each copy + contains the above copyright notice and this license. These can be + included either as stand-alone text files, human-readable headers or + in the appropriate machine-readable metadata fields within text or + binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font + Name(s) unless explicit written permission is granted by the + corresponding Copyright Holder. This restriction only applies to the + primary font name as presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font + Software shall not be used to promote, endorse or advertise any + Modified Version, except to acknowledge the contribution(s) of the + Copyright Holder(s) and the Author(s) or with their explicit written + permission. + +5) The Font Software, modified or unmodified, in part or in whole, must + be distributed entirely under this license, and must not be distributed + under any other license. The requirement for fonts to remain under + this license does not apply to any document created using the Font + Software. + + + +TERMINATION +This license becomes null and void if any of the above conditions are not met. + + + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER +DEALINGS IN THE FONT SOFTWARE. + + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +</pre> +<ul> +<li><a href='#OFL-1.1'>Gentoo Package Stock License OFL-1.1</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">ladspa-sdk-1.13</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.ladspa.org/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#LGPL-2.1'>Gentoo Package Stock License LGPL-2.1</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">laptop-mode-tools-1.59</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.samwel.tk/laptop_mode/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#GPL-2'>Gentoo Package Stock License GPL-2</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">leveldb-0.0.1</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://code.google.com/p/leveldb/">homepage</a></span> +<div class="licence"> +<pre>Scanned Source License leveldb-0.0.1/LICENSE: + +Copyright (c) 2011 The LevelDB Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +</pre> +<ul> + +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">libatomic_ops-7.2d</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.hpl.hp.com/research/linux/atomic_ops/">homepage</a></span> +<div class="licence"> +<pre>Scanned Source License gc-7.2/libatomic_ops/COPYING: + + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License gc-7.2/libatomic_ops/doc/COPYING: + + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License gc-7.2/libatomic_ops/doc/LICENSING.txt: + +Our intent is to make it easy to use libatomic_ops, in +both free and proprietary software. Hence most code that we expect to be +linked into a client application is covered by an MIT-style license. + +A few library routines are covered by the GNU General Public License. +These are put into a separate library, libatomic_ops_gpl.a . + +The low-level part of the library is mostly covered by the following +license: + +---------------------------------------- + +Copyright (c) ... + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +-------------------------------- + +A few files in the sysdeps directory were inherited in part from the +Boehm-Demers-Weiser conservative garbage collector, and are covered by +its license, which is similar in spirit: + +-------------------------------- + +Copyright (c) ... + +THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED +OR IMPLIED. ANY USE IS AT YOUR OWN RISK. + +Permission is hereby granted to use or copy this program +for any purpose, provided the above notices are retained on all copies. +Permission to modify the code and to distribute modified code is granted, +provided the above notices are retained, and a notice that the code was +modified is included with the above copyright notice. + +---------------------------------- + +A few files are covered by the GNU General Public License. (See file +"COPYING".) This applies only to test code, sample applications, +and the libatomic_ops_gpl portion of the library. +Thus libatomic_ops_gpl should generally not be linked into proprietary code. +(This distinction was motivated by patent considerations.) + +It is possible that the license of the GPL pieces may be changed for +future versions to make them more consistent with the rest of the package. +If you submit patches, and have strong preferences about licensing, please +express them. + + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Gentoo Package Stock License boehm-gc: + +<copyright notice> + +THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED +OR IMPLIED. ANY USE IS AT YOUR OWN RISK. + +Permission is hereby granted to use or copy this program +for any purpose, provided the above notices are retained on all copies. +Permission to modify the code and to distribute modified code is granted, +provided the above notices are retained, and a notice that the code was +modified is included with the above copyright notice. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +</pre> +<ul> +<li><a href='#GPL-2'>Gentoo Package Stock License GPL-2</a></li> +<li><a href='#GPL-2+'>Gentoo Package Stock License GPL-2+</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">libcap-2.17</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.friedhoff.org/posixfilecaps.html">homepage</a></span> +<div class="licence"> +<pre>Scanned Source License libcap-2.17/License: + +Unless otherwise *explicitly* stated, the following text describes the +licensed conditions under which the contents of this libcap release +may be used and distributed: + +------------------------------------------------------------------------- +Redistribution and use in source and binary forms of libcap, with +or without modification, are permitted provided that the following +conditions are met: + +1. Redistributions of source code must retain any existing copyright + notice, and this entire permission notice in its entirety, + including the disclaimer of warranties. + +2. Redistributions in binary form must reproduce all prior and current + copyright notices, this list of conditions, and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + +3. The name of any author may not be used to endorse or promote + products derived from this software without their specific prior + written permission. + +ALTERNATIVELY, this product may be distributed under the terms of the +GNU General Public License, in which case the provisions of the GNU +GPL are required INSTEAD OF the above restrictions. (This clause is +necessary due to a potential conflict between the GNU GPL and the +restrictions contained in a BSD-style copyright.) + +THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED +WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS +OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR +TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE +USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. +------------------------------------------------------------------------- + + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License libcap-2.17/pam_cap/License: + +Unless otherwise *explicitly* stated the following text describes the +licensed conditions under which the contents of this module release +may be distributed: + +------------------------------------------------------------------------- +Redistribution and use in source and binary forms of this module, with +or without modification, are permitted provided that the following +conditions are met: + +1. Redistributions of source code must retain any existing copyright + notice, and this entire permission notice in its entirety, + including the disclaimer of warranties. + +2. Redistributions in binary form must reproduce all prior and current + copyright notices, this list of conditions, and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + +3. The name of any author may not be used to endorse or promote + products derived from this software without their specific prior + written permission. + +ALTERNATIVELY, this product may be distributed under the terms of the +GNU Library General Public License, in which case the provisions of +the GNU LGPL are required INSTEAD OF the above restrictions. (This +clause is necessary due to a potential conflict between the GNU LGPL +and the restrictions contained in a BSD-style copyright.) + +THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED +WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS +OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR +TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE +USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. +------------------------------------------------------------------------- + + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +</pre> +<ul> +<li><a href='#GPL-2'>Gentoo Package Stock License GPL-2</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">libdaemon-0.14</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://0pointer.de/lennart/projects/libdaemon/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#LGPL-2.1'>Gentoo Package Stock License LGPL-2.1</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">libdivsufsort-2.0.1</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://code.google.com/p/libdivsufsort/">homepage</a></span> +<div class="licence"> +<pre>Scanned Source License libdivsufsort-2.0.1/COPYING: + +The libdivsufsort copyright is as follows: + +Copyright (c) 2003-2008 Yuta Mori All Rights Reserved. + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +See also the libdivsufsort web site: + http://libdivsufsort.googlecode.com/ for more information. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +</pre> +<ul> + +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">libevent-2.0.21</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://libevent.org/">homepage</a></span> +<div class="licence"> +<pre>Copyright Attribution License chromiumos-overlay/licenses/copyright-attribution/dev-libs/libevent: + +Copyright (c) 2002, 2003 Niels Provos <provos@citi.umich.edu> +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +</pre> +<ul> + +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">libffi-3.0.9</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://sourceware.org/libffi/">homepage</a></span> +<div class="licence"> +<pre>Scanned Source License libffi-3.0.9/LICENSE: + +libffi - Copyright (c) 1996-2009 Anthony Green, Red Hat, Inc and others. +See source files for details. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +``Software''), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +</pre> +<ul> + +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">libgcrypt-1.4.6</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.gnupg.org/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#LGPL-2.1'>Gentoo Package Stock License LGPL-2.1</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">libgpg-error-1.10</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.gnupg.org/related_software/libgpg-error">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#LGPL-2.1'>Gentoo Package Stock License LGPL-2.1</a></li> +<li><a href='#GPL-2'>Gentoo Package Stock License GPL-2</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">libmnl-1.0.3</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://netfilter.org/projects/libmnl">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#LGPL-2.1'>Gentoo Package Stock License LGPL-2.1</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">libmtp-0.0.1</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://libmtp.sourceforge.net/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#LGPL-2.1'>Gentoo Package Stock License LGPL-2.1</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">libnetfilter_queue-1.0.1</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.netfilter.org/projects/libnetfilter_queue/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#GPL-2'>Gentoo Package Stock License GPL-2</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">libnfnetlink-1.0.1</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.netfilter.org/projects/libnfnetlink/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#GPL-2'>Gentoo Package Stock License GPL-2</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">libnih-1.0.3</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="https://launchpad.net/libnih">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#GPL-2'>Gentoo Package Stock License GPL-2</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">libnl-1.1</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://people.suug.ch/~tgr/libnl/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#LGPL-2.1'>Gentoo Package Stock License LGPL-2.1</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">libnl-3.2.14</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.infradead.org/~tgr/libnl/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#LGPL-2.1'>Gentoo Package Stock License LGPL-2.1</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">libp11-0.2.8</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.opensc-project.org/libp11/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#LGPL-2.1'>Gentoo Package Stock License LGPL-2.1</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">libpcap-1.1.1</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.tcpdump.org/">homepage</a></span> +<div class="licence"> +<pre>Scanned Source License libpcap-1.1.1/LICENSE: + +License: BSD + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + 3. The names of the authors may not be used to endorse or promote + products derived from this software without specific prior + written permission. + +THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +</pre> +<ul> + +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">libpcre-8.30</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.pcre.org/">homepage</a></span> +<div class="licence"> +<pre>Scanned Source License pcre-8.30/COPYING: + +PCRE LICENCE + +Please see the file LICENCE in the PCRE distribution for licensing details. + +End + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License pcre-8.30/LICENCE: + +PCRE LICENCE +------------ + +PCRE is a library of functions to support regular expressions whose syntax +and semantics are as close as possible to those of the Perl 5 language. + +Release 8 of PCRE is distributed under the terms of the "BSD" licence, as +specified below. The documentation for PCRE, supplied in the "doc" +directory, is distributed under the same terms as the software itself. + +The basic library functions are written in C and are freestanding. Also +included in the distribution is a set of C++ wrapper functions, and a +just-in-time compiler that can be used to optimize pattern matching. These +are both optional features that can be omitted when the library is built. + + +THE BASIC LIBRARY FUNCTIONS +--------------------------- + +Written by: Philip Hazel +Email local part: ph10 +Email domain: cam.ac.uk + +University of Cambridge Computing Service, +Cambridge, England. + +Copyright (c) 1997-2012 University of Cambridge +All rights reserved. + + +PCRE JUST-IN-TIME COMPILATION SUPPORT +------------------------------------- + +Written by: Zoltan Herczeg +Email local part: hzmester +Emain domain: freemail.hu + +Copyright(c) 2010-2012 Zoltan Herczeg +All rights reserved. + + +STACK-LESS JUST-IN-TIME COMPILER +-------------------------------- + +Written by: Zoltan Herczeg +Email local part: hzmester +Emain domain: freemail.hu + +Copyright(c) 2009-2012 Zoltan Herczeg +All rights reserved. + + +THE C++ WRAPPER FUNCTIONS +------------------------- + +Contributed by: Google Inc. + +Copyright (c) 2007-2012, Google Inc. +All rights reserved. + + +THE "BSD" LICENCE +----------------- + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of the University of Cambridge nor the name of Google + Inc. nor the names of their contributors may be used to endorse or + promote products derived from this software without specific prior + written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + +End + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +</pre> +<ul> + +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">libpng-1.2.49</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.libpng.org/">homepage</a></span> +<div class="licence"> +<pre>Scanned Source License libpng-1.2.49/LICENSE: + + +This copy of the libpng notices is provided for your convenience. In case of +any discrepancy between this copy and the notices in the file png.h that is +included in the libpng distribution, the latter shall prevail. + +COPYRIGHT NOTICE, DISCLAIMER, and LICENSE: + +If you modify libpng you may insert additional notices immediately following +this sentence. + +This code is released under the libpng license. + +libpng versions 1.2.6, August 15, 2004, through 1.2.49, March 29, 2012, are +Copyright (c) 2004, 2006-2009 Glenn Randers-Pehrson, and are +distributed according to the same disclaimer and license as libpng-1.2.5 +with the following individual added to the list of Contributing Authors + + Cosmin Truta + +libpng versions 1.0.7, July 1, 2000, through 1.2.5 - October 3, 2002, are +Copyright (c) 2000-2002 Glenn Randers-Pehrson, and are +distributed according to the same disclaimer and license as libpng-1.0.6 +with the following individuals added to the list of Contributing Authors + + Simon-Pierre Cadieux + Eric S. Raymond + Gilles Vollant + +and with the following additions to the disclaimer: + + There is no warranty against interference with your enjoyment of the + library or against infringement. There is no warranty that our + efforts or the library will fulfill any of your particular purposes + or needs. This library is provided with all faults, and the entire + risk of satisfactory quality, performance, accuracy, and effort is with + the user. + +libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are +Copyright (c) 1998, 1999 Glenn Randers-Pehrson, and are +distributed according to the same disclaimer and license as libpng-0.96, +with the following individuals added to the list of Contributing Authors: + + Tom Lane + Glenn Randers-Pehrson + Willem van Schaik + +libpng versions 0.89, June 1996, through 0.96, May 1997, are +Copyright (c) 1996, 1997 Andreas Dilger +Distributed according to the same disclaimer and license as libpng-0.88, +with the following individuals added to the list of Contributing Authors: + + John Bowler + Kevin Bracey + Sam Bushell + Magnus Holmgren + Greg Roelofs + Tom Tanner + +libpng versions 0.5, May 1995, through 0.88, January 1996, are +Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc. + +For the purposes of this copyright and license, "Contributing Authors" +is defined as the following set of individuals: + + Andreas Dilger + Dave Martindale + Guy Eric Schalnat + Paul Schmidt + Tim Wegner + +The PNG Reference Library is supplied "AS IS". The Contributing Authors +and Group 42, Inc. disclaim all warranties, expressed or implied, +including, without limitation, the warranties of merchantability and of +fitness for any purpose. The Contributing Authors and Group 42, Inc. +assume no liability for direct, indirect, incidental, special, exemplary, +or consequential damages, which may result from the use of the PNG +Reference Library, even if advised of the possibility of such damage. + +Permission is hereby granted to use, copy, modify, and distribute this +source code, or portions hereof, for any purpose, without fee, subject +to the following restrictions: + +1. The origin of this source code must not be misrepresented. + +2. Altered versions must be plainly marked as such and must not + be misrepresented as being the original source. + +3. This Copyright notice may not be removed or altered from any + source or altered source distribution. + +The Contributing Authors and Group 42, Inc. specifically permit, without +fee, and encourage the use of this source code as a component to +supporting the PNG file format in commercial products. If you use this +source code in a product, acknowledgment is not required but would be +appreciated. + + +A "png_get_copyright" function is available, for convenient use in "about" +boxes and the like: + + printf("%s",png_get_copyright(NULL)); + +Also, the PNG logo (in PNG format, of course) is supplied in the +files "pngbar.png" and "pngbar.jpg (88x31) and "pngnow.png" (98x31). + +Libpng is OSI Certified Open Source Software. OSI Certified Open Source is a +certification mark of the Open Source Initiative. + +Glenn Randers-Pehrson +glennrp at users.sourceforge.net +March 29, 2012 + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License libpng-1.2.49/contrib/gregbook/COPYING: + + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License libpng-1.2.49/contrib/gregbook/LICENSE: + + --------------------------------------------------------------------------- + + Copyright (c) 1998-2008 Greg Roelofs. All rights reserved. + + This software is provided "as is," without warranty of any kind, + express or implied. In no event shall the author or contributors + be held liable for any damages arising in any way from the use of + this software. + + The contents of this file are DUAL-LICENSED. You may modify and/or + redistribute this software according to the terms of one of the + following two licenses (at your option): + + + LICENSE 1 ("BSD-like with advertising clause"): + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute + it freely, subject to the following restrictions: + + 1. Redistributions of source code must retain the above copyright + notice, disclaimer, and this list of conditions. + 2. Redistributions in binary form must reproduce the above copyright + notice, disclaimer, and this list of conditions in the documenta- + tion and/or other materials provided with the distribution. + 3. All advertising materials mentioning features or use of this + software must display the following acknowledgment: + + This product includes software developed by Greg Roelofs + and contributors for the book, "PNG: The Definitive Guide," + published by O'Reilly and Associates. + + + LICENSE 2 (GNU GPL v2 or later): + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + --------------------------------------------------------------------------- + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +</pre> +<ul> +<li><a href='#as-is'>Gentoo Package Stock License as-is</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">libpthread-stubs-0.1</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://xorg.freedesktop.org/">homepage</a></span> +<div class="licence"> +<pre>Scanned Source License libpthread-stubs-0.1/COPYING: + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the names of the authors or their +institutions shall not be used in advertising or otherwise to promote the +sale, use or other dealings in this Software without prior written +authorization from the authors. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +</pre> +<ul> + +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">libtool-2.4</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.gnu.org/software/libtool/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#GPL-2'>Gentoo Package Stock License GPL-2</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">libusb-0.1.12</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://libusb.sourceforge.net/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#LGPL-2'>Gentoo Package Stock License LGPL-2</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">libusb-1.0.9</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://libusb.org/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#LGPL-2.1'>Gentoo Package Stock License LGPL-2.1</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">libva-1.1.1</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.freedesktop.org/wiki/Software/vaapi">homepage</a></span> +<div class="licence"> +<pre>Scanned Source License libva-1.1.1/COPYING: + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sub license, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice (including the + next paragraph) shall be included in all copies or substantial portions + of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License libva-1.1.1/debian.upstream/copyright: + +This package was debianized by Waldo Bastian <waldo.bastian@intel.com> on +Mon, 18 Jun 2007 21:35:31 -0700. + +It was downloaded from <url://example.com> + +Upstream Author(s): + + Waldo Bastian <waldo.bastian@intel.com> + Jonathan Bian <jonathan.bian@intel.com> + +Copyright: + + (C) Copyright IBM Corporation 2004 + Copyright 1998-1999 Precision Insight, Inc., Cedar Park, Texas. + Copyright 2000 VA Linux Systems, Inc. + Copyright 2007 Intel Corportation + +License: + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sub license, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice (including the + next paragraph) shall be included in all copies or substantial portions + of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +The Debian packaging is (C) 2007, Intel Corporation and +is licensed under the GPL, see `/usr/share/common-licenses/GPL'. + +# Please also look if there are files or directories which have a +# different copyright/license attached and list them here. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +</pre> +<ul> + +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">libva-intel-driver-1.0.20</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.freedesktop.org/wiki/Software/vaapi">homepage</a></span> +<div class="licence"> +<pre>Scanned Source License libva-intel-driver-1.0.20/COPYING: + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sub license, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice (including the + next paragraph) shall be included in all copies or substantial portions + of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License libva-intel-driver-1.0.20/debian.upstream/copyright: + +This package is maintained by: +Gwenole Beauchesne <gwenole.beauchesne@intel.com> + + +License: + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sub license, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice (including the + next paragraph) shall be included in all copies or substantial portions + of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +</pre> +<ul> + +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">libxcb-1.9.1</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://xcb.freedesktop.org/">homepage</a></span> +<div class="licence"> +<pre>Scanned Source License libxcb-1.9.1/COPYING: + +Copyright (C) 2001-2006 Bart Massey, Jamey Sharp, and Josh Triplett. +All Rights Reserved. + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the +Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, +sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall +be included in all copies or substantial portions of the +Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY +KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS +BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the names of the authors +or their institutions shall not be used in advertising or +otherwise to promote the sale, use or other dealings in this +Software without prior written authorization from the +authors. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +</pre> +<ul> + +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">libxml2-2.9.1</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.xmlsoft.org/">homepage</a></span> +<div class="licence"> +<pre>Scanned Source License libxml2-2.9.1/COPYING: + +Except where otherwise noted in the source code (e.g. the files hash.c, +list.c and the trio files, which are covered by a similar licence but +with different Copyright notices) all the files are: + + Copyright (C) 1998-2012 Daniel Veillard. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is fur- +nished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FIT- +NESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License libxml2-2.9.1/Copyright: + +Except where otherwise noted in the source code (e.g. the files hash.c, +list.c and the trio files, which are covered by a similar licence but +with different Copyright notices) all the files are: + + Copyright (C) 1998-2012 Daniel Veillard. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is fur- +nished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FIT- +NESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +</pre> +<ul> + +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">Linux-2.6</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.kernel.org/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#GPL-2'>Gentoo Package Stock License GPL-2</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">linux-headers-3.4</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.kernel.org/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#GPL-2'>Gentoo Package Stock License GPL-2</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">llvm-3.2</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://llvm.org/">homepage</a></span> +<div class="licence"> +<pre>Scanned Source License llvm-3.2.src/LICENSE.TXT: + +============================================================================== +LLVM Release License +============================================================================== +University of Illinois/NCSA +Open Source License + +Copyright (c) 2003-2012 University of Illinois at Urbana-Champaign. +All rights reserved. + +Developed by: + + LLVM Team + + University of Illinois at Urbana-Champaign + + http://llvm.org + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal with +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimers. + + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimers in the + documentation and/or other materials provided with the distribution. + + * Neither the names of the LLVM Team, University of Illinois at + Urbana-Champaign, nor the names of its contributors may be used to + endorse or promote products derived from this Software without specific + prior written permission. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE +SOFTWARE. + +============================================================================== +Copyrights and Licenses for Third Party Software Distributed with LLVM: +============================================================================== +The LLVM software contains code written by third parties. Such software will +have its own individual LICENSE.TXT file in the directory in which it appears. +This file will describe the copyrights, license, and restrictions which apply +to that code. + +The disclaimer of warranty in the University of Illinois Open Source License +applies to all code in the LLVM Distribution, and nothing in any of the +other licenses gives permission to use the names of the LLVM Team or the +University of Illinois to endorse or promote products derived from this +Software. + +The following pieces of software have additional or alternate copyrights, +licenses, and/or restrictions: + +Program Directory +------- --------- +Autoconf llvm/autoconf + llvm/projects/ModuleMaker/autoconf + llvm/projects/sample/autoconf +CellSPU backend llvm/lib/Target/CellSPU/README.txt +Google Test llvm/utils/unittest/googletest +OpenBSD regex llvm/lib/Support/{reg*, COPYRIGHT.regex} +pyyaml tests llvm/test/YAMLParser/{*.data, LICENSE.TXT} + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License llvm-3.2.src/autoconf/LICENSE.TXT: + +------------------------------------------------------------------------------ +Autoconf Files +------------------------------------------------------------------------------ +All autoconf files are licensed under the LLVM license with the following +additions: + +llvm/autoconf/install-sh: + This script is licensed under the LLVM license, with the following + additional copyrights and restrictions: + + Copyright 1991 by the Massachusetts Institute of Technology + + Permission to use, copy, modify, distribute, and sell this software and its + documentation for any purpose is hereby granted without fee, provided that + the above copyright notice appear in all copies and that both that + copyright notice and this permission notice appear in supporting + documentation, and that the name of M.I.T. not be used in advertising or + publicity pertaining to distribution of the software without specific, + written prior permission. M.I.T. makes no representations about the + suitability of this software for any purpose. It is provided "as is" + without express or implied warranty. + +Please see the source files for additional copyrights. + + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License llvm-3.2.src/include/llvm/Support/LICENSE.TXT: + +LLVM System Interface Library +------------------------------------------------------------------------------- +The LLVM System Interface Library is licensed under the Illinois Open Source +License and has the following additional copyright: + +Copyright (C) 2004 eXtensible Systems, Inc. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License llvm-3.2.src/projects/sample/autoconf/LICENSE.TXT: + +------------------------------------------------------------------------------ +Autoconf Files +------------------------------------------------------------------------------ +All autoconf files are licensed under the LLVM license with the following +additions: + +llvm/autoconf/install-sh: + This script is licensed under the LLVM license, with the following + additional copyrights and restrictions: + + Copyright 1991 by the Massachusetts Institute of Technology + + Permission to use, copy, modify, distribute, and sell this software and its + documentation for any purpose is hereby granted without fee, provided that + the above copyright notice appear in all copies and that both that + copyright notice and this permission notice appear in supporting + documentation, and that the name of M.I.T. not be used in advertising or + publicity pertaining to distribution of the software without specific, + written prior permission. M.I.T. makes no representations about the + suitability of this software for any purpose. It is provided "as is" + without express or implied warranty. + +Please see the source files for additional copyrights. + + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License llvm-3.2.src/test/YAMLParser/LICENSE.txt: + +Copyright (c) 2006 Kirill Simonov + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License llvm-3.2.src/utils/unittest/googletest/LICENSE.TXT: + +Copyright 2008, Google Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Gentoo Package Stock License UoI-NCSA: + +Copyright (c) <YEAR> <OWNER ORGANIZATION NAME>. All rights reserved. + +Developed by: <NAME OF DEVELOPMENT GROUP> + <NAME OF INSTITUTION> + <URL FOR DEVELOPMENT GROUP/INSTITUTION> + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to +deal with the Software without restriction, including without limitation the +rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +sell copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimers. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimers in the + documentation and/or other materials provided with the distribution. + 3. Neither the names of <NAME OF DEVELOPMENT GROUP>, <NAME OF + INSTITUTION>, nor the names of its contributors may be used to endorse + or promote products derived from this Software without specific prior + written permission. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +WITH THE SOFTWARE. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +</pre> +<ul> + +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">lohitfonts-cros-2.5.0</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://fedorahosted.org/lohit">homepage</a></span> +<div class="licence"> +<pre>Scanned Source License lohitfonts-cros-2.5.0/LICENSE: + +Copyright 2011 Lohit Fonts Project contributors + <http://fedorahosted.org/lohit>, +with Reserved Font Name Lohit. + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +</pre> +<ul> +<li><a href='#OFL-1.1'>Gentoo Package Stock License OFL-1.1</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">lsof-4.81</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/">homepage</a></span> +<div class="licence"> +<pre>Gentoo Package Stock License lsof: + +ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/FAQ#1.9 + +Copyright 2002 Purdue Research Foundation, West Lafayette, +Indiana 47907. All rights reserved. + +Written by Victor A. Abell + +This software is not subject to any license of the American +Telephone and Telegraph Company or the Regents of the +University of California. + +Permission is granted to anyone to use this software for +any purpose on any computer system, and to alter it and +redistribute it freely, subject to the following +restrictions: + +1. Neither the authors nor Purdue University are responsible + for any consequences of the use of this software. + +2. The origin of this software must not be misrepresented, + either by explicit claim or by omission. Credit to the + authors and Purdue University must appear in documentation + and sources. + +3. Altered versions must be plainly marked as such, and must + not be misrepresented as being the original software. + +4. This notice may not be removed or altered. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +</pre> +<ul> + +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">lvm2-2.02.88</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://sources.redhat.com/lvm2/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#GPL-2'>Gentoo Package Stock License GPL-2</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">lzo-2.06</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.oberhumer.com/opensource/lzo/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#GPL-2'>Gentoo Package Stock License GPL-2</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">m2crypto-0.21.1</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://chandlerproject.org/bin/view/Projects/MeTooCrypto">homepage</a></span> +<div class="licence"> +<pre>Scanned Source License M2Crypto-0.21.1/LICENCE: + +Copyright (c) 1999-2004 Ng Pheng Siong. All rights reserved. + +Portions copyright (c) 2004-2006 Open Source Applications Foundation. +All rights reserved. + +Portions copyright (c) 2005-2006 Vrije Universiteit Amsterdam. +All rights reserved. + +Copyright (c) 2008-2010 Heikki Toivonen. All rights reserved. + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation. + +THE AUTHOR PROVIDES THIS SOFTWARE ``AS IS'' AND ANY EXPRESSED OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +</pre> +<ul> + +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">make-3.82</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.gnu.org/software/make/make.html">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#GPL-3'>Gentoo Package Stock License GPL-3</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">marvell_sd8787-14.64.2.47</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.marvell.com/">homepage</a></span> +<div class="licence"> +<pre>Custom License Marvell-sd8787: + +Copyright (C) 2010, Marvell International Ltd. + +All Rights Reserved. + +This file is provided by Marvell International Ltd. "AS IS". +Reverse engineering of this file is strictly prohibited. +Redistribution and use in its original form are permitted. + + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +</pre> +<ul> + +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">mawk-1.3.4_p20100625</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://invisible-island.net/mawk/mawk.html">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#GPL-2'>Gentoo Package Stock License GPL-2</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">memtester-4.2.2</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://pyropus.ca/software/memtester/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#GPL-2'>Gentoo Package Stock License GPL-2</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">mesa-9.1</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://mesa3d.sourceforge.net/">homepage</a></span> +<div class="licence"> +<pre>Scanned Source License Mesa-9.1/docs/COPYING: + + +Some parts of Mesa are copyrighted under the GNU LGPL. See the +Mesa/docs/COPYRIGHT file for details. + +The following is the standard GNU copyright file. +---------------------------------------------------------------------- + + + GNU LIBRARY GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1991 Free Software Foundation, Inc. + 675 Mass Ave, Cambridge, MA 02139, USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the library GPL. It is + numbered 2 because it goes with version 2 of the ordinary GPL.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Library General Public License, applies to some +specially designated Free Software Foundation software, and to any +other libraries whose authors decide to use it. You can use it for +your libraries, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if +you distribute copies of the library, or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link a program with the library, you must provide +complete object files to the recipients so that they can relink them +with the library, after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + Our method of protecting your rights has two steps: (1) copyright +the library, and (2) offer you this license which gives you legal +permission to copy, distribute and/or modify the library. + + Also, for each distributor's protection, we want to make certain +that everyone understands that there is no warranty for this free +library. If the library is modified by someone else and passed on, we +want its recipients to know that what they have is not the original +version, so that any problems introduced by others will not reflect on +the original authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that companies distributing free +software will individually obtain patent licenses, thus in effect +transforming the program into proprietary software. To prevent this, +we have made it clear that any patent must be licensed for everyone's +free use or not licensed at all. + + Most GNU software, including some libraries, is covered by the ordinary +GNU General Public License, which was designed for utility programs. This +license, the GNU Library General Public License, applies to certain +designated libraries. This license is quite different from the ordinary +one; be sure to read it in full, and don't assume that anything in it is +the same as in the ordinary license. + + The reason we have a separate public license for some libraries is that +they blur the distinction we usually make between modifying or adding to a +program and simply using it. Linking a program with a library, without +changing the library, is in some sense simply using the library, and is +analogous to running a utility program or application program. However, in +a textual and legal sense, the linked executable is a combined work, a +derivative of the original library, and the ordinary General Public License +treats it as such. + + Because of this blurred distinction, using the ordinary General +Public License for libraries did not effectively promote software +sharing, because most developers did not use the libraries. We +concluded that weaker conditions might promote sharing better. + + However, unrestricted linking of non-free programs would deprive the +users of those programs of all benefit from the free status of the +libraries themselves. This Library General Public License is intended to +permit developers of non-free programs to use free libraries, while +preserving your freedom as a user of such programs to change the free +libraries that are incorporated in them. (We have not seen how to achieve +this as regards changes in header files, but we have achieved it as regards +changes in the actual functions of the Library.) The hope is that this +will lead to faster development of free libraries. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, while the latter only +works together with the library. + + Note that it is possible for a library to be covered by the ordinary +General Public License rather than by this special one. + + GNU LIBRARY GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library which +contains a notice placed by the copyright holder or other authorized +party saying it may be distributed under the terms of this Library +General Public License (also called "this License"). Each licensee is +addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also compile or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + c) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + d) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the source code distributed need not include anything that is normally +distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Library General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + Appendix: How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + <one line to give the library's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random Hacker. + + <signature of Ty Coon>, 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! + + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +</pre> +<ul> +<li><a href='#SGI-B-2.0'>Gentoo Package Stock License SGI-B-2.0</a></li> +<li><a href='#LGPL-3'>Gentoo Package Stock License LGPL-3</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">mime-types-8</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.gentoo.org/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#GPL-2'>Gentoo Package Stock License GPL-2</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">ml-anjalioldlipi-0.740</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="https://sites.google.com/site/cibu/anjalioldlipi-font">homepage</a></span> +<div class="licence"> +<pre>Scanned Source License ml-anjalioldlipi-0.740/LICENSE: + +Copyright 2004 Kevin & Siji, 2007-2011 Cibu Johny +with reserved font name AnjaliOldLipi. + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +</pre> +<ul> +<li><a href='#OFL-1.1'>Gentoo Package Stock License OFL-1.1</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">modemmanager-classic-interfaces-0.0.1</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.chromium.org/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#LGPL-2.1'>Gentoo Package Stock License LGPL-2.1</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">modemmanager-next-0.5.999</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://mail.gnome.org/archives/networkmanager-list/2008-July/msg00274.html">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#LGPL-2.1'>Gentoo Package Stock License LGPL-2.1</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">module-init-tools-3.16</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://modules.wiki.kernel.org/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#GPL-2'>Gentoo Package Stock License GPL-2</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">mtdev-1.1.2</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://bitmath.org/code/mtdev/">homepage</a></span> +<div class="licence"> +<pre>Scanned Source License mtdev-1.1.2/COPYING: + +mtdev - Multitouch Protocol Translation Library (MIT license) + +Copyright (C) 2010 Henrik Rydberg <rydberg@euromail.se> +Copyright (C) 2010 Canonical Ltd. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice (including the next +paragraph) shall be included in all copies or substantial portions of the +Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +</pre> +<ul> + +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">mtools-4.0.15</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://mtools.linux.lu/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#GPL-3'>Gentoo Package Stock License GPL-3</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">my-padauk-2.50</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=padauk">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#OFL-1.1'>Gentoo Package Stock License OFL-1.1</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">nacl-mozc-1.10.1389.104</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://code.google.com/p/mozc">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#BSD-Google'>Custom License BSD-Google</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">ncurses-5.9</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.gnu.org/software/ncurses/">homepage</a></span> +<div class="licence"> +<pre>Scanned Source License ncurses-5.9/Ada95/package/debian/copyright: + +Upstream source http://invisible-island.net/ncurses/ncurses-examples.html + +Current ncurses maintainer: Thomas Dickey <dickey@invisible-island.net> + +------------------------------------------------------------------------------- + Copyright (c) 1998-2010,2011 Free Software Foundation, Inc. + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, distribute with modifications, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + Except as contained in this notice, the name(s) of the above copyright + holders shall not be used in advertising or otherwise to promote the + sale, use or other dealings in this Software without prior written + authorization. +------------------------------------------------------------------------------- + +Files: install-sh +Copyright: 1994 X Consortium +Licence: other-BSD + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to + deal in the Software without restriction, including without limitation the + rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- + TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + Except as contained in this notice, the name of the X Consortium shall not + be used in advertising or otherwise to promote the sale, use or other deal- + ings in this Software without prior written authorization from the X Consor- + tium. + + FSF changes to this file are in the public domain. + + Calling this script install-sh is preferred over install.sh, to prevent + `make' implicit rules from creating a file called install from it + when there is no Makefile. + + This script is compatible with the BSD install script, but was written + from scratch. It can only install one file at a time, a restriction + shared with many OS's install programs. + +On Debian systems, the complete text of the GNU General +Public License can be found in '/usr/share/common-licenses/GPL-2' + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License ncurses-5.9/test/package/debian/copyright: + +Upstream source http://invisible-island.net/ncurses/ncurses-examples.html + +Current ncurses maintainer: Thomas Dickey <dickey@invisible-island.net> + +------------------------------------------------------------------------------- + Copyright (c) 1998-2010,2011 Free Software Foundation, Inc. + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, distribute with modifications, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + Except as contained in this notice, the name(s) of the above copyright + holders shall not be used in advertising or otherwise to promote the + sale, use or other dealings in this Software without prior written + authorization. +------------------------------------------------------------------------------- + +Files: install-sh +Copyright: 1994 X Consortium +Licence: other-BSD + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to + deal in the Software without restriction, including without limitation the + rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- + TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + Except as contained in this notice, the name of the X Consortium shall not + be used in advertising or otherwise to promote the sale, use or other deal- + ings in this Software without prior written authorization from the X Consor- + tium. + + FSF changes to this file are in the public domain. + + Calling this script install-sh is preferred over install.sh, to prevent + `make' implicit rules from creating a file called install from it + when there is no Makefile. + + This script is compatible with the BSD install script, but was written + from scratch. It can only install one file at a time, a restriction + shared with many OS's install programs. + +On Debian systems, the complete text of the GNU General +Public License can be found in '/usr/share/common-licenses/GPL-2' + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +</pre> +<ul> + +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">net-tools-1.60_p20110409135728</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://net-tools.berlios.de/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#GPL-2'>Gentoo Package Stock License GPL-2</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">notofonts-20130514</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#Apache-2.0'>Gentoo Package Stock License Apache-2.0</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">nspr-4.10</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.mozilla.org/projects/nspr/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#LGPL-2.1'>Gentoo Package Stock License LGPL-2.1</a></li> +<li><a href='#GPL-2'>Gentoo Package Stock License GPL-2</a></li> +<li><a href='#MPL-2.0'>Gentoo Package Stock License MPL-2.0</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">nss-3.15.1</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.mozilla.org/projects/security/pki/nss/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#LGPL-2.1'>Gentoo Package Stock License LGPL-2.1</a></li> +<li><a href='#GPL-2'>Gentoo Package Stock License GPL-2</a></li> +<li><a href='#MPL-2.0'>Gentoo Package Stock License MPL-2.0</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">ntfs3g-2012.1.15</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.tuxera.com/community/ntfs-3g-download/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#GPL-2'>Gentoo Package Stock License GPL-2</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">o3d-203170</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://code.google.com/p/o3d/">homepage</a></span> +<div class="licence"> +<pre>Scanned Source License o3d-203170/base/third_party/dmg_fp/LICENSE: + +/**************************************************************** + * + * The author of this software is David M. Gay. + * + * Copyright (c) 1991, 2000, 2001 by Lucent Technologies. + * + * Permission to use, copy, modify, and distribute this software for any + * purpose without fee is hereby granted, provided that this entire notice + * is included in all copies of any software which is or includes a copy + * or modification of this software and in all copies of the supporting + * documentation for such software. + * + * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED + * WARRANTY. IN PARTICULAR, NEITHER THE AUTHOR NOR LUCENT MAKES ANY + * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY + * OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE. + * + ***************************************************************/ + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License o3d-203170/base/third_party/dynamic_annotations/LICENSE: + +/* Copyright (c) 2008-2009, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * --- + * Author: Kostya Serebryany + */ + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License o3d-203170/base/third_party/icu/LICENSE: + +ICU License - ICU 1.8.1 and later + +COPYRIGHT AND PERMISSION NOTICE + +Copyright (c) 1995-2009 International Business Machines Corporation and others + +All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, and/or sell copies of the Software, and to permit persons +to whom the Software is furnished to do so, provided that the above +copyright notice(s) and this permission notice appear in all copies of +the Software and that both the above copyright notice(s) and this +permission notice appear in supporting documentation. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY +SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER +RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF +CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, use +or other dealings in this Software without prior written authorization +of the copyright holder. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License o3d-203170/base/third_party/nspr/LICENSE: + +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (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.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is the Netscape Portable Runtime (NSPR). + * + * The Initial Developer of the Original Code is + * Netscape Communications Corporation. + * Portions created by the Initial Developer are Copyright (C) 1998-2000 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License o3d-203170/base/third_party/symbolize/LICENSE: + +// Copyright (c) 2006, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License o3d-203170/base/third_party/valgrind/LICENSE: + + ---------------------------------------------------------------- + + Notice that the following BSD-style license applies to this one + file (valgrind.h) only. The rest of Valgrind is licensed under the + terms of the GNU General Public License, version 2, unless + otherwise indicated. See the COPYING file in the source + distribution for details. + + ---------------------------------------------------------------- + + This file is part of Valgrind, a dynamic binary instrumentation + framework. + + Copyright (C) 2000-2008 Julian Seward. All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + 2. The origin of this software must not be misrepresented; you must + not claim that you wrote the original software. If you use this + software in a product, an acknowledgment in the product + documentation would be appreciated but is not required. + + 3. Altered source versions must be plainly marked as such, and must + not be misrepresented as being the original software. + + 4. The name of the author may not be used to endorse or promote + products derived from this software without specific prior written + permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS + OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License o3d-203170/base/third_party/xdg_mime/LICENSE: + +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR +# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +# OTHER DEALINGS IN THE SOFTWARE. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License o3d-203170/base/third_party/xdg_user_dirs/LICENSE: + + Copyright (c) 2007 Red Hat, inc + + Permission is hereby granted, free of charge, to any person + obtaining a copy of this software and associated documentation files + (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, + publish, distribute, sublicense, and/or sell copies of the Software, + and to permit persons to whom the Software is furnished to do so, + subject to the following conditions: + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License o3d-203170/native_client/LICENSE: + +Copyright 2008, Google Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License o3d-203170/net/third_party/gssapi/LICENSE: + +Copyright 1993 by OpenVision Technologies, Inc. + +Permission to use, copy, modify, distribute, and sell this software +and its documentation for any purpose is hereby granted without fee, +provided that the above copyright notice appears in all copies and +that both that copyright notice and this permission notice appear in +supporting documentation, and that the name of OpenVision not be used +in advertising or publicity pertaining to distribution of the software +without specific, written prior permission. OpenVision makes no +representations about the suitability of this software for any +purpose. It is provided "as is" without express or implied warranty. + +OPENVISION DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +EVENT SHALL OPENVISION BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF +USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License o3d-203170/net/third_party/mozilla_security_manager/LICENSE: + +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (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.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is mozilla.org code. + * + * The Initial Developer of the Original Code is + * Netscape Communications Corporation. + * Portions created by the Initial Developer are Copyright (C) 2001 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License o3d-203170/net/third_party/nss/LICENSE: + +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (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.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is the Netscape security libraries. + * + * The Initial Developer of the Original Code is + * Netscape Communications Corporation. + * Portions created by the Initial Developer are Copyright (C) 1994-2000 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License o3d-203170/net/tools/spdyshark/COPYING: + + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License o3d-203170/o3d/installer/linux/debian.in/copyright: + +This package was debianized by Jeff Bailey <jeffbailey@google.com> on +Wed, 20 Jan 2010 14:19:30 -0500 + +Copyright (C) 2010 Google, Inc. under the terms of the new BSD license. + +On Debian systems, the complete text of the BSD License can be found in the +file /usr/share/common-licenses/BSD + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License o3d-203170/o3d/samples/box2d-3d/demos/LICENSE.txt: + +The zlib/libpng License + +Copyright (c) 2008 ANDO Yasushi + +This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. + + 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source distribution. + + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License o3d-203170/o3d/samples/box2d-3d/third_party/box2d/LICENSE.txt: + +The zlib/libpng License + +Copyright (c) 2008 ANDO Yasushi + +This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. + + 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source distribution. + + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License o3d-203170/o3d/samples/o3d-webgl-samples/box2d-3d/demos/LICENSE.txt: + +The zlib/libpng License + +Copyright (c) 2008 ANDO Yasushi + +This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. + + 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source distribution. + + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License o3d-203170/o3d/samples/o3d-webgl-samples/box2d-3d/third_party/box2d/LICENSE.txt: + +The zlib/libpng License + +Copyright (c) 2008 ANDO Yasushi + +This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. + + 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source distribution. + + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License o3d-203170/o3d/samples/third_party/codemirror/LICENSE: + + Copyright (c) 2007 Marijn Haverbeke + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any + damages arising from the use of this software. + + Permission is granted to anyone to use this software for any + purpose, including commercial applications, and to alter it and + redistribute it freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must + not claim that you wrote the original software. If you use this + software in a product, an acknowledgment in the product + documentation would be appreciated but is not required. + + 2. Altered source versions must be plainly marked as such, and must + not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. + + Marijn Haverbeke + marijnh at gmail + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License o3d-203170/o3d/samples/third_party/xmljs/COPYING: + + GNU LIBRARY GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the library GPL. It is + numbered 2 because it goes with version 2 of the ordinary GPL.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Library General Public License, applies to some +specially designated Free Software Foundation software, and to any +other libraries whose authors decide to use it. You can use it for +your libraries, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if +you distribute copies of the library, or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link a program with the library, you must provide +complete object files to the recipients so that they can relink them +with the library, after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + Our method of protecting your rights has two steps: (1) copyright +the library, and (2) offer you this license which gives you legal +permission to copy, distribute and/or modify the library. + + Also, for each distributor's protection, we want to make certain +that everyone understands that there is no warranty for this free +library. If the library is modified by someone else and passed on, we +want its recipients to know that what they have is not the original +version, so that any problems introduced by others will not reflect on +the original authors' reputations. + + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that companies distributing free +software will individually obtain patent licenses, thus in effect +transforming the program into proprietary software. To prevent this, +we have made it clear that any patent must be licensed for everyone's +free use or not licensed at all. + + Most GNU software, including some libraries, is covered by the ordinary +GNU General Public License, which was designed for utility programs. This +license, the GNU Library General Public License, applies to certain +designated libraries. This license is quite different from the ordinary +one; be sure to read it in full, and don't assume that anything in it is +the same as in the ordinary license. + + The reason we have a separate public license for some libraries is that +they blur the distinction we usually make between modifying or adding to a +program and simply using it. Linking a program with a library, without +changing the library, is in some sense simply using the library, and is +analogous to running a utility program or application program. However, in +a textual and legal sense, the linked executable is a combined work, a +derivative of the original library, and the ordinary General Public License +treats it as such. + + Because of this blurred distinction, using the ordinary General +Public License for libraries did not effectively promote software +sharing, because most developers did not use the libraries. We +concluded that weaker conditions might promote sharing better. + + However, unrestricted linking of non-free programs would deprive the +users of those programs of all benefit from the free status of the +libraries themselves. This Library General Public License is intended to +permit developers of non-free programs to use free libraries, while +preserving your freedom as a user of such programs to change the free +libraries that are incorporated in them. (We have not seen how to achieve +this as regards changes in header files, but we have achieved it as regards +changes in the actual functions of the Library.) The hope is that this +will lead to faster development of free libraries. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, while the latter only +works together with the library. + + Note that it is possible for a library to be covered by the ordinary +General Public License rather than by this special one. + + + GNU LIBRARY GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library which +contains a notice placed by the copyright holder or other authorized +party saying it may be distributed under the terms of this Library +General Public License (also called "this License"). Each licensee is +addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + + 6. As an exception to the Sections above, you may also compile or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + c) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + d) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the source code distributed need not include anything that is normally +distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Library General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + <one line to give the library's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this library; if not, write to the + Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307 USA. + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random Hacker. + + <signature of Ty Coon>, 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License o3d-203170/o3d/third_party/gflags/COPYING: + +Copyright (c) 2006, Google Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License o3d-203170/o3d/third_party/gflags/packages/deb/copyright: + +This package was debianized by Google Inc. <opensource@google.com> on +13 December 2006. + +It was downloaded from http://code.google.com/ + +Upstream Author: opensource@google.com + +Copyright (c) 2006, Google Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License o3d-203170/o3d/third_party/glu/LICENSE.txt: + +SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008) + +Copyright (C) [dates of first publication] Silicon Graphics, Inc. All +Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice including the dates of first publication +and either this permission notice or a reference to HYPERLINK +"http://oss.sgi.com/projects/FreeB/"http://oss.sgi.com/projects/FreeB/ +shall be included in all copies or substantial portions of the +Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL SILICON GRAPHICS, INC. BE LIABLE +FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF +CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of Silicon Graphics, +Inc. shall not be used in advertising or otherwise to promote the +sale, use or other dealings in this Software without prior written +authorization from Silicon Graphics, Inc. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License o3d-203170/o3d/third_party/libtxc_dxtn/LICENSE: + +libtxc_dxtn +Version: 0.1 + +Copyright (C) 2004 Roland Scheidegger All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License o3d-203170/o3d/third_party/npapi/COPYING: + + MOZILLA PUBLIC LICENSE + Version 1.1 + + --------------- + +1. Definitions. + + 1.0.1. "Commercial Use" means distribution or otherwise making the + Covered Code available to a third party. + + 1.1. "Contributor" means each entity that creates or contributes to + the creation of Modifications. + + 1.2. "Contributor Version" means the combination of the Original + Code, prior Modifications used by a Contributor, and the Modifications + made by that particular Contributor. + + 1.3. "Covered Code" means the Original Code or Modifications or the + combination of the Original Code and Modifications, in each case + including portions thereof. + + 1.4. "Electronic Distribution Mechanism" means a mechanism generally + accepted in the software development community for the electronic + transfer of data. + + 1.5. "Executable" means Covered Code in any form other than Source + Code. + + 1.6. "Initial Developer" means the individual or entity identified + as the Initial Developer in the Source Code notice required by Exhibit + A. + + 1.7. "Larger Work" means a work which combines Covered Code or + portions thereof with code not governed by the terms of this License. + + 1.8. "License" means this document. + + 1.8.1. "Licensable" means having the right to grant, to the maximum + extent possible, whether at the time of the initial grant or + subsequently acquired, any and all of the rights conveyed herein. + + 1.9. "Modifications" means any addition to or deletion from the + substance or structure of either the Original Code or any previous + Modifications. When Covered Code is released as a series of files, a + Modification is: + A. Any addition to or deletion from the contents of a file + containing Original Code or previous Modifications. + + B. Any new file that contains any part of the Original Code or + previous Modifications. + + 1.10. "Original Code" means Source Code of computer software code + which is described in the Source Code notice required by Exhibit A as + Original Code, and which, at the time of its release under this + License is not already Covered Code governed by this License. + + 1.10.1. "Patent Claims" means any patent claim(s), now owned or + hereafter acquired, including without limitation, method, process, + and apparatus claims, in any patent Licensable by grantor. + + 1.11. "Source Code" means the preferred form of the Covered Code for + making modifications to it, including all modules it contains, plus + any associated interface definition files, scripts used to control + compilation and installation of an Executable, or source code + differential comparisons against either the Original Code or another + well known, available Covered Code of the Contributor's choice. The + Source Code can be in a compressed or archival form, provided the + appropriate decompression or de-archiving software is widely available + for no charge. + + 1.12. "You" (or "Your") means an individual or a legal entity + exercising rights under, and complying with all of the terms of, this + License or a future version of this License issued under Section 6.1. + For legal entities, "You" includes any entity which controls, is + controlled by, or is under common control with You. For purposes of + this definition, "control" means (a) the power, direct or indirect, + to cause the direction or management of such entity, whether by + contract or otherwise, or (b) ownership of more than fifty percent + (50%) of the outstanding shares or beneficial ownership of such + entity. + +2. Source Code License. + + 2.1. The Initial Developer Grant. + The Initial Developer hereby grants You a world-wide, royalty-free, + non-exclusive license, subject to third party intellectual property + claims: + (a) under intellectual property rights (other than patent or + trademark) Licensable by Initial Developer to use, reproduce, + modify, display, perform, sublicense and distribute the Original + Code (or portions thereof) with or without Modifications, and/or + as part of a Larger Work; and + + (b) under Patents Claims infringed by the making, using or + selling of Original Code, to make, have made, use, practice, + sell, and offer for sale, and/or otherwise dispose of the + Original Code (or portions thereof). + + (c) the licenses granted in this Section 2.1(a) and (b) are + effective on the date Initial Developer first distributes + Original Code under the terms of this License. + + (d) Notwithstanding Section 2.1(b) above, no patent license is + granted: 1) for code that You delete from the Original Code; 2) + separate from the Original Code; or 3) for infringements caused + by: i) the modification of the Original Code or ii) the + combination of the Original Code with other software or devices. + + 2.2. Contributor Grant. + Subject to third party intellectual property claims, each Contributor + hereby grants You a world-wide, royalty-free, non-exclusive license + + (a) under intellectual property rights (other than patent or + trademark) Licensable by Contributor, to use, reproduce, modify, + display, perform, sublicense and distribute the Modifications + created by such Contributor (or portions thereof) either on an + unmodified basis, with other Modifications, as Covered Code + and/or as part of a Larger Work; and + + (b) under Patent Claims infringed by the making, using, or + selling of Modifications made by that Contributor either alone + and/or in combination with its Contributor Version (or portions + of such combination), to make, use, sell, offer for sale, have + made, and/or otherwise dispose of: 1) Modifications made by that + Contributor (or portions thereof); and 2) the combination of + Modifications made by that Contributor with its Contributor + Version (or portions of such combination). + + (c) the licenses granted in Sections 2.2(a) and 2.2(b) are + effective on the date Contributor first makes Commercial Use of + the Covered Code. + + (d) Notwithstanding Section 2.2(b) above, no patent license is + granted: 1) for any code that Contributor has deleted from the + Contributor Version; 2) separate from the Contributor Version; + 3) for infringements caused by: i) third party modifications of + Contributor Version or ii) the combination of Modifications made + by that Contributor with other software (except as part of the + Contributor Version) or other devices; or 4) under Patent Claims + infringed by Covered Code in the absence of Modifications made by + that Contributor. + +3. Distribution Obligations. + + 3.1. Application of License. + The Modifications which You create or to which You contribute are + governed by the terms of this License, including without limitation + Section 2.2. The Source Code version of Covered Code may be + distributed only under the terms of this License or a future version + of this License released under Section 6.1, and You must include a + copy of this License with every copy of the Source Code You + distribute. You may not offer or impose any terms on any Source Code + version that alters or restricts the applicable version of this + License or the recipients' rights hereunder. However, You may include + an additional document offering the additional rights described in + Section 3.5. + + 3.2. Availability of Source Code. + Any Modification which You create or to which You contribute must be + made available in Source Code form under the terms of this License + either on the same media as an Executable version or via an accepted + Electronic Distribution Mechanism to anyone to whom you made an + Executable version available; and if made available via Electronic + Distribution Mechanism, must remain available for at least twelve (12) + months after the date it initially became available, or at least six + (6) months after a subsequent version of that particular Modification + has been made available to such recipients. You are responsible for + ensuring that the Source Code version remains available even if the + Electronic Distribution Mechanism is maintained by a third party. + + 3.3. Description of Modifications. + You must cause all Covered Code to which You contribute to contain a + file documenting the changes You made to create that Covered Code and + the date of any change. You must include a prominent statement that + the Modification is derived, directly or indirectly, from Original + Code provided by the Initial Developer and including the name of the + Initial Developer in (a) the Source Code, and (b) in any notice in an + Executable version or related documentation in which You describe the + origin or ownership of the Covered Code. + + 3.4. Intellectual Property Matters + (a) Third Party Claims. + If Contributor has knowledge that a license under a third party's + intellectual property rights is required to exercise the rights + granted by such Contributor under Sections 2.1 or 2.2, + Contributor must include a text file with the Source Code + distribution titled "LEGAL" which describes the claim and the + party making the claim in sufficient detail that a recipient will + know whom to contact. If Contributor obtains such knowledge after + the Modification is made available as described in Section 3.2, + Contributor shall promptly modify the LEGAL file in all copies + Contributor makes available thereafter and shall take other steps + (such as notifying appropriate mailing lists or newsgroups) + reasonably calculated to inform those who received the Covered + Code that new knowledge has been obtained. + + (b) Contributor APIs. + If Contributor's Modifications include an application programming + interface and Contributor has knowledge of patent licenses which + are reasonably necessary to implement that API, Contributor must + also include this information in the LEGAL file. + + (c) Representations. + Contributor represents that, except as disclosed pursuant to + Section 3.4(a) above, Contributor believes that Contributor's + Modifications are Contributor's original creation(s) and/or + Contributor has sufficient rights to grant the rights conveyed by + this License. + + 3.5. Required Notices. + You must duplicate the notice in Exhibit A in each file of the Source + Code. If it is not possible to put such notice in a particular Source + Code file due to its structure, then You must include such notice in a + location (such as a relevant directory) where a user would be likely + to look for such a notice. If You created one or more Modification(s) + You may add your name as a Contributor to the notice described in + Exhibit A. You must also duplicate this License in any documentation + for the Source Code where You describe recipients' rights or ownership + rights relating to Covered Code. You may choose to offer, and to + charge a fee for, warranty, support, indemnity or liability + obligations to one or more recipients of Covered Code. However, You + may do so only on Your own behalf, and not on behalf of the Initial + Developer or any Contributor. You must make it absolutely clear than + any such warranty, support, indemnity or liability obligation is + offered by You alone, and You hereby agree to indemnify the Initial + Developer and every Contributor for any liability incurred by the + Initial Developer or such Contributor as a result of warranty, + support, indemnity or liability terms You offer. + + 3.6. Distribution of Executable Versions. + You may distribute Covered Code in Executable form only if the + requirements of Section 3.1-3.5 have been met for that Covered Code, + and if You include a notice stating that the Source Code version of + the Covered Code is available under the terms of this License, + including a description of how and where You have fulfilled the + obligations of Section 3.2. The notice must be conspicuously included + in any notice in an Executable version, related documentation or + collateral in which You describe recipients' rights relating to the + Covered Code. You may distribute the Executable version of Covered + Code or ownership rights under a license of Your choice, which may + contain terms different from this License, provided that You are in + compliance with the terms of this License and that the license for the + Executable version does not attempt to limit or alter the recipient's + rights in the Source Code version from the rights set forth in this + License. If You distribute the Executable version under a different + license You must make it absolutely clear that any terms which differ + from this License are offered by You alone, not by the Initial + Developer or any Contributor. You hereby agree to indemnify the + Initial Developer and every Contributor for any liability incurred by + the Initial Developer or such Contributor as a result of any such + terms You offer. + + 3.7. Larger Works. + You may create a Larger Work by combining Covered Code with other code + not governed by the terms of this License and distribute the Larger + Work as a single product. In such a case, You must make sure the + requirements of this License are fulfilled for the Covered Code. + +4. Inability to Comply Due to Statute or Regulation. + + If it is impossible for You to comply with any of the terms of this + License with respect to some or all of the Covered Code due to + statute, judicial order, or regulation then You must: (a) comply with + the terms of this License to the maximum extent possible; and (b) + describe the limitations and the code they affect. Such description + must be included in the LEGAL file described in Section 3.4 and must + be included with all distributions of the Source Code. Except to the + extent prohibited by statute or regulation, such description must be + sufficiently detailed for a recipient of ordinary skill to be able to + understand it. + +5. Application of this License. + + This License applies to code to which the Initial Developer has + attached the notice in Exhibit A and to related Covered Code. + +6. Versions of the License. + + 6.1. New Versions. + Netscape Communications Corporation ("Netscape") may publish revised + and/or new versions of the License from time to time. Each version + will be given a distinguishing version number. + + 6.2. Effect of New Versions. + Once Covered Code has been published under a particular version of the + License, You may always continue to use it under the terms of that + version. You may also choose to use such Covered Code under the terms + of any subsequent version of the License published by Netscape. No one + other than Netscape has the right to modify the terms applicable to + Covered Code created under this License. + + 6.3. Derivative Works. + If You create or use a modified version of this License (which you may + only do in order to apply it to code which is not already Covered Code + governed by this License), You must (a) rename Your license so that + the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape", + "MPL", "NPL" or any confusingly similar phrase do not appear in your + license (except to note that your license differs from this License) + and (b) otherwise make it clear that Your version of the license + contains terms which differ from the Mozilla Public License and + Netscape Public License. (Filling in the name of the Initial + Developer, Original Code or Contributor in the notice described in + Exhibit A shall not of themselves be deemed to be modifications of + this License.) + +7. DISCLAIMER OF WARRANTY. + + COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF + DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. + THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE + IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, + YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE + COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER + OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF + ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER. + +8. TERMINATION. + + 8.1. This License and the rights granted hereunder will terminate + automatically if You fail to comply with terms herein and fail to cure + such breach within 30 days of becoming aware of the breach. All + sublicenses to the Covered Code which are properly granted shall + survive any termination of this License. Provisions which, by their + nature, must remain in effect beyond the termination of this License + shall survive. + + 8.2. If You initiate litigation by asserting a patent infringement + claim (excluding declatory judgment actions) against Initial Developer + or a Contributor (the Initial Developer or Contributor against whom + You file such action is referred to as "Participant") alleging that: + + (a) such Participant's Contributor Version directly or indirectly + infringes any patent, then any and all rights granted by such + Participant to You under Sections 2.1 and/or 2.2 of this License + shall, upon 60 days notice from Participant terminate prospectively, + unless if within 60 days after receipt of notice You either: (i) + agree in writing to pay Participant a mutually agreeable reasonable + royalty for Your past and future use of Modifications made by such + Participant, or (ii) withdraw Your litigation claim with respect to + the Contributor Version against such Participant. If within 60 days + of notice, a reasonable royalty and payment arrangement are not + mutually agreed upon in writing by the parties or the litigation claim + is not withdrawn, the rights granted by Participant to You under + Sections 2.1 and/or 2.2 automatically terminate at the expiration of + the 60 day notice period specified above. + + (b) any software, hardware, or device, other than such Participant's + Contributor Version, directly or indirectly infringes any patent, then + any rights granted to You by such Participant under Sections 2.1(b) + and 2.2(b) are revoked effective as of the date You first made, used, + sold, distributed, or had made, Modifications made by that + Participant. + + 8.3. If You assert a patent infringement claim against Participant + alleging that such Participant's Contributor Version directly or + indirectly infringes any patent where such claim is resolved (such as + by license or settlement) prior to the initiation of patent + infringement litigation, then the reasonable value of the licenses + granted by such Participant under Sections 2.1 or 2.2 shall be taken + into account in determining the amount or value of any payment or + license. + + 8.4. In the event of termination under Sections 8.1 or 8.2 above, + all end user license agreements (excluding distributors and resellers) + which have been validly granted by You or any distributor hereunder + prior to termination shall survive termination. + +9. LIMITATION OF LIABILITY. + + UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT + (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL + DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE, + OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR + ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY + CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, + WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER + COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN + INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF + LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY + RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW + PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE + EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO + THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU. + +10. U.S. GOVERNMENT END USERS. + + The Covered Code is a "commercial item," as that term is defined in + 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer + software" and "commercial computer software documentation," as such + terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 + C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), + all U.S. Government End Users acquire Covered Code with only those + rights set forth herein. + +11. MISCELLANEOUS. + + This License represents the complete agreement concerning subject + matter hereof. If any provision of this License is held to be + unenforceable, such provision shall be reformed only to the extent + necessary to make it enforceable. This License shall be governed by + California law provisions (except to the extent applicable law, if + any, provides otherwise), excluding its conflict-of-law provisions. + With respect to disputes in which at least one party is a citizen of, + or an entity chartered or registered to do business in the United + States of America, any litigation relating to this License shall be + subject to the jurisdiction of the Federal Courts of the Northern + District of California, with venue lying in Santa Clara County, + California, with the losing party responsible for costs, including + without limitation, court costs and reasonable attorneys' fees and + expenses. The application of the United Nations Convention on + Contracts for the International Sale of Goods is expressly excluded. + Any law or regulation which provides that the language of a contract + shall be construed against the drafter shall not apply to this + License. + +12. RESPONSIBILITY FOR CLAIMS. + + As between Initial Developer and the Contributors, each party is + responsible for claims and damages arising, directly or indirectly, + out of its utilization of rights under this License and You agree to + work with Initial Developer and Contributors to distribute such + responsibility on an equitable basis. Nothing herein is intended or + shall be deemed to constitute any admission of liability. + +13. MULTIPLE-LICENSED CODE. + + Initial Developer may designate portions of the Covered Code as + "Multiple-Licensed". "Multiple-Licensed" means that the Initial + Developer permits you to utilize portions of the Covered Code under + Your choice of the NPL or the alternative licenses, if any, specified + by the Initial Developer in the file described in Exhibit A. + +EXHIBIT A -Mozilla Public License. + + ``The contents of this file are subject to the Mozilla Public License + Version 1.1 (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.mozilla.org/MPL/ + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the + License for the specific language governing rights and limitations + under the License. + + The Original Code is ______________________________________. + + The Initial Developer of the Original Code is ________________________. + Portions created by ______________________ are Copyright (C) ______ + _______________________. All Rights Reserved. + + Contributor(s): ______________________________________. + + Alternatively, the contents of this file may be used under the terms + of the _____ license (the "[___] License"), in which case the + provisions of [______] License are applicable instead of those + above. If you wish to allow use of your version of this file only + under the terms of the [____] License and not to allow others to use + your version of this file under the MPL, indicate your decision by + deleting the provisions above and replace them with the notice and + other provisions required by the [___] License. If you do not delete + the provisions above, a recipient may use your version of this file + under either the MPL or the [___] License." + + [NOTE: The text of this Exhibit A may differ slightly from the text of + the notices in the Source Code files of the Original Code. You should + use the text of this Exhibit A rather than the text found in the + Original Code Source Code for Your Modifications.] + + ---------------------------------------------------------------------- + + AMENDMENTS + + The Netscape Public License Version 1.1 ("NPL") consists of the + Mozilla Public License Version 1.1 with the following Amendments, + including Exhibit A-Netscape Public License. Files identified with + "Exhibit A-Netscape Public License" are governed by the Netscape + Public License Version 1.1. + + Additional Terms applicable to the Netscape Public License. + I. Effect. + These additional terms described in this Netscape Public + License -- Amendments shall apply to the Mozilla Communicator + client code and to all Covered Code under this License. + + II. "Netscape's Branded Code" means Covered Code that Netscape + distributes and/or permits others to distribute under one or more + trademark(s) which are controlled by Netscape but which are not + licensed for use under this License. + + III. Netscape and logo. + This License does not grant any rights to use the trademarks + "Netscape", the "Netscape N and horizon" logo or the "Netscape + lighthouse" logo, "Netcenter", "Gecko", "Java" or "JavaScript", + "Smart Browsing" even if such marks are included in the Original + Code or Modifications. + + IV. Inability to Comply Due to Contractual Obligation. + Prior to licensing the Original Code under this License, Netscape + has licensed third party code for use in Netscape's Branded Code. + To the extent that Netscape is limited contractually from making + such third party code available under this License, Netscape may + choose to reintegrate such code into Covered Code without being + required to distribute such code in Source Code form, even if + such code would otherwise be considered "Modifications" under + this License. + + V. Use of Modifications and Covered Code by Initial Developer. + V.1. In General. + The obligations of Section 3 apply to Netscape, except to + the extent specified in this Amendment, Section V.2 and V.3. + + V.2. Other Products. + Netscape may include Covered Code in products other than the + Netscape's Branded Code which are released by Netscape + during the two (2) years following the release date of the + Original Code, without such additional products becoming + subject to the terms of this License, and may license such + additional products on different terms from those contained + in this License. + + V.3. Alternative Licensing. + Netscape may license the Source Code of Netscape's Branded + Code, including Modifications incorporated therein, without + such Netscape Branded Code becoming subject to the terms of + this License, and may license such Netscape Branded Code on + different terms from those contained in this License. + + VI. Litigation. + Notwithstanding the limitations of Section 11 above, the + provisions regarding litigation in Section 11(a), (b) and (c) of + the License shall apply to all disputes relating to this License. + + EXHIBIT A-Netscape Public License. + + "The contents of this file are subject to the Netscape Public + License Version 1.1 (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.mozilla.org/NPL/ + + Software distributed under the License is distributed on an "AS + IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or + implied. See the License for the specific language governing + rights and limitations under the License. + + The Original Code is Mozilla Communicator client code, released + March 31, 1998. + + The Initial Developer of the Original Code is Netscape + Communications Corporation. Portions created by Netscape are + Copyright (C) 1998-1999 Netscape Communications Corporation. All + Rights Reserved. + + Contributor(s): ______________________________________. + + Alternatively, the contents of this file may be used under the + terms of the _____ license (the "[___] License"), in which case + the provisions of [______] License are applicable instead of + those above. If you wish to allow use of your version of this + file only under the terms of the [____] License and not to allow + others to use your version of this file under the NPL, indicate + your decision by deleting the provisions above and replace them + with the notice and other provisions required by the [___] + License. If you do not delete the provisions above, a recipient + may use your version of this file under either the NPL or the + [___] License." + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License o3d-203170/o3d/third_party/ply/COPYING: + + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + <one line to give the library's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random Hacker. + + <signature of Ty Coon>, 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! + + + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License o3d-203170/o3d/third_party/vectormath/LICENSE: + + Vector Math library for 3-D linear algebra (vector, matrix, quaternion) + SIMD support for SSE, PowerPC (PPU) and the SPU. + Also includes generic multi-platform scalar version. + + Copyright (C) 2006, 2007 Sony Computer Entertainment Inc. + All rights reserved. + + Redistribution and use in source and binary forms, + with or without modification, are permitted provided that the + following conditions are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of the Sony Computer Entertainment Inc nor the names + of its contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. + + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License o3d-203170/o3d/third_party/vectormath/files/vectormathlibrary/LICENSE: + + Vector Math library for 3-D linear algebra (vector, matrix, quaternion) + SIMD support for SSE, PowerPC (PPU) and the SPU. + Also includes generic multi-platform scalar version. + + Copyright (C) 2006, 2007 Sony Computer Entertainment Inc. + All rights reserved. + + Redistribution and use in source and binary forms, + with or without modification, are permitted provided that the + following conditions are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of the Sony Computer Entertainment Inc nor the names + of its contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. + + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License o3d-203170/ppapi/LICENSE: + +// Copyright (c) 2010 The Chromium Authors. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License o3d-203170/testing/gmock/COPYING: + +Copyright 2008, Google Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License o3d-203170/testing/gmock/scripts/generator/COPYING: + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [2007] Neal Norwitz + Portions Copyright [2007] Google Inc. + + Licensed 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. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License o3d-203170/testing/gtest/COPYING: + +Copyright 2008, Google Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License o3d-203170/third_party/antlr3/LICENSE.txt: + +[The "BSD licence"] +Copyright (c) 2003-2008 Terence Parr +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License o3d-203170/third_party/antlr3/runtime/ActionScript/LICENSE: + +[The "BSD licence"] +Copyright (c) 2003-2006 Terence Parr +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License o3d-203170/third_party/antlr3/runtime/C/COPYING: + +[The "BSD licence"] + Copyright (c) 2005-2006 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License o3d-203170/third_party/antlr3/runtime/CSharp/LICENSE.TXT: + +[The "BSD licence"] +Copyright (c) 2005-2007 Kunle Odutola +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code MUST RETAIN the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form MUST REPRODUCE the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior WRITTEN permission. +4. Unless explicitly state otherwise, any contribution intentionally + submitted for inclusion in this work to the copyright owner shall be + under the terms and conditions of this license, without any + additional terms or conditions. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License o3d-203170/third_party/antlr3/runtime/JavaScript/build/license.txt: + +/* +Copyright (c) 2003-2008 Terence Parr. All rights reserved. +Code licensed under the BSD License: +http://www.antlr.org/license.html + +Some parts of the ANTLR class: +Copyright (c) 2008, Yahoo! Inc. All rights reserved. +Code licensed under the BSD License: +http://developer.yahoo.net/yui/license.txt +*/ + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License o3d-203170/third_party/antlr3/runtime/Python/LICENSE: + +[The "BSD licence"] +Copyright (c) 2003-2006 Terence Parr +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License o3d-203170/third_party/cg/LICENSE: + +DISTRIBUTION LICENSE + +IMPORTANT NOTICE -- READ CAREFULLY: THIS DISTRIBUTION LICENSE IS THE +AGREEMENT THAT GOVERNS USE OF THE SOFTWARE AND ASSOCIATED MATERIALS +PROVIDED HEREIN. BY DOWNLOADING, INSTALLING, COPYING, OR OTHERWISE +USING THE SOFTWARE, YOU EXPRESSLY AGREE TO BE BOUND BY THE TERMS OF +THIS AGREEMENT. IF YOU DO NOT AGREE TO ALL OF THE TERMS AND CONDITIONS +SET FORTH IN THIS AGREEMENT, YOU MAY NOT INSTALL, USE, OR DISTRIBUTE THE +SOFTWARE. + +1) Subject to all of the terms set forth herein, NVIDIA Corporation +("NVIDIA") hereby grants a non-exclusive, worldwide, royalty-free license +("License") to the distributor or publisher ("Distributor") set forth below +to use, reproduce, distribute, publicly display, and publicly perform +NVIDIA's software comprising its Cg Toolkit, including CgFX, any associated +documentation, and any portions thereof provided by NVIDIA (all together, +each apart, referred to herein as "Software") by incorporating the Software +into Distributor's software or published works ("Works") and any advertising +and promotional materials relating thereto. + +2) NVIDIA represents that the Software is either owned by NVIDIA or that, to +the best of NVIDIA's knowledge, it has full authority from the owner of +items incorporated into the Software to grant the rights set forth in this +License and that such items do not violate the copyright, trademark, or any +other rights of any third party. + +3) Distributor agrees that the Software is proprietary information of NVIDIA +and that NVIDIA owns all right, title and interest therein. There are no +implied licenses under this License, and any rights not expressly granted +are reserved by NVIDIA. The Software is protected by copyright laws and +international copyright treaties, as well as other intellectual property +laws and treaties. The Software is not sold, and instead is only licensed +for use, strictly in accordance with this License. Distributor agrees not to +disassemble, decompile or reverse engineer the Software in whole or in +part. All copies of the Software shall contain NVIDIA's proprietary rights +notices as provided therein. Distributor shall not remove or modify any such +proprietary rights notices of NVIDIA. This License will automatically +terminate if Distributor fails to comply with any of the terms and +conditions hereof. In such event, Distributor must cease reproducing, +distributing, or otherwise using the Software and destroy all copies +thereof. + +4) NVIDIA will not be responsible for providing maintenance and support to +Distributor, its customers, or any other end users for the Software or Works +distributed by Distributor or others. + +5) THE SOFTWARE IS PROVIDED BY NVIDIA TO DISTRIBUTOR "AS IS." NVIDIA +DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION +IMPLIED WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE, AND NONINFRINGEMENT. + +6) IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY SPECIAL, INCIDENTAL, +INDIRECT, OR CONSEQUENTIAL DAMAGES (WHETHER IN AN ACTION IN CONTRACT OR +TORT) WHATSOEVER (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF +BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR +ANY OTHER PECUNIARY LOSS) ARISING OUT OF THE USE OF OR INABILITY TO USE THE +SOFTWARE OR IN CONNECTION WITH THIS LICENSE, EVEN IF NVIDIA HAS BEEN +ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS SHALL APPLY +NOTWITHSTANDING ANY FAILURE OF ESSENTIAL PURPOSE OF ANY LIMITED REMEDY. +NVIDIA SHALL HAVE NO CONTRACTUAL OBLIGATION TO INDEMNIFY DISTRIBUTOR +UNDER THIS LICENSE. DISTRIBUTOR AND/OR ITS CUSTOMERS ASSUME THE ENTIRE +COST OF ANY DAMAGE, LOSS, OR EXPENSE RESULTING FROM THEIR USE OR +EXPLOITATION OF THE SOFTWARE. + +7) Distributor may not assign, sublicense, or otherwise attempt to transfer +this License or any right or obligation hereunder without NVIDIA's prior +written consent. + +8) The export of the Software may be subject to the export control laws of +the United States of America and/or other countries, and Distributor agrees +to abide by all such export control laws and regulations. + +9) If any provision of this License is held to be invalid or unenforceable +for any reason, the remaining provisions will continue in full force without +being impaired or invalidated in any way. + +10) No term or provisions hereof shall be deemed waived, and no breach +excused, unless such waiver or consent is in writing and signed by the party +claimed to have waived or consented. The waiver by either party of a breach +of any provision of this License will not operate or be interpreted as a +waiver of any other or subsequent breach. + +11) This License will be governed and construed in accordance with the laws +of the State of California without giving effect to principles of conflict +of laws. Any suit or controversy arising hereunder shall be brought in the +federal or state courts located in Santa Clara County, California, and each +party submits to the venue and jurisdiction thereof. The United Nations +Convention on Contracts for the International Sale of Goods is specifically +disclaimed. + +12) This License constitutes the final, complete, and exclusive agreement +between the parties with respect to the subject matter hereof and supersedes +any previous proposals, negotiations, agreements, letters of intent, +arrangements, or warranties, whether verbal or written, made between the +parties with respect to such subject matter. This License may be changed +only by mutual agreement in writing of the authorized representatives of the +parties. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License o3d-203170/third_party/fcollada/LICENSE: + +You can get more information and the latest versions of the FCollada library on +our website. + +Feel free to drop us an email if you want more information on using the library. + +Guillaume Laforte +glaforte@feelingsoftware.com + +Feeling Software Inc. +http://www.feelingsoftware.com + + +Copyright and License information: +------------------------------------ + + +FCollada: +---------- +Copyright 2006 Feeling Software. +Under MIT License: http://www.opensource.org/licenses/mit-license.php + + +FS import classes: +----------------------- +Copyright 2005-2006 Feeling Software and +Copyright 2005-2006 Autodesk Media Entertainment. +Under MIT License: http://www.opensource.org/licenses/mit-license.php + + +LibXML2: +--------- +Except where otherwise noted in the source code (e.g. the files hash.c, list.c +and the trio files, which are covered by a similar licence but with different +Copyright notices) all the files are: + + + +Copyright (C) 1998-2003 Daniel Veillard. All Rights Reserved. + + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is fur- nished to +do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + + + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FIT- +NESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +DANIEL VEILLARD BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CON- +NECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + + +Except as contained in this notice, the name of Daniel Veillard shall not be +used in advertising or otherwise to promote the sale, use or other deal- ings +in this Software without prior written authorization from him. + + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License o3d-203170/third_party/fcollada/files/LibXML/COPYING: + +Except where otherwise noted in the source code (e.g. the files hash.c, +list.c and the trio files, which are covered by a similar licence but +with different Copyright notices) all the files are: + + Copyright (C) 1998-2003 Daniel Veillard. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is fur- +nished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FIT- +NESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +DANIEL VEILLARD BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CON- +NECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of Daniel Veillard shall not +be used in advertising or otherwise to promote the sale, use or other deal- +ings in this Software without prior written authorization from him. + + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License o3d-203170/third_party/fcollada/files/LibXML/Copyright: + +Except where otherwise noted in the source code (e.g. the files hash.c, +list.c and the trio files, which are covered by a similar licence but +with different Copyright notices) all the files are: + + Copyright (C) 1998-2003 Daniel Veillard. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is fur- +nished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FIT- +NESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +DANIEL VEILLARD BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CON- +NECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of Daniel Veillard shall not +be used in advertising or otherwise to promote the sale, use or other deal- +ings in this Software without prior written authorization from him. + + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License o3d-203170/third_party/glew/LICENSE: + +The OpenGL Extension Wrangler Library +Copyright (C) 2002-2007, Milan Ikits <milan ikits[]ieee org> +Copyright (C) 2002-2007, Marcelo E. Magallon <mmagallo[]debian org> +Copyright (C) 2002, Lev Povalahev +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. +* The name of the author may be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF +THE POSSIBILITY OF SUCH DAMAGE. + + +Mesa 3-D graphics library +Version: 7.0 + +Copyright (C) 1999-2007 Brian Paul All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +Copyright (c) 2007 The Khronos Group Inc. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and/or associated documentation files (the +"Materials"), to deal in the Materials without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Materials, and to +permit persons to whom the Materials are furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Materials. + +THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License o3d-203170/third_party/harfbuzz/COPYING: + +HarfBuzz was previously licensed under different licenses. This was +changed in January 2008. If you need to relicense your old copies, +consult the announcement of the license change on the internet. +Other than that, each copy of HarfBuzz is licensed under the COPYING +file included with it. The actual license follows: + + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License o3d-203170/third_party/icu/source/data/brkitr/LICENSE: + +The list of words in cjdict.txt are obtained by combining three word +lists listed below with further processing for compound word breaking. +The frequency is generated with an iterative training against Google +web corpora. + +* CC-CEDICT (Chinese) + - http://www.mdbg.net/chindict/chindict.php?page=cedict (home page) + - http://www.mdbg.net/chindict/export/cedict/cedict_1_0_ts_utf-8_mdbg.txt.gz (word list) + - It is licensed under a Creative Commons Attribution-Share Alike 3.0 License. + (see http://creativecommons.org/licenses/by-sa/3.0 for more details) + + - The portion of words derived from CC-CEDICT is also separately available + in cc_cedict.txt per the above CC Attribution-Share Alike 3.0 License. + +* Libtabe (Chinese) + - https://sourceforge.net/project/?group_id=1519 + - Its license terms and conditions are shown below. + +* IPADIC (Japanese) + - http://chasen.aist-nara.ac.jp/chasen/distribution.html + - Its license terms and conditions are shown below. + +---------COPYING.libtabe ---- BEGIN-------------------- + +/* + * Copyrighy (c) 1999 TaBE Project. + * Copyright (c) 1999 Pai-Hsiang Hsiao. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * . Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * . Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * . Neither the name of the TaBE Project nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * Copyright (c) 1999 Computer Systems and Communication Lab, + * Institute of Information Science, Academia Sinica. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * . Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * . Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * . Neither the name of the Computer Systems and Communication Lab + * nor the names of its contributors may be used to endorse or + * promote products derived from this software without specific + * prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +Copyright 1996 Chih-Hao Tsai @ Beckman Institute, University of Illinois +c-tsai4@uiuc.edu http://casper.beckman.uiuc.edu/~c-tsai4 + +---------------COPYING.libtabe-----END------------------------------------ + + +---------------COPYING.ipadic-----BEGIN------------------------------------ + +Copyright 2000, 2001, 2002, 2003 Nara Institute of Science +and Technology. All Rights Reserved. + +Use, reproduction, and distribution of this software is permitted. +Any copy of this software, whether in its original form or modified, +must include both the above copyright notice and the following +paragraphs. + +Nara Institute of Science and Technology (NAIST), +the copyright holders, disclaims all warranties with regard to this +software, including all implied warranties of merchantability and +fitness, in no event shall NAIST be liable for +any special, indirect or consequential damages or any damages +whatsoever resulting from loss of use, data or profits, whether in an +action of contract, negligence or other tortuous action, arising out +of or in connection with the use or performance of this software. + +A large portion of the dictionary entries +originate from ICOT Free Software. The following conditions for ICOT +Free Software applies to the current dictionary as well. + +Each User may also freely distribute the Program, whether in its +original form or modified, to any third party or parties, PROVIDED +that the provisions of Section 3 ("NO WARRANTY") will ALWAYS appear +on, or be attached to, the Program, which is distributed substantially +in the same form as set out herein and that such intended +distribution, if actually made, will neither violate or otherwise +contravene any of the laws and regulations of the countries having +jurisdiction over the User or the intended distribution itself. + +NO WARRANTY + +The program was produced on an experimental basis in the course of the +research and development conducted during the project and is provided +to users as so produced on an experimental basis. Accordingly, the +program is provided without any warranty whatsoever, whether express, +implied, statutory or otherwise. The term "warranty" used herein +includes, but is not limited to, any warranty of the quality, +performance, merchantability and fitness for a particular purpose of +the program and the nonexistence of any infringement or violation of +any right of any third party. + +Each user of the program will agree and understand, and be deemed to +have agreed and understood, that there is no warranty whatsoever for +the program and, accordingly, the entire risk arising from or +otherwise connected with the program is assumed by the user. + +Therefore, neither ICOT, the copyright holder, or any other +organization that participated in or was otherwise related to the +development of the program and their respective officials, directors, +officers and other employees shall be held liable for any and all +damages, including, without limitation, general, special, incidental +and consequential damages, arising out of or otherwise in connection +with the use or inability to use the program or any product, material +or result produced or otherwise obtained by using the program, +regardless of whether they have been advised of, or otherwise had +knowledge of, the possibility of such damages at any time during the +project or thereafter. Each user will be deemed to have agreed to the +foregoing by his or her commencement of use of the program. The term +"use" as used herein includes, but is not limited to, the use, +modification, copying and distribution of the program and the +production of secondary products from the program. + +In the case where the program, whether in its original form or +modified, was distributed or delivered to or received by a user from +any person, organization or entity other than ICOT, unless it makes or +grants independently of ICOT any specific warranty to the user in +writing, such person, organization or entity, will also be exempted +from and not be held liable to the user for any such damages as noted +above as far as the program is concerned. + +---------------COPYING.ipadic-----END------------------------------------ + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License o3d-203170/third_party/libevent/LICENSE: + +Copyright 2000-2007 Niels Provos <provos@citi.umich.edu> +Copyright 2007-2009 Niels Provos and Nick Mathewson + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License o3d-203170/third_party/libjpeg/LICENSE: + +(Copied from the README.) + +-------------------------------------------------------------------------------- + +The authors make NO WARRANTY or representation, either express or implied, +with respect to this software, its quality, accuracy, merchantability, or +fitness for a particular purpose. This software is provided "AS IS", and you, +its user, assume the entire risk as to its quality and accuracy. + +This software is copyright (C) 1991-1998, Thomas G. Lane. +All Rights Reserved except as specified below. + +Permission is hereby granted to use, copy, modify, and distribute this +software (or portions thereof) for any purpose, without fee, subject to these +conditions: +(1) If any part of the source code for this software is distributed, then this +README file must be included, with this copyright and no-warranty notice +unaltered; and any additions, deletions, or changes to the original files +must be clearly indicated in accompanying documentation. +(2) If only executable code is distributed, then the accompanying +documentation must state that "this software is based in part on the work of +the Independent JPEG Group". +(3) Permission for use of this software is granted only if the user accepts +full responsibility for any undesirable consequences; the authors accept +NO LIABILITY for damages of any kind. + +These conditions apply to any software derived from or based on the IJG code, +not just to the unmodified library. If you use our work, you ought to +acknowledge us. + +Permission is NOT granted for the use of any IJG author's name or company name +in advertising or publicity relating to this software or products derived from +it. This software may be referred to only as "the Independent JPEG Group's +software". + +We specifically permit and encourage the use of this software as the basis of +commercial products, provided that all warranty or liability claims are +assumed by the product vendor. + + +ansi2knr.c is included in this distribution by permission of L. Peter Deutsch, +sole proprietor of its copyright holder, Aladdin Enterprises of Menlo Park, CA. +ansi2knr.c is NOT covered by the above copyright and conditions, but instead +by the usual distribution terms of the Free Software Foundation; principally, +that you must include source code if you redistribute it. (See the file +ansi2knr.c for full details.) However, since ansi2knr.c is not needed as part +of any program generated from the IJG code, this does not limit you more than +the foregoing paragraphs do. + +The Unix configuration script "configure" was produced with GNU Autoconf. +It is copyright by the Free Software Foundation but is freely distributable. +The same holds for its supporting scripts (config.guess, config.sub, +ltconfig, ltmain.sh). Another support script, install-sh, is copyright +by M.I.T. but is also freely distributable. + +It appears that the arithmetic coding option of the JPEG spec is covered by +patents owned by IBM, AT&T, and Mitsubishi. Hence arithmetic coding cannot +legally be used without obtaining one or more licenses. For this reason, +support for arithmetic coding has been removed from the free JPEG software. +(Since arithmetic coding provides only a marginal gain over the unpatented +Huffman mode, it is unlikely that very many implementations will support it.) +So far as we are aware, there are no patent restrictions on the remaining +code. + +The IJG distribution formerly included code to read and write GIF files. +To avoid entanglement with the Unisys LZW patent, GIF reading support has +been removed altogether, and the GIF writer has been simplified to produce +"uncompressed GIFs". This technique does not use the LZW algorithm; the +resulting GIF files are larger than usual, but are readable by all standard +GIF decoders. + +We are required to state that + "The Graphics Interchange Format(c) is the Copyright property of + CompuServe Incorporated. GIF(sm) is a Service Mark property of + CompuServe Incorporated." + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License o3d-203170/third_party/libpng/LICENSE: + + +This copy of the libpng notices is provided for your convenience. In case of +any discrepancy between this copy and the notices in the file png.h that is +included in the libpng distribution, the latter shall prevail. + +COPYRIGHT NOTICE, DISCLAIMER, and LICENSE: + +If you modify libpng you may insert additional notices immediately following +this sentence. + +This code is released under the libpng license. + +libpng versions 1.2.6, August 15, 2004, through 1.2.45, July 7, 2011, are +Copyright (c) 2004, 2006-2009 Glenn Randers-Pehrson, and are +distributed according to the same disclaimer and license as libpng-1.2.5 +with the following individual added to the list of Contributing Authors + + Cosmin Truta + +libpng versions 1.0.7, July 1, 2000, through 1.2.5 - October 3, 2002, are +Copyright (c) 2000-2002 Glenn Randers-Pehrson, and are +distributed according to the same disclaimer and license as libpng-1.0.6 +with the following individuals added to the list of Contributing Authors + + Simon-Pierre Cadieux + Eric S. Raymond + Gilles Vollant + +and with the following additions to the disclaimer: + + There is no warranty against interference with your enjoyment of the + library or against infringement. There is no warranty that our + efforts or the library will fulfill any of your particular purposes + or needs. This library is provided with all faults, and the entire + risk of satisfactory quality, performance, accuracy, and effort is with + the user. + +libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are +Copyright (c) 1998, 1999 Glenn Randers-Pehrson, and are +distributed according to the same disclaimer and license as libpng-0.96, +with the following individuals added to the list of Contributing Authors: + + Tom Lane + Glenn Randers-Pehrson + Willem van Schaik + +libpng versions 0.89, June 1996, through 0.96, May 1997, are +Copyright (c) 1996, 1997 Andreas Dilger +Distributed according to the same disclaimer and license as libpng-0.88, +with the following individuals added to the list of Contributing Authors: + + John Bowler + Kevin Bracey + Sam Bushell + Magnus Holmgren + Greg Roelofs + Tom Tanner + +libpng versions 0.5, May 1995, through 0.88, January 1996, are +Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc. + +For the purposes of this copyright and license, "Contributing Authors" +is defined as the following set of individuals: + + Andreas Dilger + Dave Martindale + Guy Eric Schalnat + Paul Schmidt + Tim Wegner + +The PNG Reference Library is supplied "AS IS". The Contributing Authors +and Group 42, Inc. disclaim all warranties, expressed or implied, +including, without limitation, the warranties of merchantability and of +fitness for any purpose. The Contributing Authors and Group 42, Inc. +assume no liability for direct, indirect, incidental, special, exemplary, +or consequential damages, which may result from the use of the PNG +Reference Library, even if advised of the possibility of such damage. + +Permission is hereby granted to use, copy, modify, and distribute this +source code, or portions hereof, for any purpose, without fee, subject +to the following restrictions: + +1. The origin of this source code must not be misrepresented. + +2. Altered versions must be plainly marked as such and must not + be misrepresented as being the original source. + +3. This Copyright notice may not be removed or altered from any + source or altered source distribution. + +The Contributing Authors and Group 42, Inc. specifically permit, without +fee, and encourage the use of this source code as a component to +supporting the PNG file format in commercial products. If you use this +source code in a product, acknowledgment is not required but would be +appreciated. + + +A "png_get_copyright" function is available, for convenient use in "about" +boxes and the like: + + printf("%s",png_get_copyright(NULL)); + +Also, the PNG logo (in PNG format, of course) is supplied in the +files "pngbar.png" and "pngbar.jpg (88x31) and "pngnow.png" (98x31). + +Libpng is OSI Certified Open Source Software. OSI Certified Open Source is a +certification mark of the Open Source Initiative. + +Glenn Randers-Pehrson +glennrp at users.sourceforge.net +July 7, 2011 + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License o3d-203170/third_party/makeself/COPYING: + + + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) 19yy <name of author> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) 19yy name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License o3d-203170/third_party/makeself/LICENSE: + + + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) 19yy <name of author> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) 19yy name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License o3d-203170/third_party/mesa/MesaLib/docs/COPYING: + + +Some parts of Mesa are copyrighted under the GNU LGPL. See the +Mesa/docs/COPYRIGHT file for details. + +The following is the standard GNU copyright file. +---------------------------------------------------------------------- + + + GNU LIBRARY GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1991 Free Software Foundation, Inc. + 675 Mass Ave, Cambridge, MA 02139, USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the library GPL. It is + numbered 2 because it goes with version 2 of the ordinary GPL.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Library General Public License, applies to some +specially designated Free Software Foundation software, and to any +other libraries whose authors decide to use it. You can use it for +your libraries, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if +you distribute copies of the library, or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link a program with the library, you must provide +complete object files to the recipients so that they can relink them +with the library, after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + Our method of protecting your rights has two steps: (1) copyright +the library, and (2) offer you this license which gives you legal +permission to copy, distribute and/or modify the library. + + Also, for each distributor's protection, we want to make certain +that everyone understands that there is no warranty for this free +library. If the library is modified by someone else and passed on, we +want its recipients to know that what they have is not the original +version, so that any problems introduced by others will not reflect on +the original authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that companies distributing free +software will individually obtain patent licenses, thus in effect +transforming the program into proprietary software. To prevent this, +we have made it clear that any patent must be licensed for everyone's +free use or not licensed at all. + + Most GNU software, including some libraries, is covered by the ordinary +GNU General Public License, which was designed for utility programs. This +license, the GNU Library General Public License, applies to certain +designated libraries. This license is quite different from the ordinary +one; be sure to read it in full, and don't assume that anything in it is +the same as in the ordinary license. + + The reason we have a separate public license for some libraries is that +they blur the distinction we usually make between modifying or adding to a +program and simply using it. Linking a program with a library, without +changing the library, is in some sense simply using the library, and is +analogous to running a utility program or application program. However, in +a textual and legal sense, the linked executable is a combined work, a +derivative of the original library, and the ordinary General Public License +treats it as such. + + Because of this blurred distinction, using the ordinary General +Public License for libraries did not effectively promote software +sharing, because most developers did not use the libraries. We +concluded that weaker conditions might promote sharing better. + + However, unrestricted linking of non-free programs would deprive the +users of those programs of all benefit from the free status of the +libraries themselves. This Library General Public License is intended to +permit developers of non-free programs to use free libraries, while +preserving your freedom as a user of such programs to change the free +libraries that are incorporated in them. (We have not seen how to achieve +this as regards changes in header files, but we have achieved it as regards +changes in the actual functions of the Library.) The hope is that this +will lead to faster development of free libraries. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, while the latter only +works together with the library. + + Note that it is possible for a library to be covered by the ordinary +General Public License rather than by this special one. + + GNU LIBRARY GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library which +contains a notice placed by the copyright holder or other authorized +party saying it may be distributed under the terms of this Library +General Public License (also called "this License"). Each licensee is +addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also compile or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + c) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + d) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the source code distributed need not include anything that is normally +distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Library General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + Appendix: How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + <one line to give the library's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random Hacker. + + <signature of Ty Coon>, 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! + + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License o3d-203170/third_party/modp_b64/LICENSE: + + * MODP_B64 - High performance base64 encoder/decoder + * Version 1.3 -- 17-Mar-2006 + * http://modp.com/release/base64 + * + * Copyright (c) 2005, 2006 Nick Galbreath -- nickg [at] modp [dot] com + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of the modp.com nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License o3d-203170/third_party/skia/LICENSE: + +// Copyright (c) 2011 Google Inc. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License o3d-203170/third_party/skia/third_party/glu/LICENSE.txt: + +SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008) + +Copyright (C) [dates of first publication] Silicon Graphics, Inc. All +Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice including the dates of first publication +and either this permission notice or a reference to HYPERLINK +"http://oss.sgi.com/projects/FreeB/"http://oss.sgi.com/projects/FreeB/ +shall be included in all copies or substantial portions of the +Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL SILICON GRAPHICS, INC. BE LIABLE +FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF +CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of Silicon Graphics, +Inc. shall not be used in advertising or otherwise to promote the +sale, use or other dealings in this Software without prior written +authorization from Silicon Graphics, Inc. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License o3d-203170/third_party/skia/third_party/harfbuzz/COPYING: + +HarfBuzz was previously licensed under different licenses. This was +changed in January 2008. If you need to relicense your old copies, +consult the announcement of the license change on the internet. +Other than that, each copy of HarfBuzz is licensed under the COPYING +file included with it. The actual license follows: + + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License o3d-203170/third_party/zip_utils/LICENSE: + +This is version 1999-Oct-05 of the Info-ZIP copyright and license. +The definitive version of this document should be available at +ftp://ftp.cdrom.com/pub/infozip/license.html indefinitely. + +Copyright (c) 1990-1999 Info-ZIP. All rights reserved. + +For the purposes of this copyright and license, "Info-ZIP" is defined as +the following set of individuals: + + Mark Adler, John Bush, Karl Davis, Harald Denker, Jean-Michel Dubois, + Jean-loup Gailly, Hunter Goatley, Ian Gorman, Chris Herborth, Dirk Haase, + Greg Hartwig, Robert Heath, Jonathan Hudson, Paul Kienitz, David Kirschbaum, + Johnny Lee, Onno van der Linden, Igor Mandrichenko, Steve P. Miller, + Sergio Monesi, Keith Owens, George Petrov, Greg Roelofs, Kai Uwe Rommel, + Steve Salisbury, Dave Smith, Christian Spieler, Antoine Verheijen, + Paul von Behren, Rich Wales, Mike White + +This software is provided "as is," without warranty of any kind, express +or implied. In no event shall Info-ZIP or its contributors be held liable +for any direct, indirect, incidental, special or consequential damages +arising out of the use of or inability to use this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + + 1. Redistributions of source code must retain the above copyright notice, + definition, disclaimer, and this list of conditions. + + 2. Redistributions in binary form must reproduce the above copyright + notice, definition, disclaimer, and this list of conditions in + documentation and/or other materials provided with the distribution. + + 3. Altered versions--including, but not limited to, ports to new operating + systems, existing ports with new graphical interfaces, and dynamic, + shared, or static library versions--must be plainly marked as such + and must not be misrepresented as being the original source. Such + altered versions also must not be misrepresented as being Info-ZIP + releases--including, but not limited to, labeling of the altered + versions with the names "Info-ZIP" (or any variation thereof, including, + but not limited to, different capitalizations), "Pocket UnZip," "WiZ" + or "MacZip" without the explicit permission of Info-ZIP. Such altered + versions are further prohibited from misrepresentative use of the + Zip-Bugs or Info-ZIP e-mail addresses or of the Info-ZIP URL(s). + + 4. Info-ZIP retains the right to use the names "Info-ZIP," "Zip," "UnZip," + "WiZ," "Pocket UnZip," "Pocket Zip," and "MacZip" for its own source and + binary releases. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License o3d-203170/third_party/zlib/LICENSE: + +/* zlib.h -- interface of the 'zlib' general purpose compression library + version 1.2.4, March 14th, 2010 + + Copyright (C) 1995-2010 Jean-loup Gailly and Mark Adler + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + Jean-loup Gailly + Mark Adler + +*/ + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License o3d-203170/tools/gyp/LICENSE: + +Copyright (c) 2009 Google Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License o3d-203170/v8/LICENSE: + +This license applies to all parts of V8 that are not externally +maintained libraries. The externally maintained libraries used by V8 +are: + + - PCRE test suite, located in + test/mjsunit/third_party/regexp-pcre.js. This is based on the + test suite from PCRE-7.3, which is copyrighted by the University + of Cambridge and Google, Inc. The copyright notice and license + are embedded in regexp-pcre.js. + + - Layout tests, located in test/mjsunit/third_party. These are + based on layout tests from webkit.org which are copyrighted by + Apple Computer, Inc. and released under a 3-clause BSD license. + + - Strongtalk assembler, the basis of the files assembler-arm-inl.h, + assembler-arm.cc, assembler-arm.h, assembler-ia32-inl.h, + assembler-ia32.cc, assembler-ia32.h, assembler.cc and assembler.h. + This code is copyrighted by Sun Microsystems Inc. and released + under a 3-clause BSD license. + + - Valgrind client API header, located at third_party/valgrind/valgrind.h + This is release under the BSD license. + +These libraries have their own licenses; we recommend you read them, +as their terms may differ from the terms below. + +Copyright 2006-2011, the V8 project authors. All rights reserved. +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of Google Inc. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +</pre> +<ul> + +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">openssh-5.2_p1</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.openssh.org/">homepage</a></span> +<div class="licence"> +<pre>Scanned Source License openssh-5.2p1/LICENCE: + +This file is part of the OpenSSH software. + +The licences which components of this software fall under are as +follows. First, we will summarize and say that all components +are under a BSD licence, or a licence more free than that. + +OpenSSH contains no GPL code. + +1) + * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland + * All rights reserved + * + * As far as I am concerned, the code I have written for this software + * can be used freely for any purpose. Any derived versions of this + * software must be clearly marked as such, and if the derived work is + * incompatible with the protocol description in the RFC file, it must be + * called by a name other than "ssh" or "Secure Shell". + + [Tatu continues] + * However, I am not implying to give any licenses to any patents or + * copyrights held by third parties, and the software includes parts that + * are not under my direct control. As far as I know, all included + * source code is used in accordance with the relevant license agreements + * and can be used freely for any purpose (the GNU license being the most + * restrictive); see below for details. + + [However, none of that term is relevant at this point in time. All of + these restrictively licenced software components which he talks about + have been removed from OpenSSH, i.e., + + - RSA is no longer included, found in the OpenSSL library + - IDEA is no longer included, its use is deprecated + - DES is now external, in the OpenSSL library + - GMP is no longer used, and instead we call BN code from OpenSSL + - Zlib is now external, in a library + - The make-ssh-known-hosts script is no longer included + - TSS has been removed + - MD5 is now external, in the OpenSSL library + - RC4 support has been replaced with ARC4 support from OpenSSL + - Blowfish is now external, in the OpenSSL library + + [The licence continues] + + Note that any information and cryptographic algorithms used in this + software are publicly available on the Internet and at any major + bookstore, scientific library, and patent office worldwide. More + information can be found e.g. at "http://www.cs.hut.fi/crypto". + + The legal status of this program is some combination of all these + permissions and restrictions. Use only at your own responsibility. + You will be responsible for any legal consequences yourself; I am not + making any claims whether possessing or using this is legal or not in + your country, and I am not taking any responsibility on your behalf. + + + NO WARRANTY + + BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY + FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN + OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES + PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED + OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS + TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE + PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, + REPAIR OR CORRECTION. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING + WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR + REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, + INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING + OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED + TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY + YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER + PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE + POSSIBILITY OF SUCH DAMAGES. + +2) + The 32-bit CRC compensation attack detector in deattack.c was + contributed by CORE SDI S.A. under a BSD-style license. + + * Cryptographic attack detector for ssh - source code + * + * Copyright (c) 1998 CORE SDI S.A., Buenos Aires, Argentina. + * + * All rights reserved. Redistribution and use in source and binary + * forms, with or without modification, are permitted provided that + * this copyright notice is retained. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES ARE DISCLAIMED. IN NO EVENT SHALL CORE SDI S.A. BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY OR + * CONSEQUENTIAL DAMAGES RESULTING FROM THE USE OR MISUSE OF THIS + * SOFTWARE. + * + * Ariel Futoransky <futo@core-sdi.com> + * <http://www.core-sdi.com> + +3) + ssh-keyscan was contributed by David Mazieres under a BSD-style + license. + + * Copyright 1995, 1996 by David Mazieres <dm@lcs.mit.edu>. + * + * Modification and redistribution in source and binary forms is + * permitted provided that due credit is given to the author and the + * OpenBSD project by leaving this copyright notice intact. + +4) + The Rijndael implementation by Vincent Rijmen, Antoon Bosselaers + and Paulo Barreto is in the public domain and distributed + with the following license: + + * @version 3.0 (December 2000) + * + * Optimised ANSI C code for the Rijndael cipher (now AES) + * + * @author Vincent Rijmen <vincent.rijmen@esat.kuleuven.ac.be> + * @author Antoon Bosselaers <antoon.bosselaers@esat.kuleuven.ac.be> + * @author Paulo Barreto <paulo.barreto@terra.com.br> + * + * This code is hereby placed in the public domain. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ''AS IS'' AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR + * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +5) + One component of the ssh source code is under a 3-clause BSD license, + held by the University of California, since we pulled these parts from + original Berkeley code. + + * Copyright (c) 1983, 1990, 1992, 1993, 1995 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + +6) + Remaining components of the software are provided under a standard + 2-term BSD licence with the following names as copyright holders: + + Markus Friedl + Theo de Raadt + Niels Provos + Dug Song + Aaron Campbell + Damien Miller + Kevin Steves + Daniel Kouril + Wesley Griffin + Per Allansson + Nils Nordman + Simon Wilkinson + + Portable OpenSSH additionally includes code from the following copyright + holders, also under the 2-term BSD license: + + Ben Lindstrom + Tim Rice + Andre Lucas + Chris Adams + Corinna Vinschen + Cray Inc. + Denis Parker + Gert Doering + Jakob Schlyter + Jason Downs + Juha Yrjölä + Michael Stone + Networks Associates Technology, Inc. + Solar Designer + Todd C. Miller + Wayne Schroeder + William Jones + Darren Tucker + Sun Microsystems + The SCO Group + Daniel Walsh + + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +8) Portable OpenSSH contains the following additional licenses: + + a) md5crypt.c, md5crypt.h + + * "THE BEER-WARE LICENSE" (Revision 42): + * <phk@login.dknet.dk> wrote this file. As long as you retain this + * notice you can do whatever you want with this stuff. If we meet + * some day, and you think this stuff is worth it, you can buy me a + * beer in return. Poul-Henning Kamp + + b) snprintf replacement + + * Copyright Patrick Powell 1995 + * This code is based on code written by Patrick Powell + * (papowell@astart.com) It may be used for any purpose as long as this + * notice remains intact on all source code distributions + + c) Compatibility code (openbsd-compat) + + Apart from the previously mentioned licenses, various pieces of code + in the openbsd-compat/ subdirectory are licensed as follows: + + Some code is licensed under a 3-term BSD license, to the following + copyright holders: + + Todd C. Miller + Theo de Raadt + Damien Miller + Eric P. Allman + The Regents of the University of California + Constantin S. Svintsoff + + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + + Some code is licensed under an ISC-style license, to the following + copyright holders: + + Internet Software Consortium. + Todd C. Miller + Reyk Floeter + Chad Mynhier + + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND TODD C. MILLER DISCLAIMS ALL + * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL TODD C. MILLER BE LIABLE + * FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION + * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + Some code is licensed under a MIT-style license to the following + copyright holders: + + Free Software Foundation, Inc. + + * Permission is hereby granted, free of charge, to any person obtaining a * + * copy of this software and associated documentation files (the * + * "Software"), to deal in the Software without restriction, including * + * without limitation the rights to use, copy, modify, merge, publish, * + * distribute, distribute with modifications, sublicense, and/or sell * + * copies of the Software, and to permit persons to whom the Software is * + * furnished to do so, subject to the following conditions: * + * * + * The above copyright notice and this permission notice shall be included * + * in all copies or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * + * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * + * * + * Except as contained in this notice, the name(s) of the above copyright * + * holders shall not be used in advertising or otherwise to promote the * + * sale, use or other dealings in this Software without prior written * + * authorization. * + ****************************************************************************/ + + +------ +$OpenBSD: LICENCE,v 1.19 2004/08/30 09:18:08 markus Exp $ + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +</pre> +<ul> +<li><a href='#as-is'>Gentoo Package Stock License as-is</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">openssl-1.0.1e</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.openssl.org/">homepage</a></span> +<div class="licence"> +<pre>Gentoo Package Stock License openssl: + + + LICENSE ISSUES + ============== + + The OpenSSL toolkit stays under a dual license, i.e. both the conditions of + the OpenSSL License and the original SSLeay license apply to the toolkit. + See below for the actual license texts. Actually both licenses are BSD-style + Open Source licenses. In case of any license issues related to OpenSSL + please contact openssl-core@openssl.org. + + OpenSSL License + --------------- + +/* ==================================================================== + * Copyright (c) 1998-2004 The OpenSSL Project. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. All advertising materials mentioning features or use of this + * software must display the following acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" + * + * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * openssl-core@openssl.org. + * + * 5. Products derived from this software may not be called "OpenSSL" + * nor may "OpenSSL" appear in their names without prior written + * permission of the OpenSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit (http://www.openssl.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY + * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * ==================================================================== + * + * This product includes cryptographic software written by Eric Young + * (eay@cryptsoft.com). This product includes software written by Tim + * Hudson (tjh@cryptsoft.com). + * + */ + + Original SSLeay License + ----------------------- + +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +</pre> +<ul> + +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">openvpn-2.3.2</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://openvpn.net/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#GPL-2'>Gentoo Package Stock License GPL-2</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">pam-1.1.5</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="https://fedorahosted.org/linux-pam/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#GPL-2'>Gentoo Package Stock License GPL-2</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">pam_pwdfile-0.99</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://cpbotha.net/pam_pwdfile.html">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#GPL-2'>Gentoo Package Stock License GPL-2</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">pambase-20101024</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.gentoo.org/proj/en/base/pam/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#GPL-2'>Gentoo Package Stock License GPL-2</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">pango-1.32.5</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.pango.org/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#LGPL-2+'>Gentoo Package Stock License LGPL-2+</a></li> +<li><a href='#LGPL-2'>Gentoo Package Stock License LGPL-2</a></li> +<li><a href='#FTL'>Gentoo Package Stock License FTL</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">parted-3.1</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.gnu.org/software/parted">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#GPL-3'>Gentoo Package Stock License GPL-3</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">patch-2.6.1</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.gnu.org/software/patch/patch.html">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#GPL-2'>Gentoo Package Stock License GPL-2</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">pax-utils-0.4</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://hardened.gentoo.org/pax-utils.xml">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#GPL-2'>Gentoo Package Stock License GPL-2</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">pciutils-3.1.10</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://mj.ucw.cz/sw/pciutils/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#GPL-2'>Gentoo Package Stock License GPL-2</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">perf-3.4</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://perf.wiki.kernel.org/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#GPL-2'>Gentoo Package Stock License GPL-2</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">pkcs11-helper-1.07</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.opensc-project.org/pkcs11-helper">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#GPL-2'>Gentoo Package Stock License GPL-2</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">ply-image-0.0.1</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.chromium.org/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#GPL-2'>Gentoo Package Stock License GPL-2</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">popt-1.16</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://rpm5.org/">homepage</a></span> +<div class="licence"> +<pre>Scanned Source License popt-1.16/COPYING: + +Copyright (c) 1998 Red Hat Software + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of the X Consortium shall not be +used in advertising or otherwise to promote the sale, use or other dealings +in this Software without prior written authorization from the X Consortium. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +</pre> +<ul> + +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">portage-2.1.11.50</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.gentoo.org/proj/en/portage/index.xml">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#GPL-2'>Gentoo Package Stock License GPL-2</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">ppp-2.4.5</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.samba.org/ppp">homepage</a></span> +<div class="licence"> +<pre>Scanned Source License ppp-2.4.5/pppd/plugins/pppoatm/COPYING: + +The files ans.c, atm.h, atmres.h, atmsap.h, misc.c, text2atm.c and +text2qos.c are taken from the linux-atm libraries. These are +Copyright 1995-2000 EPFL-LRC/ICA, and are licensed under the GNU Lesser +General Public License. + +The file pppoatm.c contains its own copyright notice, and is licensed +under the GPL. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License ppp-2.4.5/pppd/plugins/radius/COPYRIGHT: + +See the respective source files to find out which copyrights apply. + +------------------------------------------------------------------------------ +Copyright (C) 2002 Roaring Penguin Software Inc. + +Permission to use, copy, modify, and distribute this software for any +purpose and without fee is hereby granted, provided that this +copyright and permission notice appear on all copies and supporting +documentation, the name of Roaring Penguin Software Inc. not be used +in advertising or publicity pertaining to distribution of the program +without specific prior permission, and notice be given in supporting +documentation that copying and distribution is by permission of +Roaring Penguin Software Inc.. + +Roaring Penguin Software Inc. makes no representations about the +suitability of this software for any purpose. It is provided "as is" +without express or implied warranty. + +------------------------------------------------------------------------------ +Copyright (C) 1995,1996,1997,1998 Lars Fenneberg <lf@elemental.net> + +Permission to use, copy, modify, and distribute this software for any +purpose and without fee is hereby granted, provided that this copyright and +permission notice appear on all copies and supporting documentation, the +name of Lars Fenneberg not be used in advertising or publicity pertaining to +distribution of the program without specific prior permission, and notice be +given in supporting documentation that copying and distribution is by +permission of Lars Fenneberg. + +Lars Fenneberg makes no representations about the suitability of this +software for any purpose. It is provided "as is" without express or implied +warranty. + +------------------------------------------------------------------------------ +Copyright 1992 Livingston Enterprises, Inc. +Livingston Enterprises, Inc. 6920 Koll Center Parkway Pleasanton, CA 94566 + +Permission to use, copy, modify, and distribute this software for any +purpose and without fee is hereby granted, provided that this copyright +and permission notice appear on all copies and supporting documentation, +the name of Livingston Enterprises, Inc. not be used in advertising or +publicity pertaining to distribution of the program without specific +prior permission, and notice be given in supporting documentation that +copying and distribution is by permission of Livingston Enterprises, Inc. + +Livingston Enterprises, Inc. makes no representations about the suitability +of this software for any purpose. It is provided "as is" without express +or implied warranty. +------------------------------------------------------------------------------ +[C] The Regents of the University of Michigan and Merit Network, Inc. 1992, +1993, 1994, 1995 All Rights Reserved + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, provided +that the above copyright notice and this permission notice appear in all +copies of the software and derivative works or modified versions thereof, +and that both the copyright notice and this permission and disclaimer +notice appear in supporting documentation. + +THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER +EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE REGENTS OF THE +UNIVERSITY OF MICHIGAN AND MERIT NETWORK, INC. DO NOT WARRANT THAT THE +FUNCTIONS CONTAINED IN THE SOFTWARE WILL MEET LICENSEE'S REQUIREMENTS OR +THAT OPERATION WILL BE UNINTERRUPTED OR ERROR FREE. The Regents of the +University of Michigan and Merit Network, Inc. shall not be liable for any +special, indirect, incidental or consequential damages with respect to any +claim by Licensee or any third party arising from use of the software. +------------------------------------------------------------------------------ +Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. +All rights reserved. + +License to copy and use this software is granted provided that it +is identified as the "RSA Data Security, Inc. MD5 Message-Digest +Algorithm" in all material mentioning or referencing this software +or this function. + +License is also granted to make and use derivative works provided +that such works are identified as "derived from the RSA Data +Security, Inc. MD5 Message-Digest Algorithm" in all material +mentioning or referencing the derived work. + +RSA Data Security, Inc. makes no representations concerning either +the merchantability of this software or the suitability of this +software for any particular purpose. It is provided "as is" +without express or implied warranty of any kind. + +These notices must be retained in any copies of any part of this +documentation and/or software. +------------------------------------------------------------------------------ + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +</pre> +<ul> +<li><a href='#GPL-2'>Gentoo Package Stock License GPL-2</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">procps-3.3.4</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://procps.sourceforge.net/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#GPL-2'>Gentoo Package Stock License GPL-2</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">protobuf-2.3.0</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://code.google.com/p/protobuf/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#Apache-2.0'>Gentoo Package Stock License Apache-2.0</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">pv-1.3.4</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.ivarch.com/programs/pv.shtml">homepage</a></span> +<div class="licence"> +<pre>Gentoo Package Stock License Artistic-2: + + The Artistic License 2.0 + + Copyright (c) 2000-2006, The Perl Foundation. + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +Preamble + +This license establishes the terms under which a given free software +Package may be copied, modified, distributed, and/or redistributed. +The intent is that the Copyright Holder maintains some artistic +control over the development of that Package while still keeping the +Package available as open source and free software. + +You are always permitted to make arrangements wholly outside of this +license directly with the Copyright Holder of a given Package. If the +terms of this license do not permit the full use that you propose to +make of the Package, you should contact the Copyright Holder and seek +a different licensing arrangement. + +Definitions + + "Copyright Holder" means the individual(s) or organization(s) + named in the copyright notice for the entire Package. + + "Contributor" means any party that has contributed code or other + material to the Package, in accordance with the Copyright Holder's + procedures. + + "You" and "your" means any person who would like to copy, + distribute, or modify the Package. + + "Package" means the collection of files distributed by the + Copyright Holder, and derivatives of that collection and/or of + those files. A given Package may consist of either the Standard + Version, or a Modified Version. + + "Distribute" means providing a copy of the Package or making it + accessible to anyone else, or in the case of a company or + organization, to others outside of your company or organization. + + "Distributor Fee" means any fee that you charge for Distributing + this Package or providing support for this Package to another + party. It does not mean licensing fees. + + "Standard Version" refers to the Package if it has not been + modified, or has been modified only in ways explicitly requested + by the Copyright Holder. + + "Modified Version" means the Package, if it has been changed, and + such changes were not explicitly requested by the Copyright + Holder. + + "Original License" means this Artistic License as Distributed with + the Standard Version of the Package, in its current version or as + it may be modified by The Perl Foundation in the future. + + "Source" form means the source code, documentation source, and + configuration files for the Package. + + "Compiled" form means the compiled bytecode, object code, binary, + or any other form resulting from mechanical transformation or + translation of the Source form. + + +Permission for Use and Modification Without Distribution + +(1) You are permitted to use the Standard Version and create and use +Modified Versions for any purpose without restriction, provided that +you do not Distribute the Modified Version. + + +Permissions for Redistribution of the Standard Version + +(2) You may Distribute verbatim copies of the Source form of the +Standard Version of this Package in any medium without restriction, +either gratis or for a Distributor Fee, provided that you duplicate +all of the original copyright notices and associated disclaimers. At +your discretion, such verbatim copies may or may not include a +Compiled form of the Package. + +(3) You may apply any bug fixes, portability changes, and other +modifications made available from the Copyright Holder. The resulting +Package will still be considered the Standard Version, and as such +will be subject to the Original License. + + +Distribution of Modified Versions of the Package as Source + +(4) You may Distribute your Modified Version as Source (either gratis +or for a Distributor Fee, and with or without a Compiled form of the +Modified Version) provided that you clearly document how it differs +from the Standard Version, including, but not limited to, documenting +any non-standard features, executables, or modules, and provided that +you do at least ONE of the following: + + (a) make the Modified Version available to the Copyright Holder + of the Standard Version, under the Original License, so that the + Copyright Holder may include your modifications in the Standard + Version. + + (b) ensure that installation of your Modified Version does not + prevent the user installing or running the Standard Version. In + addition, the Modified Version must bear a name that is different + from the name of the Standard Version. + + (c) allow anyone who receives a copy of the Modified Version to + make the Source form of the Modified Version available to others + under + + (i) the Original License or + + (ii) a license that permits the licensee to freely copy, + modify and redistribute the Modified Version using the same + licensing terms that apply to the copy that the licensee + received, and requires that the Source form of the Modified + Version, and of any works derived from it, be made freely + available in that license fees are prohibited but Distributor + Fees are allowed. + + +Distribution of Compiled Forms of the Standard Version +or Modified Versions without the Source + +(5) You may Distribute Compiled forms of the Standard Version without +the Source, provided that you include complete instructions on how to +get the Source of the Standard Version. Such instructions must be +valid at the time of your distribution. If these instructions, at any +time while you are carrying out such distribution, become invalid, you +must provide new instructions on demand or cease further distribution. +If you provide valid instructions or cease distribution within thirty +days after you become aware that the instructions are invalid, then +you do not forfeit any of your rights under this license. + +(6) You may Distribute a Modified Version in Compiled form without +the Source, provided that you comply with Section 4 with respect to +the Source of the Modified Version. + + +Aggregating or Linking the Package + +(7) You may aggregate the Package (either the Standard Version or +Modified Version) with other packages and Distribute the resulting +aggregation provided that you do not charge a licensing fee for the +Package. Distributor Fees are permitted, and licensing fees for other +components in the aggregation are permitted. The terms of this license +apply to the use and Distribution of the Standard or Modified Versions +as included in the aggregation. + +(8) You are permitted to link Modified and Standard Versions with +other works, to embed the Package in a larger work of your own, or to +build stand-alone binary or bytecode versions of applications that +include the Package, and Distribute the result without restriction, +provided the result does not expose a direct interface to the Package. + + +Items That are Not Considered Part of a Modified Version + +(9) Works (including, but not limited to, modules and scripts) that +merely extend or make use of the Package, do not, by themselves, cause +the Package to be a Modified Version. In addition, such works are not +considered parts of the Package itself, and are not subject to the +terms of this license. + + +General Provisions + +(10) Any use, modification, and distribution of the Standard or +Modified Versions is governed by this Artistic License. By using, +modifying or distributing the Package, you accept this license. Do not +use, modify, or distribute the Package, if you do not accept this +license. + +(11) If your Modified Version has been derived from a Modified +Version made by someone other than you, you are nevertheless required +to ensure that your Modified Version complies with the requirements of +this license. + +(12) This license does not grant you the right to use any trademark, +service mark, tradename, or logo of the Copyright Holder. + +(13) This license includes the non-exclusive, worldwide, +free-of-charge patent license to make, have made, use, offer to sell, +sell, import and otherwise transfer the Package with respect to any +patent claims licensable by the Copyright Holder that are necessarily +infringed by the Package. If you institute patent litigation +(including a cross-claim or counterclaim) against any party alleging +that the Package constitutes direct or contributory patent +infringement, then this Artistic License to you shall terminate on the +date that such litigation is filed. + +(14) Disclaimer of Warranty: +THE PACKAGE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS "AS +IS' AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES. THE IMPLIED +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR +NON-INFRINGEMENT ARE DISCLAIMED TO THE EXTENT PERMITTED BY YOUR LOCAL +LAW. UNLESS REQUIRED BY LAW, NO COPYRIGHT HOLDER OR CONTRIBUTOR WILL +BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES ARISING IN ANY WAY OUT OF THE USE OF THE PACKAGE, EVEN IF +ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +</pre> +<ul> + +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">python-2.7.3</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.python.org/">homepage</a></span> +<div class="licence"> +<pre>Scanned Source License Python-2.7.3/LICENSE: + +A. HISTORY OF THE SOFTWARE +========================== + +Python was created in the early 1990s by Guido van Rossum at Stichting +Mathematisch Centrum (CWI, see http://www.cwi.nl) in the Netherlands +as a successor of a language called ABC. Guido remains Python's +principal author, although it includes many contributions from others. + +In 1995, Guido continued his work on Python at the Corporation for +National Research Initiatives (CNRI, see http://www.cnri.reston.va.us) +in Reston, Virginia where he released several versions of the +software. + +In May 2000, Guido and the Python core development team moved to +BeOpen.com to form the BeOpen PythonLabs team. In October of the same +year, the PythonLabs team moved to Digital Creations (now Zope +Corporation, see http://www.zope.com). In 2001, the Python Software +Foundation (PSF, see http://www.python.org/psf/) was formed, a +non-profit organization created specifically to own Python-related +Intellectual Property. Zope Corporation is a sponsoring member of +the PSF. + +All Python releases are Open Source (see http://www.opensource.org for +the Open Source Definition). Historically, most, but not all, Python +releases have also been GPL-compatible; the table below summarizes +the various releases. + + Release Derived Year Owner GPL- + from compatible? (1) + + 0.9.0 thru 1.2 1991-1995 CWI yes + 1.3 thru 1.5.2 1.2 1995-1999 CNRI yes + 1.6 1.5.2 2000 CNRI no + 2.0 1.6 2000 BeOpen.com no + 1.6.1 1.6 2001 CNRI yes (2) + 2.1 2.0+1.6.1 2001 PSF no + 2.0.1 2.0+1.6.1 2001 PSF yes + 2.1.1 2.1+2.0.1 2001 PSF yes + 2.2 2.1.1 2001 PSF yes + 2.1.2 2.1.1 2002 PSF yes + 2.1.3 2.1.2 2002 PSF yes + 2.2.1 2.2 2002 PSF yes + 2.2.2 2.2.1 2002 PSF yes + 2.2.3 2.2.2 2003 PSF yes + 2.3 2.2.2 2002-2003 PSF yes + 2.3.1 2.3 2002-2003 PSF yes + 2.3.2 2.3.1 2002-2003 PSF yes + 2.3.3 2.3.2 2002-2003 PSF yes + 2.3.4 2.3.3 2004 PSF yes + 2.3.5 2.3.4 2005 PSF yes + 2.4 2.3 2004 PSF yes + 2.4.1 2.4 2005 PSF yes + 2.4.2 2.4.1 2005 PSF yes + 2.4.3 2.4.2 2006 PSF yes + 2.4.4 2.4.3 2006 PSF yes + 2.5 2.4 2006 PSF yes + 2.5.1 2.5 2007 PSF yes + 2.5.2 2.5.1 2008 PSF yes + 2.5.3 2.5.2 2008 PSF yes + 2.6 2.5 2008 PSF yes + 2.6.1 2.6 2008 PSF yes + 2.6.2 2.6.1 2009 PSF yes + 2.6.3 2.6.2 2009 PSF yes + 2.6.4 2.6.3 2009 PSF yes + 2.6.5 2.6.4 2010 PSF yes + 2.7 2.6 2010 PSF yes + +Footnotes: + +(1) GPL-compatible doesn't mean that we're distributing Python under + the GPL. All Python licenses, unlike the GPL, let you distribute + a modified version without making your changes open source. The + GPL-compatible licenses make it possible to combine Python with + other software that is released under the GPL; the others don't. + +(2) According to Richard Stallman, 1.6.1 is not GPL-compatible, + because its license has a choice of law clause. According to + CNRI, however, Stallman's lawyer has told CNRI's lawyer that 1.6.1 + is "not incompatible" with the GPL. + +Thanks to the many outside volunteers who have worked under Guido's +direction to make these releases possible. + + +B. TERMS AND CONDITIONS FOR ACCESSING OR OTHERWISE USING PYTHON +=============================================================== + +PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2 +-------------------------------------------- + +1. This LICENSE AGREEMENT is between the Python Software Foundation +("PSF"), and the Individual or Organization ("Licensee") accessing and +otherwise using this software ("Python") in source or binary form and +its associated documentation. + +2. Subject to the terms and conditions of this License Agreement, PSF hereby +grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce, +analyze, test, perform and/or display publicly, prepare derivative works, +distribute, and otherwise use Python alone or in any derivative version, +provided, however, that PSF's License Agreement and PSF's notice of copyright, +i.e., "Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, +2011, 2012 Python Software Foundation; All Rights Reserved" are retained in Python +alone or in any derivative version prepared by Licensee. + +3. In the event Licensee prepares a derivative work that is based on +or incorporates Python or any part thereof, and wants to make +the derivative work available to others as provided herein, then +Licensee hereby agrees to include in any such work a brief summary of +the changes made to Python. + +4. PSF is making Python available to Licensee on an "AS IS" +basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR +IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND +DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS +FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON WILL NOT +INFRINGE ANY THIRD PARTY RIGHTS. + +5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON +FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS +A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON, +OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. + +6. This License Agreement will automatically terminate upon a material +breach of its terms and conditions. + +7. Nothing in this License Agreement shall be deemed to create any +relationship of agency, partnership, or joint venture between PSF and +Licensee. This License Agreement does not grant permission to use PSF +trademarks or trade name in a trademark sense to endorse or promote +products or services of Licensee, or any third party. + +8. By copying, installing or otherwise using Python, Licensee +agrees to be bound by the terms and conditions of this License +Agreement. + + +BEOPEN.COM LICENSE AGREEMENT FOR PYTHON 2.0 +------------------------------------------- + +BEOPEN PYTHON OPEN SOURCE LICENSE AGREEMENT VERSION 1 + +1. This LICENSE AGREEMENT is between BeOpen.com ("BeOpen"), having an +office at 160 Saratoga Avenue, Santa Clara, CA 95051, and the +Individual or Organization ("Licensee") accessing and otherwise using +this software in source or binary form and its associated +documentation ("the Software"). + +2. Subject to the terms and conditions of this BeOpen Python License +Agreement, BeOpen hereby grants Licensee a non-exclusive, +royalty-free, world-wide license to reproduce, analyze, test, perform +and/or display publicly, prepare derivative works, distribute, and +otherwise use the Software alone or in any derivative version, +provided, however, that the BeOpen Python License is retained in the +Software, alone or in any derivative version prepared by Licensee. + +3. BeOpen is making the Software available to Licensee on an "AS IS" +basis. BEOPEN MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR +IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, BEOPEN MAKES NO AND +DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS +FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE WILL NOT +INFRINGE ANY THIRD PARTY RIGHTS. + +4. BEOPEN SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE +SOFTWARE FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS +AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THE SOFTWARE, OR ANY +DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. + +5. This License Agreement will automatically terminate upon a material +breach of its terms and conditions. + +6. This License Agreement shall be governed by and interpreted in all +respects by the law of the State of California, excluding conflict of +law provisions. Nothing in this License Agreement shall be deemed to +create any relationship of agency, partnership, or joint venture +between BeOpen and Licensee. This License Agreement does not grant +permission to use BeOpen trademarks or trade names in a trademark +sense to endorse or promote products or services of Licensee, or any +third party. As an exception, the "BeOpen Python" logos available at +http://www.pythonlabs.com/logos.html may be used according to the +permissions granted on that web page. + +7. By copying, installing or otherwise using the software, Licensee +agrees to be bound by the terms and conditions of this License +Agreement. + + +CNRI LICENSE AGREEMENT FOR PYTHON 1.6.1 +--------------------------------------- + +1. This LICENSE AGREEMENT is between the Corporation for National +Research Initiatives, having an office at 1895 Preston White Drive, +Reston, VA 20191 ("CNRI"), and the Individual or Organization +("Licensee") accessing and otherwise using Python 1.6.1 software in +source or binary form and its associated documentation. + +2. Subject to the terms and conditions of this License Agreement, CNRI +hereby grants Licensee a nonexclusive, royalty-free, world-wide +license to reproduce, analyze, test, perform and/or display publicly, +prepare derivative works, distribute, and otherwise use Python 1.6.1 +alone or in any derivative version, provided, however, that CNRI's +License Agreement and CNRI's notice of copyright, i.e., "Copyright (c) +1995-2001 Corporation for National Research Initiatives; All Rights +Reserved" are retained in Python 1.6.1 alone or in any derivative +version prepared by Licensee. Alternately, in lieu of CNRI's License +Agreement, Licensee may substitute the following text (omitting the +quotes): "Python 1.6.1 is made available subject to the terms and +conditions in CNRI's License Agreement. This Agreement together with +Python 1.6.1 may be located on the Internet using the following +unique, persistent identifier (known as a handle): 1895.22/1013. This +Agreement may also be obtained from a proxy server on the Internet +using the following URL: http://hdl.handle.net/1895.22/1013". + +3. In the event Licensee prepares a derivative work that is based on +or incorporates Python 1.6.1 or any part thereof, and wants to make +the derivative work available to others as provided herein, then +Licensee hereby agrees to include in any such work a brief summary of +the changes made to Python 1.6.1. + +4. CNRI is making Python 1.6.1 available to Licensee on an "AS IS" +basis. CNRI MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR +IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, CNRI MAKES NO AND +DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS +FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 1.6.1 WILL NOT +INFRINGE ANY THIRD PARTY RIGHTS. + +5. CNRI SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON +1.6.1 FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS +A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 1.6.1, +OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. + +6. This License Agreement will automatically terminate upon a material +breach of its terms and conditions. + +7. This License Agreement shall be governed by the federal +intellectual property law of the United States, including without +limitation the federal copyright law, and, to the extent such +U.S. federal law does not apply, by the law of the Commonwealth of +Virginia, excluding Virginia's conflict of law provisions. +Notwithstanding the foregoing, with regard to derivative works based +on Python 1.6.1 that incorporate non-separable material that was +previously distributed under the GNU General Public License (GPL), the +law of the Commonwealth of Virginia shall govern this License +Agreement only as to issues arising under or with respect to +Paragraphs 4, 5, and 7 of this License Agreement. Nothing in this +License Agreement shall be deemed to create any relationship of +agency, partnership, or joint venture between CNRI and Licensee. This +License Agreement does not grant permission to use CNRI trademarks or +trade name in a trademark sense to endorse or promote products or +services of Licensee, or any third party. + +8. By clicking on the "ACCEPT" button where indicated, or by copying, +installing or otherwise using Python 1.6.1, Licensee agrees to be +bound by the terms and conditions of this License Agreement. + + ACCEPT + + +CWI LICENSE AGREEMENT FOR PYTHON 0.9.0 THROUGH 1.2 +-------------------------------------------------- + +Copyright (c) 1991 - 1995, Stichting Mathematisch Centrum Amsterdam, +The Netherlands. All rights reserved. + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the name of Stichting Mathematisch +Centrum or CWI not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. + +STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO +THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE +FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT +OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License Python-2.7.3/Modules/_ctypes/darwin/LICENSE: + +Copyright (c) 2002 Jorge Acereda <jacereda@users.sourceforge.net> & + Peter O'Gorman <ogorman@users.sourceforge.net> + +Portions may be copyright others, see the AUTHORS file included with this +distribution. + +Maintained by Peter O'Gorman <ogorman@users.sourceforge.net> + +Bug Reports and other queries should go to <ogorman@users.sourceforge.net> + + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License Python-2.7.3/Modules/_ctypes/libffi/LICENSE: + +libffi - Copyright (c) 1996-2009 Anthony Green, Red Hat, Inc and others. +See source files for details. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +``Software''), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License Python-2.7.3/Modules/_ctypes/libffi_msvc/LICENSE: + +libffi - Copyright (c) 1996-2003 Red Hat, Inc. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +``Software''), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL CYGNUS SOLUTIONS BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License Python-2.7.3/Modules/_ctypes/libffi_osx/LICENSE: + +libffi - Copyright (c) 1996-2003 Red Hat, Inc. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +``Software''), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL CYGNUS SOLUTIONS BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License Python-2.7.3/Modules/expat/COPYING: + +Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd + and Clark Cooper + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License Python-2.7.3/Tools/pybench/LICENSE: + +pybench License +--------------- + +This copyright notice and license applies to all files in the pybench +directory of the pybench distribution. + +Copyright (c), 1997-2006, Marc-Andre Lemburg (mal@lemburg.com) +Copyright (c), 2000-2006, eGenix.com Software GmbH (info@egenix.com) + + All Rights Reserved. + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee or royalty is hereby +granted, provided that the above copyright notice appear in all copies +and that both that copyright notice and this permission notice appear +in supporting documentation or portions thereof, including +modifications, that you make. + +THE AUTHOR MARC-ANDRE LEMBURG DISCLAIMS ALL WARRANTIES WITH REGARD TO +THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS, IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, +INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING +FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, +NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION +WITH THE USE OR PERFORMANCE OF THIS SOFTWARE ! + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +</pre> +<ul> +<li><a href='#PSF-2'>Gentoo Package Stock License PSF-2</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">python-updater-0.10</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.gentoo.org/proj/en/Python/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#GPL-2'>Gentoo Package Stock License GPL-2</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">ragel-6.7</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.complang.org/ragel/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#GPL-2'>Gentoo Package Stock License GPL-2</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">readline-6.2_p1</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://cnswww.cns.cwru.edu/php/chet/readline/rltop.html">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#GPL-3'>Gentoo Package Stock License GPL-3</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">realtek-rt2800-firmware-0.0.1</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://git.kernel.org/?p=linux/kernel/git/firmware/linux-firmware.git">homepage</a></span> +<div class="licence"> +<pre>Custom License ralink-firmware: + +Copyright (c) 2007, Ralink Technology Corporation +All rights reserved. + +Redistribution. Redistribution and use in binary form, without +modification, are permitted provided that the following conditions are +met: + +* Redistributions must reproduce the above copyright notice and the + following disclaimer in the documentation and/or other materials + provided with the distribution. +* Neither the name of Ralink Technology Corporation nor the names of its + suppliers may be used to endorse or promote products derived from this + software without specific prior written permission. +* No reverse engineering, decompilation, or disassembly of this software + is permitted. + +Limited patent license. Ralink Technology Corporation grants a world-wide, +royalty-free, non-exclusive license under patents it now or hereafter +owns or controls to make, have made, use, import, offer to sell and +sell ("Utilize") this software, but solely to the extent that any +such patent is necessary to Utilize the software alone, or in +combination with an operating system licensed under an approved Open +Source license as listed by the Open Source Initiative at +http://opensource.org/licenses. The patent license shall not apply to +any other combinations which include this software. No hardware per +se is licensed hereunder. + +DISCLAIMER. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS +OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR +TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE +USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +</pre> +<ul> + +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">rootdev-0.0.1</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.chromium.org/">homepage</a></span> +<div class="licence"> +<pre>Scanned Source License rootdev-0.0.1/LICENSE: + +// Copyright (c) 2010 The Chromium OS Authors. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +</pre> +<ul> + +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">rsync-3.0.8</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://rsync.samba.org/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#GPL-3'>Gentoo Package Stock License GPL-3</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">rsyslog-5.8.11</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.rsyslog.com/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#GPL-3'>Gentoo Package Stock License GPL-3</a></li> +<li><a href='#Apache-2.0'>Gentoo Package Stock License Apache-2.0</a></li> +<li><a href='#LGPL-3'>Gentoo Package Stock License LGPL-3</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">sandbox-2.6</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.gentoo.org/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#GPL-2'>Gentoo Package Stock License GPL-2</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">sbc-1.0</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://git.kernel.org/?p=bluetooth/sbc.git">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#LGPL-2.1'>Gentoo Package Stock License LGPL-2.1</a></li> +<li><a href='#GPL-2'>Gentoo Package Stock License GPL-2</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">scons-2.0.1</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.scons.org/">homepage</a></span> +<div class="licence"> +<pre>Scanned Source License scons-2.0.1/LICENSE.txt: + +Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 The SCons Foundation + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY +KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +</pre> +<ul> + +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">sed-4.2.1</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://sed.sourceforge.net/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#GPL-3'>Gentoo Package Stock License GPL-3</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">setuptools-0.6.14</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://pypi.python.org/pypi/distribute">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#PSF-2'>Gentoo Package Stock License PSF-2</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">sgml-common-0.6.3</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.iso.ch/cate/3524030.html">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#GPL-2'>Gentoo Package Stock License GPL-2</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">shadow-4.1.2.2</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://shadow.pld.org.pl/">homepage</a></span> +<div class="licence"> +<pre>Scanned Source License shadow-4.1.2.2/COPYING: + +NOTE: + This license has been obsoleted by the change to the BSD-style copyright. + You may continue to use this license if you wish, but you are under no + obligation to do so. + +(* +This document is freely plagiarised from the 'Artistic Licence', +distributed as part of the Perl v4.0 kit by Larry Wall, which is +available from most major archive sites. I stole it from CrackLib. + + $Id: COPYING 1342 2007-11-10 23:46:11Z nekral-guest $ +*) + +This documents purpose is to state the conditions under which this +Package (See definition below) viz: "Shadow", the Shadow Password Suite +which is held by Julianne Frances Haugh, may be copied, such that the +copyright holder maintains some semblance of artistic control over the +development of the package, while giving the users of the package the +right to use and distribute the Package in a more-or-less customary +fashion, plus the right to make reasonable modifications. + +So there. + +*************************************************************************** + +Definitions: + + +A "Package" refers to the collection of files distributed by the +Copyright Holder, and derivatives of that collection of files created +through textual modification, or segments thereof. + +"Standard Version" refers to such a Package if it has not been modified, +or has been modified in accordance with the wishes of the Copyright +Holder. + +"Copyright Holder" is whoever is named in the copyright or copyrights +for the package. + +"You" is you, if you're thinking about copying or distributing this +Package. + +"Reasonable copying fee" is whatever you can justify on the basis of +media cost, duplication charges, time of people involved, and so on. +(You will not be required to justify it to the Copyright Holder, but +only to the computing community at large as a market that must bear the +fee.) + +"Freely Available" means that no fee is charged for the item itself, +though there may be fees involved in handling the item. It also means +that recipients of the item may redistribute it under the same +conditions they received it. + + +1. You may make and give away verbatim copies of the source form of the +Standard Version of this Package without restriction, provided that you +duplicate all of the original copyright notices and associated +disclaimers. + +2. You may apply bug fixes, portability fixes and other modifications +derived from the Public Domain or from the Copyright Holder. A Package +modified in such a way shall still be considered the Standard Version. + +3. You may otherwise modify your copy of this Package in any way, +provided that you insert a prominent notice in each changed file stating +how and when AND WHY you changed that file, and provided that you do at +least ONE of the following: + +a) place your modifications in the Public Domain or otherwise make them +Freely Available, such as by posting said modifications to Usenet or an +equivalent medium, or placing the modifications on a major archive site +such as uunet.uu.net, or by allowing the Copyright Holder to include +your modifications in the Standard Version of the Package. + +b) use the modified Package only within your corporation or organization. + +c) rename any non-standard executables so the names do not conflict with +standard executables, which must also be provided, and provide separate +documentation for each non-standard executable that clearly documents +how it differs from the Standard Version. + +d) make other distribution arrangements with the Copyright Holder. + +4. You may distribute the programs of this Package in object code or +executable form, provided that you do at least ONE of the following: + +a) distribute a Standard Version of the executables and library files, +together with instructions (in the manual page or equivalent) on where +to get the Standard Version. + +b) accompany the distribution with the machine-readable source of the +Package with your modifications. + +c) accompany any non-standard executables with their corresponding +Standard Version executables, giving the non-standard executables +non-standard names, and clearly documenting the differences in manual +pages (or equivalent), together with instructions on where to get the +Standard Version. + +d) make other distribution arrangements with the Copyright Holder. + +5. You may charge a reasonable copying fee for any distribution of this +Package. You may charge any fee you choose for support of this Package. +YOU MAY NOT CHARGE A FEE FOR THIS PACKAGE ITSELF. However, you may +distribute this Package in aggregate with other (possibly commercial) +programs as part of a larger (possibly commercial) software distribution +provided that YOU DO NOT ADVERTISE this package as a product of your +own. + +6. The name of the Copyright Holder may not be used to endorse or +promote products derived from this software without specific prior +written permission. + +7. THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED +WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF +MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + The End + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +</pre> +<ul> +<li><a href='#GPL-2'>Gentoo Package Stock License GPL-2</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">shared-mime-info-0.90</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://freedesktop.org/wiki/Software/shared-mime-info">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#GPL-2'>Gentoo Package Stock License GPL-2</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">sharutils-4.7</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.gnu.org/software/sharutils/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#GPL-3'>Gentoo Package Stock License GPL-3</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">shflags-1.0.3</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://code.google.com/p/shflags/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#LGPL-2.1'>Gentoo Package Stock License LGPL-2.1</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">sil-abyssinica-1.0</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://scripts.sil.org/AbyssinicaSIL">homepage</a></span> +<div class="licence"> +<pre>Gentoo Package Stock License OFL: + +This Font Software is Copyright (c) 2003-2005, SIL International (http://scripts.sil.org/). +All Rights Reserved. + +"Gentium" is a Reserved Font Name for this Font Software. +"SIL" is a Reserved Font Name for this Font Software. + +This Font Software is licensed under the SIL Open Font License, Version 1.0. +No modification of the license is permitted, only verbatim copy is allowed. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.0 - 22 November 2005 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of cooperative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide an open +framework in which fonts may be shared and improved in partnership with +others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and sold with any software provided that the font +names of derivative works are changed. The fonts and derivatives, +however, cannot be released under any other type of license. + +DEFINITIONS +"Font Software" refers to any and all of the following: + - font files + - data files + - source code + - build scripts + - documentation + +"Reserved Font Name" refers to the Font Software name as seen by +users and any other names as specified after the copyright statement. + +"Standard Version" refers to the collection of Font Software +components as distributed by the Copyright Holder. + +"Modified Version" refers to any derivative font software made by +adding to, deleting, or substituting -- in part or in whole -- +any of the components of the Standard Version, by changing formats +or by porting the Font Software to a new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Standard or Modified Versions, may be sold by itself. + +2) Standard or Modified Versions of the Font Software may be bundled, +redistributed and sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s), in part or in whole, unless explicit written permission is +granted by the Copyright Holder. This restriction applies to all +references stored in the Font Software, such as the font menu name and +other font description fields, which are used to differentiate the +font from others. + +4) The name(s) of the Copyright Holder or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed using this license, and may not be distributed +under any other license. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +</pre> +<ul> + +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">smartmontools-5.42</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://smartmontools.sourceforge.net/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#GPL-2'>Gentoo Package Stock License GPL-2</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">speex-1.2_rc1</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.speex.org">homepage</a></span> +<div class="licence"> +<pre>Scanned Source License speex-1.2rc1/COPYING: + +Copyright 2002-2008 Xiph.org Foundation +Copyright 2002-2008 Jean-Marc Valin +Copyright 2005-2007 Analog Devices Inc. +Copyright 2005-2008 Commonwealth Scientific and Industrial Research + Organisation (CSIRO) +Copyright 1993, 2002, 2006 David Rowe +Copyright 2003 EpicGames +Copyright 1992-1994 Jutta Degener, Carsten Bormann + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +- Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + +- Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. + +- Neither the name of the Xiph.org Foundation nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +</pre> +<ul> + +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">sqlite-3.6.22</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.sqlite.org/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#as-is'>Gentoo Package Stock License as-is</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">strongswan-5.0.2</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.strongswan.org/">homepage</a></span> +<div class="licence"> +<pre>Gentoo Package Stock License DES: + +Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com) +All rights reserved. + +This package is an DES implementation written by Eric Young (eay@cryptsoft.com). +The implementation was written so as to conform with MIT's libdes. + +This library is free for commercial and non-commercial use as long as +the following conditions are aheared to. The following conditions +apply to all code found in this distribution. + +Copyright remains Eric Young's, and as such any Copyright notices in +the code are not to be removed. +If this package is used in a product, Eric Young should be given attribution +as the author of that the SSL library. This can be in the form of a textual +message at program startup or in documentation (online or textual) provided +with the package. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. All advertising materials mentioning features or use of this software + must display the following acknowledgement: + This product includes software developed by Eric Young (eay@cryptsoft.com) + +THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +The license and distribution terms for any publically available version or +derivative of this code cannot be changed. i.e. this code cannot simply be +copied and put under another distrubution license +[including the GNU Public License.] + +The reason behind this being stated in this direct manner is past +experience in code simply being copied and the attribution removed +from it and then being distributed as part of other packages. This +implementation was a non-trivial and unpaid effort. + + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Gentoo Package Stock License RSA: + +Copyright (C) <years>, RSA Data Security, Inc. Created <year>. All +rights reserved. + +License to copy and use this software is granted provided that it +is identified as the "RSA Data Security, Inc. MD<id> Message-Digest +Algorithm" in all material mentioning or referencing this software +or this function. + +License is also granted to make and use derivative works provided +that such works are identified as "derived from the RSA Data +Security, Inc. MD<id> Message-Digest Algorithm" in all material +mentioning or referencing the derived work. + +RSA Data Security, Inc. makes no representations concerning either +the merchantability of this software or the suitability of this +software for any particular purpose. It is provided "as is" +without express or implied warranty of any kind. + +These notices must be retained in any copies of any part of this +documentation and/or software. + +---------------------------------------------------------------------- +http://www.ietf.org/ietf-ftp/IPR/RSA-MD-all + +The following was recevied Fenbruary 23,2000 +From: "Linn, John" <jlinn@rsasecurity.com> + +February 19, 2000 + + The purpose of this memo is to clarify the status of intellectual +property rights asserted by RSA Security Inc. ("RSA") in the MD2, MD4 and +MD5 message-digest algorithms, which are documented in RFC-1319, RFC-1320, +and RFC-1321 respectively. + + Implementations of these message-digest algorithms, including +implementations derived from the reference C code in RFC-1319, RFC-1320, and +RFC-1321, may be made, used, and sold without license from RSA for any +purpose. + + No rights other than the ones explicitly set forth above are +granted. Further, although RSA grants rights to implement certain +algorithms as defined by identified RFCs, including implementations derived +from the reference C code in those RFCs, no right to use, copy, sell, or +distribute any other implementations of the MD2, MD4, or MD5 message-digest +algorithms created, implemented, or distributed by RSA is hereby granted by +implication, estoppel, or otherwise. Parties interested in licensing +security components and toolkits written by RSA should contact the company +to discuss receiving a license. All other questions should be directed to +Margaret K. Seif, General Counsel, RSA Security Inc., 36 Crosby Drive, +Bedford, Massachusetts 01730. + + Implementations of the MD2, MD4, or MD5 algorithms may be subject to +United States laws and regulations controlling the export of technical data, +computer software, laboratory prototypes and other commodities (including +the Arms Export Control Act, as amended, and the Export Administration Act +of 1970). The transfer of certain technical data and commodities may +require a license from the cognizant agency of the United States Government. +RSA neither represents that a license shall not be required for a particular +implementation nor that, if required, one shall be issued. + + + DISCLAIMER: RSA MAKES NO REPRESENTATIONS AND EXTENDS NO WARRANTIES +OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, VALIDITY OF +INTELLECTUAL PROPERTY RIGHTS, ISSUED OR PENDING, OR THE ABSENCE OF LATENT OR +OTHER DEFECTS, WHETHER OR NOT DISCOVERABLE, IN CONNECTION WITH THE MD2, MD4, +OR MD5 ALGORITHMS. NOTHING IN THIS GRANT OF RIGHTS SHALL BE CONSTRUED AS A +REPRESENTATION OR WARRANTY GIVEN BY RSA THAT THE IMPLEMENTATION OF THE +ALGORITHM WILL NOT INFRINGE THE INTELLECTUAL PROPERTY RIGHTS OF ANY THIRD +PARTY. IN NO EVENT SHALL RSA, ITS TRUSTEES, DIRECTORS, OFFICERS, EMPLOYEES, +PARENTS AND AFFILIATES BE LIABLE FOR INCIDENTAL OR CONSEQUENTIAL DAMAGES OF +ANY KIND RESULTING FROM IMPLEMENTATION OF THIS ALGORITHM, INCLUDING ECONOMIC +DAMAGE OR INJURY TO PROPERTY AND LOST PROFITS, REGARDLESS OF WHETHER RSA +SHALL BE ADVISED, SHALL HAVE OTHER REASON TO KNOW, OR IN FACT SHALL KNOW OF +THE POSSIBILITY OF SUCH INJURY OR DAMAGE. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +</pre> +<ul> +<li><a href='#GPL-2'>Gentoo Package Stock License GPL-2</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">sudo-1.8.6_p7</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.sudo.ws/">homepage</a></span> +<div class="licence"> +<pre>Scanned Source License sudo-1.8.6p7/doc/LICENSE: + +Sudo is distributed under the following license: + + Copyright (c) 1994-1996, 1998-2012 + Todd C. Miller <Todd.Miller@courtesan.com> + + Permission to use, copy, modify, and distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + Sponsored in part by the Defense Advanced Research Projects + Agency (DARPA) and Air Force Research Laboratory, Air Force + Materiel Command, USAF, under agreement number F39502-99-1-0512. + +The file redblack.c bears the following license: + + Copyright (c) 2001 Emin Martinian + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that neither the name of Emin + Martinian nor the names of any contributors are be used to endorse or + promote products derived from this software without specific prior + written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +The files getcwd.c, glob.c, glob.h and snprintf.c bear the following license: + + Copyright (c) 1989, 1990, 1991, 1993 + The Regents of the University of California. All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. Neither the name of the University nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + SUCH DAMAGE. + +The file fnmatch.c bears the following license: + + Copyright (c) 2011, VMware, Inc. + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of the VMware, Inc. nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL VMWARE, INC. OR CONTRIBUTORS BE LIABLE FOR + ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +The embedded copy of zlib bears the following license: + + Copyright (C) 1995-2012 Jean-loup Gailly and Mark Adler + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + Jean-loup Gailly Mark Adler + jloup@gzip.org madler@alumni.caltech.edu + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +</pre> +<ul> +<li><a href='#ISC'>Gentoo Package Stock License ISC</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">swig-2.0.4</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.swig.org/">homepage</a></span> +<div class="licence"> +<pre>Scanned Source License swig-2.0.4/CCache/COPYING: + + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 675 Mass Ave, Cambridge, MA 02139, USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + Appendix: How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) 19yy <name of author> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) 19yy name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License swig-2.0.4/CCache/debian/copyright: + +This package was debianized by Paul Russell <prussell@debian.org> on +Sun, 31 Mar 2002 14:08:57 +0200. + +It was downloaded from http://ccache.samba.org/ftp/ccache/ + +The ccache-zlib patch was downloaded from http://www.gustaebel.de/lars/ccache/ + +Upstream Author: Andrew Tridgell <tridge@samba.org> + +Copyright: 2002-2005 Andrew Tridgell <tridge@samba.org> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + 02110-1301, USA + +You are free to distribute this software under the terms of the GNU General +Public License. On Debian systems, the complete text of the GNU General +Public License can be found in /usr/share/common-licenses/GPL file. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License swig-2.0.4/COPYRIGHT: + +SWIG Copyright and Authors +-------------------------- + +Copyright (c) 1995-2011 The SWIG Developers +Copyright (c) 2005-2006 Arizona Board of Regents (University of Arizona). +Copyright (c) 1998-2005 University of Chicago. +Copyright (c) 1995-1998 The University of Utah and the Regents of the University of California + +Portions also copyrighted by: + Network Applied Communication Laboratory, Inc + Information-technology Promotion Agency, Japan + +Active SWIG Developers: + William Fulton (wsf@fultondesigns.co.uk) (SWIG core, Java, C#, Windows, Cygwin) + Olly Betts (olly@survex.com) (PHP) + Joseph Wang (joequant@gmail.com) (R) + Xavier Delacour (xavier.delacour@gmail.com) (Octave) + David Nadlinger (code@klickverbot.at) (D) + +Past SWIG developers and major contributors include: + Dave Beazley (dave-swig@dabeaz.com) (SWIG core, Python, Tcl, Perl) + Henning Thielemann (swig@henning-thielemann.de) (Modula3) + Matthias Köppe (mkoeppe@mail.math.uni-magdeburg.de) (Guile, MzScheme) + Luigi Ballabio (luigi.ballabio@fastwebnet.it) (STL wrapping) + Mikel Bancroft (mikel@franz.com) (Allegro CL) + Surendra Singhi (efuzzyone@netscape.net) (CLISP, CFFI) + Marcelo Matus (mmatus@acms.arizona.edu) (SWIG core, Python, UTL[python,perl,tcl,ruby]) + Art Yerkes (ayerkes@speakeasy.net) (Ocaml) + Lyle Johnson (lyle@users.sourceforge.net) (Ruby) + Charlie Savage (cfis@interserv.com) (Ruby) + Thien-Thi Nguyen (ttn@glug.org) (build/test/misc) + Richard Palmer (richard@magicality.org) (PHP) + Sam Liddicott - Ananova Ltd (saml@liddicott.com) (PHP) + Tim Hockin - Sun Microsystems (thockin@sun.com) (PHP) + Kevin Ruland (PHP) + Shibukawa Yoshiki (Japanese Translation) + Jason Stewart (jason@openinformatics.com) (Perl5) + Loic Dachary (Perl5) + David Fletcher (Perl5) + Gary Holt (Perl5) + Masaki Fukushima (Ruby) + Scott Michel (scottm@cs.ucla.edu) (Java directors) + Tiger Feng (songyanf@cs.uchicago.edu) (SWIG core) + Mark Rose (mrose@stm.lbl.gov) (Directors) + Jonah Beckford (beckford@usermail.com) (CHICKEN) + Ahmon Dancy (dancy@franz.com) (Allegro CL) + Dirk Gerrits (Allegro CL) + Neil Cawse (C#) + Harco de Hilster (Java) + Alexey Dyachenko (dyachenko@fromru.com) (Tcl) + Bob Techentin (Tcl) + Martin Froehlich <MartinFroehlich@ACM.org> (Guile) + Marcio Luis Teixeira <marciot@holly.colostate.edu> (Guile) + Duncan Temple Lang (R) + Miklos Vajna <vmiklos@frugalware.org> (PHP directors) + Mark Gossage (mark@gossage.cjb.net) (Lua) + Gonzalo Garramuno (ggarra@advancedsl.com.ar) (Ruby, Ruby's UTL) + John Lenz (Guile, MzScheme updates, Chicken module, runtime system) + Ian Lance Taylor (Go) + Vadim Zeitlin (PCRE) + Stefan Zager (szager@gmail.com) (Python) + +Past contributors include: + James Michael DuPont, Clark McGrew, Dustin Mitchell, Ian Cooke, Catalin Dumitrescu, Baran + Kovuk, Oleg Tolmatcev, Tal Shalif, Lluis Padro, Chris Seatory, Igor Bely, Robin Dunn, + Edward Zimmermann, David Ascher, Dominique Dumont, Pier Giorgio Esposito, Hasan Baran Kovuk, + Klaus Wiederänders + (See CHANGES and CHANGES.current and the bug tracker for a more complete list). + +Past students: + Songyan Feng (Chicago). + Xinghua Shi (Chicago). + Jing Cao (Chicago). + Aquinas Hobor (Chicago). + +Historically, the following people contributed to early versions of SWIG. +Peter Lomdahl, Brad Holian, Shujia Zhou, Niels Jensen, and Tim Germann +at Los Alamos National Laboratory were the first users. Patrick +Tullmann at the University of Utah suggested the idea of automatic +documentation generation. John Schmidt and Kurtis Bleeker at the +University of Utah tested out the early versions. Chris Johnson +supported SWIG's developed at the University of Utah. John Buckman, +Larry Virden, and Tom Schwaller provided valuable input on the first +releases and improving the portability of SWIG. David Fletcher and +Gary Holt have provided a great deal of input on improving SWIG's +Perl5 implementation. Kevin Butler contributed the first Windows NT +port. + +Early bug reports and patches: +Adam Hupp, Arthur Smyles, Brad Clements, Brett Williams, Buck Hodges, +Burkhard Kloss, Chia-Liang Kao, Craig Files, Dennis Marsa, Dieter Baron, +Drake Diedrich, Fleur Diana Dragan, Gary Pennington, Geoffrey Hort, Gerald Williams, +Greg Anderson, Greg Kochanski, Greg Troxel, Henry Rowley, Irina Kotlova, +Israel Taller, James Bailey, Jim Fulton, Joel Reed, Jon Travis, +Junio Hamano, Justin Heyes-Jones, Karl Forner, Keith Davidson, +Krzysztof Kozminski, Larry Virden, Luke J Crook, Magnus Ljung, Marc Zonzon, +Mark Howson, Micahel Scharf, Michel Sanner, Mike Romberg, Mike Simons, +Mike Weiblen, Paul Brannan, Ram Bhamidipaty, Reinhard Fobbe, Rich Wales, +Richard Salz, Roy Lecates, Rudy Albachten, Scott Drummonds +Scott Michel, Shaun Lowry, Steve Galser, Tarn Weisner Burton, +Thomas Weidner, Tony Seward, Uwe Steinmann, Vadim Chugunov, Wyss Clemens, +Zhong Ren. + + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License swig-2.0.4/LICENSE: + +SWIG is free software: you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. See the LICENSE-GPL file for +the full terms of the GNU General Public license version 3. + +Portions of SWIG are also licensed under the terms of the licenses +in the file LICENSE-UNIVERSITIES. You must observe the terms of +these licenses, as well as the terms of the GNU General Public License, +when you distribute SWIG. + +The SWIG library and examples, under the Lib and Examples top level +directories, are distributed under the following terms: + + You may copy, modify, distribute, and make derivative works based on + this software, in source code or object code form, without + restriction. If you distribute the software to others, you may do + so according to the terms of your choice. This software is offered as + is, without warranty of any kind. + +See the COPYRIGHT file for a list of contributors to SWIG and their +copyright notices. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +</pre> +<ul> +<li><a href='#GPL-3'>Gentoo Package Stock License GPL-3</a></li> +<li><a href='#as-is'>Gentoo Package Stock License as-is</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">syslinux-3.83</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://syslinux.zytor.com/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#GPL-2'>Gentoo Package Stock License GPL-2</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">tar-1.26</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.gnu.org/software/tar/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#GPL-3'>Gentoo Package Stock License GPL-3</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">tibt-jomolhari-0.0.3c</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="https://sites.google.com/site/chrisfynn2/home/fonts/jomolhari">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#OFL-1.1'>Gentoo Package Stock License OFL-1.1</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">timezone-data-2013g</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.iana.org/time-zones">homepage</a></span> +<div class="licence"> +<pre>Copyright Attribution License chromiumos-overlay/licenses/copyright-attribution/sys-libs/timezone-data: + +Copyright (c) 1985, 1987, 1988 The Regents of the University of California. +All rights reserved. + +Redistribution and use in source and binary forms are permitted +provided that the above copyright notice and this paragraph are +duplicated in all such forms and that any documentation, +advertising materials, and other materials related to such +distribution and use acknowledge that the software was developed +by the University of California, Berkeley. The name of the +University may not be used to endorse or promote products derived +from this software without specific prior written permission. +THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +WARRANTIES OF MERCHANT[A]BILITY AND FITNESS FOR A PARTICULAR PURPOSE. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +</pre> +<ul> +<li><a href='#public-domain'>Gentoo Package Stock License public-domain</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">tlsdate-0.0.5</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="https://github.com/ioerror/tlsdate">homepage</a></span> +<div class="licence"> +<pre>Scanned Source License tlsdate-0.0.5/LICENSE: + + This file contains the license for tlsdate, + a free software project to set your system clock securely. + + It also lists the licenses for other components used by tlsdate. + + For more information about tlsdate, see https://github.com/ioerror/tlsdate + + If you got this file as a part of a larger bundle, + there may be other license terms that you should be aware of. + +=============================================================================== +tlsdate is distributed under this license: + +Copyright (c) 2011-2012, Jacob Appelbaum <jacob@appelbaum.net> +Copyright (c) 2011-2012, The Tor Project, Inc. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + + * Neither the names of the copyright owners nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +=============================================================================== +If you got tlsdate as a static binary with OpenSSL included, then you should +know: + + "This product includes software developed by the OpenSSL Project for use in + the OpenSSL Toolkit (http://www.openssl.org/)" + +=============================================================================== + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +</pre> +<ul> + +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">trousers-0.3.3</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://trousers.sf.net">homepage</a></span> +<div class="licence"> +<pre>Gentoo Package Stock License CPL-1.0: + +Common Public License Version 1.0 + +THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS COMMON PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT. + +1. DEFINITIONS + +"Contribution" means: + +a) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and + +b) in the case of each subsequent Contributor: + +i) changes to the Program, and + +ii) additions to the Program; + +where such changes and/or additions to the Program originate from and are distributed by that particular Contributor. A Contribution 'originates' from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor's behalf. Contributions do not include additions to the Program which: (i) are separate modules of software distributed in conjunction with the Program under their own license agreement, and (ii) are not derivative works of the Program. + +"Contributor" means any person or entity that distributes the Program. + +"Licensed Patents " mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program. + +"Program" means the Contributions distributed in accordance with this Agreement. + +"Recipient" means anyone who receives the Program under this Agreement, including all Contributors. + +2. GRANT OF RIGHTS + +a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, distribute and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code and object code form. + +b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in source code and object code form. This patent license shall apply to the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder. + +c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property rights needed, if any. For example, if a third party patent license is required to allow Recipient to distribute the Program, it is Recipient's responsibility to acquire that license before distributing the Program. + +d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement. + +3. REQUIREMENTS + +A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that: + +a) it complies with the terms and conditions of this Agreement; and + +b) its license agreement: + +i) effectively disclaims on behalf of all Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose; + +ii) effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits; + +iii) states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any other party; and + +iv) states that source code for the Program is available from such Contributor, and informs licensees how to obtain it in a reasonable manner on or through a medium customarily used for software exchange. + +When the Program is made available in source code form: + +a) it must be made available under this Agreement; and + +b) a copy of this Agreement must be included with each copy of the Program. + +Contributors may not remove or alter any copyright notices contained within the Program. + +Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows subsequent Recipients to identify the originator of the Contribution. + +4. COMMERCIAL DISTRIBUTION + +Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor ("Commercial Contributor") hereby agrees to defend and indemnify every other Contributor ("Indemnified Contributor") against any losses, damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such Commercial Contributor in connection with its distribution of the Program in a commercial product offering. The obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual property infringement. In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may participate in any such claim at its own expense. + +For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone. Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result, the Commercial Contributor must pay those damages. + +5. NO WARRANTY + +EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the appropriateness of using and distributing the Program and assumes all risks associated with its exercise of rights under this Agreement, including but not limited to the risks and costs of program errors, compliance with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations. + +6. DISCLAIMER OF LIABILITY + +EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +7. GENERAL + +If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable. + +If Recipient institutes patent litigation against a Contributor with respect to a patent applicable to software (including a cross-claim or counterclaim in a lawsuit), then any patent licenses granted by that Contributor to such Recipient under this Agreement shall terminate as of the date such litigation is filed. In addition, if Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such litigation is filed. + +All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses granted by Recipient relating to the Program shall continue and survive. + +Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the right to modify this Agreement. IBM is the initial Agreement Steward. IBM may assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new version of the Agreement will be given a distinguishing version number. The Program (including Contributions) may always be distributed subject to the version of the Agreement under which it was received. In addition, after a new version of the Agreement is published, Contributor may elect to distribute the Program (including its Contributions) under the new version. Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or otherwise. All rights in the Program not expressly granted under this Agreement are reserved. + +This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause of action arose. Each party waives its rights to a jury trial in any resulting litigation. +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +</pre> +<ul> + +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">u-boot-2013.06</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.denx.de/wiki/U-Boot">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#GPL-2+'>Gentoo Package Stock License GPL-2+</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">udev-171</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev.html">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#GPL-2'>Gentoo Package Stock License GPL-2</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">unrar-4.2.4</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.rarlab.com/rar_add.htm">homepage</a></span> +<div class="licence"> +<pre>Gentoo Package Stock License unRAR: + + ****** ***** ****** UnRAR - free utility for RAR archives + ** ** ** ** ** ** ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ****** ******* ****** License for use and distribution of + ** ** ** ** ** ** ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ** ** ** ** ** ** FREE portable version + ~~~~~~~~~~~~~~~~~~~~~ + + The source code of UnRAR utility is freeware. This means: + + 1. All copyrights to RAR and the utility UnRAR are exclusively + owned by the author - Alexander Roshal. + + 2. UnRAR source code may be used in any software to handle + RAR archives without limitations free of charge, but cannot be + used to develop RAR (WinRAR) compatible archiver and to + re-create RAR compression algorithm, which is proprietary. + Distribution of modified UnRAR source code in separate form + or as a part of other software is permitted, provided that + full text of this paragraph, starting from "UnRAR source code" + words, is included in license, or in documentation if license + is not available, and in source code comments of resulting package. + + 3. The UnRAR utility may be freely distributed. It is allowed + to distribute UnRAR inside of other software packages. + + 4. THE RAR ARCHIVER AND THE UnRAR UTILITY ARE DISTRIBUTED "AS IS". + NO WARRANTY OF ANY KIND IS EXPRESSED OR IMPLIED. YOU USE AT + YOUR OWN RISK. THE AUTHOR WILL NOT BE LIABLE FOR DATA LOSS, + DAMAGES, LOSS OF PROFITS OR ANY OTHER KIND OF LOSS WHILE USING + OR MISUSING THIS SOFTWARE. + + 5. Installing and using the UnRAR utility signifies acceptance of + these terms and conditions of the license. + + 6. If you don't agree with terms of the license you must remove + UnRAR files from your storage devices and cease to use the + utility. + + Thank you for your interest in RAR and UnRAR. + + + Alexander L. Roshal + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +</pre> +<ul> + +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">upstart-1.2</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://upstart.ubuntu.com/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#GPL-2'>Gentoo Package Stock License GPL-2</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">ureadahead-0.100.0</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="https://launchpad.net/ureadahead">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#GPL-2'>Gentoo Package Stock License GPL-2</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">usbutils-006</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://linux-usb.sourceforge.net/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#GPL-2'>Gentoo Package Stock License GPL-2</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">util-linux-2.21.2</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.kernel.org/pub/linux/utils/util-linux/">homepage</a></span> +<div class="licence"> +<pre>Scanned Source License util-linux-2.21.2/COPYING: + + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License util-linux-2.21.2/getopt/COPYING: + +The getopt is explicitly licensed under GNU General Public License, +version 2 terms. + +The complete text of the license is available at the +Documentation/licenses/COPYING.GPLv2 file. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License util-linux-2.21.2/libblkid/COPYING: + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later +version. + +The complete text of the license is available at the +Documentation/licenses/COPYING.LGPLv2.1 file. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License util-linux-2.21.2/libmount/COPYING: + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later +version. + +The complete text of the license is available at the +Documentation/licenses/COPYING.LGPLv2.1 file. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License util-linux-2.21.2/libuuid/COPYING: + +This library is free software; you can redistribute it and/or +modify it under the terms of the Modified BSD License. + +The complete text of the license is available at the +Documentation/licenses/COPYING.BSD-3 file. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +</pre> +<ul> +<li><a href='#LGPL-2.1'>Gentoo Package Stock License LGPL-2.1</a></li> +<li><a href='#GPL-3'>Gentoo Package Stock License GPL-3</a></li> +<li><a href='#GPL-2'>Gentoo Package Stock License GPL-2</a></li> +<li><a href='#public-domain'>Gentoo Package Stock License public-domain</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">vim-7.3.409</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.vim.org/">homepage</a></span> +<div class="licence"> +<pre>Gentoo Package Stock License vim: + +License details for VIM Editor: + +*uganda.txt* For Vim version 7.2. Last change: 2008 Jun 21 + + + VIM REFERENCE MANUAL by Bram Moolenaar + + + *uganda* *Uganda* *copying* *copyright* *license* +SUMMARY + *iccf* *ICCF* +Vim is Charityware. You can use and copy it as much as you like, but you are +encouraged to make a donation for needy children in Uganda. Please see |kcc| +below or visit the ICCF web site, available at these URLs: + + http://iccf-holland.org/ + http://www.vim.org/iccf/ + http://www.iccf.nl/ + +You can also sponsor the development of Vim. Vim sponsors can vote for +features. See |sponsor|. The money goes to Uganda anyway. + +The Open Publication License applies to the Vim documentation, see +|manual-copyright|. + +=== begin of license === + +VIM LICENSE + +I) There are no restrictions on distributing unmodified copies of Vim except + that they must include this license text. You can also distribute + unmodified parts of Vim, likewise unrestricted except that they must + include this license text. You are also allowed to include executables + that you made from the unmodified Vim sources, plus your own usage + examples and Vim scripts. + +II) It is allowed to distribute a modified (or extended) version of Vim, + including executables and/or source code, when the following four + conditions are met: + 1) This license text must be included unmodified. + 2) The modified Vim must be distributed in one of the following five ways: + a) If you make changes to Vim yourself, you must clearly describe in + the distribution how to contact you. When the maintainer asks you + (in any way) for a copy of the modified Vim you distributed, you + must make your changes, including source code, available to the + maintainer without fee. The maintainer reserves the right to + include your changes in the official version of Vim. What the + maintainer will do with your changes and under what license they + will be distributed is negotiable. If there has been no negotiation + then this license, or a later version, also applies to your changes. + The current maintainer is Bram Moolenaar <Bram@vim.org>. If this + changes it will be announced in appropriate places (most likely + vim.sf.net, www.vim.org and/or comp.editors). When it is completely + impossible to contact the maintainer, the obligation to send him + your changes ceases. Once the maintainer has confirmed that he has + received your changes they will not have to be sent again. + b) If you have received a modified Vim that was distributed as + mentioned under a) you are allowed to further distribute it + unmodified, as mentioned at I). If you make additional changes the + text under a) applies to those changes. + c) Provide all the changes, including source code, with every copy of + the modified Vim you distribute. This may be done in the form of a + context diff. You can choose what license to use for new code you + add. The changes and their license must not restrict others from + making their own changes to the official version of Vim. + d) When you have a modified Vim which includes changes as mentioned + under c), you can distribute it without the source code for the + changes if the following three conditions are met: + - The license that applies to the changes permits you to distribute + the changes to the Vim maintainer without fee or restriction, and + permits the Vim maintainer to include the changes in the official + version of Vim without fee or restriction. + - You keep the changes for at least three years after last + distributing the corresponding modified Vim. When the maintainer + or someone who you distributed the modified Vim to asks you (in + any way) for the changes within this period, you must make them + available to him. + - You clearly describe in the distribution how to contact you. This + contact information must remain valid for at least three years + after last distributing the corresponding modified Vim, or as long + as possible. + e) When the GNU General Public License (GPL) applies to the changes, + you can distribute the modified Vim under the GNU GPL version 2 or + any later version. + 3) A message must be added, at least in the output of the ":version" + command and in the intro screen, such that the user of the modified Vim + is able to see that it was modified. When distributing as mentioned + under 2)e) adding the message is only required for as far as this does + not conflict with the license used for the changes. + 4) The contact information as required under 2)a) and 2)d) must not be + removed or changed, except that the person himself can make + corrections. + +III) If you distribute a modified version of Vim, you are encouraged to use + the Vim license for your changes and make them available to the + maintainer, including the source code. The preferred way to do this is + by e-mail or by uploading the files to a server and e-mailing the URL. + If the number of changes is small (e.g., a modified Makefile) e-mailing a + context diff will do. The e-mail address to be used is + <maintainer@vim.org> + +IV) It is not allowed to remove this license from the distribution of the Vim + sources, parts of it or from a modified version. You may use this + license for previous Vim releases instead of the license that they came + with, at your option. + +=== end of license === + +Note: + +- If you are happy with Vim, please express that by reading the rest of this + file and consider helping needy children in Uganda. + +- If you want to support further Vim development consider becoming a + |sponsor|. The money goes to Uganda anyway. + +- According to Richard Stallman the Vim license is GNU GPL compatible. + A few minor changes have been made since he checked it, but that should not + make a difference. + +- If you link Vim with a library that goes under the GNU GPL, this limits + further distribution to the GNU GPL. Also when you didn't actually change + anything in Vim. + +- Once a change is included that goes under the GNU GPL, this forces all + further changes to also be made under the GNU GPL or a compatible license. + +- If you distribute a modified version of Vim, you can include your name and + contact information with the "--with-modified-by" configure argument or the + MODIFIED_BY define. + +============================================================================== +Kibaale Children's Centre *kcc* *Kibaale* *charity* + +Kibaale Children's Centre (KCC) is located in Kibaale, a small town in the +south of Uganda, near Tanzania, in East Africa. The area is known as Rakai +District. The population is mostly farmers. Although people are poor, there +is enough food. But this district is suffering from AIDS more than any other +part of the world. Some say that it started there. Estimations are that 10 +to 30% of the Ugandans are infected with HIV. Because parents die, there are +many orphans. In this district about 60,000 children have lost one or both +parents, out of a population of 350,000. And this is still continuing. + +The children need a lot of help. The KCC is working hard to provide the needy +with food, medical care and education. Food and medical care to keep them +healthy now, and education so that they can take care of themselves in the +future. KCC works on a Christian base, but help is given to children of any +religion. + +The key to solving the problems in this area is education. This has been +neglected in the past years with president Idi Amin and the following civil +wars. Now that the government is stable again, the children and parents have +to learn how to take care of themselves and how to avoid infections. There is +also help for people who are ill and hungry, but the primary goal is to +prevent people from getting ill and to teach them how to grow healthy food. + +Most of the orphans are living in an extended family. An uncle or older +sister is taking care of them. Because these families are big and the income +(if any) is low, a child is lucky if it gets healthy food. Clothes, medical +care and schooling is beyond its reach. To help these needy children, a +sponsorship program was put into place. A child can be financially adopted. +For a few dollars a month KCC sees to it that the child gets indispensable +items, is healthy, goes to school and KCC takes care of anything else that +needs to be done for the child and the family that supports it. + +Besides helping the child directly, the environment where the child grows up +needs to be improved. KCC helps schools to improve their teaching methods. +There is a demonstration school at the centre and teacher trainings are given. +Health workers are being trained, hygiene education is carried out and +households are stimulated to build a proper latrine. I helped setting up a +production site for cement slabs. These are used to build a good latrine. +They are sold below cost price. + +There is a small clinic at the project, which provides children and their +family with medical help. When needed, transport to a hospital is offered. +Immunization programs are carried out and help is provided when an epidemic is +breaking out (measles and cholera have been a problem). + *donate* +Summer 1994 to summer 1995 I spent a whole year at the centre, working as a +volunteer. I have helped to expand the centre and worked in the area of water +and sanitation. I learned that the help that the KCC provides really helps. +When I came back to Holland, I wanted to continue supporting KCC. To do this +I'm raising funds and organizing the sponsorship program. Please consider one +of these possibilities: + +1. Sponsor a child in primary school: 17 euro a month (or more). +2. Sponsor a child in secondary school: 25 euro a month (or more). +3. Sponsor the clinic: Any amount a month or quarter +4. A one-time donation + +Compared with other organizations that do child sponsorship the amounts are +very low. This is because the money goes directly to the centre. Less than +5% is used for administration. This is possible because this is a small +organization that works with volunteers. If you would like to sponsor a +child, you should have the intention to do this for at least one year. + +How do you know that the money will be spent right? First of all you have my +personal guarantee as the author of Vim. I trust the people that are working +at the centre, I know them personally. Further more, the centre is +co-sponsored and inspected by World Vision, Save the Children Fund and +International Child Care Fund. The centre is visited about once a year to +check the progress (at our own cost). I have visited the centre myself in +1996, 1998, 2000, 2001 and 2003. The visit reports are on the ICCF web site. + +If you have any further questions, send me e-mail: <Bram@vim.org>. + +The address of the centre is: + Kibaale Children's Centre + p.o. box 1658 + Masaka, Uganda, East Africa + +Sending money: *iccf-donations* + +Check the ICCF web site for the latest information! See |iccf| for the URL. + + +USA: The methods mentioned below can be used. + Sending a check to the Nehemiah Group Outreach Society (NGOS) + is no longer possible, unfortunately. We are looking for + another way to get you an IRS tax receipt. + For sponsoring a child contact KCF in Canada (see below). US + checks can be sent to them to lower banking costs. + +Canada: Contact Kibaale Children's Fund (KCF) in Surrey, Canada. They + take care of the Canadian sponsors for the children in + Kibaale. KCF forwards 100% of the money to the project in + Uganda. You can send them a one time donation directly. + Please send me a note so that I know what has been donated + because of Vim. Ask KCF for information about sponsorship. + Kibaale Children's Fund c/o Pacific Academy + 10238-168 Street + Surrey, B.C. V4N 1Z4 + Canada + Phone: 604-581-5353 + If you make a donation to Kibaale Children's Fund (KCF) you + will receive a tax receipt which can be submitted with your + tax return. + +Holland: Transfer to the account of "Stichting ICCF Holland" in Venlo. + This will allow for tax deduction if you live in Holland. + Postbank, nr. 4548774 + +Germany: It is possible to make donations that allow for a tax return. + Check the ICCF web site for the latest information: + http://iccf-holland.org/germany.html + +World: Use a postal money order. That should be possible from any + country, mostly from the post office. Use this name (which is + in my passport): "Abraham Moolenaar". Use Euro for the + currency if possible. + +Europe: Use a bank transfer if possible. Your bank should have a form + that you can use for this. See "Others" below for the swift + code and IBAN number. + Any other method should work. Ask for information about + sponsorship. + +Credit Card: You can use PayPal to send money with a Credit card. This is + the most widely used Internet based payment system. It's + really simple to use. Use this link to find more info: + https://www.paypal.com/en_US/mrb/pal=XAC62PML3GF8Q + The e-mail address for sending the money to is: + Bram@iccf-holland.org + For amounts above 400 Euro ($500) sending a check is + preferred. + +Others: Transfer to one of these accounts if possible: + Postbank, account 4548774 + Swift code: INGB NL 2A + IBAN: NL47 PSTB 0004 5487 74 + under the name "stichting ICCF Holland", Venlo + If that doesn't work: + Rabobank Venlo, account 3765.05.117 + Swift code: RABO NL 2U + under the name "Bram Moolenaar", Venlo + Otherwise, send a check in euro or US dollars to the address + below. Minimal amount: $70 (my bank does not accept smaller + amounts for foreign check, sorry) + +Address to send checks to: + stichting ICCF Holland + Bram Moolenaar + Finsterruetihof 1 + 8134 Adliswil + Switzerland + +This address is expected to be valid for a long time. + + vim:tw=78:ts=8:ft=help:norl: + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +</pre> +<ul> + +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">wget-1.12</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.gnu.org/software/wget/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#GPL-3'>Gentoo Package Stock License GPL-3</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">which-2.20</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.xs4all.nl/~carlo17/which/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#GPL-3'>Gentoo Package Stock License GPL-3</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">wireless-regdb-20101124</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://wireless.kernel.org/en/developers/Regulatory">homepage</a></span> +<div class="licence"> +<pre>Scanned Source License wireless-regdb-2010.11.24/LICENSE: + +Copyright (c) 2008, Luis R. Rodriguez <mcgrof@gmail.com> +Copyright (c) 2008, Johannes Berg <johannes@sipsolutions.net> +Copyright (c) 2008, Michael Green <Michael.Green@Atheros.com> + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Scanned Source License wireless-regdb-2010.11.24/debian-example/copyright: + +This package was debianized by Luis Rodriguez <mcgrof@gmail.com> on +Thu, 22 Jan 2009 16:00:00 +0100. + +The wireless-regdb packages was downloaded from <http://wireless.kernel.org/download/wireless-regdb/> + +Copyright (c) 2008, Luis R. Rodriguez <mcgrof@gmail.com> +Copyright (c) 2008, Johannes Berg <johannes@sipsolutions.net> +Copyright (c) 2008, Michael Green <Michael.Green@Atheros.com> + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +</pre> +<ul> +<li><a href='#as-is'>Gentoo Package Stock License as-is</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">wpa_supplicant-0.7.2</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://hostap.epitest.fi/wpa_supplicant/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#GPL-2'>Gentoo Package Stock License GPL-2</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">X.Org-1.9.3</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.x.org/">homepage</a></span> +<div class="licence"> +<pre>Custom License X: + +The following is the 'standard copyright' agreed upon by most contributors, +and is currently the canonical license preferred by the X.Org Foundation. +This is a slight variant of the common MIT license form published by the +Open Source Initiative at http://www.opensource.org/licenses/mit-license.php + +Copyright holders of new code should use this license statement where +possible, and insert their name to this list. Please sort by surname +for people, and by the full name for other entities (e.g. Juliusz +Chroboczek sorts before Intel Corporation sorts before Daniel Stone). + +Copyright © 2000-2001 Juliusz Chroboczek +Copyright © 1998 Egbert Eich +Copyright © 2006-2007 Intel Corporation +Copyright © 2006 Nokia Corporation +Copyright © 2006-2008 Peter Hutterer +Copyright © 2006 Adam Jackson +Copyright © 2009 NVIDIA Corporation +Copyright © 1999 Keith Packard +Copyright © 2007-2009 Red Hat, Inc. +Copyright © 2005-2008 Daniel Stone +Copyright © 2006-2009 Simon Thum +Copyright © 1987, 2003-2006, 2008-2009 Sun Microsystems, Inc. +Copyright © 2006 Luc Verhaegen + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice (including the next +paragraph) shall be included in all copies or substantial portions of the +Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + + + + +The following licenses are 'legacy': usually MIT/X11 licenses with the name +of the copyright holder(s) in the license statement, but also some BSD-like +licenses. + + +Copyright (C) 1994-2003 The XFree86 Project, Inc. All Rights Reserved. +Copyright (C) Colin Harrison 2005-2008 + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FIT- +NESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +XFREE86 PROJECT BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of the XFree86 Project shall not +be used in advertising or otherwise to promote the sale, use or other dealings +in this Software without prior written authorization from the XFree86 Project. + + +Copyright 1997 by The XFree86 Project, Inc. + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the name of the XFree86 Project, Inc. +not be used in advertising or publicity pertaining to distribution of +the software without specific, written prior permission. The Xfree86 +Project, Inc. makes no representations about the suitability of this +software for any purpose. It is provided "as is" without express or +implied warranty. + +THE XFREE86 PROJECT, INC. DISCLAIMS ALL WARRANTIES WITH REGARD +TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS, IN NO EVENT SHALL OREST ZBOROWSKI OR DAVID WEXELBLAT BE LIABLE +FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + +Copyright 1985-1998, 2001 The Open Group +Copyright 2002 Red Hat Inc., Durham, North Carolina. + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation. + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of The Open Group shall not be +used in advertising or otherwise to promote the sale, use or other dealings +in this Software without prior written authorization from The Open Group. + + +Copyright (c) 1987, 1989-1990, 1992-1995 X Consortium + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of the X Consortium shall not be +used in advertising or otherwise to promote the sale, use or other dealings +in this Software without prior written authorization from the X Consortium. + + +Copyright © 1999-2000 SuSE, Inc. +Copyright © 2007 Red Hat, Inc. + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the name of SuSE not be used in advertising or +publicity pertaining to distribution of the software without specific, +written prior permission. SuSE makes no representations about the +suitability of this software for any purpose. It is provided "as is" +without express or implied warranty. + +SuSE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL SuSE +BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + +Copyright 1987-1991, 1993 by Digital Equipment Corporation, Maynard, Massachusetts. +Copyright 1991 Massachusetts Institute of Technology, Cambridge, Massachusetts. +Copyright 1991, 1993 Olivetti Research Limited, Cambridge, England. + + All Rights Reserved + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the name of Digital not be +used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. + +DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL +DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. + + +Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts, +Copyright 1994 Quarterdeck Office Systems. + + All Rights Reserved + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the names of Digital and +Quarterdeck not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. + +DIGITAL AND QUARTERDECK DISCLAIM ALL WARRANTIES WITH REGARD TO THIS +SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT +OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE +OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE +OR PERFORMANCE OF THIS SOFTWARE. + + +Copyright 1997 Digital Equipment Corporation. +All rights reserved. + +This software is furnished under license and may be used and copied only in +accordance with the following terms and conditions. Subject to these +conditions, you may download, copy, install, use, modify and distribute +this software in source and/or binary form. No title or ownership is +transferred hereby. + +1) Any source code used, modified or distributed must reproduce and retain + this copyright notice and list of conditions as they appear in the + source file. + +2) No right is granted to use any trade name, trademark, or logo of Digital + Equipment Corporation. Neither the "Digital Equipment Corporation" + name nor any trademark or logo of Digital Equipment Corporation may be + used to endorse or promote products derived from this software without + the prior written permission of Digital Equipment Corporation. + +3) This software is provided "AS-IS" and any express or implied warranties, + including but not limited to, any implied warranties of merchantability, + fitness for a particular purpose, or non-infringement are disclaimed. + In no event shall DIGITAL be liable for any damages whatsoever, and in + particular, DIGITAL shall not be liable for special, indirect, + consequential, or incidental damages or damages for lost profits, loss + of revenue or loss of use, whether such damages arise in contract, + negligence, tort, under statute, in equity, at law or otherwise, even + if advised of the possibility of such damage. + + +Copyright (c) 1991, 1996-1997 Digital Equipment Corporation, Maynard, Massachusetts. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software. + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +DIGITAL EQUIPMENT CORPORATION BE LIABLE FOR ANY CLAIM, DAMAGES, INCLUDING, +BUT NOT LIMITED TO CONSEQUENTIAL OR INCIDENTAL DAMAGES, OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of Digital Equipment Corporation +shall not be used in advertising or otherwise to promote the sale, use or other +dealings in this Software without prior written authorization from Digital +Equipment Corporation. + + +SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008) +Copyright (C) 1991-2000 Silicon Graphics, Inc. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice including the dates of first publication and +either this permission notice or a reference to +http://oss.sgi.com/projects/FreeB/ +shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +SILICON GRAPHICS, INC. BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF +OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +Copyright (c) 1994, 1995 Hewlett-Packard Company + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL HEWLETT-PACKARD COMPANY BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR +THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of the Hewlett-Packard +Company shall not be used in advertising or otherwise to promote the +sale, use or other dealings in this Software without prior written +authorization from the Hewlett-Packard Company. + + +Copyright 1989 by Hewlett-Packard Company, Palo Alto, California. +All Rights Reserved + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the name of Hewlett-Packard not be +used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. + +HEWLETT-PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL +HEWLETT-PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. + + +Copyright 2001-2004 Red Hat Inc., Durham, North Carolina. +Copyright (c) 2003 by the XFree86 Project, Inc. +Copyright 2004-2005 Red Hat Inc., Raleigh, North Carolina. +All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation on the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of the Software, +and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice (including the +next paragraph) shall be included in all copies or substantial +portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS +BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +Copyright © 2008 Red Hat, Inc. +Partly based on code Copyright © 2000 SuSE, Inc. + +Permission to use, copy, modify, distribute, and sell this software +and its documentation for any purpose is hereby granted without +fee, provided that the above copyright notice appear in all copies +and that both that copyright notice and this permission notice +appear in supporting documentation, and that the name of Red Hat +not be used in advertising or publicity pertaining to distribution +of the software without specific, written prior permission. Red +Hat makes no representations about the suitability of this software +for any purpose. It is provided "as is" without express or implied +warranty. + +Red Hat DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN +NO EVENT SHALL Red Hat BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, +NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the name of SuSE not be used in advertising or +publicity pertaining to distribution of the software without specific, +written prior permission. SuSE makes no representations about the +suitability of this software for any purpose. It is provided "as is" +without express or implied warranty. + +SuSE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL SuSE +BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + +Copyright © 2006 Red Hat, Inc. +(C) Copyright 1998-1999 Precision Insight, Inc., Cedar Park, Texas. +All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sub license, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice (including the next +paragraph) shall be included in all copies or substantial portions of the +Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL +RED HAT, INC, OR PRECISION INSIGHT AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT +OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR +THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +Copyright (c) 1995 X Consortium +Copyright 2004 Red Hat Inc., Durham, North Carolina. +All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation on the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of the Software, +and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT, THE X CONSORTIUM, +AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of the X Consortium +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in this Software without prior written +authorization from the X Consortium. + + +Copyright 1998-2000 Precision Insight, Inc., Cedar Park, Texas. +Copyright 2000 VA Linux Systems, Inc. +Copyright (c) 2002, 2008, 2009 Apple Computer, Inc. +Copyright (c) 2003-2004 Torrey T. Lyons. +All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sub license, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice (including the +next paragraph) shall be included in all copies or substantial portions +of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. +IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR +ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +(C) Copyright IBM Corporation 2003 +All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +on the rights to use, copy, modify, merge, publish, distribute, sub +license, and/or sell copies of the Software, and to permit persons to whom +the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice (including the next +paragraph) shall be included in all copies or substantial portions of the +Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL +VA LINUX SYSTEM, IBM AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +USE OR OTHER DEALINGS IN THE SOFTWARE. + + +(C) Copyright IBM Corporation 2004-2005 +All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sub license, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice (including the next +paragraph) shall be included in all copies or substantial portions of the +Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL +IBM, +AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF +OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +Copyright (c) 1997 Metro Link Incorporated + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF +OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +Except as contained in this notice, the name of the Metro Link shall not be +used in advertising or otherwise to promote the sale, use or other dealings +in this Software without prior written authorization from Metro Link. + + +Copyright 1995-1998 by Metro Link, Inc. +Copyright (c) 1997 Matthieu Herrb + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the name of Metro Link, Inc. not be used in +advertising or publicity pertaining to distribution of the software without +specific, written prior permission. Metro Link, Inc. makes no +representations about the suitability of this software for any purpose. + It is provided "as is" without express or implied warranty. + +METRO LINK, INC. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +EVENT SHALL METRO LINK, INC. BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + + +Copyright 1998 by Metro Link Incorporated + +Permission to use, copy, modify, distribute, and sell this software +and its documentation for any purpose is hereby granted without fee, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the name of Metro Link +Incorporated not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. Metro Link Incorporated makes no representations +about the suitability of this software for any purpose. It is +provided "as is" without express or implied warranty. + +METRO LINK INCORPORATED DISCLAIMS ALL WARRANTIES WITH REGARD +TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS, IN NO EVENT SHALL METRO LINK INCORPORATED BE +LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY +DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. + + +Copyright (c) 2000 by Conectiva S.A. (http://www.conectiva.com) + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +CONECTIVA LINUX BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF +OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +Except as contained in this notice, the name of Conectiva Linux shall +not be used in advertising or otherwise to promote the sale, use or other +dealings in this Software without prior written authorization from +Conectiva Linux. + + +Copyright (c) 2001, Andy Ritger aritger@nvidia.com +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +o Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +o Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer + in the documentation and/or other materials provided with the + distribution. +o Neither the name of NVIDIA nor the names of its contributors + may be used to endorse or promote products derived from this + software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT +NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL +THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + + +Copyright 1992 Vrije Universiteit, The Netherlands + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, provided +that the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the name of the Vrije Universiteit not be used in +advertising or publicity pertaining to distribution of the software without +specific, written prior permission. The Vrije Universiteit makes no +representations about the suitability of this software for any purpose. +It is provided "as is" without express or implied warranty. + +The Vrije Universiteit DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +EVENT SHALL The Vrije Universiteit BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + + +Copyright 1998 by Concurrent Computer Corporation + +Permission to use, copy, modify, distribute, and sell this software +and its documentation for any purpose is hereby granted without fee, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the name of Concurrent Computer +Corporation not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. Concurrent Computer Corporation makes no representations +about the suitability of this software for any purpose. It is +provided "as is" without express or implied warranty. + +CONCURRENT COMPUTER CORPORATION DISCLAIMS ALL WARRANTIES WITH REGARD +TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS, IN NO EVENT SHALL CONCURRENT COMPUTER CORPORATION BE +LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY +DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. + + +Copyright © 2004 Nokia + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the name of Nokia not be used in +advertising or publicity pertaining to distribution of the software without +specific, written prior permission. Nokia makes no +representations about the suitability of this software for any purpose. It +is provided "as is" without express or implied warranty. + +NOKIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +EVENT SHALL NOKIA BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + + +(c)Copyright 1988,1991 Adobe Systems Incorporated. +All rights reserved. + +Permission to use, copy, modify, distribute, and sublicense this software and its +documentation for any purpose and without fee is hereby granted, provided that +the above copyright notices appear in all copies and that both those copyright +notices and this permission notice appear in supporting documentation and that +the name of Adobe Systems Incorporated not be used in advertising or publicity +pertaining to distribution of the software without specific, written prior +permission. No trademark license to use the Adobe trademarks is hereby +granted. If the Adobe trademark "Display PostScript"(tm) is used to describe +this software, its functionality or for any other purpose, such use shall be +limited to a statement that this software works in conjunction with the Display +PostScript system. Proper trademark attribution to reflect Adobe's ownership +of the trademark shall be given whenever any such reference to the Display +PostScript system is made. + +ADOBE MAKES NO REPRESENTATIONS ABOUT THE SUITABILITY OF THE SOFTWARE FOR ANY +PURPOSE. IT IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY. ADOBE +DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON- +INFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL ADOBE BE LIABLE TO YOU +OR ANY OTHER PARTY FOR ANY SPECIAL, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY +DAMAGES WHATSOEVER WHETHER IN AN ACTION OF CONTRACT,NEGLIGENCE, STRICT +LIABILITY OR ANY OTHER ACTION ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. ADOBE WILL NOT PROVIDE ANY TRAINING OR OTHER +SUPPORT FOR THE SOFTWARE. + +Adobe, PostScript, and Display PostScript are trademarks of Adobe Systems +Incorporated which may be registered in certain jurisdictions. + + +Copyright 1989 Network Computing Devices, Inc., Mountain View, California. + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, provided +that the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the name of N.C.D. not be used in advertising or +publicity pertaining to distribution of the software without specific, +written prior permission. N.C.D. makes no representations about the +suitability of this software for any purpose. It is provided "as is" +without express or implied warranty. + + +Copyright (c) 1987 by the Regents of the University of California + +Permission to use, copy, modify, and distribute this +software and its documentation for any purpose and without +fee is hereby granted, provided that the above copyright +notice appear in all copies. The University of California +makes no representations about the suitability of this +software for any purpose. It is provided "as is" without +express or implied warranty. + + +Copyright 1992, 1993 Data General Corporation; +Copyright 1992, 1993 OMRON Corporation + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that the +above copyright notice appear in all copies and that both that copyright +notice and this permission notice appear in supporting documentation, and that +neither the name OMRON or DATA GENERAL be used in advertising or publicity +pertaining to distribution of the software without specific, written prior +permission of the party whose name is to be used. Neither OMRON or +DATA GENERAL make any representation about the suitability of this software +for any purpose. It is provided "as is" without express or implied warranty. + +OMRON AND DATA GENERAL EACH DISCLAIM ALL WARRANTIES WITH REGARD TO THIS +SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, +IN NO EVENT SHALL OMRON OR DATA GENERAL BE LIABLE FOR ANY SPECIAL, INDIRECT +OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE +OF THIS SOFTWARE. + + +Copyright © 1998-2004, 2006 Keith Packard +Copyright © 2000-2002 Keith Packard, member of The XFree86 Project, Inc. +Copyright (c) 2002 Apple Computer, Inc. +Copyright (c) 2003 Torrey T. Lyons. +All Rights Reserved. + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the name of Keith Packard not be used in +advertising or publicity pertaining to distribution of the software without +specific, written prior permission. Keith Packard makes no +representations about the suitability of this software for any purpose. It +is provided "as is" without express or implied warranty. + +KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + + +Copyright © 1999 Keith Packard +Copyright © 2000 Compaq Computer Corporation +Copyright © 2002 MontaVista Software Inc. +Copyright © 2005 OpenedHand Ltd. +Copyright © 2006 Nokia Corporation + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the name of the authors and/or copyright holders +not be used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. The authors and/or +copyright holders make no representations about the suitability of this +software for any purpose. It is provided "as is" without express or +implied warranty. + +THE AUTHORS AND/OR COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD +TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS, IN NO EVENT SHALL THE AUTHORS AND/OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + +Copyright 1993 by Davor Matic + +Permission to use, copy, modify, distribute, and sell this software +and its documentation for any purpose is hereby granted without fee, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation. Davor Matic makes no representations about +the suitability of this software for any purpose. It is provided "as +is" without express or implied warranty. + + +Copyright (C) 2001-2004 Harold L Hunt II All Rights Reserved. +Copyright (C) Colin Harrison 2005-2008 + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL HAROLD L HUNT II BE LIABLE FOR +ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF +CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of Harold L Hunt II +shall not be used in advertising or otherwise to promote the sale, use +or other dealings in this Software without prior written authorization +from Harold L Hunt II. + + +Copyright 1990,91 by Thomas Roell, Dinkelscherben, Germany. + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the name of Thomas Roell not be used in +advertising or publicity pertaining to distribution of the software without +specific, written prior permission. Thomas Roell makes no representations +about the suitability of this software for any purpose. It is provided +"as is" without express or implied warranty. + +THOMAS ROELL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +EVENT SHALL THOMAS ROELL BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + + +Copyright 1990,91 by Thomas Roell, Dinkelscherben, Germany +Copyright 1993 by David Wexelblat <dwex@goblin.org> + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the names of Thomas Roell and David Wexelblat +not be used in advertising or publicity pertaining to distribution of +the software without specific, written prior permission. Thomas Roell and +David Wexelblat makes no representations about the suitability of this +software for any purpose. It is provided "as is" without express or +implied warranty. + +THOMAS ROELL AND DAVID WEXELBLAT DISCLAIMS ALL WARRANTIES WITH REGARD TO +THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS, IN NO EVENT SHALL THOMAS ROELL OR DAVID WEXELBLAT BE LIABLE FOR +ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER +RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF +CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + +Copyright 1990,91,92,93 by Thomas Roell, Germany. +Copyright 1991,92,93 by SGCS (Snitily Graphics Consulting Services), USA. + +Permission to use, copy, modify, distribute, and sell this software +and its documentation for any purpose is hereby granted without fee, +provided that the above copyright notice appear in all copies and +that both that copyright notice and this permission notice appear +in supporting documentation, and that the name of Thomas Roell nor +SGCS be used in advertising or publicity pertaining to distribution +of the software without specific, written prior permission. +Thomas Roell nor SGCS makes no representations about the suitability +of this software for any purpose. It is provided "as is" without +express or implied warranty. + +THOMAS ROELL AND SGCS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS +SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS, IN NO EVENT SHALL THOMAS ROELL OR SGCS BE LIABLE FOR ANY +SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER +RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF +CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + +Copyright 1998 by Alan Hourihane, Wigan, England. +Copyright 2000-2002 by Alan Hourihane, Flint Mountain, North Wales. + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the name of Alan Hourihane not be used in +advertising or publicity pertaining to distribution of the software without +specific, written prior permission. Alan Hourihane makes no representations +about the suitability of this software for any purpose. It is provided +"as is" without express or implied warranty. + +ALAN HOURIHANE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +EVENT SHALL ALAN HOURIHANE BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + + +Copyright 1995 Kaleb S. KEITHLEY + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL Kaleb S. KEITHLEY BE LIABLE FOR ANY CLAIM, DAMAGES +OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of Kaleb S. KEITHLEY +shall not be used in advertising or otherwise to promote the sale, use +or other dealings in this Software without prior written authorization +from Kaleb S. KEITHLEY + + +Copyright (c) 1997 Matthieu Herrb + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the name of Matthieu Herrb not be used in +advertising or publicity pertaining to distribution of the software without +specific, written prior permission. Matthieu Herrb makes no +representations about the suitability of this software for any purpose. + It is provided "as is" without express or implied warranty. + +MATTHIEU HERRB DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +EVENT SHALL MATTHIEU HERRB BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + + +Copyright 2004, Egbert Eich + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to +deal in the Software without restriction, including without limitation the +rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +sell copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +EGBERT EICH BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CON- +NECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of Egbert Eich shall not +be used in advertising or otherwise to promote the sale, use or other deal- +ings in this Software without prior written authorization from Egbert Eich. + + +Copyright 1993 by David Wexelblat <dwex@goblin.org> +Copyright 2005 by Kean Johnston <jkj@sco.com> +Copyright 1993 by David McCullough <davidm@stallion.oz.au> + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the name of David Wexelblat not be used in +advertising or publicity pertaining to distribution of the software without +specific, written prior permission. David Wexelblat makes no representations +about the suitability of this software for any purpose. It is provided +"as is" without express or implied warranty. + +DAVID WEXELBLAT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +EVENT SHALL DAVID WEXELBLAT BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + + +Copyright 1992 by Orest Zborowski <obz@Kodak.com> +Copyright 1993 by David Wexelblat <dwex@goblin.org> + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the names of Orest Zborowski and David Wexelblat +not be used in advertising or publicity pertaining to distribution of +the software without specific, written prior permission. Orest Zborowski +and David Wexelblat make no representations about the suitability of this +software for any purpose. It is provided "as is" without express or +implied warranty. + +OREST ZBOROWSKI AND DAVID WEXELBLAT DISCLAIMS ALL WARRANTIES WITH REGARD +TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS, IN NO EVENT SHALL OREST ZBOROWSKI OR DAVID WEXELBLAT BE LIABLE +FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + +Copyright 1992 by Orest Zborowski <obz@Kodak.com> +Copyright 1993 by David Dawes <dawes@xfree86.org> + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the names of Orest Zborowski and David Dawes +not be used in advertising or publicity pertaining to distribution of +the software without specific, written prior permission. Orest Zborowski +and David Dawes make no representations about the suitability of this +software for any purpose. It is provided "as is" without express or +implied warranty. + +OREST ZBOROWSKI AND DAVID DAWES DISCLAIMS ALL WARRANTIES WITH REGARD +TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS, IN NO EVENT SHALL OREST ZBOROWSKI OR DAVID DAWES BE LIABLE +FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + +Copyright 1995-1999 by Frederic Lepied, France. <fred@sugix.frmug.fr.net> + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the name of Frederic Lepied not be used in +advertising or publicity pertaining to distribution of the software without +specific, written prior permission. Frederic Lepied makes no +representations about the suitability of this software for any purpose. It +is provided "as is" without express or implied warranty. + +FREDERIC LEPIED DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +EVENT SHALL FREDERIC LEPIED BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + + +Copyright 1992 by Rich Murphey <Rich@Rice.edu> +Copyright 1993 by David Wexelblat <dwex@goblin.org> + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the names of Rich Murphey and David Wexelblat +not be used in advertising or publicity pertaining to distribution of +the software without specific, written prior permission. Rich Murphey and +David Wexelblat make no representations about the suitability of this +software for any purpose. It is provided "as is" without express or +implied warranty. + +RICH MURPHEY AND DAVID WEXELBLAT DISCLAIM ALL WARRANTIES WITH REGARD TO +THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS, IN NO EVENT SHALL RICH MURPHEY OR DAVID WEXELBLAT BE LIABLE FOR +ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER +RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF +CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + +Copyright 1992 by Rich Murphey <Rich@Rice.edu> +Copyright 1993 by David Dawes <dawes@xfree86.org> + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the names of Rich Murphey and David Dawes +not be used in advertising or publicity pertaining to distribution of +the software without specific, written prior permission. Rich Murphey and +David Dawes make no representations about the suitability of this +software for any purpose. It is provided "as is" without express or +implied warranty. + +RICH MURPHEY AND DAVID DAWES DISCLAIM ALL WARRANTIES WITH REGARD TO +THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS, IN NO EVENT SHALL RICH MURPHEY OR DAVID DAWES BE LIABLE FOR +ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER +RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF +CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + +Copyright © 2003-2004 Anders Carlsson + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the name of Anders Carlsson not be used in +advertising or publicity pertaining to distribution of the software without +specific, written prior permission. Anders Carlsson makes no +representations about the suitability of this software for any purpose. It +is provided "as is" without express or implied warranty. + +ANDERS CARLSSON DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +EVENT SHALL ANDERS CARLSSON BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + + +Copyright (C) 2003 Anders Carlsson +Copyright © 2003-2004 Eric Anholt +Copyright © 2004 Keith Packard + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the name of Eric Anholt not be used in +advertising or publicity pertaining to distribution of the software without +specific, written prior permission. Eric Anholt makes no +representations about the suitability of this software for any purpose. It +is provided "as is" without express or implied warranty. + +ERIC ANHOLT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +EVENT SHALL ERIC ANHOLT BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + + +Copyright © 2004 PillowElephantBadgerBankPond + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the name of PillowElephantBadgerBankPond not be used in +advertising or publicity pertaining to distribution of the software without +specific, written prior permission. PillowElephantBadgerBankPond makes no +representations about the suitability of this software for any purpose. It +is provided "as is" without express or implied warranty. + +PillowElephantBadgerBankPond DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +EVENT SHALL PillowElephantBadgerBankPond BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + + +Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com> + +Permission to use, copy, modify, and distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND TODD C. MILLER DISCLAIMS ALL +WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL TODD C. MILLER BE LIABLE +FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + +Copyright © 2003-2004 Philip Blundell + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the name of Philip Blundell not be used in +advertising or publicity pertaining to distribution of the software without +specific, written prior permission. Philip Blundell makes no +representations about the suitability of this software for any purpose. It +is provided "as is" without express or implied warranty. + +PHILIP BLUNDELL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +EVENT SHALL PHILIP BLUNDELL BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + + + +Copyright (c) 1994-2003 by The XFree86 Project, Inc. +Copyright 1997 by Metro Link, Inc. +Copyright 2003 by David H. Dawes. +Copyright 2003 by X-Oz Technologies. +Copyright (c) 2004, X.Org Foundation + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of the copyright holder(s) +and author(s) shall not be used in advertising or otherwise to promote +the sale, use or other dealings in this Software without prior written +authorization from the copyright holder(s) and author(s). + + +Copyright 1990,91 by Thomas Roell, Dinkelscherben, Germany +Copyright 1993 by David Wexelblat <dwex@goblin.org> +Copyright 1999 by David Holland <davidh@iquest.net> +Copyright © 2000 Compaq Computer Corporation +Copyright © 2002 Hewlett-Packard Company +Copyright © 2004, 2005 Red Hat, Inc. +Copyright © 2004 Nicholas Miell +Copyright © 2005 Trolltech AS +Copyright © 2006 Intel Corporation +Copyright © 2006-2007 Keith Packard +Copyright © 2008 Red Hat, Inc +Copyright © 2008 George Sapountzis <gsap7@yahoo.gr> + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that copyright +notice and this permission notice appear in supporting documentation, and +that the name of the copyright holders not be used in advertising or +publicity pertaining to distribution of the software without specific, +written prior permission. The copyright holders make no representations +about the suitability of this software for any purpose. It is provided "as +is" without express or implied warranty. + +THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS +SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY +SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN +AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING +OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. + + +Copyright © 2000 Keith Packard, member of The XFree86 Project, Inc. + 2005 Lars Knoll & Zack Rusin, Trolltech + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the name of Keith Packard not be used in +advertising or publicity pertaining to distribution of the software without +specific, written prior permission. Keith Packard makes no +representations about the suitability of this software for any purpose. It +is provided "as is" without express or implied warranty. + +THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS +SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY +SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN +AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING +OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. + + +Copyright 1987, 1998 The Open Group +Copyright © 1998-1999, 2001 The XFree86 Project, Inc. +Copyright © 2000 VA Linux Systems, Inc. +Copyright (c) 2000, 2001 Nokia Home Communications +Copyright © 2007, 2008 Red Hat, Inc. +All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, and/or sell copies of the Software, and to permit persons +to whom the Software is furnished to do so, provided that the above +copyright notice(s) and this permission notice appear in all copies of +the Software and that both the above copyright notice(s) and this +permission notice appear in supporting documentation. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL +INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING +FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, +NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION +WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, use +or other dealings in this Software without prior written authorization +of the copyright holder. + + +Copyright 1996 by Thomas E. Dickey <dickey@clark.net> + + All Rights Reserved + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the name of the above listed +copyright holder(s) not be used in advertising or publicity pertaining +to distribution of the software without specific, written prior +permission. + +THE ABOVE LISTED COPYRIGHT HOLDER(S) DISCLAIM ALL WARRANTIES WITH REGARD +TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS, IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE +LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + +Copyright 1998-1999 Precision Insight, Inc., Cedar Park, Texas. +Copyright (c) 2001 Andreas Monitzer. +Copyright (c) 2001-2004 Greg Parker. +Copyright (c) 2001-2004 Torrey T. Lyons +Copyright (c) 2002-2003 Apple Computer, Inc. +Copyright (c) 2004-2005 Alexander Gottwald +Copyright (c) 2002-2009 Apple Inc. +Copyright (c) 2007 Jeremy Huddleston +All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name(s) of the above copyright +holders shall not be used in advertising or otherwise to promote the sale, +use or other dealings in this Software without prior written authorization. + + +Copyright (C) 1999,2000 by Eric Sunshine <sunshine@sunshineco.com> +Copyright (C) 2001-2005 by Thomas Winischhofer, Vienna, Austria. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN +NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +Copyright (C) 2005 Bogdan D. bogdand@users.sourceforge.net + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of the author shall not be used in +advertising or otherwise to promote the sale, use or other dealings in this +Software without prior written authorization from the author. + + +Copyright © 2002 David Dawes + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF +OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +Except as contained in this notice, the name of the author(s) shall +not be used in advertising or otherwise to promote the sale, use or other +dealings in this Software without prior written authorization from +the author(s). + + +Copyright (C) 1996-1999 SciTech Software, Inc. +Copyright (C) David Mosberger-Tang +Copyright (C) 1999 Egbert Eich +Copyright (C) 2008 Bart Trojanowski, Symbio Technologies, LLC + +Permission to use, copy, modify, distribute, and sell this software and +its documentation for any purpose is hereby granted without fee, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the name of the authors not be used +in advertising or publicity pertaining to distribution of the software +without specific, written prior permission. The authors makes no +representations about the suitability of this software for any purpose. +It is provided "as is" without express or implied warranty. + +THE AUTHORS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +EVENT SHALL THE AUTHORS BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF +USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + + +Copyright 2005-2006 Luc Verhaegen. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + + +Copyright 1995 by Robin Cutshaw <robin@XFree86.Org> +Copyright 2000 by Egbert Eich +Copyright 2002 by David Dawes + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the names of the above listed copyright holder(s) +not be used in advertising or publicity pertaining to distribution of +the software without specific, written prior permission. The above listed +copyright holder(s) make(s) no representations about the suitability of this +software for any purpose. It is provided "as is" without express or +implied warranty. + +THE ABOVE LISTED COPYRIGHT HOLDER(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD +TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS, IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE +LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY +DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING +OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + +Copyright 1997-2004 by Marc Aurele La France (TSI @ UQV), tsi@xfree86.org + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that copyright +notice and this permission notice appear in supporting documentation, and +that the name of Marc Aurele La France not be used in advertising or +publicity pertaining to distribution of the software without specific, +written prior permission. Marc Aurele La France makes no representations +about the suitability of this software for any purpose. It is provided +"as-is" without express or implied warranty. + +MARC AURELE LA FRANCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO +EVENT SHALL MARC AURELE LA FRANCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE +OF THIS SOFTWARE. + + +Copyright 1990, 1991 by Thomas Roell, Dinkelscherben, Germany +Copyright 1992 by David Dawes <dawes@XFree86.org> +Copyright 1992 by Jim Tsillas <jtsilla@damon.ccs.northeastern.edu> +Copyright 1992 by Rich Murphey <Rich@Rice.edu> +Copyright 1992 by Robert Baron <Robert.Baron@ernst.mach.cs.cmu.edu> +Copyright 1992 by Orest Zborowski <obz@eskimo.com> +Copyright 1993 by Vrije Universiteit, The Netherlands +Copyright 1993 by David Wexelblat <dwex@XFree86.org> +Copyright 1994, 1996 by Holger Veit <Holger.Veit@gmd.de> +Copyright 1997 by Takis Psarogiannakopoulos <takis@dpmms.cam.ac.uk> +Copyright 1994-2003 by The XFree86 Project, Inc + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the names of the above listed copyright holders +not be used in advertising or publicity pertaining to distribution of +the software without specific, written prior permission. The above listed +copyright holders make no representations about the suitability of this +software for any purpose. It is provided "as is" without express or +implied warranty. + +THE ABOVE LISTED COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD +TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS, IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDERS BE +LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY +DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING +OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + +Copyright 2001-2005 by J. Kean Johnston <jkj@sco.com> + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the name J. Kean Johnston not be used in +advertising or publicity pertaining to distribution of the software without +specific, written prior permission. J. Kean Johnston makes no +representations about the suitability of this software for any purpose. +It is provided "as is" without express or implied warranty. + +J. KEAN JOHNSTON DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +EVENT SHALL J. KEAN JOHNSTON BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF +USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + + +Copyright (C) 2000 Jakub Jelinek (jakub@redhat.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +JAKUB JELINEK BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +Copyright 1997,1998 by UCHIYAMA Yasushi + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the name of UCHIYAMA Yasushi not be used in +advertising or publicity pertaining to distribution of the software without +specific, written prior permission. UCHIYAMA Yasushi makes no representations +about the suitability of this software for any purpose. It is provided +"as is" without express or implied warranty. + +UCHIYAMA YASUSHI DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +EVENT SHALL UCHIYAMA YASUSHI BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + + +Copyright (C) 2000 Keith Packard + 2004 Eric Anholt + 2005 Zack Rusin + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the name of copyright holders not be used in +advertising or publicity pertaining to distribution of the software without +specific, written prior permission. Copyright holders make no +representations about the suitability of this software for any purpose. It +is provided "as is" without express or implied warranty. + +THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS +SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY +SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN +AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING +OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. + + +(C) Copyright IBM Corporation 2002-2007 +All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +on the rights to use, copy, modify, merge, publish, distribute, sub +license, and/or sell copies of the Software, and to permit persons to whom +the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice (including the next +paragraph) shall be included in all copies or substantial portions of the +Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL +THE COPYRIGHT HOLDERS AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +USE OR OTHER DEALINGS IN THE SOFTWARE. + + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +this permission notice appear in supporting documentation. This permission +notice shall be included in all copies or substantial portions of the +Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +Copyright © 2007 OpenedHand Ltd + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the name of OpenedHand Ltd not be used in +advertising or publicity pertaining to distribution of the software without +specific, written prior permission. OpenedHand Ltd makes no +representations about the suitability of this software for any purpose. It +is provided "as is" without express or implied warranty. + +OpenedHand Ltd DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +EVENT SHALL OpenedHand Ltd BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + + +Copyright (c) 1989, 1990, 1993, 1994 + The Regents of the University of California. All rights reserved. + +This code is derived from software contributed to Berkeley by +Chris Torek. + +This code is derived from software contributed to Berkeley by +Michael Rendell of Memorial University of Newfoundland. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 4. Neither the name of the University nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +</pre> +<ul> + +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">xcb-proto-1.7.1</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://xcb.freedesktop.org/">homepage</a></span> +<div class="licence"> +<pre>Scanned Source License xcb-proto-1.7.1/COPYING: + +Copyright (C) 2001-2006 Bart Massey, Jamey Sharp, and Josh Triplett. +All Rights Reserved. + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the +Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, +sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall +be included in all copies or substantial portions of the +Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY +KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS +BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the names of the authors +or their institutions shall not be used in advertising or +otherwise to promote the sale, use or other dealings in this +Software without prior written authorization from the +authors. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +</pre> +<ul> + +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">xkeyboard-config-2.4.1</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.freedesktop.org/wiki/Software/XKeyboardConfig">homepage</a></span> +<div class="licence"> +<pre>Scanned Source License xkeyboard-config-2.4.1/COPYING: + +Copyright 1996 by Joseph Moss +Copyright (C) 2002-2007 Free Software Foundation, Inc. +Copyright (C) Dmitry Golubev <lastguru@mail.ru>, 2003-2004 +Copyright (C) 2004, Gregory Mokhin <mokhin@bog.msu.ru> +Copyright (C) 2006 Erdal Ronahî + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the name of the copyright holder(s) not be used in +advertising or publicity pertaining to distribution of the software without +specific, written prior permission. The copyright holder(s) makes no +representations about the suitability of this software for any purpose. It +is provided "as is" without express or implied warranty. + +THE COPYRIGHT HOLDER(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +EVENT SHALL THE COPYRIGHT HOLDER(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + + +Copyright (c) 1996 Digital Equipment Corporation + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL DIGITAL EQUIPMENT CORPORATION BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR +THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of the Digital Equipment +Corporation shall not be used in advertising or otherwise to promote +the sale, use or other dealings in this Software without prior written +authorization from Digital Equipment Corporation. + + +Copyright 1996, 1998 The Open Group + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation. + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of The Open Group shall +not be used in advertising or otherwise to promote the sale, use or +other dealings in this Software without prior written authorization +from The Open Group. + + +Copyright 2004-2005 Sun Microsystems, Inc. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice (including the next +paragraph) shall be included in all copies or substantial portions of the +Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + + +Copyright (c) 1996 by Silicon Graphics Computer Systems, Inc. + +Permission to use, copy, modify, and distribute this +software and its documentation for any purpose and without +fee is hereby granted, provided that the above copyright +notice appear in all copies and that both that copyright +notice and this permission notice appear in supporting +documentation, and that the name of Silicon Graphics not be +used in advertising or publicity pertaining to distribution +of the software without specific prior written permission. +Silicon Graphics makes no representation about the suitability +of this software for any purpose. It is provided "as is" +without any express or implied warranty. + +SILICON GRAPHICS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS +SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON +GRAPHICS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL +DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE +OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH +THE USE OR PERFORMANCE OF THIS SOFTWARE. + + +Copyright (c) 1996 X Consortium + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of the X Consortium shall +not be used in advertising or otherwise to promote the sale, use or +other dealings in this Software without prior written authorization +from the X Consortium. + + +Copyright (C) 2004, 2006 Ævar Arnfjörð Bjarmason <avarab@gmail.com> + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation. + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of a copyright holder shall +not be used in advertising or otherwise to promote the sale, use or +other dealings in this Software without prior written authorization of +the copyright holder. + + +Copyright (C) 1999, 2000 by Anton Zinoviev <anton@lml.bas.bg> + +This software may be used, modified, copied, distributed, and sold, +in both source and binary form provided that the above copyright +and these terms are retained. Under no circumstances is the author +responsible for the proper functioning of this software, nor does +the author assume any responsibility for damages incurred with its +use. + +Permission is granted to anyone to use, distribute and modify +this file in any way, provided that the above copyright notice +is left intact and the author of the modification summarizes +the changes in this header. + +This file is distributed without any expressed or implied warranty. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +</pre> +<ul> + +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">xl2tpd-1.3.0</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.xelerance.com/services/software/xl2tpd/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#GPL-2'>Gentoo Package Stock License GPL-2</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">xz-utils-4.999.9_beta</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://tukaani.org/xz/">homepage</a></span> +<div class="licence"> +<pre></pre> +<ul> +<li><a href='#LGPL-2.1'>Gentoo Package Stock License LGPL-2.1</a></li> +<li><a href='#GPL-2'>Gentoo Package Stock License GPL-2</a></li> +<li><a href='#public-domain'>Gentoo Package Stock License public-domain</a></li> +<li><a href='#GPL-2+'>Gentoo Package Stock License GPL-2+</a></li> +</ul> +</div> +</div> + + +<div class="product"> +<span class="title">zlib-1.2.7</span> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<span class="homepage"><a href="http://www.zlib.net/">homepage</a></span> +<div class="licence"> +<pre>Gentoo Package Stock License ZLIB: + +Copyright (C) <year> <copyright holders> + +This software is provided 'as-is', without any express or implied +warranty. In no event will the author(s) be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. +2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. +3. This notice may not be removed or altered from any source distribution. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +</pre> +<ul> + +</ul> +</div> +</div> + + +</div> + +<h2>List of Shared Licenses used in Google Chrome OS:</h2> +<div class="product"> +<a name="AFL-2.1" class="title">Gentoo Package Stock License AFL-2.1</a> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<div class="licence"> +<pre> +The Academic Free License +v. 2.1 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following notice immediately following the copyright notice for the Original Work: + +Licensed under the Academic Free License version 2.1 + +1) Grant of Copyright License. Licensor hereby grants You a world-wide, royalty-free, non-exclusive, perpetual, sublicenseable license to do the following: + +a) to reproduce the Original Work in copies; + +b) to prepare derivative works ("Derivative Works") based upon the Original Work; + +c) to distribute copies of the Original Work and Derivative Works to the public; + +d) to perform the Original Work publicly; and + +e) to display the Original Work publicly. + +2) Grant of Patent License. Licensor hereby grants You a world-wide, royalty-free, non-exclusive, perpetual, sublicenseable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, to make, use, sell and offer for sale the Original Work and Derivative Works. + +3) Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor hereby agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work, and by publishing the address of that information repository in a notice immediately following the copyright notice that applies to the Original Work. + +4) Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior written permission of the Licensor. Nothing in this License shall be deemed to grant any rights to trademarks, copyrights, patents, trade secrets or any other intellectual property of Licensor except as expressly stated herein. No patent license is granted to make, use, sell or offer to sell embodiments of any patent claims other than the licensed claims defined in Section 2. No right is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under different terms from this License any Original Work that Licensor otherwise would have a right to license. + +5) This section intentionally omitted. + +6) Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + +7) Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately proceeding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of NON-INFRINGEMENT, MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to Original Work is granted hereunder except under this disclaimer. + +8) Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to any person for any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to liability for death or personal injury resulting from Licensor's negligence to the extent applicable law prohibits such limitation. Some jurisdictions do not allow the exclusion or limitation of incidental or consequential damages, so this exclusion and limitation may not apply to You. + +9) Acceptance and Termination. If You distribute copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. Nothing else but this License (or another written agreement between Licensor and You) grants You permission to create Derivative Works based upon the Original Work or to exercise any of the rights granted in Section 1 herein, and any attempt to do so except under the terms of this License (or another written agreement between Licensor and You) is expressly prohibited by U.S. copyright law, the equivalent laws of other countries, and by international treaty. Therefore, by exercising any of the rights granted to You in Section 1 herein, You indicate Your acceptance of this License and all of its terms and conditions. + +10) Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + +11) Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of the U.S. Copyright Act, 17 U.S.C. § 101 et seq., the equivalent laws of other countries, and international treaty. This section shall survive the termination of this License. + +12) Attorneys Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + +13) Miscellaneous. This License represents the complete agreement concerning the subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + +14) Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + +15) Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + +This license is Copyright (C) 2003-2004 Lawrence E. Rosen. All rights reserved. Permission is hereby granted to copy and distribute this license without modification. This license may not be modified without the express written permission of its copyright owner. + + + + +</pre> +<div class="license-packages"> +Used by these packages: dev-libs/dbus-glib-0.100.2 sys-apps/dbus-1.6.8-r4 +</div> +</div> +</div> + +<div class="product"> +<a name="Apache-2.0" class="title">Gentoo Package Stock License Apache-2.0</a> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<div class="licence"> +<pre> + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed 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. + +</pre> +<div class="license-packages"> +Used by these packages: media-fonts/croscorefonts-1.23.0 app-i18n/chromeos-hangul-1.1.0.0-r5 media-fonts/notofonts-20130514 app-admin/rsyslog-5.8.11 media-fonts/droidfonts-cros-20121206 app-i18n/chromeos-keyboards-1.1.4.0-r5 dev-libs/protobuf-2.3.0-r4 app-i18n/chinese-input-1.1.0.0-r2 media-fonts/crosextrafonts-20130214 +</div> +</div> +</div> + +<div class="product"> +<a name="as-is" class="title">Gentoo Package Stock License as-is</a> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<div class="licence"> +<pre> +Note: This license label is deprecated, so don't use it for new packages. +Unfortunately, "as-is" has been (ab)used also for non-free software and +you cannot rely on it. Please check the upstream license instead. + +"as-is" in its originally intended sense is now covered by the OSI-approved +"HPND" (Historical Permission Notice and Disclaimer). + +--------------------------------------------------------------------------- + +This is a generic place holder for a class of licenses that boil down to do +no guarantees and all you get is what you have. The language is usually +similar to: + + Permission to use, copy, modify, and distribute this software and its + documentation for any purpose and without fee is hereby granted, provided + that the above copyright notice appears in all copies and that both the + copyright notice and this permission notice appear in supporting + documentation, and that the same name not be used in advertising or + publicity pertaining to distribution of the software without specific, + written prior permission. We make no representations about the + suitability of this software for any purpose. It is provided "as is" + without express or implied warranty. + + +You will need to check the license that came with the software for the exact +specifics. Generally you are free to do most anything you want with "as is" +software but you should not take this license as legal advice. + +Note: Most all license have an "as is" clause. For our purposes this does +not make all software in this category. This category is for software with +very little restrictions. + +The information in this license about licenses is presented "as is". :-P + +</pre> +<div class="license-packages"> +Used by these packages: dev-lang/swig-2.0.4-r1 media-libs/libpng-1.2.49-r1 net-misc/openssh-5.2_p1-r10 dev-db/sqlite-3.6.22-r3 net-wireless/crda-1.1.1-r1 app-text/docbook-xml-dtd-4.1.2-r6 net-wireless/iw-3.6-r1 net-wireless/wireless-regdb-20101124-r2 +</div> +</div> +</div> + +<div class="product"> +<a name="Atheros" class="title">Custom License Atheros</a> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<div class="licence"> +<pre> +Copyright (c) 2010, Atheros Communications, Inc. + +All rights reserved. + +Redistribution. Redistribution and use in binary form, without modification, are permitted provided that the following conditions are + +met: + +* Redistributions must reproduce the above copyright notice and the following disclaimer in the documentation and/or other materials provided with the distribution. + +* Neither the name of Atheros Communications, Inc. nor the names of its suppliers may be used to endorse or promote products derived from this software without specific prior written permission. + +* No reverse engineering, decompilation, or disassembly of this software is permitted. + +Limited patent license. Atheros Communications, Inc. grants a world-wide, royalty-free, non-exclusive license under patents it now or hereafter owns or controls to make, have made, use, import, offer to sell and sell ("Utilize") this software, but solely to the extent that any such patent is necessary to Utilize the software alone, or in combination with an operating system licensed under an approved Open Source license as listed by the Open Source Initiative at http://opensource.org/licenses. The patent license shall not apply to any other combinations which include this software. No hardware per se is licensed hereunder. + +DISCLAIMER. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + + +</pre> +<div class="license-packages"> +Used by these packages: net-wireless/ath3k-0.0.1-r121 net-wireless/ath6k-34-r22 +</div> +</div> +</div> + +<div class="product"> +<a name="BSD-Google" class="title">Custom License BSD-Google</a> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<div class="licence"> +<pre> +Copyright 2010, Google Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +</pre> +<div class="license-packages"> +Used by these packages: app-i18n/nacl-mozc-1.10.1389.104-r14 app-i18n/input-tools-3.0.0.0-r2 +</div> +</div> +</div> + +<div class="product"> +<a name="FTL" class="title">Gentoo Package Stock License FTL</a> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<div class="licence"> +<pre> + The FreeType Project LICENSE + ---------------------------- + + Copyright 1996-1999 by + David Turner, Robert Wilhelm, and Werner Lemberg + + + +Introduction +============ + + The FreeType Project is distributed in several archive packages; + some of them may contain, in addition to the FreeType font engine, + various tools and contributions which rely on, or relate to, the + FreeType Project. + + This license applies to all files found in such packages, and + which do not fall under their own explicit license. The license + affects thus the FreeType font engine, the test programs, + documentation and makefiles, at the very least. + + This license was inspired by the BSD, Artistic, and IJG + (Independent JPEG Group) licenses, which all encourage inclusion + and use of free software in commercial and freeware products + alike. As a consequence, its main points are that: + + o We don't promise that this software works. However, we are be + interested in any kind of bug reports. (`as is' distribution) + + o You can use this software for whatever you want, in parts or + full form, without having to pay us. (`royalty-free' usage) + + o You may not pretend that you wrote this software. If you use + it, or only parts of it, in a program, you must acknowledge + somewhere in your documentation that you've used the FreeType + code. (`credits') + + We specifically permit and encourage the inclusion of this + software, with or without modifications, in commercial products, + provided that all warranty or liability claims are assumed by the + product vendor. + + +Legal Terms +=========== + +0. Definitions +-------------- + + Throughout this license, the terms `package', `FreeType Project', + and `FreeType archive' refer to the set of files originally + distributed by the authors (David Turner, Robert Wilhelm, and + Werner Lemberg) as the `FreeType project', be they named as alpha, + beta or final release. + + `You' refers to the licensee, or person using the project, where + `using' is a generic term including compiling the project's source + code as well as linking it to form a `program' or `executable'. + This program is referred to as `a program using the FreeType + engine'. + + This license applies to all files distributed in the original + FreeType archive, including all source code, binaries and + documentation, unless otherwise stated in the file in its + original, unmodified form as distributed in the original archive. + If you are unsure whether or not a particular file is covered by + this license, you must contact us to verify this. + + The FreeType project is copyright (C) 1996-1999 by David Turner, + Robert Wilhelm, and Werner Lemberg. All rights reserved except as + specified below. + +1. No Warranty +-------------- + + THE FREETYPE ARCHIVE IS PROVIDED `AS IS' WITHOUT WARRANTY OF ANY + KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE. IN NO EVENT WILL ANY OF THE AUTHORS OR COPYRIGHT HOLDERS + BE LIABLE FOR ANY DAMAGES CAUSED BY THE USE OR THE INABILITY TO + USE, OF THE FREETYPE PROJECT. + + As you have not signed this license, you are not required to + accept it. However, as the FreeType project is copyrighted + material, only this license, or another one contracted with the + authors, grants you the right to use, distribute, and modify it. + Therefore, by using, distributing, or modifying the FreeType + project, you indicate that you understand and accept all the terms + of this license. + +2. Redistribution +----------------- + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + o Redistribution of source code must retain this license file + (`licence.txt') unaltered; any additions, deletions or changes + to the original files must be clearly indicated in + accompanying documentation. The copyright notices of the + unaltered, original files must be preserved in all copies of + source files. + + o Redistribution in binary form must provide a disclaimer that + states that the software is based in part of the work of the + FreeType Team, in the distribution documentation. We also + encourage you to put an URL to the FreeType web page in your + documentation, though this isn't mandatory. + + These conditions apply to any software derived from or based on + the FreeType code, not just the unmodified files. If you use our + work, you must acknowledge us. However, no fee need be paid to + us. + +3. Advertising +-------------- + + The names of FreeType's authors and contributors may not be used + to endorse or promote products derived from this software without + specific prior written permission. + + We suggest, but do not require, that you use one or more of the + following phrases to refer to this software in your documentation + or advertising materials: `FreeType Project', `FreeType Engine', + `FreeType library', or `FreeType Distribution'. + +4. Contacts +----------- + + There are two mailing lists related to FreeType: + + o freetype@freetype.org + + Discusses general use and applications of FreeType, as well as + future and wanted additions to the library and distribution. + If you are looking for support, start in this list if you + haven't found anything to help you in the documentation. + + o devel@freetype.org + + Discusses bugs, as well as engine internals, design issues, + specific licenses, porting, etc. + + o http://www.freetype.org + + Holds the current FreeType web page, which will allow you to + download our latest development version and read online + documentation. + + You can also contact us individually at: + + David Turner <david.turner@freetype.org> + Robert Wilhelm <robert.wilhelm@freetype.org> + Werner Lemberg <werner.lemberg@freetype.org> + + +--- end of license.txt --- + +</pre> +<div class="license-packages"> +Used by these packages: media-libs/freetype-2.4.12 x11-libs/pango-1.32.5-r1 +</div> +</div> +</div> + +<div class="product"> +<a name="GPL-2" class="title">Gentoo Package Stock License GPL-2</a> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<div class="licence"> +<pre> + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. + +</pre> +<div class="license-packages"> +Used by these packages: sys-apps/dmidecode-2.11-r1 app-text/sgml-common-0.6.3-r5 sys-apps/mawk-1.3.4_p20100625 net-libs/libnetfilter_queue-1.0.1 dev-util/gtk-doc-am-1.18 app-laptop/laptop-mode-tools-1.59-r18 app-admin/eselect-python-20100321 sys-apps/findutils-4.4.2-r1 sys-devel/binutils-config-3-r3 sys-libs/libcap-2.17 sys-apps/shadow-4.1.2.2-r4 net-wireless/wpa_supplicant-0.7.2-r134 sys-fs/e2fsprogs-1.42 sys-kernel/linux-headers-3.4-r6 media-plugins/alsa-plugins-1.0.25-r1 sys-apps/module-init-tools-3.16-r4 sys-apps/iotools-1.4 sys-apps/usbutils-006 sys-libs/pam-1.1.5 net-wireless/bluez-5.4-r9 sys-fs/udev-171-r5 sys-apps/keyutils-1.1 sys-fs/ecryptfs-utils-101 app-admin/python-updater-0.10 dev-libs/nss-3.15.1-r3 sys-apps/hwids-20120922 net-dialup/ppp-2.4.5-r3 app-misc/pax-utils-0.4 sys-libs/libnih-1.0.3 sys-apps/ureadahead-0.100.0-r2 sys-apps/baselayout-2.0.1-r230 x11-misc/shared-mime-info-0.90 sys-apps/kbd-1.15.3 sys-auth/pambase-20101024-r2 net-misc/strongswan-5.0.2-r7 net-dialup/xl2tpd-1.3.0-r1 sys-apps/hdparm-9.39 sys-fs/fuse-2.8.6-r3 media-sound/alsa-utils-1.0.25-r3 sys-fs/avfs-1.0.1 sys-apps/net-tools-1.60_p20110409135728 sys-apps/dtc-1.3.0-r24 sys-fs/ntfs3g-2012.1.15-r2 dev-libs/dbus-glib-0.100.2 sys-apps/ethtool-6 app-misc/mime-types-8 sys-devel/autoconf-2.13 sys-apps/upstart-1.2-r7 dev-libs/libgpg-error-1.10-r1 sys-apps/chvt-0.0.1-r1 sys-apps/flashrom-0.9.4-r303 sys-fs/lvm2-2.02.88 dev-util/ragel-6.7-r2 net-firewall/iptables-1.4.8-r2 sys-apps/dbus-1.6.8-r4 dev-libs/lzo-2.06 sys-apps/sandbox-2.6-r1 dev-util/intltool-0.41.0 sys-devel/libtool-2.4-r1 sys-apps/smartmontools-5.42 sys-libs/e2fsprogs-libs-1.42 dev-libs/nspr-4.10 net-misc/openvpn-2.3.2-r1 dev-util/perf-3.4-r2478 sys-kernel/Linux-2.6 sys-apps/util-linux-2.21.2-r1 sys-apps/pciutils-3.1.10 media-sound/alsa-headers-1.0.25 media-libs/freetype-2.4.12 sys-devel/autoconf-wrapper-10-r1 sys-devel/automake-1.11.1 dev-libs/pkcs11-helper-1.07 net-libs/libnfnetlink-1.0.1 media-gfx/ply-image-0.0.1-r43 sys-boot/coreboot-2013.04 media-sound/adhd-0.0.1-r655 sys-devel/automake-wrapper-5 app-admin/eselect-opengl-1.2.4 sys-devel/patch-2.6.1 sys-apps/diffutils-3.2 app-accessibility/brltty-4.5-r6 media-libs/sbc-1.0 sys-block/eject-2.1.5-r2 sys-auth/pam_pwdfile-0.99-r1 sys-apps/portage-2.1.11.50-r3 sys-process/procps-3.3.4 dev-libs/libatomic_ops-7.2d sys-boot/syslinux-3.83-r5 sys-apps/memtester-4.2.2 app-arch/xz-utils-4.999.9_beta-r1 +</div> +</div> +</div> + +<div class="product"> +<a name="GPL-2+" class="title">Gentoo Package Stock License GPL-2+</a> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<div class="licence"> +<pre> +GNU General Public License, version 2 or any later version. +See GPL-2 or GPL-3 for the full text of these licenses. + +</pre> +<div class="license-packages"> +Used by these packages: sys-boot/u-boot-2013.06 dev-libs/libatomic_ops-7.2d app-arch/xz-utils-4.999.9_beta-r1 +</div> +</div> +</div> + +<div class="product"> +<a name="GPL-3" class="title">Gentoo Package Stock License GPL-3</a> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<div class="licence"> +<pre> + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + <program> Copyright (C) <year> <name of author> + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +<http://www.gnu.org/licenses/>. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +<http://www.gnu.org/philosophy/why-not-lgpl.html>. + +</pre> +<div class="license-packages"> +Used by these packages: dev-lang/swig-2.0.4-r1 sys-devel/binutils-2.22-r18 sys-libs/gdbm-1.9.1-r2 sys-libs/gcc-libs-4.7.2-r4 app-arch/gzip-1.5 sys-fs/dosfstools-3.0.9 sys-block/parted-3.1-r1 sys-apps/sed-4.2.1-r1 sys-devel/autoconf-2.68 sys-fs/exfat-utils-1.0.1-r1 app-admin/rsyslog-5.8.11 sys-apps/grep-2.14 app-arch/tar-1.26-r1 app-arch/sharutils-4.7 sys-fs/mtools-4.0.15 net-misc/rsync-3.0.8 sys-apps/util-linux-2.21.2-r1 app-shells/bash-4.2_p20 sys-devel/make-3.82-r1 sys-fs/fuse-exfat-1.0.1-r1 sys-libs/readline-6.2_p1 net-misc/wget-1.12-r2 sys-apps/coreutils-8.20-r1 sys-apps/which-2.20 +</div> +</div> +</div> + +<div class="product"> +<a name="ISC" class="title">Gentoo Package Stock License ISC</a> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<div class="licence"> +<pre> +Copyright (c) 4-digit year, Company or Person's Name + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +</pre> +<div class="license-packages"> +Used by these packages: media-libs/harfbuzz-0.9.18-r2 app-admin/sudo-1.8.6_p7 +</div> +</div> +</div> + +<div class="product"> +<a name="LGPL-2" class="title">Gentoo Package Stock License LGPL-2</a> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<div class="licence"> +<pre> + GNU LIBRARY GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1991 Free Software Foundation, Inc. + 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the library GPL. It is + numbered 2 because it goes with version 2 of the ordinary GPL.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Library General Public License, applies to some +specially designated Free Software Foundation software, and to any +other libraries whose authors decide to use it. You can use it for +your libraries, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if +you distribute copies of the library, or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link a program with the library, you must provide +complete object files to the recipients so that they can relink them +with the library, after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + Our method of protecting your rights has two steps: (1) copyright +the library, and (2) offer you this license which gives you legal +permission to copy, distribute and/or modify the library. + + Also, for each distributor's protection, we want to make certain +that everyone understands that there is no warranty for this free +library. If the library is modified by someone else and passed on, we +want its recipients to know that what they have is not the original +version, so that any problems introduced by others will not reflect on +the original authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that companies distributing free +software will individually obtain patent licenses, thus in effect +transforming the program into proprietary software. To prevent this, +we have made it clear that any patent must be licensed for everyone's +free use or not licensed at all. + + Most GNU software, including some libraries, is covered by the ordinary +GNU General Public License, which was designed for utility programs. This +license, the GNU Library General Public License, applies to certain +designated libraries. This license is quite different from the ordinary +one; be sure to read it in full, and don't assume that anything in it is +the same as in the ordinary license. + + The reason we have a separate public license for some libraries is that +they blur the distinction we usually make between modifying or adding to a +program and simply using it. Linking a program with a library, without +changing the library, is in some sense simply using the library, and is +analogous to running a utility program or application program. However, in +a textual and legal sense, the linked executable is a combined work, a +derivative of the original library, and the ordinary General Public License +treats it as such. + + Because of this blurred distinction, using the ordinary General +Public License for libraries did not effectively promote software +sharing, because most developers did not use the libraries. We +concluded that weaker conditions might promote sharing better. + + However, unrestricted linking of non-free programs would deprive the +users of those programs of all benefit from the free status of the +libraries themselves. This Library General Public License is intended to +permit developers of non-free programs to use free libraries, while +preserving your freedom as a user of such programs to change the free +libraries that are incorporated in them. (We have not seen how to achieve +this as regards changes in header files, but we have achieved it as regards +changes in the actual functions of the Library.) The hope is that this +will lead to faster development of free libraries. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, while the latter only +works together with the library. + + Note that it is possible for a library to be covered by the ordinary +General Public License rather than by this special one. + + GNU LIBRARY GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library which +contains a notice placed by the copyright holder or other authorized +party saying it may be distributed under the terms of this Library +General Public License (also called "this License"). Each licensee is +addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also compile or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + c) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + d) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the source code distributed need not include anything that is normally +distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Library General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + Appendix: How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + <one line to give the library's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, + MA 02111-1307, USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random Hacker. + + <signature of Ty Coon>, 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! + +</pre> +<div class="license-packages"> +Used by these packages: x11-libs/gtk+-2.20.1 dev-libs/atk-1.32.0-r1 dev-libs/libusb-0.1.12-r7 dev-libs/glib-2.34.3-r1 dev-libs/dbus-c++-0.0.2-r42 x11-libs/pango-1.32.5-r1 +</div> +</div> +</div> + +<div class="product"> +<a name="LGPL-2+" class="title">Gentoo Package Stock License LGPL-2+</a> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<div class="licence"> +<pre> +GNU Library General Public License, version 2 or any later version. +See LGPL-2, LGPL-2.1, or LGPL-3 for the full text of these licenses. + +</pre> +<div class="license-packages"> +Used by these packages: dev-libs/glib-2.34.3-r1 x11-libs/pango-1.32.5-r1 +</div> +</div> +</div> + +<div class="product"> +<a name="LGPL-2.1" class="title">Gentoo Package Stock License LGPL-2.1</a> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<div class="licence"> +<pre> + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + <one line to give the library's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random Hacker. + + <signature of Ty Coon>, 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! + + + +</pre> +<div class="license-packages"> +Used by these packages: dev-libs/libnl-3.2.14 dev-libs/libp11-0.2.8-r1 media-libs/ladspa-sdk-1.13-r1 media-plugins/alsa-plugins-1.0.25-r1 net-dns/avahi-0.6.31-r1 dev-libs/libusb-1.0.9 net-wireless/bluez-5.4-r9 x11-libs/cairo-1.12.12 sys-apps/keyutils-1.1 dev-libs/nss-3.15.1-r3 sys-apps/acl-2.2.51 dev-util/shflags-1.0.3-r1 dev-libs/libgcrypt-1.4.6 dev-libs/libnl-1.1-r1 media-libs/alsa-lib-1.0.25-r1 dev-libs/libgpg-error-1.10-r1 net-libs/libmnl-1.0.3-r1 net-misc/modemmanager-next-0.5.999-r189 dev-libs/engine_pkcs11-0.1.8 sys-apps/attr-2.4.46 dev-libs/nspr-4.10 media-libs/libmtp-0.0.1-r17 net-misc/modemmanager-classic-interfaces-0.0.1 sys-apps/util-linux-2.21.2-r1 dev-libs/libdaemon-0.14-r1 app-accessibility/brltty-4.5-r6 media-libs/sbc-1.0 app-i18n/ibus-1.4.99.20120314-r5 app-arch/xz-utils-4.999.9_beta-r1 +</div> +</div> +</div> + +<div class="product"> +<a name="LGPL-3" class="title">Gentoo Package Stock License LGPL-3</a> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<div class="licence"> +<pre> + GNU LESSER GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. + +</pre> +<div class="license-packages"> +Used by these packages: media-libs/mesa-9.1-r18 sys-devel/binutils-2.22-r18 sys-libs/gcc-libs-4.7.2-r4 app-admin/rsyslog-5.8.11 dev-libs/gmp-5.0.2_p1 +</div> +</div> +</div> + +<div class="product"> +<a name="MPL-2.0" class="title">Gentoo Package Stock License MPL-2.0</a> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<div class="licence"> +<pre> +Mozilla Public License Version 2.0 +================================== + +1. Definitions +-------------- + +1.1. "Contributor" + means each individual or legal entity that creates, contributes to + the creation of, or owns Covered Software. + +1.2. "Contributor Version" + means the combination of the Contributions of others (if any) used + by a Contributor and that particular Contributor's Contribution. + +1.3. "Contribution" + means Covered Software of a particular Contributor. + +1.4. "Covered Software" + means Source Code Form to which the initial Contributor has attached + the notice in Exhibit A, the Executable Form of such Source Code + Form, and Modifications of such Source Code Form, in each case + including portions thereof. + +1.5. "Incompatible With Secondary Licenses" + means + + (a) that the initial Contributor has attached the notice described + in Exhibit B to the Covered Software; or + + (b) that the Covered Software was made available under the terms of + version 1.1 or earlier of the License, but not also under the + terms of a Secondary License. + +1.6. "Executable Form" + means any form of the work other than Source Code Form. + +1.7. "Larger Work" + means a work that combines Covered Software with other material, in + a separate file or files, that is not Covered Software. + +1.8. "License" + means this document. + +1.9. "Licensable" + means having the right to grant, to the maximum extent possible, + whether at the time of the initial grant or subsequently, any and + all of the rights conveyed by this License. + +1.10. "Modifications" + means any of the following: + + (a) any file in Source Code Form that results from an addition to, + deletion from, or modification of the contents of Covered + Software; or + + (b) any new file in Source Code Form that contains any Covered + Software. + +1.11. "Patent Claims" of a Contributor + means any patent claim(s), including without limitation, method, + process, and apparatus claims, in any patent Licensable by such + Contributor that would be infringed, but for the grant of the + License, by the making, using, selling, offering for sale, having + made, import, or transfer of either its Contributions or its + Contributor Version. + +1.12. "Secondary License" + means either the GNU General Public License, Version 2.0, the GNU + Lesser General Public License, Version 2.1, the GNU Affero General + Public License, Version 3.0, or any later versions of those + licenses. + +1.13. "Source Code Form" + means the form of the work preferred for making modifications. + +1.14. "You" (or "Your") + means an individual or a legal entity exercising rights under this + License. For legal entities, "You" includes any entity that + controls, is controlled by, or is under common control with You. For + purposes of this definition, "control" means (a) the power, direct + or indirect, to cause the direction or management of such entity, + whether by contract or otherwise, or (b) ownership of more than + fifty percent (50%) of the outstanding shares or beneficial + ownership of such entity. + +2. License Grants and Conditions +-------------------------------- + +2.1. Grants + +Each Contributor hereby grants You a world-wide, royalty-free, +non-exclusive license: + +(a) under intellectual property rights (other than patent or trademark) + Licensable by such Contributor to use, reproduce, make available, + modify, display, perform, distribute, and otherwise exploit its + Contributions, either on an unmodified basis, with Modifications, or + as part of a Larger Work; and + +(b) under Patent Claims of such Contributor to make, use, sell, offer + for sale, have made, import, and otherwise transfer either its + Contributions or its Contributor Version. + +2.2. Effective Date + +The licenses granted in Section 2.1 with respect to any Contribution +become effective for each Contribution on the date the Contributor first +distributes such Contribution. + +2.3. Limitations on Grant Scope + +The licenses granted in this Section 2 are the only rights granted under +this License. No additional rights or licenses will be implied from the +distribution or licensing of Covered Software under this License. +Notwithstanding Section 2.1(b) above, no patent license is granted by a +Contributor: + +(a) for any code that a Contributor has removed from Covered Software; + or + +(b) for infringements caused by: (i) Your and any other third party's + modifications of Covered Software, or (ii) the combination of its + Contributions with other software (except as part of its Contributor + Version); or + +(c) under Patent Claims infringed by Covered Software in the absence of + its Contributions. + +This License does not grant any rights in the trademarks, service marks, +or logos of any Contributor (except as may be necessary to comply with +the notice requirements in Section 3.4). + +2.4. Subsequent Licenses + +No Contributor makes additional grants as a result of Your choice to +distribute the Covered Software under a subsequent version of this +License (see Section 10.2) or under the terms of a Secondary License (if +permitted under the terms of Section 3.3). + +2.5. Representation + +Each Contributor represents that the Contributor believes its +Contributions are its original creation(s) or it has sufficient rights +to grant the rights to its Contributions conveyed by this License. + +2.6. Fair Use + +This License is not intended to limit any rights You have under +applicable copyright doctrines of fair use, fair dealing, or other +equivalents. + +2.7. Conditions + +Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted +in Section 2.1. + +3. Responsibilities +------------------- + +3.1. Distribution of Source Form + +All distribution of Covered Software in Source Code Form, including any +Modifications that You create or to which You contribute, must be under +the terms of this License. You must inform recipients that the Source +Code Form of the Covered Software is governed by the terms of this +License, and how they can obtain a copy of this License. You may not +attempt to alter or restrict the recipients' rights in the Source Code +Form. + +3.2. Distribution of Executable Form + +If You distribute Covered Software in Executable Form then: + +(a) such Covered Software must also be made available in Source Code + Form, as described in Section 3.1, and You must inform recipients of + the Executable Form how they can obtain a copy of such Source Code + Form by reasonable means in a timely manner, at a charge no more + than the cost of distribution to the recipient; and + +(b) You may distribute such Executable Form under the terms of this + License, or sublicense it under different terms, provided that the + license for the Executable Form does not attempt to limit or alter + the recipients' rights in the Source Code Form under this License. + +3.3. Distribution of a Larger Work + +You may create and distribute a Larger Work under terms of Your choice, +provided that You also comply with the requirements of this License for +the Covered Software. If the Larger Work is a combination of Covered +Software with a work governed by one or more Secondary Licenses, and the +Covered Software is not Incompatible With Secondary Licenses, this +License permits You to additionally distribute such Covered Software +under the terms of such Secondary License(s), so that the recipient of +the Larger Work may, at their option, further distribute the Covered +Software under the terms of either this License or such Secondary +License(s). + +3.4. Notices + +You may not remove or alter the substance of any license notices +(including copyright notices, patent notices, disclaimers of warranty, +or limitations of liability) contained within the Source Code Form of +the Covered Software, except that You may alter any license notices to +the extent required to remedy known factual inaccuracies. + +3.5. Application of Additional Terms + +You may choose to offer, and to charge a fee for, warranty, support, +indemnity or liability obligations to one or more recipients of Covered +Software. However, You may do so only on Your own behalf, and not on +behalf of any Contributor. You must make it absolutely clear that any +such warranty, support, indemnity, or liability obligation is offered by +You alone, and You hereby agree to indemnify every Contributor for any +liability incurred by such Contributor as a result of warranty, support, +indemnity or liability terms You offer. You may include additional +disclaimers of warranty and limitations of liability specific to any +jurisdiction. + +4. Inability to Comply Due to Statute or Regulation +--------------------------------------------------- + +If it is impossible for You to comply with any of the terms of this +License with respect to some or all of the Covered Software due to +statute, judicial order, or regulation then You must: (a) comply with +the terms of this License to the maximum extent possible; and (b) +describe the limitations and the code they affect. Such description must +be placed in a text file included with all distributions of the Covered +Software under this License. Except to the extent prohibited by statute +or regulation, such description must be sufficiently detailed for a +recipient of ordinary skill to be able to understand it. + +5. Termination +-------------- + +5.1. The rights granted under this License will terminate automatically +if You fail to comply with any of its terms. However, if You become +compliant, then the rights granted under this License from a particular +Contributor are reinstated (a) provisionally, unless and until such +Contributor explicitly and finally terminates Your grants, and (b) on an +ongoing basis, if such Contributor fails to notify You of the +non-compliance by some reasonable means prior to 60 days after You have +come back into compliance. Moreover, Your grants from a particular +Contributor are reinstated on an ongoing basis if such Contributor +notifies You of the non-compliance by some reasonable means, this is the +first time You have received notice of non-compliance with this License +from such Contributor, and You become compliant prior to 30 days after +Your receipt of the notice. + +5.2. If You initiate litigation against any entity by asserting a patent +infringement claim (excluding declaratory judgment actions, +counter-claims, and cross-claims) alleging that a Contributor Version +directly or indirectly infringes any patent, then the rights granted to +You by any and all Contributors for the Covered Software under Section +2.1 of this License shall terminate. + +5.3. In the event of termination under Sections 5.1 or 5.2 above, all +end user license agreements (excluding distributors and resellers) which +have been validly granted by You or Your distributors under this License +prior to termination shall survive termination. + +************************************************************************ +* * +* 6. Disclaimer of Warranty * +* ------------------------- * +* * +* Covered Software is provided under this License on an "as is" * +* basis, without warranty of any kind, either expressed, implied, or * +* statutory, including, without limitation, warranties that the * +* Covered Software is free of defects, merchantable, fit for a * +* particular purpose or non-infringing. The entire risk as to the * +* quality and performance of the Covered Software is with You. * +* Should any Covered Software prove defective in any respect, You * +* (not any Contributor) assume the cost of any necessary servicing, * +* repair, or correction. This disclaimer of warranty constitutes an * +* essential part of this License. No use of any Covered Software is * +* authorized under this License except under this disclaimer. * +* * +************************************************************************ + +************************************************************************ +* * +* 7. Limitation of Liability * +* -------------------------- * +* * +* Under no circumstances and under no legal theory, whether tort * +* (including negligence), contract, or otherwise, shall any * +* Contributor, or anyone who distributes Covered Software as * +* permitted above, be liable to You for any direct, indirect, * +* special, incidental, or consequential damages of any character * +* including, without limitation, damages for lost profits, loss of * +* goodwill, work stoppage, computer failure or malfunction, or any * +* and all other commercial damages or losses, even if such party * +* shall have been informed of the possibility of such damages. This * +* limitation of liability shall not apply to liability for death or * +* personal injury resulting from such party's negligence to the * +* extent applicable law prohibits such limitation. Some * +* jurisdictions do not allow the exclusion or limitation of * +* incidental or consequential damages, so this exclusion and * +* limitation may not apply to You. * +* * +************************************************************************ + +8. Litigation +------------- + +Any litigation relating to this License may be brought only in the +courts of a jurisdiction where the defendant maintains its principal +place of business and such litigation shall be governed by laws of that +jurisdiction, without reference to its conflict-of-law provisions. +Nothing in this Section shall prevent a party's ability to bring +cross-claims or counter-claims. + +9. Miscellaneous +---------------- + +This License represents the complete agreement concerning the subject +matter hereof. If any provision of this License is held to be +unenforceable, such provision shall be reformed only to the extent +necessary to make it enforceable. Any law or regulation which provides +that the language of a contract shall be construed against the drafter +shall not be used to construe this License against a Contributor. + +10. Versions of the License +--------------------------- + +10.1. New Versions + +Mozilla Foundation is the license steward. Except as provided in Section +10.3, no one other than the license steward has the right to modify or +publish new versions of this License. Each version will be given a +distinguishing version number. + +10.2. Effect of New Versions + +You may distribute the Covered Software under the terms of the version +of the License under which You originally received the Covered Software, +or under the terms of any subsequent version published by the license +steward. + +10.3. Modified Versions + +If you create software not governed by this License, and you want to +create a new license for such software, you may create and use a +modified version of this License if you rename the license and remove +any references to the name of the license steward (except to note that +such modified license differs from this License). + +10.4. Distributing Source Code Form that is Incompatible With Secondary +Licenses + +If You choose to distribute Source Code Form that is Incompatible With +Secondary Licenses under the terms of this version of the License, the +notice described in Exhibit B of this License must be attached. + +Exhibit A - Source Code Form License Notice +------------------------------------------- + + This Source Code Form is subject to the terms of the Mozilla Public + License, v. 2.0. If a copy of the MPL was not distributed with this + file, You can obtain one at http://mozilla.org/MPL/2.0/. + +If it is not possible or desirable to put the notice in a particular +file, then You may include the notice in a location (such as a LICENSE +file in a relevant directory) where a recipient would be likely to look +for such a notice. + +You may add additional accurate notices of copyright ownership. + +Exhibit B - "Incompatible With Secondary Licenses" Notice +--------------------------------------------------------- + + This Source Code Form is "Incompatible With Secondary Licenses", as + defined by the Mozilla Public License, v. 2.0. + + +</pre> +<div class="license-packages"> +Used by these packages: dev-libs/nss-3.15.1-r3 dev-libs/nspr-4.10 +</div> +</div> +</div> + +<div class="product"> +<a name="OFL-1.1" class="title">Gentoo Package Stock License OFL-1.1</a> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<div class="licence"> +<pre> +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----- + +PREAMBLE + +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free +and open framework in which fonts may be shared and improved in +partnership with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply to +any document created using the fonts or their derivatives. + +DEFINITIONS + +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components +as distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software +to a new environment. + +"Author" refers to any designer, engineer, programmer, technical writer +or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS + +Permission is hereby granted, free of charge, to any person obtaining a +copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, in +Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or in +the appropriate machine-readable metadata fields within text or binary +files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the +corresponding Copyright Holder. This restriction only applies to the +primary font name as presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION + +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER THE FONT SOFTWARE IS PROVIDED "AS IS", +WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR +OTHER RIGHT. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR +CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF +CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE +USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. + +</pre> +<div class="license-packages"> +Used by these packages: media-fonts/ml-anjalioldlipi-0.740 media-fonts/ko-nanumfonts-3.10.0 media-fonts/my-padauk-2.50 media-fonts/crosextrafonts-carlito-20130920 media-fonts/tibt-jomolhari-0.0.3c media-fonts/lohitfonts-cros-2.5.0-r1 +</div> +</div> +</div> + +<div class="product"> +<a name="PSF-2" class="title">Gentoo Package Stock License PSF-2</a> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<div class="licence"> +<pre> +PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2 +-------------------------------------------- + +1. This LICENSE AGREEMENT is between the Python Software Foundation +("PSF"), and the Individual or Organization ("Licensee") accessing and +otherwise using this software ("Python") in source or binary form and +its associated documentation. + +2. Subject to the terms and conditions of this License Agreement, PSF hereby +grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce, +analyze, test, perform and/or display publicly, prepare derivative works, +distribute, and otherwise use Python alone or in any derivative version, +provided, however, that PSF's License Agreement and PSF's notice of copyright, +i.e., "Copyright (c) <YEARS> Python Software Foundation; All Rights Reserved" +are retained in Python alone or in any derivative version prepared by Licensee. + +3. In the event Licensee prepares a derivative work that is based on +or incorporates Python or any part thereof, and wants to make +the derivative work available to others as provided herein, then +Licensee hereby agrees to include in any such work a brief summary of +the changes made to Python. + +4. PSF is making Python available to Licensee on an "AS IS" +basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR +IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND +DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS +FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON WILL NOT +INFRINGE ANY THIRD PARTY RIGHTS. + +5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON +FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS +A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON, +OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. + +6. This License Agreement will automatically terminate upon a material +breach of its terms and conditions. + +7. Nothing in this License Agreement shall be deemed to create any +relationship of agency, partnership, or joint venture between PSF and +Licensee. This License Agreement does not grant permission to use PSF +trademarks or trade name in a trademark sense to endorse or promote +products or services of Licensee, or any third party. + +8. By copying, installing or otherwise using Python, Licensee +agrees to be bound by the terms and conditions of this License +Agreement. + +</pre> +<div class="license-packages"> +Used by these packages: dev-python/setuptools-0.6.14 dev-lang/python-2.7.3-r5 +</div> +</div> +</div> + +<div class="product"> +<a name="public-domain" class="title">Gentoo Package Stock License public-domain</a> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<div class="licence"> +<pre> +Software is in the public domain. + +</pre> +<div class="license-packages"> +Used by these packages: sys-apps/util-linux-2.21.2-r1 sys-libs/timezone-data-2013g app-arch/xz-utils-4.999.9_beta-r1 +</div> +</div> +</div> + +<div class="product"> +<a name="SGI-B-2.0" class="title">Gentoo Package Stock License SGI-B-2.0</a> +<a class="show" href="#" onclick="return toggle(this);">show license text</a> +<div class="licence"> +<pre> +SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008) + +Copyright (C) [dates of first publication] Silicon Graphics, Inc. All Rights +Reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice including the dates of first publication and either +this permission notice or a reference to http://oss.sgi.com/projects/FreeB/ +shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL SILICON +GRAPHICS, INC. BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of Silicon Graphics, Inc. shall +not be used in advertising or otherwise to promote the sale, use or other +dealings in this Software without prior written authorization from Silicon +Graphics, Inc. + +</pre> +<div class="license-packages"> +Used by these packages: media-libs/glu-9.0.0 media-libs/mesa-9.1-r18 x11-proto/glproto-1.4.14-r1 +</div> +</div> +</div> + + +<!-- Note that some packages included above are used during build, but not +shipped with ChromeOS proper /merlin --> +</body> +</html> diff --git a/chromium/chrome/browser/resources/chromeos/about_sys.css b/chromium/chrome/browser/resources/chromeos/about_sys.css new file mode 100644 index 00000000000..aca684d1dcf --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/about_sys.css @@ -0,0 +1,167 @@ +/* Copyright 2013 The Chromium Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#anchor { + display: none; +} + +body { + font-family: Arial, Helvetica, sans-serif; + font-size: 84%; + margin: 0; + min-width: 45em; + padding: 0.75em; +} + +.global-button { + margin: 1px 3px 0 3px; +} + +h1, +h2 { + font-size: 120%; + letter-spacing: -.5px; + margin: 0; +} + +h1 { + color: rgb(74, 142, 230); + font-weight: bold; + padding: 0; +} + +h2 { + -webkit-padding-end: 1em; + -webkit-padding-start: 0; + color: rgb(58, 117, 189); + display: inline-block; + font-weight: normal; + margin-top: 0; +} + +#header { + background: rgb(82, 150, 222); + background-size: 100%; + border: 1px solid rgb(58, 117, 189); + border-radius: 6px; + color: white; + margin-bottom: 0.75em; + overflow: hidden; + padding: 0.6em 1em 0.75em 0; + position: relative; + text-shadow: 0 0 2px black; +} + +html[dir='rtl'] #header { + padding: 0.6em 0 0.75em 1em; +} + +#header h1 { + -webkit-padding-start: 3em; + background: url('../../../../ui/webui/resources/images/gear.png') no-repeat; + background-position: 12px 60%; + color: white; + display: inline; + margin: 0; +} + +html[dir='rtl'] #header h1 { + background-position: right 12px top 60%; +} + +#header p { + -webkit-padding-start: 0.4em; + color: white; + display: inline; + font-size: 84%; + font-style: italic; +} + +.list { + border-collapse: collapse; + font-size: 84%; + line-height: 200%; + width: 100%; +} + +.list:not(.filtered) tr:nth-child(odd) td { + background: rgb(239, 243, 255); +} + +.list td { + font-family: 'Courier New', monospace; + line-height: 1.4em; + padding: 0 0.5em; + padding-top: 0.35em; + vertical-align: top; + white-space: pre; +} + +.list tr td:nth-last-child(1), +.list tr th:nth-last-child(1) { + -webkit-padding-end: 1em; +} + +.list:not(.filtered) .tab .name { + -webkit-padding-start: 1.5em; +} + +.list .name { + width: 20%; +} + +.list .button-cell { + width: 7%; +} + +.list .name div { + height: 1.6em; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.button-hidden { + display: none; +} + +.number-expanded, +.number-collapsed { + text-align: left; + width: 80%; +} + +html[dir='rtl'] .number-expanded, +html[dir='rtl'] .number-collapsed { + text-align: right; +} + +tr > *:nth-child(1), +tr > *:nth-child(2) { + -webkit-border-end: 1px solid rgb(181, 198, 222); +} + +.name { + background-position: 5em center; + background-repeat: no-repeat; +} + +html[dir='rtl'] #details .name { + background-position-left: auto; + background-position-right: 5em; +} + +.number-collapsed .stat-value { + display: none; +} + +.number-expanded .stat-value { + display: auto; +} + +#status { + color: rgb(255, 0, 0); + margin: .5em 0; +} diff --git a/chromium/chrome/browser/resources/chromeos/about_sys.html b/chromium/chrome/browser/resources/chromeos/about_sys.html new file mode 100644 index 00000000000..392bd366460 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/about_sys.html @@ -0,0 +1,34 @@ +<!DOCTYPE HTML> +<html i18n-values="dir:textdirection;"><head> +<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> +<title i18n-content="title"></title> +<link rel="stylesheet" href="about_sys.css"> +<script src="chrome://resources/js/util.js"></script> +<script src="chrome://resources/js/local_strings.js"></script> +<script src="about_sys.js"></script> +</head> +<body id="t"> + <div id="header"> + <h1 i18n-content="title"></h1> + <p i18n-content="description"></p> + </div> + <div id="content"> + <h2 id="tableTitle" i18n-content="tableTitle"></h2> + <div id="anchor" jscontent="anchor"></div> + <button id="expandAll" class="global-button" i18n-content="expandAllBtn"> + </button> + <button id="collapseAll" class="global-button" + i18n-content="collapseAllBtn"></button> + <p id="status"></p> + <table class="list" id="details"> + <tr jsselect="details"> + <td class="name"><div jscontent="statName"></div></td> + <td class="button-cell"><button jsvalues="id:statName + '-value-btn'" + class="expand-status"></button></td> + <td class="number"><div class="stat-value" jscontent="statValue" + jsvalues="id:statName + '-value'"></div></td> + </tr> + </table> + </div> +</body> +</html> diff --git a/chromium/chrome/browser/resources/chromeos/about_sys.js b/chromium/chrome/browser/resources/chromeos/about_sys.js new file mode 100644 index 00000000000..0bc39445f44 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/about_sys.js @@ -0,0 +1,185 @@ +// Copyright 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +var localStrings; + +// Contents of lines that act as delimiters for multi-line values. +var DELIM_START = '---------- START ----------'; +var DELIM_END = '---------- END ----------'; + +// Limit file size to 10 MiB to prevent hanging on accidental upload. +var MAX_FILE_SIZE = 10485760; + +function getValueDivForButton(button) { + return $(button.id.substr(0, button.id.length - 4)); +} + +function getButtonForValueDiv(valueDiv) { + return $(valueDiv.id + '-btn'); +} + +function handleDragOver(e) { + e.dataTransfer.dropEffect = 'copy'; + e.preventDefault(); +} + +function showError(fileName) { + $('status').textContent = localStrings.getStringF('parseError', fileName); +} + +/** + * Toggles whether an item is collapsed or expanded. + */ +function changeCollapsedStatus() { + var valueDiv = getValueDivForButton(this); + if (valueDiv.parentNode.className == 'number-collapsed') { + valueDiv.parentNode.className = 'number-expanded'; + this.textContent = localStrings.getString('collapseBtn'); + } else { + valueDiv.parentNode.className = 'number-collapsed'; + this.textContent = localStrings.getString('expandBtn'); + } +} + +/** + * Collapses all log items. + */ +function collapseAll() { + var valueDivs = document.getElementsByClassName('stat-value'); + for (var i = 0; i < valueDivs.length; i++) { + var button = getButtonForValueDiv(valueDivs[i]); + if (button && button.className != 'button-hidden') { + button.textContent = localStrings.getString('expandBtn'); + valueDivs[i].parentNode.className = 'number-collapsed'; + } + } +} + +/** + * Expands all log items. + */ +function expandAll() { + var valueDivs = document.getElementsByClassName('stat-value'); + for (var i = 0; i < valueDivs.length; i++) { + var button = getButtonForValueDiv(valueDivs[i]); + if (button && button.className != 'button-hidden') { + button.textContent = localStrings.getString('collapseBtn'); + valueDivs[i].parentNode.className = 'number-expanded'; + } + } +} + +/** + * Collapse only those log items with multi-line values. + */ +function collapseMultiLineStrings() { + var valueDivs = document.getElementsByClassName('stat-value'); + for (var i = 0; i < valueDivs.length; i++) { + var button = getButtonForValueDiv(valueDivs[i]); + button.onclick = changeCollapsedStatus; + if (valueDivs[i].textContent.split('\n').length > 1) { + button.className = ''; + button.textContent = localStrings.getString('expandBtn'); + valueDivs[i].parentNode.className = 'number-collapsed'; + } else { + button.className = 'button-hidden'; + valueDivs[i].parentNode.className = 'number'; + } + } +} + +/** + * Read in a log asynchronously, calling parseSystemLog if successful. + * @param {Event} e The drop event from dropping a file dragged onto the page. + */ +function importLog(e) { + var file = e.dataTransfer.files[0]; + if (file && file.size <= MAX_FILE_SIZE) { + var reader = new FileReader(); + reader.onload = function() { + if (parseSystemLog(this.result)) { + // Reset table title and status + $('tableTitle').textContent = + localStrings.getStringF('logFileTableTitle', file.name); + $('status').textContent = ''; + } else { + showError(file.name); + } + }; + reader.readAsText(file); + } else if (file) { + showError(file.name); + } + e.preventDefault(); +} + +/** + * Convert text-based log into list of name-value pairs. + * @param {string} text The raw text of a log. + * @return {boolean} True if the log was parsed successfully. + */ +function parseSystemLog(text) { + var details = []; + var lines = text.split('\n'); + for (var i = 0, len = lines.length; i < len; i++) { + // Skip empty lines. + if (!lines[i]) + continue; + + var delimiter = lines[i].indexOf('='); + if (delimiter <= 0) { + if (i == lines.length - 1) + break; + // If '=' is missing here, format is wrong. + return false; + } + + var name = lines[i].substring(0, delimiter); + var value = ''; + // Set value if non-empty + if (lines[i].length > delimiter + 1) + value = lines[i].substring(delimiter + 1); + + // Delimiters are based on kMultilineIndicatorString, kMultilineStartString, + // and kMultilineEndString in chrome/browser/feedback/feedback_data.cc. + // If these change, we should check for both the old and new versions. + if (value == '<multiline>') { + // Skip start delimiter. + if (i == len - 1 || + lines[++i].indexOf(DELIM_START) == -1) + return false; + + ++i; + value = ''; + // Append lines between start and end delimiters. + while (i < len && lines[i] != DELIM_END) + value += lines[i++] + '\n'; + + // Remove trailing newline. + if (value) + value = value.substr(0, value.length - 1); + } + details.push({'statName': name, 'statValue': value}); + } + + templateData['details'] = details; + i18nTemplate.process(document, templateData); + jstProcess(new JsEvalContext(templateData), $('t')); + + collapseMultiLineStrings(); + return true; +} + +document.addEventListener('DOMContentLoaded', function() { + localStrings = new LocalStrings(); + + $('collapseAll').onclick = collapseAll; + $('expandAll').onclick = expandAll; + + var tp = $('t'); + tp.addEventListener('dragover', handleDragOver, false); + tp.addEventListener('drop', importLog, false); + + collapseMultiLineStrings(); +}); diff --git a/chromium/chrome/browser/resources/chromeos/bluetooth_options.js b/chromium/chrome/browser/resources/chromeos/bluetooth_options.js new file mode 100644 index 00000000000..7ddff60c59a --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/bluetooth_options.js @@ -0,0 +1,39 @@ +// Copyright (c) 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +cr.define('options', function() { + /** @const */ var OptionsPage = options.OptionsPage; + + /** + * Encapsulated handling of the BluetoothOptions calls from + * BluetoothOptionsHandler that is registered by the webUI, + * ie, BluetoothPairingUI. + * @constructor + */ + function BluetoothOptions() { + OptionsPage.call(this, + 'bluetooth', + '', + 'bluetooth-container'); + } + + cr.addSingletonGetter(BluetoothOptions); + + BluetoothOptions.prototype = { + __proto__: OptionsPage.prototype, + + /** @override */ + initializePage: function() { + OptionsPage.prototype.initializePage.call(this); + }, + }; + + BluetoothOptions.updateDiscovery = function() { + }; + + // Export + return { + BluetoothOptions: BluetoothOptions + }; +}); diff --git a/chromium/chrome/browser/resources/chromeos/bluetooth_pair_device.css b/chromium/chrome/browser/resources/chromeos/bluetooth_pair_device.css new file mode 100644 index 00000000000..9f39b8476f1 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/bluetooth_pair_device.css @@ -0,0 +1,16 @@ +/* Copyright (c) 2013 The Chromium Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. */ + +.close-button { + display: none; +} + +#bluetooth-pairing { + border: 0; + box-shadow: none; +} + +.overlay .page h1 { + display: none; +} diff --git a/chromium/chrome/browser/resources/chromeos/bluetooth_pair_device.html b/chromium/chrome/browser/resources/chromeos/bluetooth_pair_device.html new file mode 100644 index 00000000000..dba4864f55e --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/bluetooth_pair_device.html @@ -0,0 +1,43 @@ +<!DOCTYPE HTML> +<html i18n-values="dir:textdirection"> +<head> +<meta charset="utf-8"> +<link rel="stylesheet" href="chrome://resources/css/chrome_shared.css"> +<link rel="stylesheet" href="chrome://resources/css/overlay.css"> + +<link rel="stylesheet" href="../options/options_page.css"> +<link rel="stylesheet" href="../options/chromeos/bluetooth.css"> +<link rel="stylesheet" href="bluetooth_pair_device.css"> + +<script src="chrome://resources/js/cr.js"></script> +<script src="chrome://resources/js/event_tracker.js"></script> +<script src="chrome://resources/js/cr/event_target.js"></script> +<script src="chrome://resources/js/cr/ui.js"></script> +<script src="chrome://resources/js/cr/ui/touch_handler.js"></script> +<script src="chrome://resources/js/cr/ui/array_data_model.js"></script> +<script src="chrome://resources/js/local_strings.js"></script> +<script src="chrome://resources/js/load_time_data.js"></script> +<script src="chrome://resources/js/util.js"></script> +<script src="chrome://bluetooth-pairing/strings.js"></script> + +<script src="../options/options_page.js"></script> +<script src="../options/chromeos/bluetooth_pair_device_overlay.js"></script> +<script src="../uber/uber_utils.js"></script> + +<script src="bluetooth_options.js"></script> +<script src="browser_options.js"></script> +<script src="fake_bluetooth_overlay_parent.js"></script> +<script src="bluetooth_pair_device.js"></script> +</head> + +<body i18n-values=".style.fontFamily:fontfamily;.style.fontSize:fontsize"> +<div id="overlay-container" class="overlay"> + <include src="../options/chromeos/bluetooth_pair_device_overlay.html"> +</div> +<div id="page-container"> + <div id="bluetooth-container"></div> +</div> +<div id="searchBox" hidden><input id="search-field" type=text></div> +<script src="chrome://resources/js/i18n_template2.js"></script> +</body> +</html> diff --git a/chromium/chrome/browser/resources/chromeos/bluetooth_pair_device.js b/chromium/chrome/browser/resources/chromeos/bluetooth_pair_device.js new file mode 100644 index 00000000000..da2d72ca261 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/bluetooth_pair_device.js @@ -0,0 +1,59 @@ +// Copyright (c) 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +var OptionsPage = options.OptionsPage; +var BluetoothPairing = options.BluetoothPairing; +var FakeBluetoothOverlayParent = options.FakeBluetoothOverlayParent; + +/** @override */ +OptionsPage.closeOverlay = function() { + chrome.send('DialogClose'); +}; + +/** + * Listener for the |beforeunload| event. + */ +window.onbeforeunload = function() { + OptionsPage.willClose(); +}; + +/** + * DOMContentLoaded handler, sets up the page. + */ +function load() { + if (cr.isChromeOS) + document.documentElement.setAttribute('os', 'chromeos'); + + // Decorate the existing elements in the document. + cr.ui.decorate('input[pref][type=checkbox]', options.PrefCheckbox); + cr.ui.decorate('input[pref][type=number]', options.PrefNumber); + cr.ui.decorate('input[pref][type=radio]', options.PrefRadio); + cr.ui.decorate('input[pref][type=range]', options.PrefRange); + cr.ui.decorate('select[pref]', options.PrefSelect); + cr.ui.decorate('input[pref][type=text]', options.PrefTextField); + cr.ui.decorate('input[pref][type=url]', options.PrefTextField); + + // TODO(ivankr): remove when http://crosbug.com/20660 is resolved. + var inputs = document.querySelectorAll('input[pref]'); + for (var i = 0, el; el = inputs[i]; i++) { + el.addEventListener('keyup', function(e) { + cr.dispatchSimpleEvent(this, 'change'); + }); + } + + chrome.send('coreOptionsInitialize'); + + OptionsPage.register(FakeBluetoothOverlayParent.getInstance()); + OptionsPage.registerOverlay(BluetoothPairing.getInstance(), + FakeBluetoothOverlayParent.getInstance()); + + var device = {}; + var args = JSON.parse(chrome.getVariableValue('dialogArguments')); + device = args; + device.pairing = 'bluetoothStartConnecting'; + BluetoothPairing.showDialog(device); + chrome.send('updateBluetoothDevice', [device.address, 'connect']); +} + +document.addEventListener('DOMContentLoaded', load); diff --git a/chromium/chrome/browser/resources/chromeos/browser_options.js b/chromium/chrome/browser/resources/chromeos/browser_options.js new file mode 100644 index 00000000000..de2b8f7abbf --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/browser_options.js @@ -0,0 +1,63 @@ +// Copyright (c) 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +cr.define('options', function() { + /** @const */ var OptionsPage = options.OptionsPage; + + /** + * Encapsulated handling of the BrowserOptions calls from + * BluetoothOptionsHandler that is registered by the webUI, + * ie, BluetoothPairingUI. + * @constructor + */ + function BrowserOptions() { + OptionsPage.call(this, + 'bluetooth', + '', + 'bluetooth-container'); + } + + cr.addSingletonGetter(BrowserOptions); + + BrowserOptions.prototype = { + __proto__: OptionsPage.prototype, + + /** @override */ + initializePage: function() { + OptionsPage.prototype.initializePage.call(this); + }, + }; + + BrowserOptions.showBluetoothSettings = function() { + }; + + BrowserOptions.setBluetoothState = function() { + }; + + /** + * Handles addBluetoothDevice call, display the Bluetooth pairing overlay + * for the pairing device. + * @param {{name: string, + * address: string, + * paired: boolean, + * pairing: string | undefined + * pincode: string | undefined + * passkey: number | undefined + * connected: boolean}} device + */ + BrowserOptions.addBluetoothDevice = function(device) { + // One device can be in the process of pairing. If found, display + // the Bluetooth pairing overlay. + if (device.pairing) + BluetoothPairing.showDialog(device); + }; + + BrowserOptions.removeBluetoothDevice = function(address) { + }; + + // Export + return { + BrowserOptions: BrowserOptions + }; +}); diff --git a/chromium/chrome/browser/resources/chromeos/charger_replacement.css b/chromium/chrome/browser/resources/chromeos/charger_replacement.css new file mode 100644 index 00000000000..ae3637d7c5f --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/charger_replacement.css @@ -0,0 +1,153 @@ +/* Copyright (c) 2013 The Chromium Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. */ + +body { + padding: 8px; +} + +h2 { + margin-bottom: 20px; +} + +.page { + display: none; + margin-left: 20px; + margin-right: 20px; + padding: 0; +} + +body[page='0'] #check-charger, +body[page='1'] #confirm-safe-charger { + display: block; +} +body[page='2'] #charger-update { + display: block; +} +body[page='3'] #order-charger-online { + display: block; +} +body[page='4'] #confirm-online-order { + display: block; +} +body[page='5'] #finish-not-order-charger { + display: block; +} +body[page='6'] #order-charger-offline { + display: block; +} +body[page='7'] #charger-still-bad { + display: block; +} + +.button-strip { + display: -webkit-flex; + justify-content: flex-end; + margin-top: 20px; +} + +.command-button { + width: 80px; +} + +.stop-use-recalled-charger { + font-weight: bold; +} + +.checkbox-label { + margin-left: 5px; +} + +.selected-charger { + border: 2px solid rgb(66, 129, 244); +} + +.de-selected-charger { + border: 2px solid #999; +} + +#select-device-country { + width: 270px; +} + +#charger-selection { + display: -webkit-flex; + justify-content: space-between; + margin-bottom: 25px; + margin-top: 15px; +} + +#charger-selection img { + display: block; +} + +#safe-charger-checkmark { + display: block; + margin-left: auto; + margin-right: auto; +} + +#go-with-good-charger { + margin-bottom: 30px; + text-align: center; +} + +#safe-charger-checkmark { + margin-bottom: 40px; + margin-top: 40px; +} + +#back-to-check-charger { + margin-right: 10px; +} + +#charger-order-form { + border-style: none; + height: 500px; + width: 1100px; +} + +#back-to-check-charger-from-charger-update { + margin-right: 10px; +} + +#not-order-charger-checkbox-strip { + display: -webkit-flex; + margin-left: 20px; + margin-top: 5px; +} + +#offline-content { + display: -webkit-flex; + justify-content: space-between; +} + +#offline-order-contact { + font-weight: bold; +} + +#offline-content-left { + width: 450px; +} + +#offline-content-divider { + border: 1px solid #f5f5f5; + margin-left: 30px; + margin-right: 30px; +} + +#offline-content-right { + display: -webkit-flex; + flex-direction: column; + height: 465px; + justify-content: space-between; +} + +#confirm-offline-order-checkbox-strip { + display: -webkit-flex; + flex-direction: row; +} + +#finish-still-bad-charger { + margin-top: 40px; +} diff --git a/chromium/chrome/browser/resources/chromeos/charger_replacement.html b/chromium/chrome/browser/resources/chromeos/charger_replacement.html new file mode 100644 index 00000000000..8eed8b378d5 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/charger_replacement.html @@ -0,0 +1,223 @@ +<!DOCTYPE HTML> +<html i18n-values="dir:textdirection"> +<head> +<meta charset="utf-8"> +<link rel="stylesheet" href="chrome://resources/css/chrome_shared.css"> +<link rel="stylesheet" href="charger_replacement.css"> + +<script src="chrome://resources/js/cr.js"></script> +<script src="chrome://resources/js/event_tracker.js"></script> +<script src="chrome://resources/js/cr/event_target.js"></script> +<script src="chrome://resources/js/cr/ui.js"></script> +<script src="chrome://resources/js/cr/ui/touch_handler.js"></script> +<script src="chrome://resources/js/local_strings.js"></script> +<script src="chrome://resources/js/load_time_data.js"></script> +<script src="chrome://resources/js/util.js"></script> +<script src="chrome://charger-replacement/strings.js"></script> + +<script src="../uber/uber_utils.js"></script> +<script src="charger_replacement.js"></script> + +</head> + +<body i18n-values=".style.fontFamily:fontfamily;.style.fontSize:fontsize"> + +<div id="check-charger" class="page"> + <h2 i18n-content="checkChargerTitle"></h2> + <p> + <span i18n-content="checkChargerDamage"></span><br><br> + <span i18n-content="checkOriginalCharger"></span><br> + </p> + <p i18n-content="whereDevicePurchased"></p> + <div> + <select id="select-device-country"> + <option selected="true" style="display:none;" + i18n-content="selectCountry"></option> + <option value="au" i18n-content="au"></option> + <option value="ca" i18n-content="ca"></option> + <option value="ire" i18n-content="ire"></option> + <option value="uk" i18n-content="uk"></option> + <option value="us" i18n-content="us"></option> + </select> + </div> + <div id="charger-selection-strip"> + <p i18n-content="checkChargerSelectCharger"></p> + <div id="charger-selection"> + <div id="new-charger-box" class="de-selected-charger"> + <img id="new-charger" src="images/new_charger_us.png"> + <img id="new-charger-us" src="images/new_charger_us.png" hidden> + <img id="new-charger-uk" src="images/new_charger_uk.png" hidden> + <img id="new-charger-au" src="images/new_charger_au.png" hidden> + </div> + <div id="original-charger-box" class="de-selected-charger"> + <img id="original-charger" src="images/original_charger_us.png"> + <img id="original-charger-us" src="images/original_charger_us.png" hidden> + <img id="original-charger-uk" src="images/original_charger_uk.png" hidden> + <img id="original-charger-au" src="images/original_charger_au.png" hidden> + </div> + </div> + </div> + <div class="button-strip"> + <button type="button" id="check-charger-next-step" class="command-button" + i18n-content="nextStepButtonText"></button> + </div> +</div> + +<div id="confirm-safe-charger" class="page"> + <h2 i18n-content="confirmSafeChargerTitle"></h2> + <img id="safe-charger-checkmark" src="images/safe-charger-checkmark.png"> + <p id="go-with-good-charger" i18n-content="goWithSafeCharger"></p> + <div class="button-strip"> + <button type="button" id="back-to-check-charger" + i18n-content="prevStepText" class="command-button"></button> + <button type="button" id="finish-safe-charger" + i18n-content="finishText" class="command-button"></button> + </div> +</div> + +<div id="charger-update" class="page"> + <h2 i18n-content="chargerUpdateTitle"></h2> + <p> + <span i18n-content="chargerUpdateP1"></span> + <span class="stop-use-recalled-charger" + i18n-content="stopUsingRecalledCharger"></span> + </p> + <p i18n-content="chargerUpdateP2"></p> + <p i18n-values=".innerHTML:chargerUpdateFAQ"></p> + <div> + <div class="radio"> + <input id="order-new-charger" name="order-new-charger" type="radio" + value="0"> + <label for="order-new-charger" i18n-content="orderNewCharger"></label> + </div> + <div class="radio"> + <div> + <input id="not-order-new-charger" name="order-new-charger" type="radio" + value="1"> + <label for="not-order-new-charger" i18n-content="notOrderNewCharger"> + </label> + </div> + </div> + </div> + <div id="not-order-charger-checkbox-strip"> + <div> + <input id="confirm-not-order-charger" type="checkbox"> + </div> + <div id="confirm-not-order-charger-label-strip" class="checkbox-label"> + <div> + <label for="confirm-not-order-charger" + i18n-content="confirmNotOrderNewCharger"> + </label> + </div> + <div> + <label for="confirm-not-order-charger" + i18n-content="noMoreShowText"> + </label> + </div> + </div> + </div> + <div class="button-strip"> + <button type="button" id="back-to-check-charger-from-charger-update" + i18n-content="prevStepText" class="command-button"></button> + <button type="button" id="next-to-charger-update" + i18n-content="nextStepButtonText" class="command-button"></button> + </div> + +</div> + +<div id="order-charger-online" class="page"> + <iframe id="charger-order-form"> + </iframe> +</div> + +<div id="confirm-online-order" class="page"> + <h2 i18n-content="confirmOnlineOrder"></h2> + <img id="safe-charger-checkmark" src="images/safe-charger-checkmark.png"> + <p> + <span i18n-content="confirmReceivingOnlineOrder"></span><br> + </p> + <span i18n-content="needMoreInformation"></span><br> + <a class="link" href="#" i18n-content="faqLink"></a> + <div class="button-strip"> + <button type="button" id="finish-online-order" + i18n-content="finishText" class="command-button"></button> + </div> +</div> + +<div id="finish-not-order-charger" class="page"> + <h2 i18n-content="finishNotOrderChargerTitle"></h2> + <p> + <span class="stop-use-recalled-charger" + i18n-content="stopUsingRecalledCharger"></span> + </p> + <p i18n-values=".innerHTML:finishNotOrderChargerP2"></p> + <p> + <span i18n-content="finishNotOrderChargerMoreInfo"></span> + <a class="link" href="#" i18n-content="faqLink"></a> + </p><br> + <div class="button-strip"> + <button type="button" id="finish-not-order-new-charger" + i18n-content="finishText" class="command-button"></button> + </div> +</div> + +<div id="order-charger-offline" class="page"> + <h2 i18n-content="orderChargerOfflineTitle"></h2> + <div id="offline-content"> + <div id="offline-content-left"> + <p> + <span i18n-content="offlineChargerOrderParagraph1"></span> + <span class="stop-use-recalled-charger" + i18n-content="stopUsingRecalledCharger"></span><br> + </p> + <p i18n-content="offlineChargerOrderParagraph2"></p> + <p i18n-values=".innerHTML:chargerUpdateFAQ"></p> + <p i18n-values=".innerHTML:privacyPolicy"></p> + </div> + <div id="offline-content-divider"></div> + <div id="offline-content-right"> + <div> + <p id="offline-order-contact" + i18n-content="offlineOrderPhoneNumber"></p> + </div> + <div> + <div id="confirm-offline-order-checkbox-strip"> + <div> + <input id="offline-order-confirm" type="checkbox"> + </div> + <div class="checkbox-label"> + <label for="offline-order-confirm" + i18n-content="offlineSafeChargerConfirmationText"> + </label> + </div> + </div> + <div class="button-strip"> + <button type="button" id="finish-offline-order" + i18n-content="finishText" class="command-button"></button> + </div> + </div> + </div> + </div> +</div> + +<div id="charger-still-bad" class="page"> + <h2 i18n-content="chargerStillBadTitle"></h2> + <p> + <span i18n-content="chargedOrdered"></span><br> + <span class="stop-use-recalled-charger" + i18n-content="stopUsingRecalledCharger"></span><br> + </p> + <p i18n-values=".innerHTML:chargerUpdateFAQ"></p> + <p> + <span i18n-content="findMoreInfo"></span> + <a class="link" href="#" i18n-content="faqLink"></a> + </p> + <div class="button-strip"> + <button type="button" id="finish-still-bad-charger" + i18n-content="finishText" class="command-button"></button> + </div> +</div> + +<script src="chrome://resources/js/i18n_template2.js"></script> +</body> +</html> diff --git a/chromium/chrome/browser/resources/chromeos/charger_replacement.js b/chromium/chrome/browser/resources/chromeos/charger_replacement.js new file mode 100644 index 00000000000..27004e1f45a --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/charger_replacement.js @@ -0,0 +1,375 @@ +// Copyright (c) 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +cr.define('chargerReplacement', function() { + + /** + * Enumeration of charger selection. + * @enum {int} + */ + var CHARGER_SELECTION = { + NONE: 0, + GOOD_CHARGER: 1, + ORIGINAL_CHARGER: 2 + }; + + /** + * Enumeration of html pages. + * @enum {int} + */ + var PAGES = { + CHECK_CHARGER: 0, + CONFIRM_SAFE_CHARGER: 1, + CHARGER_UPDATE: 2, + ORDER_CHARGER_ONLINE: 3, + CONFIRM_ONLINE_ORDER: 4, + FINISH_NOT_ORDER_CHARGER: 5, + ORDER_CHARGER_OFFLINE: 6, + CHARGER_STILL_BAD: 7, + }; + + /** + * Enumeration of the user's choice for order new charger or not. + */ + var USER_CHOICE_FOR_CHARGER_UPDATE = { + ORDER_NEW_CHARGER: 0, + NOT_ORDER_NEW_CHARGER: 1, + }; + + /** + * Enumeration of messages sent from iFrame order form. + */ + var ORDER_CHARGER_IFRAME_MESSAGE = { + FORM_OPEN: 'FORM_OPEN', + SUBMIT: 'SUBMIT', + SUCCESS: 'SUCCESS', + FAILURE: 'FAILURE', + LINK: 'LINK', + }; + + /** + * Enumeration of countries where user might purchase the device. + */ + var COUNTRY = { + AU: 'au', + CA: 'ca', + IRE: 'ire', + UK: 'uk', + US: 'us', + }; + + /** + * Dialog argument passed from chrome to indicate whether user has ordered + * new charger. + */ + var NEW_CHARGER_ORDERED = '1'; + + /** + * Charger order form iFrame url. + */ + var ORDER_CHARGER_IFRAME_URL = 'https://chromesafetycheck.appspot.com'; + + /** + * maximum delay in milliseconds for loading the online charger order form + * into iFrame. + */ + var ONLINE_ORDER_FORM_LOADING_DELAY = 30000; + + /** + * maximum delay in milliseconds for server to respond after user submits + * the order form. + */ + var ONLINE_ORDER_SUBMISSION_DELAY = 60000; + + /** + * urls of href links on UI. + */ + var CHARGER_FAQ_LINK = 'http://chromebook.com/hp11charger/'; + var PRIVACY_POLICY_LINK = 'http://www.google.com/policies/privacy'; + + var onlineOrderSubmitTimer; + + /** + * flag for whether the online charger order form is loaded. + */ + var isOrderFormLoaded = false; + + /** + * flag for whether user's online charger order form submission has been + * recevied by Google. True if the server responds with SUCCESSS or + * FAILURE. FAILURE indicate user has some input error in form and should + * submit again. + */ + var isOrderSubmissionReceived = false; + + /** + * charger selection by user. + */ + var chargerSelection = CHARGER_SELECTION.NONE; + + /** + * Set window the specified size and center it to screen. + */ + function setWindowSizeAndCenter(width, height) { + window.resizeTo(width, height); + window.moveTo(window.screen.width / 2 - width / 2, + window.screen.height / 2 - height / 2); + } + + /** + * Show a particular page. + */ + function showPage(page) { + switch (page) { + case PAGES.CHECK_CHARGER: + setWindowSizeAndCenter(500, 590); + break; + case PAGES.CONFIRM_SAFE_CHARGER: + setWindowSizeAndCenter(400, 325); + break; + case PAGES.CHARGER_UPDATE: + setWindowSizeAndCenter(510, 505); + $('not-order-charger-checkbox-strip').style.visibility = 'hidden'; + break; + case PAGES.ORDER_CHARGER_ONLINE: + $('charger-order-form').src = ORDER_CHARGER_IFRAME_URL; + setWindowSizeAndCenter(1150, 550); + setTimeout(checkOnlineOrderFormLoaded, ONLINE_ORDER_FORM_LOADING_DELAY); + break; + case PAGES.CONFIRM_ONLINE_ORDER: + setWindowSizeAndCenter(420, 380); + break; + case PAGES.FINISH_NOT_ORDER_CHARGER: + setWindowSizeAndCenter(430, 350); + break; + case PAGES.ORDER_CHARGER_OFFLINE: + setWindowSizeAndCenter(750, 600); + break; + case PAGES.CHARGER_STILL_BAD: + setWindowSizeAndCenter(430, 380); + break; + } + document.body.setAttribute('page', page); + } + + /** + * Select a country from the drop down list. + */ + function selectCountry() { + var country = $('select-device-country').value; + if (country == COUNTRY.US || country == COUNTRY.CA) { + $('new-charger').src = $('new-charger-us').src; + $('original-charger').src = $('original-charger-us').src; + } else if (country == COUNTRY.AU) { + $('new-charger').src = $('new-charger-au').src; + $('original-charger').src = $('original-charger-au').src; + } else { + $('new-charger').src = $('new-charger-uk').src; + $('original-charger').src = $('original-charger-uk').src; + } + $('charger-selection-strip').style.visibility = 'visible'; + } + + /** + * Toggle charger box border color based on if it is selected. + */ + function ToggleChargerSelection(charger, selected) { + charger.classList.toggle('selected-charger', selected); + charger.classList.toggle('de-selected-charger', !selected); + } + + /** + * Select a charger, either original or good charger with green sticker. + */ + function selectCharger(selection) { + if (selection == CHARGER_SELECTION.NONE) + return; + + chargerSelection = selection; + $('check-charger-next-step').disabled = false; + if (chargerSelection == CHARGER_SELECTION.GOOD_CHARGER) { + var selectedCharger = $('new-charger-box'); + var notSelectedCharger = $('original-charger-box'); + } else { + var selectedCharger = $('original-charger-box'); + var notSelectedCharger = $('new-charger-box'); + } + ToggleChargerSelection(selectedCharger, true); + ToggleChargerSelection(notSelectedCharger, false); + } + + /** + * Process the flow after user select a charger. + */ + function afterSelectCharger(dialogArg) { + if (chargerSelection == CHARGER_SELECTION.NONE) + return; + + if (chargerSelection == CHARGER_SELECTION.GOOD_CHARGER) { + showPage(PAGES.CONFIRM_SAFE_CHARGER); + } else { + if (dialogArg == NEW_CHARGER_ORDERED) + showPage(PAGES.CHARGER_STILL_BAD); + else + showPage(PAGES.CHARGER_UPDATE); + } + } + + /** + * Proceed to next step after user make the choice for charger update. + */ + function nextStepForChargerUpdate() { + var radios = document.getElementsByName('order-new-charger'); + if (radios[USER_CHOICE_FOR_CHARGER_UPDATE.ORDER_NEW_CHARGER].checked) { + if (navigator.onLine) + showPage(PAGES.ORDER_CHARGER_ONLINE); + else + showPage(PAGES.ORDER_CHARGER_OFFLINE); + } else { + showPage(PAGES.FINISH_NOT_ORDER_CHARGER); + } + } + + /** + * Update the UI after user confirms the choice for charger update. + */ + function afterUserConfirmationForChargerUpdate() { + if ($('order-new-charger').checked) { + $('not-order-charger-checkbox-strip').style.visibility = 'hidden'; + $('next-to-charger-update').disabled = false; + } else { + $('not-order-charger-checkbox-strip').style.visibility = 'visible'; + $('next-to-charger-update').disabled = + !$('confirm-not-order-charger').checked; + } + } + + /** + * Check if the online order form has been loaded in iFrame. + */ + function checkOnlineOrderFormLoaded() { + if (!isOrderFormLoaded) + showPage(PAGES.ORDER_CHARGER_OFFLINE); + } + + /** + * Check if the online charger order has been successful or not. + */ + function checkOnlineOrderSubmissionResponse() { + if (!isOrderSubmissionReceived) + showPage(PAGES.ORDER_CHARGER_OFFLINE); + } + + /** + * Handle the messages posted by the iFrame for online order form. + */ + function handleWindowMessage(e) { + if (e.origin != ORDER_CHARGER_IFRAME_URL) + return; + + var type = e.data['type']; + if (type == ORDER_CHARGER_IFRAME_MESSAGE.FORM_OPEN) { + isOrderFormLoaded = true; + } else if (type == ORDER_CHARGER_IFRAME_MESSAGE.SUBMIT) { + if (onlineOrderSubmitTimer) + clearTimeout(onlineOrderSubmitTimer); + onlineOrderSubmitTimer = setTimeout(checkOnlineOrderSubmissionResponse, + ONLINE_ORDER_SUBMISSION_DELAY); + } else if (type == ORDER_CHARGER_IFRAME_MESSAGE.SUCCESS) { + isOrderSubmissionReceived = true; + showPage(PAGES.CONFIRM_ONLINE_ORDER); + } else if (type == ORDER_CHARGER_IFRAME_MESSAGE.FAILURE) { + isOrderSubmissionReceived = true; + } else if (type == ORDER_CHARGER_IFRAME_MESSAGE.LINK) { + chrome.send('showLink', [e.data['link']]); + } + } + + /** + * Page loaded. + */ + function load() { + var dialogArg = chrome.getVariableValue('dialogArguments'); + showPage(PAGES.CHECK_CHARGER); + $('check-charger-next-step').disabled = true; + $('charger-selection-strip').style.visibility = 'hidden'; + $('order-new-charger').checked = true; + $('finish-offline-order').disabled = true; + $('check-charger-next-step').onclick = function() { + afterSelectCharger(dialogArg); + }; + $('select-device-country').onchange = function() { + selectCountry(); + }; + $('new-charger').onclick = function() { + selectCharger(CHARGER_SELECTION.GOOD_CHARGER); + }; + $('original-charger').onclick = function() { + selectCharger(CHARGER_SELECTION.ORIGINAL_CHARGER); + }; + $('back-to-check-charger').onclick = function() { + showPage(PAGES.CHECK_CHARGER); + }; + $('finish-safe-charger').onclick = function() { + chrome.send('confirmSafeCharger'); + chrome.send('DialogClose'); + }; + $('back-to-check-charger-from-charger-update').onclick = function() { + showPage(PAGES.CHECK_CHARGER); + }; + $('next-to-charger-update').onclick = function() { + nextStepForChargerUpdate(); + }; + $('order-new-charger').onclick = function() { + afterUserConfirmationForChargerUpdate(); + }; + $('not-order-new-charger').onclick = function() { + afterUserConfirmationForChargerUpdate(); + }; + $('confirm-not-order-charger').onclick = function() { + afterUserConfirmationForChargerUpdate(); + }; + $('finish-not-order-new-charger').onclick = function() { + chrome.send('confirmNotOrderNewCharger'); + chrome.send('DialogClose'); + }; + $('finish-online-order').onclick = function() { + chrome.send('confirmChargerOrderedOnline'); + chrome.send('DialogClose'); + }; + $('offline-order-confirm').onclick = function() { + $('finish-offline-order').disabled = !$('offline-order-confirm').checked; + }; + $('finish-offline-order').onclick = function() { + chrome.send('confirmChargerOrderByPhone'); + chrome.send('DialogClose'); + }; + $('finish-still-bad-charger').onclick = function() { + chrome.send('confirmStillUseBadCharger'); + chrome.send('DialogClose'); + }; + + var links = document.getElementsByClassName('link'); + for (var i = 0; i < links.length; ++i) { + if (links[i].id == 'privacy-link') { + links[i].onclick = function() { + chrome.send('showLink', [PRIVACY_POLICY_LINK]); + }; + } else { + links[i].onclick = function() { + chrome.send('showLink', [CHARGER_FAQ_LINK]); + }; + } + } + + window.addEventListener('message', handleWindowMessage); + } + + return { + load: load + }; +}); + +document.addEventListener('DOMContentLoaded', chargerReplacement.load); + diff --git a/chromium/chrome/browser/resources/chromeos/choose_mobile_network.css b/chromium/chrome/browser/resources/chromeos/choose_mobile_network.css new file mode 100644 index 00000000000..e2fb7f17b5c --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/choose_mobile_network.css @@ -0,0 +1,39 @@ +/* Copyright (c) 2012 The Chromium Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +.scanning-msg { + margin-left: 50px; +} + +.spinner { + -webkit-animation-duration: 2s; + -webkit-animation-iteration-count: infinite; + -webkit-animation-name: spin; + -webkit-animation-timing-function: linear; + background-image: -webkit-canvas(spinner-circle); + background-position: 50% 50%; + background-repeat: no-repeat; + float: left; + height: 32px; + width: 32px; +} + +.content-area { + height: 120px; + overflow: auto; +} + +.disabled { + opacity: 0.7; +} + +@-webkit-keyframes spin { + from { + -webkit-transform: rotate(0); + } + to { + -webkit-transform: rotate(360deg); + } +} diff --git a/chromium/chrome/browser/resources/chromeos/choose_mobile_network.html b/chromium/chrome/browser/resources/chromeos/choose_mobile_network.html new file mode 100644 index 00000000000..5c962ac375c --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/choose_mobile_network.html @@ -0,0 +1,43 @@ +<!DOCTYPE HTML> +<html i18n-values="dir:textdirection"> +<head> +<meta charset="utf-8"> +<title i18n-content="title"></title> +<link rel="stylesheet" href="chrome://resources/css/widgets.css"> +<link rel="stylesheet" href="mobile_dialogs.css"> +<link rel="stylesheet" href="choose_mobile_network.css"> +<script src="chrome://resources/js/cr.js"></script> +<script src="chrome://resources/js/cr/event_target.js"></script> +<script src="chrome://resources/js/local_strings.js"></script> +<script src="chrome://resources/js/util.js"></script> +<script src="chrome://choose-mobile-network/strings.js"></script> +<script src="chrome://choose-mobile-network/choose_mobile_network.js"></script> +</head> +<body i18n-values=".style.fontFamily:fontfamily;"> + <div id="container" class="container"> + <div id="choose-mobile-network" class="dialog"> + <h1 i18n-content="chooseNetworkTitle"></h1> + <div id="scanning" class="content-area"> + <div id="spinner" class="spinner"></div> + <div class="scanning-msg" i18n-content="scanningMsgLine1"></div> + <div class="scanning-msg" i18n-content="scanningMsgLine2"></div> + </div> + <div id="choosing" class="content-area" hidden> + </div> + <div id="no-mobile-networks" class="content-area" hidden> + <div class="scanning-msg" i18n-content="noMobileNetworks"></div> + </div> + <div class="action-area"> + <div class="action-area-right"> + <div class="button-strip"> + <button id="cancel" i18n-content="cancel"></button> + <button id="connect" i18n-content="connect" ></button> + </div> + </div> + </div> + </div> + </div> + <script src="chrome://resources/js/i18n_template.js"></script> + <script src="chrome://resources/js/i18n_process.js"></script> +</body> +</html> diff --git a/chromium/chrome/browser/resources/chromeos/choose_mobile_network.js b/chromium/chrome/browser/resources/chromeos/choose_mobile_network.js new file mode 100644 index 00000000000..caf8339130a --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/choose_mobile_network.js @@ -0,0 +1,129 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +cr.define('mobile', function() { + + function ChooseNetwork() { + } + + cr.addSingletonGetter(ChooseNetwork); + + ChooseNetwork.prototype = { + networks_: [], + showNetworks_: function(networks) { + this.networks_ = networks; + + if (networks.length == 0) { + $('scanning').hidden = true; + $('choosing').hidden = true; + $('no-mobile-networks').hidden = false; + return; + } + + var container = $('choosing'); + container.innerHTML = ''; + for (var i in networks) { + var elem = document.createElement('div'); + elem.innerHTML = + '<input type="radio" name="network" id="network' + i + '" />' + + '<label for="network' + i + '" id="label' + i + '"></label>'; + container.appendChild(elem); + $('label' + i).textContent = networks[i].operatorName; + if (networks[i].status == 'current') { + $('network' + i).checked = true; + $('connect').disabled = false; + } else if (networks[i].status == 'forbidden') { + $('network' + i).disabled = true; + elem.className = 'disabled'; + } else { + $('network' + i).addEventListener('click', function(event) { + $('connect').disabled = false; + }); + } + } + $('scanning').hidden = true; + $('choosing').hidden = false; + $('no-mobile-networks').hidden = true; + }, + connect_: function() { + for (var i in this.networks_) { + if ($('network' + i).checked) { + chrome.send('connect', [this.networks_[i].networkId]); + ChooseNetwork.close(); + return; + } + } + }, + showScanning_: function() { + $('scanning').hidden = false; + $('choose').hidden = true; + $('no-mobile-networks').hidden = true; + } + }; + + ChooseNetwork.cancel = function() { + chrome.send('cancel'); + ChooseNetwork.close(); + }; + + ChooseNetwork.close = function() { + window.close(); + }; + + ChooseNetwork.connect = function() { + ChooseNetwork.getInstance().connect_(); + }; + + ChooseNetwork.showScanning = function() { + ChooseNetwork.getInstance().showScanning_(); + }; + + ChooseNetwork.initialize = function() { + $('cancel').addEventListener('click', function(event) { + ChooseNetwork.cancel(); + }); + + $('connect').disabled = true; + $('connect').addEventListener('click', function(event) { + ChooseNetwork.connect(); + }); + chrome.send('pageReady'); + }; + + ChooseNetwork.showNetworks = function(networks) { + ChooseNetwork.getInstance().showNetworks_(networks); + }; + + // Export + return { + ChooseNetwork: ChooseNetwork + }; +}); + +var ChooseNetwork = mobile.ChooseNetwork; + +document.addEventListener('DOMContentLoaded', function() { + // TODO(dpolukhin): refactor spinner code&css to be reusable. + // Setup css canvas 'spinner-circle' + (function() { + var lineWidth = 3; + var r = 8; + var ctx = document.getCSSCanvasContext( + '2d', 'spinner-circle', 2 * r, 2 * r); + + ctx.lineWidth = lineWidth; + ctx.lineCap = 'round'; + ctx.lineJoin = 'round'; + + ctx.strokeStyle = '#4e73c7'; + ctx.beginPath(); + ctx.moveTo(lineWidth / 2, r - lineWidth / 2); + ctx.arc(r, r, r - lineWidth / 2, Math.PI, Math.PI * 3 / 2); + ctx.stroke(); + })(); + + ChooseNetwork.initialize(); +}); + +disableTextSelectAndDrag(); diff --git a/chromium/chrome/browser/resources/chromeos/chromevox/manifest.json b/chromium/chrome/browser/resources/chromeos/chromevox/manifest.json new file mode 100644 index 00000000000..ec4957cf24e --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/chromevox/manifest.json @@ -0,0 +1,38 @@ +{ + // NOTE: Keep two json files in this directory in sync. The only difference + // should be incognito:split in Guest mode version. + "key": "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDltVl1k15pjRzuZfMc3B69inxwm2bZeZ2O8/zFO+NluHnBm3GJ3fzdOoFGJd+M16I8p7zxxQyHeDMfWYASyCeB8XnUEDKjqNLQfCnncsANzHsYoEbYj2nEUML2P13b9q+AAvpCBpAJ4cZp81e9n1y/vbSXHE4385cgkKueItzikQIDAQAB", + "manifest_version": 2, + "name": "ChromeVox", + "version": "1.0", + "description": "ChromeVox - Giving Voice to Chrome.", + "background": { + "page": "chromevox/background/background.html" + }, + "permissions": [ + "bookmarks", + "tabs", + "experimental", + "history", + "tts", + "systemPrivate", + "brailleDisplayPrivate", + "<all_urls>" + ], + "content_scripts": [ + { + "matches": [ "<all_urls>" ], + "all_frames": true, + "js": [ + "chromeVoxChromePageScript.js" + ] + } + ], + "web_accessible_resources": [ + "chromevox/injected/api.js", + "chromevox/injected/api_util.js", + "chromevox/injected/mathjax.js", + "chromevox/injected/mathjax_external_util.js" + ], + "default_locale": "en" +} diff --git a/chromium/chrome/browser/resources/chromeos/chromevox/manifest_guest.json b/chromium/chrome/browser/resources/chromeos/chromevox/manifest_guest.json new file mode 100644 index 00000000000..95c9e14c83f --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/chromevox/manifest_guest.json @@ -0,0 +1,39 @@ +{ + // NOTE: Keep two json files in this directory in sync. The only difference + // should be incognito:split in Guest mode version. + "key": "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDltVl1k15pjRzuZfMc3B69inxwm2bZeZ2O8/zFO+NluHnBm3GJ3fzdOoFGJd+M16I8p7zxxQyHeDMfWYASyCeB8XnUEDKjqNLQfCnncsANzHsYoEbYj2nEUML2P13b9q+AAvpCBpAJ4cZp81e9n1y/vbSXHE4385cgkKueItzikQIDAQAB", + "manifest_version": 2, + "name": "ChromeVox", + "version": "1.0", + "description": "ChromeVox - Giving Voice to Chrome.", + "incognito": "split", + "background": { + "page": "chromevox/background/background.html" + }, + "permissions": [ + "bookmarks", + "tabs", + "experimental", + "history", + "tts", + "systemPrivate", + "brailleDisplayPrivate", + "<all_urls>" + ], + "content_scripts": [ + { + "matches": [ "<all_urls>" ], + "all_frames": true, + "js": [ + "chromeVoxChromePageScript.js" + ] + } + ], + "web_accessible_resources": [ + "chromevox/injected/api.js", + "chromevox/injected/api_util.js", + "chromevox/injected/mathjax.js", + "chromevox/injected/mathjax_external_util.js" + ], + "default_locale": "en" +} diff --git a/chromium/chrome/browser/resources/chromeos/connectivity_diagnostics/OWNERS b/chromium/chrome/browser/resources/chromeos/connectivity_diagnostics/OWNERS new file mode 100644 index 00000000000..b03ccb6c472 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/connectivity_diagnostics/OWNERS @@ -0,0 +1,4 @@ +dpolukhin@chromium.org +ebeach@chromium.org +xiaowenx@chromium.org +zork@chromium.org diff --git a/chromium/chrome/browser/resources/chromeos/connectivity_diagnostics/manifest.json b/chromium/chrome/browser/resources/chromeos/connectivity_diagnostics/manifest.json new file mode 100644 index 00000000000..76fdcf9121c --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/connectivity_diagnostics/manifest.json @@ -0,0 +1,52 @@ +{ + "key": "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDGJWLUb83WKoDeODlrPIZu60M8bzbvrkg3Jf/5aO3ux2FL+G+/BO4Vyt/J0t8lXBtnTOvHo6KPpA042PyE9xMdlufFnJqEkvPXNzRlBWeVQqFHbMWE6o/x8diG69dNmHyFYcUjjFFDk2X2GOLQXNUGJQ6MIikbdzoWdLGttmhAIwIDAQAB", + "manifest_version": 2, + "name": "Connectivity Diagnostics", + "version": "1.1.0", + "minimum_chrome_version": "29", + "offline_enabled": true, + "default_locale": "en", + "icons": { + "128": "img/icon_128.png", + "16": "img/icon_16.png" + }, + "permissions" : [ + { "socket" : [ + "tcp-connect:*:443", + "tcp-connect:*:80", + "tcp-connect:*:25", + "tcp-connect:*:19302", + "tcp-connect:*:19303", + "tcp-connect:*:19304", + "tcp-connect:*:19305", + "tcp-connect:*:19306", + "tcp-connect:*:19307", + "tcp-connect:*:19308", + "tcp-connect:*:19309", + "udp-bind:*", + "udp-send-to:*:19302", + "udp-send-to:*:19303", + "udp-send-to:*:19304", + "udp-send-to:*:19305", + "udp-send-to:*:19306", + "udp-send-to:*:19307", + "udp-send-to:*:19308", + "udp-send-to:*:19309" + ]}, + "clipboardWrite", + "experimental", + "dns", + "diagnostics", + "metricsPrivate", + "networkingPrivate", + "http://*.google.com/*", + "https://*.google.com/*" + ], + "app": { + "background": { + "scripts": ["background.js"] + } + }, + "display_in_launcher": false, + "display_in_new_tab_page": false +} diff --git a/chromium/chrome/browser/resources/chromeos/connectivity_diagnostics_launcher/manifest.json b/chromium/chrome/browser/resources/chromeos/connectivity_diagnostics_launcher/manifest.json new file mode 100644 index 00000000000..6dd5276c36b --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/connectivity_diagnostics_launcher/manifest.json @@ -0,0 +1,11 @@ +{ + "key": "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDOg+/GcwTYomV06ymtKpD08+M7qjbINqbvPUT/+RFdGm30vVIWivqIrFuiXr+h8d77yTUHcpkRa4LEMulsG2Q44SWfWhBZOVnohsu/OUdHKZ+nw82Q0G+4jjkVOz3/AvUBCBwBaL90Jn05hockJriLAvNUWKLheirw58BVzF9z9wIDAQAB", + "manifest_version": 2, + "name": "NCDLauncher", + "version": "1", + "minimum_chrome_version": "27", + "offline_enabled": true, + "incognito": "split", + "web_accessible_resources": ["index.html"] +} + diff --git a/chromium/chrome/browser/resources/chromeos/crosh_builtin/manifest.json b/chromium/chrome/browser/resources/chromeos/crosh_builtin/manifest.json new file mode 100644 index 00000000000..c8bec38bb21 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/crosh_builtin/manifest.json @@ -0,0 +1,18 @@ +{ + "key": "AAAAB3NzaC1yc2EAAAADAQABAAAAgQDtKfIKWzC4HnQbyAeddk5h78K7LSyrIEnLKDsQCNxhfsavJ+otV9JprDSz3nF7EHZokXiC72SHxdMndt2IlId/aRfhbU4UGidrmFBKg6v1Fs2zey6niB+xLOhJQMe9XtwVNWDpiGXHLmwNhG/FLhj0bBBf1HZDBV18Xp47ymLiuQ==", + "name": "crosh_builtin", + "manifest_version": 2, + "content_security_policy": "script-src 'self'; object-src 'self'", + "version": "0.8.22", + "default_locale": "en", + "description": "Built-in terminal for crosh.", + "offline_enabled": true, + "incognito": "split", + "permissions": [ + "clipboardRead", + "clipboardWrite", + "unlimitedStorage", + "storage", + "terminalPrivate" + ] +} diff --git a/chromium/chrome/browser/resources/chromeos/cryptohome.html b/chromium/chrome/browser/resources/chromeos/cryptohome.html new file mode 100644 index 00000000000..cab0ac0660c --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/cryptohome.html @@ -0,0 +1,48 @@ +<!DOCTYPE HTML> +<html> + <head> + <title>About Cryptohome</title> + <meta charset="utf-8"> + <script src="chrome://resources/js/util.js"></script> + <script src="chrome://cryptohome/cryptohome.js"></script> + </head> + <body> + <div id="refresh-message"> + (To auto-refresh this page: about:cryptohome/<secs>) + </div> + <h3>Cryptohome:</h3> + <table> + <tr> + <td>IsMounted</td> + <td id="is-mounted"></td> + </tr> + <tr> + <td>TpmIsReady</td> + <td id="tpm-is-ready"></td> + </tr> + <tr> + <td>TpmIsEnabled</td> + <td id="tpm-is-enabled"></td> + </tr> + <tr> + <td>TpmIsOwned</td> + <td id="tpm-is-owned"></td> + </tr> + <tr> + <td>TpmIsBeingOwned</td> + <td id="tpm-is-being-owned"></td> + </tr> + <tr> + <td>Pkcs11IsTpmTokenReady</td> + <td id="pkcs11-is-tpm-token-ready"></td> + </tr> + </table> + <h3>crypto:</h3> + <table> + <tr> + <td>IsTPMTokenReady</td> + <td id="is-tpm-token-ready"></td> + </tr> + </table> + </body> +</html> diff --git a/chromium/chrome/browser/resources/chromeos/cryptohome.js b/chromium/chrome/browser/resources/chromeos/cryptohome.js new file mode 100644 index 00000000000..40b172045b0 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/cryptohome.js @@ -0,0 +1,26 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** + * Sets |value| to the element specified by |destination_id|. + * Called from C++ code as a result of RequestCryptohomeProperty() call. + * @param {string} destination_id Id of the element to be modified. + * @param {string} value The value to be set. + */ +function SetCryptohomeProperty(destination_id, value) { + $(destination_id).textContent = value; +} + +document.addEventListener('DOMContentLoaded', function() { + // Request update. + chrome.send('pageLoaded'); + + // Auto-refresh when interval is given as pathname. + var interval = parseInt(window.location.pathname.split('/')[1]); + if (interval > 0) { + $('refresh-message').textContent = + '(Auto-refreshing page every ' + interval + 's)'; + setTimeout(function() { window.location.reload(true); }, interval * 1000); + } +}); diff --git a/chromium/chrome/browser/resources/chromeos/detected_sd.png b/chromium/chrome/browser/resources/chromeos/detected_sd.png Binary files differnew file mode 100644 index 00000000000..fe3cf300c20 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/detected_sd.png diff --git a/chromium/chrome/browser/resources/chromeos/detected_usb.png b/chromium/chrome/browser/resources/chromeos/detected_usb.png Binary files differnew file mode 100644 index 00000000000..653613e1f83 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/detected_usb.png diff --git a/chromium/chrome/browser/resources/chromeos/drive_internals.css b/chromium/chrome/browser/resources/chromeos/drive_internals.css new file mode 100644 index 00000000000..b14b68fe8d5 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/drive_internals.css @@ -0,0 +1,28 @@ +/* Copyright (c) 2012 The Chromium Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#gcache-contents { + font-size: small; +} + +#file-system-contents { + font-size: small; +} + +#cache-contents { + font-size: small; +} + +.log-error { + color: red; + font-weight: bolder; +} + +.log-warning { + color: red; +} + +.log-info { +} diff --git a/chromium/chrome/browser/resources/chromeos/drive_internals.html b/chromium/chrome/browser/resources/chromeos/drive_internals.html new file mode 100644 index 00000000000..a85d7b1ca72 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/drive_internals.html @@ -0,0 +1,140 @@ +<!DOCTYPE HTML> +<html> + <head> + <title>drive-internals</title> + <meta charset="utf-8"> + <link rel="stylesheet" href="drive_internals.css"> + <script src="chrome://resources/js/util.js"></script> + <script src="chrome://drive-internals/drive_internals.js"></script> + </head> + <body> + <h1>Drive Internals</h1> + <ul id='toc'></ul> + + <h2 id='connection-status-section'>Connection Status</h2> + <ul> + <li> + Status: <span id='connection-status'></span> + </li> + <li> + Has refresh token: <span id='has-refresh-token'></span> + <button id='button-clear-refresh-token'>clear</button> + </li> + <li> + Has access token: <span id='has-access-token'></span> + <button id='button-clear-access-token'>clear</button> + </li> + </ul> + + <h2 id='account-information-section'>Account Information</h2> + <ul> + <li>Remote Changestamp: + <span id='account-largest-changestamp-remote'></span> + </li> + <li>Quota Information: <span id='account-quota-info'></span></li> + <li>Root Resource Id: <span id='root-resource-id'></span></li> + </ul> + + <h2 id='local-metadata-section'>Local Metadata</h2> + <div> + <button id='button-reload-drive-filesystem'> + Clear local data and reload + </button> + <span id='reload-status-text'></span> + </div> + <ul> + <li>Local Changestamp: + <span id='account-largest-changestamp-local'></span> + </li> + <li>Local Free Space: + <span id='local-storage-freespace'></span> MB + </li> + </ul> + + <h2 id='delta-update-status-section'>Delta Update Status</h2> + <ul> + <li>Push notification is enabled: + <span id='push-notification-enabled'></span></li> + <li>Last update check time: + <span id='last-update-check-time'></span></li> + <li>Last update check result: + <span id='last-update-check-error'></span></li> + </ul> + + <h2 id='in-flight-operations-section'>In-flight Operations</h2> + <table> + <tbody id='in-flight-operations-contents'> + <tr> + <th>ID</th> + <th>Type</th> + <th>File Path</th> + <th>State</th> + <th>Progress</th> + </tr> + </tbody> + </table> + + <h2 id='file-system-contents-section'>File System Contents</h2> + <button id='button-show-file-entries'>Show</button> + <div id='file-system-contents'></div> + + <h2 id='gcache-contents-section'>GCache Contents</h2> + <table> + <tbody id='gcache-contents'> + <tr> + <th>Path</th> + <th>Size</th> + <th>Last Modified</th> + <th>Permission</th> + </tr> + </tbody> + </table> + + <ul> + <li> + Total Size: + <span id='gcache-summary-total-size'>(calculating...)</span> MB. + </li> + </ul> + + <h2 id='cache-contents-section'>Cache Contents</h2> + <table> + <tbody id='cache-contents'> + <tr> + <th>Local ID</th> + <th>MD5</th> + <th>Present</th> + <th>Pinned</th> + <th>Dirty</th> + </tr> + </tbody> + </table> + + <h2 id='drive-related-flags-section'>Drive related Flags</h2> + <ul id='drive-related-flags'> + </ul> + + <h2 id='drive-related-preferences-section'>Drive related Preferences</h2> + <ul id='drive-related-preferences'> + </ul> + + <h2 id='app-list-section'>Application List</h2> + <ul> + <li>ETag: <span id='app-list-etag'></span></li> + </ul> + <table> + <tbody id='app-list-items'> + <tr> + <th>App Name</th> + <th>App ID</th> + <th>Object Type</th> + <th>Support Create</th> + </tr> + </tbody> + </table> + + <h2 id='event-log-section'>Event Log</h2> + <ul id='event-log'> + </ul> + </body> +</html> diff --git a/chromium/chrome/browser/resources/chromeos/drive_internals.js b/chromium/chrome/browser/resources/chromeos/drive_internals.js new file mode 100644 index 00000000000..d83fb352d4c --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/drive_internals.js @@ -0,0 +1,300 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** + * Converts a number in bytes to a string in megabytes split by comma into + * three digit block. + * @param {number} bytes The number in bytes. + * @return {string} Formatted string in megabytes. + */ +function ToMegaByteString(bytes) { + var mb = Math.floor(bytes / (1 << 20)); + return mb.toString().replace( + /\d+?(?=(\d{3})+$)/g, // Digit sequence (\d+) followed (?=) by 3n digits. + function(three_digit_block) { return three_digit_block + ','; } + ); +} + +/** + * Updates the Drive related Flags section. + * @param {Array} flags List of dictionaries describing flags. + */ +function updateDriveRelatedFlags(flags) { + var ul = $('drive-related-flags'); + updateKeyValueList(ul, flags); +} + +/** + * Updates the Drive related Preferences section. + * @param {Array} preferences List of dictionaries describing preferences. + */ +function updateDriveRelatedPreferences(preferences) { + var ul = $('drive-related-preferences'); + updateKeyValueList(ul, preferences); +} + +/** + * Updates the Connection Status section. + * @param {Object} connStatus Dictionary containing connection status. + */ +function updateConnectionStatus(connStatus) { + $('connection-status').textContent = connStatus['status']; + $('has-refresh-token').textContent = connStatus['has-refresh-token']; + $('has-access-token').textContent = connStatus['has-access-token']; +} + +/** + * Updates the GCache Contents section. + * @param {Array} gcacheContents List of dictionaries describing metadata + * of files and directories under the GCache directory. + * @param {Object} gcacheSummary Dictionary of summary of GCache. + */ +function updateGCacheContents(gcacheContents, gcacheSummary) { + var tbody = $('gcache-contents'); + for (var i = 0; i < gcacheContents.length; i++) { + var entry = gcacheContents[i]; + var tr = document.createElement('tr'); + + // Add some suffix based on the type. + var path = entry.path; + if (entry.is_directory) + path += '/'; + else if (entry.is_symbolic_link) + path += '@'; + + tr.appendChild(createElementFromText('td', path)); + tr.appendChild(createElementFromText('td', entry.size)); + tr.appendChild(createElementFromText('td', entry.last_modified)); + tr.appendChild(createElementFromText('td', entry.permission)); + tbody.appendChild(tr); + } + + $('gcache-summary-total-size').textContent = + ToMegaByteString(gcacheSummary['total_size']); +} + +/** + * Updates the File System Contents section. The function is called from the + * C++ side repeatedly with contents of a directory. + * @param {string} directoryContentsAsText Pre-formatted string representation + * of contents a directory in the file system. + */ +function updateFileSystemContents(directoryContentsAsText) { + var div = $('file-system-contents'); + div.appendChild(createElementFromText('pre', directoryContentsAsText)); +} + +/** + * Updates the Cache Contents section. + * @param {Object} cacheEntry Dictionary describing a cache entry. + * The function is called from the C++ side repeatedly. + */ +function updateCacheContents(cacheEntry) { + var tr = document.createElement('tr'); + tr.appendChild(createElementFromText('td', cacheEntry.local_id)); + tr.appendChild(createElementFromText('td', cacheEntry.md5)); + tr.appendChild(createElementFromText('td', cacheEntry.is_present)); + tr.appendChild(createElementFromText('td', cacheEntry.is_pinned)); + tr.appendChild(createElementFromText('td', cacheEntry.is_dirty)); + + $('cache-contents').appendChild(tr); +} + +/** + * Updates the Local Storage summary. + * @param {Object} localStorageSummary Dictionary describing the status of local + * stogage. + */ +function updateLocalStorageUsage(localStorageSummary) { + var freeSpaceInMB = ToMegaByteString(localStorageSummary.free_space); + $('local-storage-freespace').innerText = freeSpaceInMB; +} + +/** + * Updates the summary about in-flight operations. + * @param {Array} inFlightOperations List of dictionaries describing the status + * of in-flight operations. + */ +function updateInFlightOperations(inFlightOperations) { + var container = $('in-flight-operations-contents'); + + // Reset the table. Remove children in reverse order. Otherwides each + // existingNodes[i] changes as a side effect of removeChild. + var existingNodes = container.childNodes; + for (var i = existingNodes.length - 1; i >= 0; i--) { + var node = existingNodes[i]; + if (node.className == 'in-flight-operation') + container.removeChild(node); + } + + // Add in-flight operations. + for (var i = 0; i < inFlightOperations.length; i++) { + var operation = inFlightOperations[i]; + var tr = document.createElement('tr'); + tr.className = 'in-flight-operation'; + tr.appendChild(createElementFromText('td', operation.id)); + tr.appendChild(createElementFromText('td', operation.type)); + tr.appendChild(createElementFromText('td', operation.file_path)); + tr.appendChild(createElementFromText('td', operation.state)); + var progress = operation.progress_current + '/' + operation.progress_total; + if (operation.progress_total > 0) { + var percent = operation.progress_current / operation.progress_total * 100; + progress += ' (' + Math.round(percent) + '%)'; + } + tr.appendChild(createElementFromText('td', progress)); + + container.appendChild(tr); + } +} + +/** + * Updates the summary about about resource. + * @param {Object} aboutResource Dictionary describing about resource. + */ +function updateAboutResource(aboutResource) { + var quotaTotalInMb = ToMegaByteString(aboutResource['account-quota-total']); + var quotaUsedInMb = ToMegaByteString(aboutResource['account-quota-used']); + + $('account-quota-info').textContent = + quotaUsedInMb + ' / ' + quotaTotalInMb + ' (MB)'; + $('account-largest-changestamp-remote').textContent = + aboutResource['account-largest-changestamp-remote']; + $('root-resource-id').textContent = aboutResource['root-resource-id']; +} + +/** + * Updates the summary about app list. + * @param {Object} appList Dictionary describing app list. + */ +function updateAppList(appList) { + $('app-list-etag').textContent = appList['etag']; + + var itemContainer = $('app-list-items'); + for (var i = 0; i < appList['items'].length; i++) { + var app = appList['items'][i]; + var tr = document.createElement('tr'); + tr.className = 'installed-app'; + tr.appendChild(createElementFromText('td', app.name)); + tr.appendChild(createElementFromText('td', app.application_id)); + tr.appendChild(createElementFromText('td', app.object_type)); + tr.appendChild(createElementFromText('td', app.supports_create)); + + itemContainer.appendChild(tr); + } +} + +/** + * Updates the local cache information about account metadata. + * @param {Object} localMetadata Dictionary describing account metadata. + */ +function updateLocalMetadata(localMetadata) { + var changestamp = localMetadata['account-largest-changestamp-local']; + + $('account-largest-changestamp-local').textContent = + changestamp.toString() + + (changestamp > 0 ? ' (loaded)' : ' (not loaded)') + + (localMetadata['account-metadata-refreshing'] ? ' (refreshing)' : ''); +} + +/** + * Updates the summary about delta update status. + * @param {Object} deltaUpdateStatus Dictionary describing delta update status. + */ +function updateDeltaUpdateStatus(deltaUpdateStatus) { + $('push-notification-enabled').textContent = + deltaUpdateStatus['push-notification-enabled']; + $('last-update-check-time').textContent = + deltaUpdateStatus['last-update-check-time']; + $('last-update-check-error').textContent = + deltaUpdateStatus['last-update-check-error']; +} + +/** + * Updates the event log section. + * @param {Array} log Array of events. + */ +function updateEventLog(log) { + var ul = $('event-log'); + updateKeyValueList(ul, log); +} + +/** + * Creates an element named |elementName| containing the content |text|. + * @param {string} elementName Name of the new element to be created. + * @param {string} text Text to be contained in the new element. + * @return {HTMLElement} The newly created HTML element. + */ +function createElementFromText(elementName, text) { + var element = document.createElement(elementName); + element.appendChild(document.createTextNode(text)); + return element; +} + +/** + * Updates <ul> element with the given key-value list. + * @param {HTMLElement} ul <ul> element to be modified. + * @param {Array} list List of dictionaries containing 'key', 'value' (optional) + * and 'class' (optional). For each element <li> element with specified class is + * created. + */ +function updateKeyValueList(ul, list) { + for (var i = 0; i < list.length; i++) { + var item = list[i]; + var text = item.key; + if (item.value != '') + text += ': ' + item.value; + + var li = createElementFromText('li', text); + if (item.class) + li.classList.add(item.class); + ul.appendChild(li); + } +} + +/** + * Updates the text next to the 'reload' button to update the status. + * @param {boolean} success whether or not reloading has succeeded. + */ +function updateReloadStatus(success) { + $('reload-status-text').textContent = (success ? 'success' : 'failed'); +} + +document.addEventListener('DOMContentLoaded', function() { + chrome.send('pageLoaded'); + + // Update the table of contents. + var toc = $('toc'); + var sections = document.getElementsByTagName('h2'); + for (var i = 0; i < sections.length; i++) { + var section = sections[i]; + var a = createElementFromText('a', section.textContent); + a.href = '#' + section.id; + var li = document.createElement('li'); + li.appendChild(a); + toc.appendChild(li); + } + + $('button-clear-access-token').addEventListener('click', function() { + chrome.send('clearAccessToken'); + }); + + $('button-clear-refresh-token').addEventListener('click', function() { + chrome.send('clearRefreshToken'); + }); + + $('button-reload-drive-filesystem').addEventListener('click', function() { + $('reload-status-text').textContent = 'reloading...'; + chrome.send('reloadDriveFileSystem'); + }); + + $('button-show-file-entries').addEventListener('click', function() { + var button = $('button-show-file-entries'); + button.parentNode.removeChild(button); + chrome.send('listFileEntries'); + }); + + window.setInterval(function() { + chrome.send('periodicUpdate'); + }, 1000); +}); diff --git a/chromium/chrome/browser/resources/chromeos/echo/OWNERS b/chromium/chrome/browser/resources/chromeos/echo/OWNERS new file mode 100644 index 00000000000..d3a0e8fc658 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/echo/OWNERS @@ -0,0 +1,2 @@ +gauravsh@chromium.org +jorgelo@chromium.org diff --git a/chromium/chrome/browser/resources/chromeos/echo/manifest.json b/chromium/chrome/browser/resources/chromeos/echo/manifest.json new file mode 100644 index 00000000000..17b0dcd774d --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/echo/manifest.json @@ -0,0 +1,33 @@ +{ + // chrome-extension://kddnkjkcjddckihglkfcickdhbmaodcn/ + "key": "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCvO/P4dVdpUZlr+oT5s3ccPIOIxZl6fOch+sqcQWsROKNf+mvKZURGnVts8ttHH4oRt2+LW3I2M5PrkW9Q6ZPkOX5ZQFFuD7ujPSaUn8+Br5lC5TtlXsNzp1r+962Qaa1d8zCocwF/IZ+9M5bt61LUJ6Obe8lw+NRnC6CS6DuiewIDAQAB", + "name": "Chrome OS ECHO Extension", + "version": "1.0.0", + "description": "Chrome OS ECHO Extension", + "manifest_version": 2, + "content_security_policy": "default-src 'self'; connect-src 'self' https://chromeos-registration.googleapis.com", + "permissions": [ + "alarms", + "cookies", + "chromeosInfoPrivate", + "echoPrivate", + "experimental", // TODO(andycai) remove this. + "notifications", + "https://*/*" + ], + "icons": { + "16": "chrome16.png", + "32": "chrome32.png", + "128": "chrome128.png" + }, + "default_locale": "en", + "web_accessible_resources": [ + "broker.html", + "broker.js", + "not-eligible.html" + ], + "background": { + "scripts": ["main.js"], + "persistent": false + } +} diff --git a/chromium/chrome/browser/resources/chromeos/fake_bluetooth_overlay_parent.js b/chromium/chrome/browser/resources/chromeos/fake_bluetooth_overlay_parent.js new file mode 100644 index 00000000000..eb154bb458b --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/fake_bluetooth_overlay_parent.js @@ -0,0 +1,37 @@ +// Copyright (c) 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +cr.define('options', function() { + var OptionsPage = options.OptionsPage; + + /** + * Encapsulated a fake parent page for bluetooth overlay page used by Web UI. + * @constructor + */ + function FakeBluetoothOverlayParent(model) { + OptionsPage.call(this, 'bluetooth', + '', + 'bluetooth-container'); + } + + cr.addSingletonGetter(FakeBluetoothOverlayParent); + + FakeBluetoothOverlayParent.prototype = { + // Inherit FakeBluetoothOverlayParent from OptionsPage. + __proto__: OptionsPage.prototype, + + /** + * Initializes FakeBluetoothOverlayParent page. + */ + initializePage: function() { + // Call base class implementation to starts preference initialization. + OptionsPage.prototype.initializePage.call(this); + }, + }; + + // Export + return { + FakeBluetoothOverlayParent: FakeBluetoothOverlayParent + }; +}); diff --git a/chromium/chrome/browser/resources/chromeos/first_run/OWNERS b/chromium/chrome/browser/resources/chromeos/first_run/OWNERS new file mode 100644 index 00000000000..df660f70946 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/first_run/OWNERS @@ -0,0 +1 @@ +dzhioev@chromium.org diff --git a/chromium/chrome/browser/resources/chromeos/first_run/app/background.js b/chromium/chrome/browser/resources/chromeos/first_run/app/background.js new file mode 100644 index 00000000000..08cb158f78e --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/first_run/app/background.js @@ -0,0 +1,16 @@ +// Copyright 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +chrome.app.runtime.onLaunched.addListener(function() { + chrome.app.window.create('main.html', { + 'bounds': { + 'width': 800, + 'height': 555 + }, + 'frame': 'none', + 'resizable': false, + }, function(appWindow) { + appWindow.contentWindow.appWindow = appWindow; + }); +}); diff --git a/chromium/chrome/browser/resources/chromeos/first_run/app/greeting_image_disabled.html b/chromium/chrome/browser/resources/chromeos/first_run/app/greeting_image_disabled.html new file mode 100644 index 00000000000..8b137891791 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/first_run/app/greeting_image_disabled.html @@ -0,0 +1 @@ + diff --git a/chromium/chrome/browser/resources/chromeos/first_run/app/greeting_image_enabled.html b/chromium/chrome/browser/resources/chromeos/first_run/app/greeting_image_enabled.html new file mode 100644 index 00000000000..9b05da5eb66 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/first_run/app/greeting_image_enabled.html @@ -0,0 +1,5 @@ +<div style="background-image: url(chrome://theme/IDR_FIRST_RUN_GREETING); + display: inline-block; + height: 235px; + width: 662px;"> +</div> diff --git a/chromium/chrome/browser/resources/chromeos/first_run/app/icon/128.png b/chromium/chrome/browser/resources/chromeos/first_run/app/icon/128.png Binary files differnew file mode 100644 index 00000000000..a3006d82c96 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/first_run/app/icon/128.png diff --git a/chromium/chrome/browser/resources/chromeos/first_run/app/icon/16.png b/chromium/chrome/browser/resources/chromeos/first_run/app/icon/16.png Binary files differnew file mode 100644 index 00000000000..8d9df98773a --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/first_run/app/icon/16.png diff --git a/chromium/chrome/browser/resources/chromeos/first_run/app/icon/256.png b/chromium/chrome/browser/resources/chromeos/first_run/app/icon/256.png Binary files differnew file mode 100644 index 00000000000..3f807f522fd --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/first_run/app/icon/256.png diff --git a/chromium/chrome/browser/resources/chromeos/first_run/app/icon/32.png b/chromium/chrome/browser/resources/chromeos/first_run/app/icon/32.png Binary files differnew file mode 100644 index 00000000000..ff6cf2aae5e --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/first_run/app/icon/32.png diff --git a/chromium/chrome/browser/resources/chromeos/first_run/app/icon/48.png b/chromium/chrome/browser/resources/chromeos/first_run/app/icon/48.png Binary files differnew file mode 100644 index 00000000000..7efbb11c7c3 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/first_run/app/icon/48.png diff --git a/chromium/chrome/browser/resources/chromeos/first_run/app/icon/64.png b/chromium/chrome/browser/resources/chromeos/first_run/app/icon/64.png Binary files differnew file mode 100644 index 00000000000..77bc3db6127 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/first_run/app/icon/64.png diff --git a/chromium/chrome/browser/resources/chromeos/first_run/app/icon/96.png b/chromium/chrome/browser/resources/chromeos/first_run/app/icon/96.png Binary files differnew file mode 100644 index 00000000000..14f1ea1156a --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/first_run/app/icon/96.png diff --git a/chromium/chrome/browser/resources/chromeos/first_run/app/main.html b/chromium/chrome/browser/resources/chromeos/first_run/app/main.html new file mode 100644 index 00000000000..0810b76d957 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/first_run/app/main.html @@ -0,0 +1,42 @@ +<!doctype html> +<html i18n-values="dir:textdirection;.style.fontFamily:fontfamily;"> + <head> + <meta charset=utf-8> + <title></title> + <link rel="stylesheet" href="chrome://resources/css/widgets.css"> + <link rel="stylesheet" href="chrome://resources/css/apps/common.css"> + <link rel="stylesheet" href="chrome://resources/css/apps/topbutton_bar.css"> + <link rel="stylesheet" href="../step.css"> + <link rel="stylesheet" href="style.css"> + <script src="chrome://resources/js/load_time_data.js"></script> + <script src="chrome://resources/js/util.js"></script> + <script src="chrome://resources/js/i18n_template_no_process.js"></script> + <script src="main.js"></script> + </head> + <body> + <div id="greeting" class="step dialog"> + <div class="window-header"> + <div class="topbutton-bar"> + <div class="topbutton-wrapper"> + <button class="custom-appearance close-button" + i18n-values="aria-label:closeButton" tabindex="1"> + </button> + </div> + </div> + </div> + <h1 i18n-content="greetingHeader"></h1> + <p> + <span i18n-content="greetingText1"></span><br> + <span i18n-content="greetingText2"></span> + </p> + <div class="controls"> + <div class="margin-top"></div> + <button i18n-content="greetingButton" + class="next-button custom-appearance blue-button" tabindex="0"> + </button> + <div class="margin-bottom"></div> + </div> + <include src="greeting_image_[GREETING_IMAGE].html"> + </div> + </body> +</html> diff --git a/chromium/chrome/browser/resources/chromeos/first_run/app/main.js b/chromium/chrome/browser/resources/chromeos/first_run/app/main.js new file mode 100644 index 00000000000..5b7c1d14601 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/first_run/app/main.js @@ -0,0 +1,33 @@ +// Copyright 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** + * Global wallpaperManager reference useful for poking at from the console. + */ +var wallpaperManager; + +function init() { + chrome.firstRunPrivate.getLocalizedStrings(function(strings) { + loadTimeData.data = strings; + i18nTemplate.process(document, loadTimeData); + }); + var content = $('greeting'); + var closeButton = content.getElementsByClassName('close-button')[0]; + // Make close unfocusable by mouse. + closeButton.addEventListener('mousedown', function(e) { + e.preventDefault(); + }); + closeButton.addEventListener('click', function(e) { + appWindow.close(); + e.stopPropagation(); + }); + var tutorialButton = content.getElementsByClassName('next-button')[0]; + tutorialButton.addEventListener('click', function(e) { + chrome.firstRunPrivate.launchTutorial(); + appWindow.close(); + e.stopPropagation(); + }); +} + +document.addEventListener('DOMContentLoaded', init); diff --git a/chromium/chrome/browser/resources/chromeos/first_run/app/manifest.json b/chromium/chrome/browser/resources/chromeos/first_run/app/manifest.json new file mode 100644 index 00000000000..e5f65829405 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/first_run/app/manifest.json @@ -0,0 +1,28 @@ +{ + // chrome-extension://jdgcneonijmofocbhmijhacgchbihela/ + "key":"MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvlKjREBX57nx8lzBezbhiWwYg7mqHinPeP8qTV8d1AqusVAimI1BiZSDTKqFQGFvZAadYhHK3AIXDpEJ4MwHIPv/UIbqEwqPyKlDELNzsxaxrKVHv2BIuvWwabN2W5QLwbIFH/aQEm1+IN2QiNRl6Xjp2aG1RKz15cSif6qWKTMhsHDfF2lx875PJ9t504eacbMfJ8cyZHTZ8VzYRUCZuQANyPDtrGtspe9jwReJZ581UCuZBMpaWARcPkVY7PvFd8SEYysGHJ/NqdsyOyBtaO2wvGTInoDXWay5S0r9BnT6WX9DMiv2QyMF7FmgcO7IQk2j0mrUQbrtc7oc9yySmQIDAQAB", + "name": "Welcome", + "version": "0.1", + "manifest_version": 2, + "icons": { + "16": "icon/16.png", + "32": "icon/32.png", + "48": "icon/48.png", + "64": "icon/64.png", + "96": "icon/96.png", + "128": "icon/128.png", + "256": "icon/256.png" + }, + "app": { + "background": { + "scripts": ["background.js"] + }, + "content_security_policy": "default-src 'none'; script-src 'self' chrome://resources; style-src 'self' 'unsafe-inline' chrome://resources; img-src 'self' chrome://theme chrome://resources" + }, + "permissions": [ + "firstRunPrivate", + "chrome://theme/", + "chrome://resources/" + ], + "display_in_launcher": false +} diff --git a/chromium/chrome/browser/resources/chromeos/first_run/app/style.css b/chromium/chrome/browser/resources/chromeos/first_run/app/style.css new file mode 100644 index 00000000000..33cce94564b --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/first_run/app/style.css @@ -0,0 +1,78 @@ +/** + * Copyright 2013 The Chromium Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +body { + margin: 0; + padding: 0; +} + +.step.dialog { + align-items: center; + display: flex; + flex-direction: column; + height: 475px; + padding: 40px; + text-align: center; + width: 720px; +} + +.step.dialog h1 { + font-size: 30px; + margin-bottom: 16px; + margin-top: 0; +} + +.step.dialog p { + font-size: 15px; + margin-bottom: 0; +} + +.step.dialog .controls { + display: flex; + flex-direction: column; + flex-grow: 1; +} + +.step.dialog .controls .margin-top { + flex-grow: 8; +} + +.step.dialog .controls .margin-bottom { + flex-grow: 5; +} + +.step.dialog .controls button { + font-size: 12px; + min-width: 0; + padding: 0 35px; + text-shadow: 0 1px 0 rgba(0, 0, 0, 0.3); +} + +.step.dialog .window-header { + -webkit-app-region: drag; + display: block; + left: 0; + position: absolute; + right: 0; + top: 0; +} + +.step.dialog .topbutton-bar { + display: block; + margin-top: 10px; +} + +.step.dialog .topbutton-wrapper { + -webkit-padding-end: 10px; + display: flex; + justify-content: flex-end; +} + +.step.dialog .topbutton-bar button { + -webkit-app-region: no-drag; + -webkit-margin-end: 0; + display: inline; +} diff --git a/chromium/chrome/browser/resources/chromeos/first_run/app_list_step.html b/chromium/chrome/browser/resources/chromeos/first_run/app_list_step.html new file mode 100644 index 00000000000..bdc51ce99fc --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/first_run/app_list_step.html @@ -0,0 +1,11 @@ +<div id="app-list" class="step bubble transparent hidden"> + <h1 i18n-content="appListHeader"></h1> + <p> + <span i18n-content="appListText1"></span><br> + <span i18n-content="appListText2"></span> + </p> + <div class="controls"> + <button i18n-content="nextButton" + class="next-button custom-appearance blue-button"></button> + </div> +</div> diff --git a/chromium/chrome/browser/resources/chromeos/first_run/background.svg b/chromium/chrome/browser/resources/chromeos/first_run/background.svg new file mode 100644 index 00000000000..befcbb35a91 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/first_run/background.svg @@ -0,0 +1,14 @@ +<div id="background-container" class="transparent"> + <svg id="background" xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink"> + <defs> + <rect id="rectangular-hole-pattern" class="hole transparent"/> + <circle id="round-hole-pattern" class="hole transparent"/> + <mask id="mask" maskUnits="objectBoundingBox" + maskContentUnits="userSpaceOnUse"> + <rect width="100%" height="100%" fill="white"/> + </mask> + </defs> + <rect class="fill" width="100%" height="100%" mask="url(#mask)"/> + </svg> +</div> diff --git a/chromium/chrome/browser/resources/chromeos/first_run/bubble.css b/chromium/chrome/browser/resources/chromeos/first_run/bubble.css new file mode 100644 index 00000000000..7c11c0ebac9 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/first_run/bubble.css @@ -0,0 +1,51 @@ +/** + * Copyright 2013 The Chromium Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +.bubble .arrow { + border: solid transparent; + border-width: 6px; + content: ' '; + height: 0; + pointer-events: none; + position: absolute; + width: 0; +} + +.bubble .arrow.points-up { + border-bottom-color: white; + bottom: 100%; +} + +.bubble .arrow.points-right { + border-left-color: white; + left: 100%; +} + +.bubble .arrow.points-down { + border-top-color: white; + top: 100%; +} + +.bubble .arrow.points-left { + border-right-color: white; + right: 100%; +} + +.bubble .arrow.top { + top: 12px; +} + +.bubble .arrow.right { + right: 12px; +} + +.bubble .arrow.bottom { + bottom: 12px; +} + +.bubble .arrow.left { + left: 12px; +} diff --git a/chromium/chrome/browser/resources/chromeos/first_run/first_run.css b/chromium/chrome/browser/resources/chromeos/first_run/first_run.css new file mode 100644 index 00000000000..c0ef61881dc --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/first_run/first_run.css @@ -0,0 +1,76 @@ +/** + * Copyright 2013 The Chromium Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +[hidden] { + display: none !important; +} + +html, +body { + margin: 0; + padding: 0; +} + +body { + background-color: rgba(0, 0, 0, 0); + cursor: default; + height: 100%; + overflow: hidden; + position: fixed; + width: 100%; +} + +.transparent { + opacity: 0; +} + +.show-animated, +.hide-animated { + transition-property: opacity; +} + +.show-animated { + transition-function: ease-in; +} + +.hide-animated { + transition-function: ease-out; +} + +#background-container { + height: 100%; + left: 0; + position: absolute; + top: 0; + width: 100%; + z-index: -1; +} + +#background { + height: 100%; + position: absolute; + width: 100%; +} + +#background .fill { + fill: rgba(0, 0, 0, 0.5); +} + +#steps { + align-items: center; + display: flex; + flex-flow: row; + height: 100%; + justify-content: center; + width: 100%; +} + +#help #completion-image { + background-image: url('chrome://theme/IDR_FIRST_RUN_COMPLETION'); + display: inline-block; + height: 153px; + width: 400px; +} diff --git a/chromium/chrome/browser/resources/chromeos/first_run/first_run.html b/chromium/chrome/browser/resources/chromeos/first_run/first_run.html new file mode 100644 index 00000000000..b7735c6b9af --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/first_run/first_run.html @@ -0,0 +1,29 @@ +<!doctype html> +<html i18n-values="dir:textdirection;shelf:shelfAlignment;.style.fontFamily:fontfamily;"> + <head> + <meta charset=utf-8> + <title></title> + <link rel="stylesheet" href="chrome://resources/css/widgets.css"> + <link rel="stylesheet" href="chrome://resources/css/apps/common.css"> + <link rel="stylesheet" href="bubble.css"> + <link rel="stylesheet" href="first_run.css"> + <link rel="stylesheet" href="step.css"> + <link rel="stylesheet" href="step_bubble.css"> + <script src="chrome://resources/js/cr.js"></script> + <script src="chrome://resources/js/cr/ui.js"></script> + <script src="chrome://resources/js/load_time_data.js"></script> + <script src="chrome://resources/js/util.js"></script> + <script src="chrome://first-run/first_run.js"></script> + <script src="chrome://first-run/strings.js"></script> + </head> + <body> + <include src="background.svg"> + <div id="steps"> + <include src="app_list_step.html"> + <include src="tray_step.html"> + <include src="help_step.html"> + </div> + <script src="chrome://resources/js/i18n_template2.js"></script> + </body> +</html> + diff --git a/chromium/chrome/browser/resources/chromeos/first_run/first_run.js b/chromium/chrome/browser/resources/chromeos/first_run/first_run.js new file mode 100644 index 00000000000..10ba74bb3e5 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/first_run/first_run.js @@ -0,0 +1,275 @@ +// Copyright 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** + * @fileoverview First run UI. + */ + +<include src="step.js"> + +// Transitions durations. +/** @const */ var DEFAULT_TRANSITION_DURATION_MS = 400; +/** @const */ var BG_TRANSITION_DURATION_MS = 800; + +/** + * Changes visibility of element with animated transition. + * @param {Element} element Element which visibility should be changed. + * @param {boolean} visible Whether element should be visible after transition. + * @param {number=} opt_transitionDuration Time length of transition in + * milliseconds. Default value is DEFAULT_TRANSITION_DURATION_MS. + * @param {function()=} opt_onFinished Called after transition has finished. + */ +function changeVisibility( + element, visible, opt_transitionDuration, opt_onFinished) { + var classes = element.classList; + // If target visibility is the same as current element visibility. + if (classes.contains('transparent') === !visible) { + if (opt_onFinished) + opt_onFinished(); + return; + } + var transitionDuration = (opt_transitionDuration === undefined) ? + cr.FirstRun.getDefaultTransitionDuration() : opt_transitionDuration; + var style = element.style; + var oldDurationValue = style.getPropertyValue('transition-duration'); + style.setProperty('transition-duration', transitionDuration + 'ms'); + var transition = visible ? 'show-animated' : 'hide-animated'; + classes.add(transition); + classes.toggle('transparent'); + element.addEventListener('webkitTransitionEnd', function f() { + element.removeEventListener('webkitTransitionEnd', f); + classes.remove(transition); + if (oldDurationValue) + style.setProperty('transition-duration', oldDurationValue); + else + style.removeProperty('transition-duration'); + if (opt_onFinished) + opt_onFinished(); + }); + ensureTransitionEndEvent(element, transitionDuration); +} + +cr.define('cr.FirstRun', function() { + return { + // Whether animated transitions are enabled. + transitionsEnabled_: false, + + // SVG element representing UI background. + background_: null, + + // Container for background. + backgroundContainer_: null, + + // Mask element describing transparent "holes" in background. + mask_: null, + + // Pattern used for creating rectangular holes. + rectangularHolePattern_: null, + + // Pattern used for creating round holes. + roundHolePattern_: null, + + // Dictionary keeping all available tutorial steps by their names. + steps_: {}, + + // Element representing step currently shown for user. + currentStep_: null, + + /** + * Initializes internal structures and preparing steps. + */ + initialize: function() { + disableTextSelectAndDrag(); + this.transitionsEnabled_ = loadTimeData.getBoolean('transitionsEnabled'); + this.background_ = $('background'); + this.backgroundContainer_ = $('background-container'); + this.mask_ = $('mask'); + this.rectangularHolePattern_ = $('rectangular-hole-pattern'); + this.rectangularHolePattern_.removeAttribute('id'); + this.roundHolePattern_ = $('round-hole-pattern'); + this.roundHolePattern_.removeAttribute('id'); + var stepElements = document.getElementsByClassName('step'); + for (var i = 0; i < stepElements.length; ++i) { + var step = stepElements[i]; + cr.FirstRun.DecorateStep(step); + this.steps_[step.getName()] = step; + } + this.setBackgroundVisible(true, function() { + chrome.send('initialized'); + }); + }, + + /** + * Hides all elements and background. + */ + finalize: function() { + // At first we hide holes (job 1) and current step (job 2) simultaneously, + // then background. + var jobsLeft = 2; + var onJobDone = function() { + --jobsLeft; + if (jobsLeft) + return; + this.setBackgroundVisible(false, function() { + chrome.send('finalized'); + }); + }.bind(this); + this.doHideCurrentStep_(function(name) { + if (name) + chrome.send('stepHidden', [name]); + onJobDone(); + }); + this.removeHoles(onJobDone); + }, + + /** + * Adds transparent rectangular hole to background. + * @param {number} x X coordinate of top-left corner of hole. + * @param {number} y Y coordinate of top-left corner of hole. + * @param {number} widht Width of hole. + * @param {number} height Height of hole. + */ + addRectangularHole: function(x, y, width, height) { + var hole = this.rectangularHolePattern_.cloneNode(); + hole.setAttribute('x', x); + hole.setAttribute('y', y); + hole.setAttribute('width', width); + hole.setAttribute('height', height); + this.mask_.appendChild(hole); + setTimeout(function() { + changeVisibility(hole, true); + }, 0); + }, + + /** + * Adds transparent round hole to background. + * @param {number} x X coordinate of circle center. + * @param {number} y Y coordinate of circle center. + * @param {number} radius Radius of circle. + */ + addRoundHole: function(x, y, radius) { + var hole = this.roundHolePattern_.cloneNode(); + hole.setAttribute('cx', x); + hole.setAttribute('cy', y); + hole.setAttribute('r', radius); + this.mask_.appendChild(hole); + setTimeout(function() { + changeVisibility(hole, true); + }, 0); + }, + + /** + * Removes all holes previously added by |addHole|. + * @param {function=} opt_onHolesRemoved Called after all holes have been + * hidden. + */ + removeHoles: function(opt_onHolesRemoved) { + var mask = this.mask_; + var holes = Array.prototype.slice.call( + mask.getElementsByClassName('hole')); + var holesLeft = holes.length; + if (!holesLeft) { + if (opt_onHolesRemoved) + opt_onHolesRemoved(); + return; + } + holes.forEach(function(hole) { + changeVisibility(hole, false, this.getDefaultTransitionDuration(), + function() { + mask.removeChild(hole); + --holesLeft; + if (!holesLeft && opt_onHolesRemoved) + opt_onHolesRemoved(); + }); + }.bind(this)); + }, + + /** + * Hides currently active step and notifies chrome after step has been + * hidden. + */ + hideCurrentStep: function() { + assert(this.currentStep_); + this.doHideCurrentStep_(function(name) { + chrome.send('stepHidden', [name]); + }); + }, + + /** + * Hides currently active step. + * @param {function(string)=} opt_onStepHidden Called after step has been + * hidden. + */ + doHideCurrentStep_: function(opt_onStepHidden) { + if (!this.currentStep_) { + if (opt_onStepHidden) + opt_onStepHidden(); + return; + } + var name = this.currentStep_.getName(); + this.currentStep_.hide(true, function() { + this.currentStep_ = null; + if (opt_onStepHidden) + opt_onStepHidden(name); + }.bind(this)); + }, + + /** + * Shows step with given name in given position. + * @param {string} name Name of step. + * @param {object} position Optional parameter with optional fields |top|, + * |right|, |bottom|, |left| used for step positioning. + * @param {Array} pointWithOffset Optional parameter for positioning + * bubble. Contains [x, y, offset], where (x, y) - point to which bubble + * points, offset - distance between arrow and point. + */ + showStep: function(name, position, pointWithOffset) { + assert(!this.currentStep_); + if (!this.steps_.hasOwnProperty(name)) + throw Error('Step "' + name + '" not found.'); + var step = this.steps_[name]; + if (position) + step.setPosition(position); + if (pointWithOffset) + step.setPointsTo(pointWithOffset.slice(0, 2), pointWithOffset[2]); + step.show(true, function(step) { + step.focusDefaultControl(); + this.currentStep_ = step; + chrome.send('stepShown', [name]); + }.bind(this)); + }, + + /** + * Sets visibility of the background. + * @param {boolean} visibility Whether background should be visible. + * @param {function()=} opt_onCompletion Called after visibility has + * changed. + */ + setBackgroundVisible: function(visible, opt_onCompletion) { + changeVisibility(this.backgroundContainer_, visible, + this.getBackgroundTransitionDuration(), opt_onCompletion); + }, + + /** + * Returns default duration of animated transitions, in ms. + */ + getDefaultTransitionDuration: function() { + return this.transitionsEnabled_ ? DEFAULT_TRANSITION_DURATION_MS : 0; + }, + + /** + * Returns duration of transitions of background shield, in ms. + */ + getBackgroundTransitionDuration: function() { + return this.transitionsEnabled_ ? BG_TRANSITION_DURATION_MS : 0; + } + }; +}); + +/** + * Initializes UI. + */ +window.onload = function() { + cr.FirstRun.initialize(); +}; diff --git a/chromium/chrome/browser/resources/chromeos/first_run/help_step.html b/chromium/chrome/browser/resources/chromeos/first_run/help_step.html new file mode 100644 index 00000000000..0888d15e159 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/first_run/help_step.html @@ -0,0 +1,15 @@ +<div id="help" class="step bubble transparent hidden"> + <div id="completion-image"></div> + <h1 i18n-content="helpHeader"></h1> + <p i18n-content="helpText1"></p> + <p> + <span i18n-content="helpText2"></span><br> + <span i18n-content="helpText3"></span> + </p> + <div class="controls"> + <button i18n-content="helpKeepExploringButton" + class="help-button custom-appearance blue-button"></button> + <button i18n-content="helpFinishButton" + class="next-button custom-appearance white-button"></button> + </div> +</div> diff --git a/chromium/chrome/browser/resources/chromeos/first_run/step.css b/chromium/chrome/browser/resources/chromeos/first_run/step.css new file mode 100644 index 00000000000..52e424eeb3e --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/first_run/step.css @@ -0,0 +1,40 @@ +/** + * Copyright 2013 The Chromium Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +.step { + background: white; + color: #8c8c8c; + padding: 0; +} + +.step h1 { + color: #333; + font-weight: normal; +} + +.step p { + line-height: 1.5; +} + +.step button.blue-button { + color: white; +} + +.step button.white-button { + color: black; +} + +.step .controls button { + margin: 0 3px; +} + +.step .controls button:first-of-type { + -webkit-margin-start: 0; +} + +.step .controls button:last-of-type { + -webkit-margin-end: 0; +} diff --git a/chromium/chrome/browser/resources/chromeos/first_run/step.js b/chromium/chrome/browser/resources/chromeos/first_run/step.js new file mode 100644 index 00000000000..213ea27c02e --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/first_run/step.js @@ -0,0 +1,300 @@ +// Copyright 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** + * Prototype for first-run tutorial steps. + */ + +cr.define('cr.FirstRun', function() { + var Step = cr.ui.define('div'); + + Step.prototype = { + __proto__: HTMLDivElement.prototype, + + // Name of step. + name_: null, + + // Button leading to next tutorial step. + nextButton_: null, + + // Default control for this step. + defaultControl_: null, + + decorate: function() { + this.name_ = this.getAttribute('id'); + var controlsContainer = this.getElementsByClassName('controls')[0]; + if (!controlsContainer) + throw Error('Controls not found.'); + this.nextButton_ = + controlsContainer.getElementsByClassName('next-button')[0]; + if (!this.nextButton_) + throw Error('Next button not found.'); + this.nextButton_.addEventListener('click', (function(e) { + chrome.send('nextButtonClicked', [this.getName()]); + e.stopPropagation(); + }).bind(this)); + this.defaultControl_ = controlsContainer.children[0]; + }, + + /** + * Returns name of the string. + */ + getName: function() { + return this.name_; + }, + + /** + * Hides the step. + * @param {boolean} animated Whether transition should be animated. + * @param {function()=} opt_onHidden Called after step has been hidden. + */ + hide: function(animated, opt_onHidden) { + var transitionDuration = + animated ? cr.FirstRun.getDefaultTransitionDuration() : 0; + changeVisibility(this, + false, + transitionDuration, + function() { + this.classList.add('hidden'); + if (opt_onHidden) + opt_onHidden(); + }.bind(this)); + }, + + /** + * Shows the step. + * @param {boolean} animated Whether transition should be animated. + * @param {function(Step)=} opt_onShown Called after step has been shown. + */ + show: function(animated, opt_onShown) { + var transitionDuration = + animated ? cr.FirstRun.getDefaultTransitionDuration() : 0; + this.classList.remove('hidden'); + changeVisibility(this, + true, + transitionDuration, + function() { + if (opt_onShown) + opt_onShown(this); + }.bind(this)); + }, + + /** + * Sets position of the step. + * @param {object} position Parameter with optional fields |top|, + * |right|, |bottom|, |left| holding corresponding offsets. + */ + setPosition: function(position) { + var style = this.style; + ['top', 'right', 'bottom', 'left'].forEach(function(property) { + if (position.hasOwnProperty(property)) + style.setProperty(property, position[property] + 'px'); + }); + }, + + /** + * Makes default control focused. Default control is a first control in + * current implementation. + */ + focusDefaultControl: function() { + this.defaultControl_.focus(); + }, + }; + + var Bubble = cr.ui.define('div'); + + // List of rules declaring bubble's arrow position depending on text direction + // and shelf alignment. Every rule has required field |position| with list + // of classes that should be applied to arrow element if this rule choosen. + // The rule is suitable if its |shelf| and |dir| fields are correspond + // to current shelf alignment and text direction. Missing fields behaves like + // '*' wildcard. The last suitable rule in list is choosen for arrow style. + var ARROW_POSITION = { + 'app-list': [ + { + position: ['points-down', 'left'] + }, + { + dir: 'rtl', + position: ['points-down', 'right'] + }, + { + shelf: 'left', + position: ['points-left', 'top'] + }, + { + shelf: 'right', + position: ['points-right', 'top'] + } + ], + 'tray': [ + { + position: ['points-right', 'top'] + }, + { + dir: 'rtl', + shelf: 'bottom', + position: ['points-left', 'top'] + }, + { + shelf: 'left', + position: ['points-left', 'top'] + } + ], + 'help': [ + { + position: ['points-right', 'bottom'] + }, + { + dir: 'rtl', + shelf: 'bottom', + position: ['points-left', 'bottom'] + }, + { + shelf: 'left', + position: ['points-left', 'bottom'] + } + ] + }; + + var DISTANCE_TO_POINTEE = 10; + var MINIMAL_SCREEN_OFFSET = 10; + var ARROW_LENGTH = 6; // Keep synced with .arrow border-width. + + Bubble.prototype = { + __proto__: Step.prototype, + + // Element displaying arrow. + arrow_: null, + + // Unit vector directed along the bubble arrow. + direction_: null, + + /** + * In addition to base class 'decorate' this method creates arrow and + * sets some properties related to arrow. + */ + decorate: function() { + Step.prototype.decorate.call(this); + this.arrow_ = document.createElement('div'); + this.arrow_.classList.add('arrow'); + this.appendChild(this.arrow_); + var inputDirection = document.documentElement.getAttribute('dir'); + var shelfAlignment = document.documentElement.getAttribute('shelf'); + var isSuitable = function(rule) { + var inputDirectionMatch = !rule.hasOwnProperty('dir') || + rule.dir === inputDirection; + var shelfAlignmentMatch = !rule.hasOwnProperty('shelf') || + rule.shelf === shelfAlignment; + return inputDirectionMatch && shelfAlignmentMatch; + }; + var lastSuitableRule = null; + var rules = ARROW_POSITION[this.getName()]; + rules.forEach(function(rule) { + if (isSuitable(rule)) + lastSuitableRule = rule; + }); + assert(lastSuitableRule); + lastSuitableRule.position.forEach(function(cls) { + this.arrow_.classList.add(cls); + }.bind(this)); + var list = this.arrow_.classList; + if (list.contains('points-up')) + this.direction_ = [0, -1]; + else if (list.contains('points-right')) + this.direction_ = [1, 0]; + else if (list.contains('points-down')) + this.direction_ = [0, 1]; + else // list.contains('points-left') + this.direction_ = [-1, 0]; + }, + + /** + * Sets position of bubble in such a maner that bubble's arrow points to + * given point. + * @param {Array} point Bubble arrow should point to this point after + * positioning. |point| has format [x, y]. + * @param {offset} number Additional offset from |point|. + */ + setPointsTo: function(point, offset) { + var shouldShowBefore = this.hidden; + // "Showing" bubble in order to make offset* methods work. + if (shouldShowBefore) { + this.style.setProperty('opacity', '0'); + this.show(false); + } + var arrow = [this.arrow_.offsetLeft + this.arrow_.offsetWidth / 2, + this.arrow_.offsetTop + this.arrow_.offsetHeight / 2]; + var totalOffset = DISTANCE_TO_POINTEE + offset; + var left = point[0] - totalOffset * this.direction_[0] - arrow[0]; + var top = point[1] - totalOffset * this.direction_[1] - arrow[1]; + // Force bubble to be inside screen. + if (this.arrow_.classList.contains('points-up') || + this.arrow_.classList.contains('points-down')) { + left = Math.max(left, MINIMAL_SCREEN_OFFSET); + left = Math.min(left, document.body.offsetWidth - this.offsetWidth - + MINIMAL_SCREEN_OFFSET); + } + if (this.arrow_.classList.contains('points-left') || + this.arrow_.classList.contains('points-right')) { + top = Math.max(top, MINIMAL_SCREEN_OFFSET); + top = Math.min(top, document.body.offsetHeight - this.offsetHeight - + MINIMAL_SCREEN_OFFSET); + } + this.style.setProperty('left', left + 'px'); + this.style.setProperty('top', top + 'px'); + if (shouldShowBefore) { + this.hide(false); + this.style.removeProperty('opacity'); + } + }, + + /** + * Sets position of bubble. Overrides Step.setPosition to adjust offsets + * in case if its direction is the same as arrow's direction. + * @param {object} position Parameter with optional fields |top|, + * |right|, |bottom|, |left| holding corresponding offsets. + */ + setPosition: function(position) { + var arrow = this.arrow_; + // Increasing offset if it's from side where bubble points to. + [['top', 'points-up'], + ['right', 'points-right'], + ['bottom', 'points-down'], + ['left', 'points-left']].forEach(function(mapping) { + if (position.hasOwnProperty(mapping[0]) && + arrow.classList.contains(mapping[1])) { + position[mapping[0]] += ARROW_LENGTH + DISTANCE_TO_POINTEE; + } + }); + Step.prototype.setPosition.call(this, position); + }, + }; + + var HelpStep = cr.ui.define('div'); + + HelpStep.prototype = { + __proto__: Bubble.prototype, + + decorate: function() { + Bubble.prototype.decorate.call(this); + var helpButton = this.getElementsByClassName('help-button')[0]; + helpButton.addEventListener('click', function(e) { + chrome.send('helpButtonClicked'); + e.stopPropagation(); + }); + }, + }; + + var DecorateStep = function(el) { + if (el.id == 'help') + HelpStep.decorate(el); + else if (el.classList.contains('bubble')) + Bubble.decorate(el); + else + Step.decorate(el); + }; + + return {DecorateStep: DecorateStep}; +}); diff --git a/chromium/chrome/browser/resources/chromeos/first_run/step_bubble.css b/chromium/chrome/browser/resources/chromeos/first_run/step_bubble.css new file mode 100644 index 00000000000..1e99a970dfc --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/first_run/step_bubble.css @@ -0,0 +1,50 @@ +/** + * Copyright 2013 The Chromium Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +.step.bubble { + border: 1px solid; + border-radius: 3px; + display: inline-block; + position: absolute; + width: 400px; +} + +.step.bubble h1 { + font-size: 18px; + margin-bottom: 20px; + margin-left: 20px; + margin-right: 20px; + margin-top: 20px; +} + +.step.bubble p { + font-size: 14px; + margin-left: 20px; + margin-right: 20px; +} + +.step.bubble p + p { + margin-top: 30px; +} + +.step.bubble .controls { + margin-bottom: 18px; + margin-left: 18px; + margin-right: 18px; + margin-top: 18px; + text-align: end; +} + +.step.bubble .controls button { + font-size: 12px; + min-width: 0; + padding: 0 15px; + text-shadow: 0 1px 0 rgba(0, 0, 0, 0.3); +} + +.step.bubble.hidden { + visibility: hidden; +} diff --git a/chromium/chrome/browser/resources/chromeos/first_run/tray_step.html b/chromium/chrome/browser/resources/chromeos/first_run/tray_step.html new file mode 100644 index 00000000000..2b7b9e73f3c --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/first_run/tray_step.html @@ -0,0 +1,8 @@ +<div id="tray" class="step bubble transparent hidden"> + <h1 i18n-content="trayHeader"></h1> + <p i18n-content="trayText"><p> + <div class="controls"> + <button i18n-content="nextButton" + class="next-button custom-appearance blue-button"></button> + </div> +</div> diff --git a/chromium/chrome/browser/resources/chromeos/genius_app/OWNERS b/chromium/chrome/browser/resources/chromeos/genius_app/OWNERS new file mode 100644 index 00000000000..3aa8a1c0597 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/genius_app/OWNERS @@ -0,0 +1,3 @@ +cnwan@chromium.org +cylee@chromium.org +davidyu@chromium.org diff --git a/chromium/chrome/browser/resources/chromeos/genius_app/manifest.json b/chromium/chrome/browser/resources/chromeos/genius_app/manifest.json new file mode 100644 index 00000000000..fd5624d3f0a --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/genius_app/manifest.json @@ -0,0 +1,36 @@ +{ + "key": "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDNAtiHknM7LHSwE9YKiFFvYvsp0TkfIriWfrjz53odJD0jEbOtyNhVXqdBOdtcenbSraxt7oJ9GlIfUkvBMP5iOpcrJkYfuNJv8ANHTKC79TjGXRg76TjiqpNI+R2NiVav1pXlzYZpu0ToaiaOcr3IgoGsvIUPcC6pd1U5AjdrCQIDAQAB", + "manifest_version": 2, + "name": "__MSG_app_name__", + "description": "__MSG_app_description__", + "version": "0.2", + "minimum_chrome_version": "28", + "default_locale": "en", + "icons": { + "16": "icon/16.png", + "32": "icon/32.png", + "48": "icon/48.png", + "64": "icon/64.png", + "96": "icon/96.png", + "128": "icon/128.png", + "256": "icon/256.png" + }, + "app": { + "background": { + "persistent": false, + "page": "background.html" + } + }, + "permissions": [ + "chromeosInfoPrivate", + "management", + "webview", + "unlimitedStorage", + "https://www.google.com/*", + "https://commondatastorage.googleapis.com/*", + "https://storage.googleapis.com/*", + "https://www-googleapis-test.sandbox.google.com/*", + "https://www.googleapis.com/*" + ], + "display_in_new_tab_page": false +} diff --git a/chromium/chrome/browser/resources/chromeos/guest_session_tab.html b/chromium/chrome/browser/resources/chromeos/guest_session_tab.html new file mode 100644 index 00000000000..b4d2dc90da9 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/guest_session_tab.html @@ -0,0 +1,35 @@ +<!DOCTYPE html> +<html i18n-values="dir:textdirection;"> +<head> +<meta charset="utf-8"> +<title i18n-content="title"></title> +<link rel="stylesheet" href="../ntp4/incognito_tab.css"> +<link rel="stylesheet" href="login/enterprise_info.css"> +<script> +// Until themes can clear the cache, force-reload the theme stylesheet. +document.write('<link id="incognitothemecss" rel="stylesheet" ' + + 'href="chrome://theme/css/incognito_new_tab_theme.css?' + + Date.now() + '">'); +</script> +</head> +<body i18n-values=".style.fontFamily:fontfamily;.style.fontSize:fontsize"> +<div id="enterprise-info" location="guest-tab" + i18n-values="visible:enterpriseInfoVisible;"> + <img src="chrome://theme/IDR_CONTROLLED_SETTING_MANDATORY"/> + <span id="enterprise-info-message" i18n-content="enterpriseInfoMessage"> + </span> + <a id="enterprise-info-hint-link" i18n-content="learnMore" + i18n-values=".href:enterpriseInfoHintLink"></a> +</div> +<div class="content" > + <span i18n-values=".innerHTML:content"></span> +</div> +</body> +<script> +function themeChanged() { + document.getElementById('incognitothemecss').href = + 'chrome://theme/css/incognito_new_tab_theme.css?' + Date.now(); +} +</script> +</html> + diff --git a/chromium/chrome/browser/resources/chromeos/image_burner.css b/chromium/chrome/browser/resources/chromeos/image_burner.css new file mode 100644 index 00000000000..459e503e4ae --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/image_burner.css @@ -0,0 +1,224 @@ +/* Copyright 2013 The Chromium Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. */ + +html, +body, +ul, +li { + margin: 0; + padding: 0; +} + +body, +html { + height: 100%; +} + +a { + color: rgb(0, 102, 204); + text-decoration: none; +} + +button { + -webkit-margin-start: 15px; + min-width: 80px; +} + +h1 { + font-size: 15pt; + margin-top: 0; +} + +h2 { + font-size: 13pt; + margin-top: 0; +} + +header { + -webkit-padding-start: 120px; + background-color: rgb(242, 247, 250); + border-bottom: 1px solid rgb(218, 236, 248); + padding-bottom: 50px; + padding-top: 50px; +} + +header p { + margin-bottom: 0; + width: 800px; +} + +input { + margin-bottom: 7px; + margin-top: 7px; +} + +li { + list-style: none; + margin-bottom: 8px; +} + +p { + margin-top: 0; +} + +progress { + margin-bottom: 0; + width: 371px; +} + +ul { + -webkit-margin-after: 25px; + -webkit-margin-before: 0; +} + +.aligned-to-start { + -webkit-padding-start: 120px; +} + +.float-start { + float: left; +} + +html[dir='rtl'] .float-start { + float-right; +} + +.float-stop { + clear: both; +} + +.default-text { + margin-bottom: 0; +} + +.normal-text { + font-size: 15; +} + +.progress-text { + color: #666; + margin-bottom: 2px; + margin-top: 2px; +} + +.select-option { + margin-top: 3px; +} + +.new-line { + clear: both; +} + +#main-content { + -webkit-padding-start: 120px; + background-image: -webkit-linear-gradient(rgb(255, 255, 255), + rgb(239, 245, 255)); + bottom: 0; + left: 0; + padding-bottom: 35px; + padding-top: 35px; + position: absolute; + right: 0; + top: 195px; +} + +#status-icon { + display: none; + height: 64px; + left: 32px; + position: absolute; + right: 37px; + width: 64px; +} + +#main-content.device-detected-none #status-icon { + background: url('insert.png'); + background-repeat: no-repeat; + display: block; +} + +#main-content.device-detected-usb #status-icon { + background: url('detected_usb.png'); + background-repeat: no-repeat; + display: block; +} + +#main-content.device-detected-sd #status-icon { + background: url('detected_sd.png'); + background-repeat: no-repeat; + display: block; +} + +#progress-status-div { + display: none; +} + +#main-content.progress #progress-status-div { + display: block; +} + +#cancel-button { + display: none; + margin-bottom: 0; + margin-top: -4px; +} + +#main-content.progress-canceble #cancel-button { + display: block; +} + +#pending-time { + clear: both +} + +#device-selection { + display: none; +} + +#main-content.device-detected-mul #device-selection { + display: block; +} + +#warning-icon { + -webkit-margin-end: 10px; + display: none; + height: 26px; + width: 25px; +} + +#main-content.warning #warning-icon, +#main-content.error #warning-icon { + background: url('../../../../ui/webui/resources/images/icon_warning.png'); + background-repeat: no-repeat; + display: block; +} + +#main-content.success #warning-icon { + background: url('../../../../ui/webui/resources/images/icon_checkmark.png'); + background-repeat: no-repeat; + display: block; +} + +#warning-div { + display: block; +} + +#main-content.progress #warning-div { + display: none; +} + +#warning-text { + max-width: 550px; + padding-top: 4px; +} + +#main-content.success #warning-button, +#main-content.warning-no-conf #warning-button, +#main-content.device-detected-none #warning-button { + display: none; +} + +#main-content.error #warning-button { + clear: both; +} diff --git a/chromium/chrome/browser/resources/chromeos/image_burner.html b/chromium/chrome/browser/resources/chromeos/image_burner.html new file mode 100644 index 00000000000..03f5d5c3e34 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/image_burner.html @@ -0,0 +1,47 @@ +<!DOCTYPE html> +<html i18n-values="dir:textdirection;"> +<head> +<meta http-equiv="Content-Type" content="text/html" charset="UTF-8"></meta> +<title i18n-content="title"></title> +<link rel="stylesheet" href="image_burner.css"> +<script src="chrome://resources/js/util.js"></script> +<script src="chrome://resources/js/local_strings.js"></script> +<script src="chrome://imageburner/strings.js"></script> +<script src="chrome://imageburner/image_burner.js"></script> +</head> +<body class="default-text" i18n-values=".style.fontFamily:fontfamily"> + <header id="burn-header"> + <h1 i18n-content="headerTitle"></h1> + <p i18n-content="headerDescription"></p> + <a id="more-info-link" jsvalues="href:moreInfoLink" target="_blank" + i18n-content="headerLink"></a> + </header> + <div id="main-content"> + <div id="status-icon"></div> + <div id="status-info"> + <h2 id="status-text" class="status-text"></h2> + <div id="progress-status-div"> + <p id="progress-text" class="progress-text"></p> + <div id="progress-status" class="float-start"> + <progress id="progress-div" class="float-start"></progress> + <button id="cancel-button" class="float-start" + i18n-content="cancelButton"> + </button> + </div> + <p id="pending-time" class="progress-text"></p> + </div> + <ul id="device-selection"></ul> + <div id="warning-div"> + <div id="warning-icon" class="float-start"></div> + <p id="warning-text" class="float-start"></p> + <button id="warning-button" class="float-start"></button> + </div> + <div class="new-line"></div> + </div> + <div id="burn-footer"></div> + </div> + <script src="chrome://resources/js/i18n_template.js"></script> + <script src="chrome://resources/js/i18n_process.js"></script> + <script src="chrome://resources/js/jstemplate_compiled.js"></script> +</body> +</html> diff --git a/chromium/chrome/browser/resources/chromeos/image_burner.js b/chromium/chrome/browser/resources/chromeos/image_burner.js new file mode 100644 index 00000000000..b3e5aa21c1b --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/image_burner.js @@ -0,0 +1,450 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +var localStrings; +var browserBridge; + +/** + * Class that keeps track of current burn process state. + * @param {Object} strings Localized state strings. + * @constructor + */ +function State(strings) { + this.setStrings(strings); + this.changeState(State.StatesEnum.DEVICE_NONE); +} + +/** + * State Enum object. + */ +State.StatesEnum = { + DEVICE_NONE: { + cssState: 'device-detected-none', + }, + DEVICE_USB: { + cssState: 'device-detected-usb warning', + }, + DEVICE_SD: { + cssState: 'device-detected-sd warning', + }, + DEVICE_MUL: { + cssState: 'device-detected-mul warning', + }, + ERROR_NO_NETWORK: { + cssState: 'warning-no-conf', + }, + ERROR_DEVICE_TOO_SMALL: { + cssState: 'warning-no-conf', + }, + PROGRESS_DOWNLOAD: { + cssState: 'progress progress-canceble', + }, + PROGRESS_UNZIP: { + cssState: 'progress progress-canceble', + }, + PROGRESS_BURN: { + cssState: 'progress', + }, + FAIL: { + cssState: 'error', + }, + SUCCESS: { + cssState: 'success', + }, +}; + +State.prototype = { + /** + * Sets the state strings. + * @param {Object} strings Localized state strings. + */ + setStrings: function(strings) { + State.StatesEnum.DEVICE_NONE.statusText = + strings.getString('statusDevicesNone'); + State.StatesEnum.DEVICE_NONE.warningText = + strings.getString('warningDevicesNone'); + State.StatesEnum.DEVICE_USB.statusText = + strings.getString('statusDeviceUSB'); + State.StatesEnum.DEVICE_SD.statusText = strings.getString('statusDeviceSD'); + State.StatesEnum.DEVICE_MUL.statusText = + strings.getString('statusDevicesMultiple'); + State.StatesEnum.ERROR_NO_NETWORK.statusText = + strings.getString('statusNoConnection'); + State.StatesEnum.ERROR_NO_NETWORK.warningText = + strings.getString('warningNoConnection'); + State.StatesEnum.ERROR_DEVICE_TOO_SMALL.statusText = + strings.getString('statusNoSpace'); + State.StatesEnum.PROGRESS_DOWNLOAD.statusText = + strings.getString('statusDownloading'); + State.StatesEnum.PROGRESS_UNZIP.statusText = + strings.getString('statusUnzip'); + State.StatesEnum.PROGRESS_BURN.statusText = strings.getString('statusBurn'); + State.StatesEnum.FAIL.statusText = strings.getString('statusError'); + State.StatesEnum.SUCCESS.statusText = strings.getString('statusSuccess'); + State.StatesEnum.SUCCESS.warningText = strings.getString('warningSuccess'); + }, + + /** + * Changes the current state to new state. + * @param {Object} newState Specifies the new state object. + */ + changeState: function(newState) { + if (newState == this.state) + return; + this.state = newState; + + $('main-content').className = this.state.cssState; + + $('status-text').textContent = this.state.statusText; + + if (newState.warningText) + $('warning-text').textContent = this.state.warningText; + + if (this.isInitialState() && this.state != State.StatesEnum.DEVICE_NONE) { + $('warning-button').textContent = localStrings.getString('confirmButton'); + } else if (this.state == State.StatesEnum.FAIL) { + $('warning-button').textContent = + localStrings.getString('retryButton'); + } + }, + + /** + * Reset to initial state. + * @param {Array} devices Array of device information. + */ + gotoInitialState: function(devices) { + if (devices.length == 0) { + this.changeState(State.StatesEnum.DEVICE_NONE); + } else if (devices.length == 1) { + // If a device type is not specified for some reason, we should + // default to display a USB device. + var initialState = State.StatesEnum.DEVICE_USB; + if (devices[0].type == 'sd') + initialState = State.StatesEnum.DEVICE_SD; + this.changeState(initialState); + } else { + this.changeState(State.StatesEnum.DEVICE_MUL); + } + }, + + /** + * Returns true if the device is in initial state. + * @return {boolean} True if the device is in initial state else false. + */ + isInitialState: function() { + return this.state == State.StatesEnum.DEVICE_NONE || + this.state == State.StatesEnum.DEVICE_USB || + this.state == State.StatesEnum.DEVICE_SD || + this.state == State.StatesEnum.DEVICE_MUL; + }, + + /** + * Returns true if device state matches the given state name. + * @param {string} stateName Given state name. + * @return {boolean} True if the device state matches the given state name. + */ + equals: function(stateName) { + return this.state == stateName; + } +}; + +/** + * Class that keeps track of available devices. + * @constructor + */ +function DeviceSelection() { + this.selectedDevice = undefined; + this.devices = []; +} + +DeviceSelection.prototype = { + /** + * Shows the currently selected device. + */ + showDeviceSelection: function() { + if (this.devices.length == 0) { + this.selectedDevice = undefined; + } else { + this.selectDevice(this.devices[0].devicePath); + } + }, + + /** + * Handles device selected event. + * @param {string} label Device label. + * @param {string} filePath File path. + * @param {string} devicePath Selected device path. + */ + onDeviceSelected: function(label, filePath, devicePath) { + $('warning-button').onclick = + browserBridge.sendBurnImageMessage.bind(browserBridge, filePath, + devicePath); + + this.selectedDevice = devicePath; + + $('warning-text').textContent = + localStrings.getStringF('warningDevices', label); + }, + + /** + * Selects the specified device based on the specified path. + * @param {string} path Device path. + */ + selectDevice: function(path) { + var element = $('radio-' + path); + element.checked = true; + element.onclick.apply(element); + }, + + /** + * Creates a new device element. + * @param {Object} device Specifies new device information. + * @return {HTMLLIElement} New device element. + */ + createNewDeviceElement: function(device) { + var element = document.createElement('li'); + var radioButton = document.createElement('input'); + radioButton.type = 'radio'; + radioButton.name = 'device'; + radioButton.value = device.label; + radioButton.id = 'radio-' + device.devicePath; + radioButton.className = 'float-start'; + var deviceLabelText = document.createElement('p'); + deviceLabelText.textContent = device.label; + deviceLabelText.className = 'select-option float-start'; + var newLine = document.createElement('div'); + newLine.className = 'new-line'; + element.appendChild(radioButton); + element.appendChild(deviceLabelText); + element.appendChild(newLine); + element.id = 'select-' + device.devicePath; + element.className = 'selection-element'; + radioButton.onclick = this.onDeviceSelected.bind(this, + device.label, device.filePath, device.devicePath); + return element; + }, + + /** + * Updates the list of selected devices. + * @param {Array} devices List of devices. + */ + devicesUpdated: function(newDevices) { + this.devices = newDevices; + var selectListDOM = $('device-selection'); + selectListDOM.innerHTML = ''; + if (this.devices.length > 0) { + for (var i = 0; i < this.devices.length; i++) { + var element = this.createNewDeviceElement(this.devices[i]); + selectListDOM.appendChild(element); + } + this.selectDevice(this.devices[0].devicePath); + } else { + this.selectedDevice = undefined; + } + }, + + /** + * Handles device added event. + * @param {Object} device Device information. + * @param {boolean} allowSelect True to update the selected device info. + */ + deviceAdded: function(device, allowSelect) { + this.devices.push(device); + var selectListDOM = $('device-selection'); + selectListDOM.appendChild(this.createNewDeviceElement(device)); + if (allowSelect && this.devices.length == 1) + this.selectDevice(device.devicePath); + }, + + /** + * Handles device removed event. + * @param {string} devicePath Device path to be removed. + * @param {boolean} allowSelect True to update the selected device info. + */ + deviceRemoved: function(devicePath, allowSelect) { + device = this.findDevice(devicePath); + if (!device) + return; + this.devices.splice(this.devices.indexOf(device), 1); + + // Remove device selection element from DOM. + var deviceSelectElement = $('select-' + devicePath); + deviceSelectElement.parentNode.removeChild(deviceSelectElement); + + // Update selected device element. + if (allowSelect) { + if (this.devices.length > 0) { + if (this.selectedDevice == devicePath) + this.selectDevice(this.devices[0].devicePath); + } else { + this.selectedDevice = undefined; + } + } + }, + + /** + * Finds device with given device path property. + * @param {string} devicePath Device path of device to find. + * @return {Object} Matching device information or undefined if not found. + */ + findDevice: function(devicePath) { + for (var i = 0; i < this.devices.length; ++i) { + if (this.devices[i].devicePath == devicePath) { + return this.devices[i]; + } + } + return undefined; + } +}; + +/** + * Class that handles communication with chrome. + * @constructor + */ +function BrowserBridge() { + this.currentState = new State(localStrings); + this.deviceSelection = new DeviceSelection(); + // We will use these often so it makes sence making them class members to + // avoid frequent document.getElementById calls. + this.progressElement = $('progress-div'); + this.progressText = $('progress-text'); + this.progressTimeLeftText = $('pending-time'); +} + +BrowserBridge.prototype = { + sendCancelMessage: function() { + chrome.send('cancelBurnImage'); + }, + + sendGetDevicesMessage: function() { + chrome.send('getDevices'); + }, + + sendWebuiInitializedMessage: function() { + chrome.send('webuiInitialized'); + }, + + /** + * Sends the burn image message to c++ code. + * @param {string} filePath Specifies the file path. + * @param {string} devicePath Specifies the device path. + */ + sendBurnImageMessage: function(filePath, devicePath) { + chrome.send('burnImage', [devicePath, filePath]); + }, + + reportSuccess: function() { + this.currentState.changeState(State.StatesEnum.SUCCESS); + }, + + /** + * Update the device state to report a failure and display an error message to + * the user. + * @param {string} errorMessage Specifies the warning text message. + */ + reportFail: function(errorMessage) { + this.currentState.changeState(State.StatesEnum.FAIL); + $('warning-text').textContent = errorMessage; + $('warning-button').onclick = this.onBurnRetry.bind(this); + }, + + /** + * Handles device added event. + * @param {Object} device Device information. + */ + deviceAdded: function(device) { + var inInitialState = this.currentState.isInitialState(); + this.deviceSelection.deviceAdded(device, inInitialState); + if (inInitialState) + this.currentState.gotoInitialState(this.deviceSelection.devices); + }, + + /** + * Handles device removed event. + * @param {string} devicePath Device path to be removed. + */ + deviceRemoved: function(devicePath) { + var inInitialState = this.currentState.isInitialState(); + this.deviceSelection.deviceRemoved(devicePath, inInitialState); + if (inInitialState) + this.currentState.gotoInitialState(this.deviceSelection.devices); + }, + + /** + * Gets device callbacks and update the current state. + * @param {Array} devices List of devices. + */ + getDevicesCallback: function(devices) { + this.deviceSelection.devicesUpdated(devices); + this.currentState.gotoInitialState(this.deviceSelection.devices); + this.sendWebuiInitializedMessage(); + }, + + /** + * Updates the progress information based on the signal received. + * @param {Object} updateSignal Specifies the signal information. + */ + updateProgress: function(updateSignal) { + if (updateSignal.progressType == 'download' && + !this.currentState.equals(State.StatesEnum.PROGRESS_DOWNLOAD)) { + this.currentState.changeState(State.StatesEnum.PROGRESS_DOWNLOAD); + } else if (updateSignal.progressType == 'unzip' && + !this.currentState.equals(State.StatesEnum.PROGRESS_UNZIP)) { + this.currentState.changeState(State.StatesEnum.PROGRESS_UNZIP); + } else if (updateSignal.progressType == 'burn' && + !this.currentState.equals(State.StatesEnum.PROGRESS_BURN)) { + this.currentState.changeState(State.StatesEnum.PROGRESS_BURN); + } + + if (!(updateSignal.amountTotal > 0)) { + this.progressElement.removeAttribute('value'); + } else { + this.progressElement.value = updateSignal.amountFinished; + this.progressElement.max = updateSignal.amountTotal; + } + + this.progressText.textContent = updateSignal.progressText; + this.progressTimeLeftText.textContent = updateSignal.timeLeftText; + }, + + reportNoNetwork: function() { + this.currentState.changeState(State.StatesEnum.ERROR_NO_NETWORK); + }, + + reportNetworkDetected: function() { + if (this.currentState.equals(State.StatesEnum.ERROR_NO_NETWORK)) { + this.deviceSelection.showDeviceSelection(); + this.currentState.gotoInitialState(this.deviceSelection.devices); + } + }, + + /** + * Updates the current state to report device too small error. + * @param {number} deviceSize Received device size. + */ + reportDeviceTooSmall: function(deviceSize) { + this.currentState.changeState(State.StatesEnum.ERROR_DEVICE_TOO_SMALL); + $('warning-text').textContent = + localStrings.getStringF('warningNoSpace', deviceSize); + }, + + /** + * Processes click on 'Retry' button in FAIL state. + */ + onBurnRetry: function() { + this.deviceSelection.showDeviceSelection(); + this.currentState.gotoInitialState(this.deviceSelection.devices); + } +}; + +document.addEventListener('DOMContentLoaded', function() { + localStrings = new LocalStrings(); + browserBridge = new BrowserBridge(); + + jstProcess(new JsEvalContext(templateData), $('more-info-link')); + + $('cancel-button').onclick = + browserBridge.sendCancelMessage.bind(browserBridge); + browserBridge.sendGetDevicesMessage(); +}); diff --git a/chromium/chrome/browser/resources/chromeos/images/broken_robot.png b/chromium/chrome/browser/resources/chromeos/images/broken_robot.png Binary files differnew file mode 100644 index 00000000000..78439f23f93 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/images/broken_robot.png diff --git a/chromium/chrome/browser/resources/chromeos/images/new_charger_au.png b/chromium/chrome/browser/resources/chromeos/images/new_charger_au.png Binary files differnew file mode 100644 index 00000000000..2c84f95caa1 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/images/new_charger_au.png diff --git a/chromium/chrome/browser/resources/chromeos/images/new_charger_uk.png b/chromium/chrome/browser/resources/chromeos/images/new_charger_uk.png Binary files differnew file mode 100644 index 00000000000..9cddba35ca9 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/images/new_charger_uk.png diff --git a/chromium/chrome/browser/resources/chromeos/images/new_charger_us.png b/chromium/chrome/browser/resources/chromeos/images/new_charger_us.png Binary files differnew file mode 100644 index 00000000000..5007b555ee9 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/images/new_charger_us.png diff --git a/chromium/chrome/browser/resources/chromeos/images/original_charger_au.png b/chromium/chrome/browser/resources/chromeos/images/original_charger_au.png Binary files differnew file mode 100644 index 00000000000..20f977286d2 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/images/original_charger_au.png diff --git a/chromium/chrome/browser/resources/chromeos/images/original_charger_uk.png b/chromium/chrome/browser/resources/chromeos/images/original_charger_uk.png Binary files differnew file mode 100644 index 00000000000..291e99a1dee --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/images/original_charger_uk.png diff --git a/chromium/chrome/browser/resources/chromeos/images/original_charger_us.png b/chromium/chrome/browser/resources/chromeos/images/original_charger_us.png Binary files differnew file mode 100644 index 00000000000..bf20388a8b7 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/images/original_charger_us.png diff --git a/chromium/chrome/browser/resources/chromeos/images/safe-charger-checkmark.png b/chromium/chrome/browser/resources/chromeos/images/safe-charger-checkmark.png Binary files differnew file mode 100644 index 00000000000..57014503d02 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/images/safe-charger-checkmark.png diff --git a/chromium/chrome/browser/resources/chromeos/insert.png b/chromium/chrome/browser/resources/chromeos/insert.png Binary files differnew file mode 100644 index 00000000000..829a595ea3a --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/insert.png diff --git a/chromium/chrome/browser/resources/chromeos/keyboard/keyboard_utils.js b/chromium/chrome/browser/resources/chromeos/keyboard/keyboard_utils.js new file mode 100644 index 00000000000..931b5aa7b89 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/keyboard/keyboard_utils.js @@ -0,0 +1,105 @@ +// Copyright (c) 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** + * Namespace for keyboard utility functions. + */ +var keyboard = {}; + +/** + * Swallows keypress and keyup events of arrow keys. + * @param {KeyboardEvent} event Raised event. + * @private + */ +keyboard.onKeyIgnore_ = function(event) { + if (event.ctrlKey || event.shiftKey || event.altKey || event.metaKey) + return; + + if (event.keyIdentifier == 'Left' || + event.keyIdentifier == 'Right' || + event.keyIdentifier == 'Up' || + event.keyIdentifier == 'Down') { + event.stopPropagation(); + event.preventDefault(); + } +}; + +/** + * Converts arrow keys into tab/shift-tab key events. + * @param {KeyboardEvent} event Raised event. + * @private + */ +keyboard.onKeyDown_ = function(event) { + if (event.ctrlKey || event.shiftKey || event.altKey || event.metaKey) + return; + + var needsUpDownKeys = event.target.classList.contains('needs-up-down-keys'); + + if (event.keyIdentifier == 'Left' || + (!needsUpDownKeys && event.keyIdentifier == 'Up')) { + keyboard.raiseKeyFocusPrevious(document.activeElement); + event.stopPropagation(); + event.preventDefault(); + } else if (event.keyIdentifier == 'Right' || + (!needsUpDownKeys && event.keyIdentifier == 'Down')) { + keyboard.raiseKeyFocusNext(document.activeElement); + event.stopPropagation(); + event.preventDefault(); + } +}; + +/** + * Raises tab/shift-tab keyboard events. + * @param {HTMLElement} element Element that should receive the event. + * @param {string} eventType Keyboard event type. + * @param {boolean} shift True if shift should be on. + * @private + */ +keyboard.raiseTabKeyEvent_ = function(element, eventType, shift) { + var event = document.createEvent('KeyboardEvent'); + event.initKeyboardEvent( + eventType, + true, // canBubble + true, // cancelable + window, + 'U+0009', + 0, // keyLocation + false, // ctrl + false, // alt + shift, // shift + false); // meta + element.dispatchEvent(event); +}; + +/** + * Raises shift+tab keyboard events to focus previous element. + * @param {HTMLElement} element Element that should receive the event. + */ +keyboard.raiseKeyFocusPrevious = function(element) { + keyboard.raiseTabKeyEvent_(element, 'keydown', true); + keyboard.raiseTabKeyEvent_(element, 'keypress', true); + keyboard.raiseTabKeyEvent_(element, 'keyup', true); +}; + +/** + * Raises tab keyboard events to focus next element. + * @param {HTMLElement} element Element that should receive the event. + */ +keyboard.raiseKeyFocusNext = function(element) { + keyboard.raiseTabKeyEvent_(element, 'keydown', false); + keyboard.raiseTabKeyEvent_(element, 'keypress', false); + keyboard.raiseTabKeyEvent_(element, 'keyup', false); +}; + +/** + * Initializes event handling for arrow keys driven focus flow. + */ +keyboard.initializeKeyboardFlow = function() { + document.addEventListener('keydown', + keyboard.onKeyDown_, true); + document.addEventListener('keypress', + keyboard.onKeyIgnore_, true); + document.addEventListener('keyup', + keyboard.onKeyIgnore_, true); +}; diff --git a/chromium/chrome/browser/resources/chromeos/keyboard_overlay.css b/chromium/chrome/browser/resources/chromeos/keyboard_overlay.css new file mode 100644 index 00000000000..8ab73bd8842 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/keyboard_overlay.css @@ -0,0 +1,188 @@ +/* Copyright (c) 2012 The Chromium Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +body { + -webkit-user-select: none; + background: #fff; + margin: 0; + overflow: hidden; + padding: 0; +} + +.keyboard-overlay-keyboard { + background: -webkit-linear-gradient(#484848, #252525) no-repeat; + background-color: #252525; + border-radius: 6px; + font-family: 'Droid Sans', Arial; +} + +.keyboard-overlay-instructions { + -webkit-box-orient: vertical; + background: -webkit-linear-gradient(rgb(51, 76, 126), rgb(13, 23, 43)); + border: 2px solid rgb(87, 108, 207); + border-radius: 5px; + color: #fff; + display: -webkit-box; + position: absolute; + vertical-align: middle; + z-index: 100; +} + +.keyboard-overlay-instructions-text { + -webkit-box-flex: 3; + margin: 13px auto 0; + max-width: 20em; + text-align: center; + vertical-align: middle; +} + +.keyboard-overlay-instructions-hide-text { + -webkit-box-flex: 2; + font-weight: bold; + text-align: center; + vertical-align: middle; +} + +.keyboard-overlay-learn-more-text { + -webkit-box-flex: 1; + font-size: 90%; + margin: 0 auto 13px; + text-align: center; + text-decoration: underline; + vertical-align: middle; +} + +.keyboard-overlay-learn-more-text a { + color: #fff; +} + +.keyboard-overlay-key { + -webkit-box-orient: vertical; + background-color: rgba(24, 24, 24, 0.9); + border: 2px solid #7f7f7f; + border-radius: 4px; + color: rgb(151, 151, 151); + display: -webkit-box; + font-size: 75%; + font-weight: bold; + position: absolute; +} + +.keyboard-overlay-key.is-shortcut { + background: -webkit-linear-gradient(rgba(61, 61, 61, 0.8), + rgba(27, 27, 27, 0.8)); + border-color: #fafafa; + color: #9e9e9e; +} + +.keyboard-overlay-key.is-shortcut.modifier-shift { + border-color: rgb(97, 186, 100); +} + +.keyboard-overlay-key.is-shortcut.modifier-ctrl { + border-color: rgb(93, 128, 199); +} + +.keyboard-overlay-key.is-shortcut.modifier-alt { + border-color: rgb(184, 84, 84); +} + +.keyboard-overlay-key.is-shortcut.modifier-search { + border-color: rgb(204, 204, 80); +} + +.keyboard-overlay-key.is-shortcut.modifier-shift.modifier-ctrl { + border-color: rgb(121, 172, 143); +} + +.keyboard-overlay-key.is-shortcut.modifier-shift.modifier-alt { + border-color: rgb(191, 189, 121); +} + +.keyboard-overlay-key.is-shortcut.modifier-ctrl.modifier-alt { + border-color: rgb(158, 84, 206); +} + +.keyboard-overlay-key.is-shortcut.modifier-shift.modifier-ctrl.modifier-alt { + border-color: #7f7f7f; +} + +.keyboard-overlay-key.pressed { + border-color: #fff; + color: #fff; +} + +.keyboard-overlay-key.pressed.is-shift { + background: -webkit-linear-gradient(rgb(68, 161, 66), rgb(62, 95, 55)); +} + +.keyboard-overlay-key.pressed.is-shift.modifier-ctrl { + background: -webkit-linear-gradient(rgb(66, 161, 67), rgb(46, 92, 83)); +} + +.keyboard-overlay-key.pressed.is-shift.modifier-alt { + background: -webkit-linear-gradient(rgb(69, 163, 67), rgb(81, 81, 52)); +} + +.keyboard-overlay-key.pressed.is-shift.modifier-ctrl.modifier-alt { + background: -webkit-linear-gradient(rgb(82, 161, 42), rgb(79, 77, 46)); +} + +.keyboard-overlay-key.pressed.is-ctrl { + background: -webkit-linear-gradient(rgb(31, 55, 162), rgb(25, 38, 90)); +} + +.keyboard-overlay-key.pressed.is-ctrl.modifier-shift { + background: -webkit-linear-gradient(rgb(67, 159, 165), rgb(30, 55, 96)); +} + +.keyboard-overlay-key.pressed.is-ctrl.modifier-alt { + background: -webkit-linear-gradient(rgb(115, 54, 144), rgb(34, 37, 94)); +} + +.keyboard-overlay-key.pressed.is-ctrl.modifier-shift.modifier-alt { + background: -webkit-linear-gradient(rgb(115, 54, 144), rgb(33, 37, 93)); +} + +.keyboard-overlay-key.pressed.is-alt { + background: -webkit-linear-gradient(rgb(132, 44, 42), rgb(84, 30, 28)); +} + +.keyboard-overlay-key.pressed.is-alt.modifier-shift { + background: -webkit-linear-gradient(top left, rgb(116, 94, 49), + rgb(85, 36, 30)); +} + +.keyboard-overlay-key.pressed.is-alt.modifier-ctrl { + background: -webkit-linear-gradient(rgb(118, 54, 143), rgb(82, 33, 40)); +} + +.keyboard-overlay-key.pressed.is-alt.modifier-shift.modifier-ctrl { + background: -webkit-linear-gradient(top left, rgb(115, 95, 41), + rgb(80, 36, 27)); +} + +.keyboard-overlay-key.pressed.is-search { + background: -webkit-linear-gradient(rgb(242, 242, 126), rgb(186, 186, 52)); +} + +.keyboard-overlay-shortcut-text { + -webkit-box-flex: 1; + -webkit-box-ordinal-group: 1; + color: #fff; + padding: 1px 3px 0; + text-align: center; + text-shadow: #000 0 0 2px; +} + +.keyboard-overlay-key-text { + -webkit-box-ordinal-group: 2; + padding: 0 3px 2px; + text-align: center; +} + +.keyboard-overlay-key.is-shortcut .keyboard-overlay-key-text { + opacity: 0.25; +} diff --git a/chromium/chrome/browser/resources/chromeos/keyboard_overlay.html b/chromium/chrome/browser/resources/chromeos/keyboard_overlay.html new file mode 100644 index 00000000000..c1d557087d9 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/keyboard_overlay.html @@ -0,0 +1,13 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8" content="text/html"> +<title i18n-content="keyboardOverlayTitle"></title> +<link rel="stylesheet" href="keyboard_overlay.css"> +<script src="chrome://resources/js/load_time_data.js"></script> +<script src="chrome://resources/js/util.js"></script> +<script src="keyboard_overlay.js"></script> +<body class="keyboard-overlay-keyboard"></body> +<script src="strings.js"></script> +<script src="chrome://resources/js/i18n_template2.js"></script> +</html> diff --git a/chromium/chrome/browser/resources/chromeos/keyboard_overlay.js b/chromium/chrome/browser/resources/chromeos/keyboard_overlay.js new file mode 100644 index 00000000000..018aa6f9a00 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/keyboard_overlay.js @@ -0,0 +1,696 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +<include src="keyboard_overlay_data.js"/> +<include src="keyboard_overlay_accessibility_helper.js"/> + +var BASE_KEYBOARD = { + top: 0, + left: 0, + width: 1237, + height: 514 +}; + +var BASE_INSTRUCTIONS = { + top: 194, + left: 370, + width: 498, + height: 142 +}; + +var MODIFIER_TO_CLASS = { + 'SHIFT': 'modifier-shift', + 'CTRL': 'modifier-ctrl', + 'ALT': 'modifier-alt', + 'SEARCH': 'modifier-search' +}; + +var IDENTIFIER_TO_CLASS = { + '2A': 'is-shift', + '1D': 'is-ctrl', + '38': 'is-alt', + 'E0 5B': 'is-search' +}; + +var LABEL_TO_IDENTIFIER = { + 'search': 'E0 5B', + 'ctrl': '1D', + 'alt': '38', + 'caps lock': '3A', + 'esc': '01', + 'disabled': 'DISABLED' +}; + +var KEYCODE_TO_LABEL = { + 8: 'backspace', + 9: 'tab', + 13: 'enter', + 27: 'esc', + 32: 'space', + 33: 'pageup', + 34: 'pagedown', + 35: 'end', + 36: 'home', + 37: 'left', + 38: 'up', + 39: 'right', + 40: 'down', + 46: 'delete', + 91: 'search', + 92: 'search', + 96: '0', + 97: '1', + 98: '2', + 99: '3', + 100: '4', + 101: '5', + 102: '6', + 103: '7', + 104: '8', + 105: '9', + 106: '*', + 107: '+', + 109: '-', + 110: '.', + 111: '/', + 112: 'back', + 113: 'forward', + 114: 'reload', + 115: 'full screen', + 116: 'switch window', + 117: 'bright down', + 118: 'bright up', + 119: 'mute', + 120: 'vol. down', + 121: 'vol. up', + 186: ';', + 187: '+', + 188: ',', + 189: '-', + 190: '.', + 191: '/', + 192: '`', + 219: '[', + 220: '\\', + 221: ']', + 222: '\'', +}; + +var keyboardOverlayId = 'en_US'; +var identifierMap = {}; + +/** + * Returns the layout name. + * @return {string} layout name. + */ +function getLayoutName() { + return getKeyboardGlyphData().layoutName; +} + +/** + * Returns layout data. + * @return {Array} Keyboard layout data. + */ +function getLayout() { + return keyboardOverlayData['layouts'][getLayoutName()]; +} + +// Cache the shortcut data after it is constructed. +var shortcutDataCache; + +/** + * Returns shortcut data. + * @return {Object} Keyboard shortcut data. + */ +function getShortcutData() { + if (shortcutDataCache) + return shortcutDataCache; + + shortcutDataCache = keyboardOverlayData['shortcut']; + + if (!isDisplayUIScalingEnabled()) { + // Zoom screen in + delete shortcutDataCache['+<>CTRL<>SHIFT']; + // Zoom screen out + delete shortcutDataCache['-<>CTRL<>SHIFT']; + // Reset screen zoom + delete shortcutDataCache['0<>CTRL<>SHIFT']; + } + + return shortcutDataCache; +} + +/** + * Returns the keyboard overlay ID. + * @return {string} Keyboard overlay ID. + */ +function getKeyboardOverlayId() { + return keyboardOverlayId; +} + +/** + * Returns keyboard glyph data. + * @return {Object} Keyboard glyph data. + */ +function getKeyboardGlyphData() { + return keyboardOverlayData['keyboardGlyph'][getKeyboardOverlayId()]; +} + +/** + * Converts a single hex number to a character. + * @param {string} hex Hexadecimal string. + * @return {string} Unicode values of hexadecimal string. + */ +function hex2char(hex) { + if (!hex) { + return ''; + } + var result = ''; + var n = parseInt(hex, 16); + if (n <= 0xFFFF) { + result += String.fromCharCode(n); + } else if (n <= 0x10FFFF) { + n -= 0x10000; + result += (String.fromCharCode(0xD800 | (n >> 10)) + + String.fromCharCode(0xDC00 | (n & 0x3FF))); + } else { + console.error('hex2Char error: Code point out of range :' + hex); + } + return result; +} + +var searchIsPressed = false; + +/** + * Returns a list of modifiers from the key event. + * @param {Event} e The key event. + * @return {Array} List of modifiers based on key event. + */ +function getModifiers(e) { + if (!e) + return []; + + var isKeyDown = (e.type == 'keydown'); + var keyCodeToModifier = { + 16: 'SHIFT', + 17: 'CTRL', + 18: 'ALT', + 91: 'SEARCH', + }; + var modifierWithKeyCode = keyCodeToModifier[e.keyCode]; + var isPressed = { + 'SHIFT': e.shiftKey, + 'CTRL': e.ctrlKey, + 'ALT': e.altKey, + 'SEARCH': searchIsPressed + }; + if (modifierWithKeyCode) + isPressed[modifierWithKeyCode] = isKeyDown; + + searchIsPressed = isPressed['SEARCH']; + + // make the result array + return ['SHIFT', 'CTRL', 'ALT', 'SEARCH'].filter( + function(modifier) { + return isPressed[modifier]; + }).sort(); +} + +/** + * Returns an ID of the key. + * @param {string} identifier Key identifier. + * @param {number} i Key number. + * @return {string} Key ID. + */ +function keyId(identifier, i) { + return identifier + '-key-' + i; +} + +/** + * Returns an ID of the text on the key. + * @param {string} identifier Key identifier. + * @param {number} i Key number. + * @return {string} Key text ID. + */ +function keyTextId(identifier, i) { + return identifier + '-key-text-' + i; +} + +/** + * Returns an ID of the shortcut text. + * @param {string} identifier Key identifier. + * @param {number} i Key number. + * @return {string} Key shortcut text ID. + */ +function shortcutTextId(identifier, i) { + return identifier + '-shortcut-text-' + i; +} + +/** + * Returns true if |list| contains |e|. + * @param {Array} list Container list. + * @param {string} e Element string. + * @return {boolean} Returns true if the list contains the element. + */ +function contains(list, e) { + return list.indexOf(e) != -1; +} + +/** + * Returns a list of the class names corresponding to the identifier and + * modifiers. + * @param {string} identifier Key identifier. + * @param {Array} modifiers List of key modifiers. + * @return {Array} List of class names corresponding to specified params. + */ +function getKeyClasses(identifier, modifiers) { + var classes = ['keyboard-overlay-key']; + for (var i = 0; i < modifiers.length; ++i) { + classes.push(MODIFIER_TO_CLASS[modifiers[i]]); + } + + if ((identifier == '2A' && contains(modifiers, 'SHIFT')) || + (identifier == '1D' && contains(modifiers, 'CTRL')) || + (identifier == '38' && contains(modifiers, 'ALT')) || + (identifier == 'E0 5B' && contains(modifiers, 'SEARCH'))) { + classes.push('pressed'); + classes.push(IDENTIFIER_TO_CLASS[identifier]); + } + return classes; +} + +/** + * Returns true if a character is a ASCII character. + * @param {string} c A character to be checked. + * @return {boolean} True if the character is an ASCII character. + */ +function isAscii(c) { + var charCode = c.charCodeAt(0); + return 0x00 <= charCode && charCode <= 0x7F; +} + +/** + * Returns a remapped identiifer based on the preference. + * @param {string} identifier Key identifier. + * @return {string} Remapped identifier. + */ +function remapIdentifier(identifier) { + return identifierMap[identifier] || identifier; +} + +/** + * Returns a label of the key. + * @param {string} keyData Key glyph data. + * @param {Array} modifiers Key Modifier list. + * @return {string} Label of the key. + */ +function getKeyLabel(keyData, modifiers) { + if (!keyData) { + return ''; + } + if (keyData.label) { + return keyData.label; + } + var keyLabel = ''; + for (var j = 1; j <= 9; j++) { + var pos = keyData['p' + j]; + if (!pos) { + continue; + } + keyLabel = hex2char(pos); + if (!keyLabel) { + continue; + } + if (isAscii(keyLabel) && + getShortcutData()[getAction(keyLabel, modifiers)]) { + break; + } + } + return keyLabel; +} + +/** + * Returns a normalized string used for a key of shortcutData. + * + * Examples: + * keyCode: 'd', modifiers: ['CTRL', 'SHIFT'] => 'd<>CTRL<>SHIFT' + * keyCode: 'alt', modifiers: ['ALT', 'SHIFT'] => 'ALT<>SHIFT' + * + * @param {string} keyCode Key code. + * @param {Array} modifiers Key Modifier list. + * @return {string} Normalized key shortcut data string. + */ +function getAction(keyCode, modifiers) { + /** @const */ var separatorStr = '<>'; + if (keyCode.toUpperCase() in MODIFIER_TO_CLASS) { + keyCode = keyCode.toUpperCase(); + if (keyCode in modifiers) { + return modifiers.join(separatorStr); + } else { + var action = [keyCode].concat(modifiers); + action.sort(); + return action.join(separatorStr); + } + } + return [keyCode].concat(modifiers).join(separatorStr); +} + +/** + * Returns a text which displayed on a key. + * @param {string} keyData Key glyph data. + * @return {string} Key text value. + */ +function getKeyTextValue(keyData) { + if (keyData.label) { + // Do not show text on the space key. + if (keyData.label == 'space') { + return ''; + } + return keyData.label; + } + + var chars = []; + for (var j = 1; j <= 9; ++j) { + var pos = keyData['p' + j]; + if (pos && pos.length > 0) { + chars.push(hex2char(pos)); + } + } + return chars.join(' '); +} + +/** + * Updates the whole keyboard. + * @param {Array} modifiers Key Modifier list. + */ +function update(modifiers) { + var instructions = $('instructions'); + if (modifiers.length == 0) { + instructions.style.visibility = 'visible'; + } else { + instructions.style.visibility = 'hidden'; + } + + var keyboardGlyphData = getKeyboardGlyphData(); + var shortcutData = getShortcutData(); + var layout = getLayout(); + for (var i = 0; i < layout.length; ++i) { + var identifier = remapIdentifier(layout[i][0]); + var keyData = keyboardGlyphData.keys[identifier]; + var classes = getKeyClasses(identifier, modifiers, keyData); + var keyLabel = getKeyLabel(keyData, modifiers); + var shortcutId = shortcutData[getAction(keyLabel, modifiers)]; + if (modifiers.length == 1 && modifiers[0] == 'SHIFT' && + identifier == '2A') { + // Currently there is no way to identify whether the left shift or the + // right shift is preesed from the key event, so I assume the left shift + // key is pressed here and do not show keyboard shortcut description for + // 'Shift - Shift' (Toggle caps lock) on the left shift key, the + // identifier of which is '2A'. + // TODO(mazda): Remove this workaround (http://crosbug.com/18047) + shortcutId = null; + } + if (shortcutId) { + classes.push('is-shortcut'); + } + + var key = $(keyId(identifier, i)); + key.className = classes.join(' '); + + if (!keyData) { + continue; + } + + var keyText = $(keyTextId(identifier, i)); + var keyTextValue = getKeyTextValue(keyData); + if (keyTextValue) { + keyText.style.visibility = 'visible'; + } else { + keyText.style.visibility = 'hidden'; + } + keyText.textContent = keyTextValue; + + var shortcutText = $(shortcutTextId(identifier, i)); + if (shortcutId) { + shortcutText.style.visibility = 'visible'; + shortcutText.textContent = loadTimeData.getString(shortcutId); + } else { + shortcutText.style.visibility = 'hidden'; + } + + var format = keyboardGlyphData.keys[layout[i][0]].format; + if (format) { + if (format == 'left' || format == 'right') { + shortcutText.style.textAlign = format; + keyText.style.textAlign = format; + } + } + } +} + +/** + * A callback function for onkeydown and onkeyup events. + * @param {Event} e Key event. + */ +function handleKeyEvent(e) { + if (!getKeyboardOverlayId()) { + return; + } + var modifiers = getModifiers(e); + update(modifiers); + KeyboardOverlayAccessibilityHelper.maybeSpeakAllShortcuts(modifiers); + e.preventDefault(); +} + +/** + * Initializes the layout of the keys. + */ +function initLayout() { + // Add data for the caps lock key + var keys = getKeyboardGlyphData().keys; + if (!('3A' in keys)) { + keys['3A'] = {label: 'caps lock', format: 'left'}; + } + // Add data for the special key representing a disabled key + keys['DISABLED'] = {label: 'disabled', format: 'left'}; + + var layout = getLayout(); + var keyboard = document.body; + var minX = window.innerWidth; + var maxX = 0; + var minY = window.innerHeight; + var maxY = 0; + var multiplier = 1.38 * window.innerWidth / BASE_KEYBOARD.width; + var keyMargin = 7; + var offsetX = 10; + var offsetY = 7; + for (var i = 0; i < layout.length; i++) { + var array = layout[i]; + var identifier = remapIdentifier(array[0]); + var x = Math.round((array[1] + offsetX) * multiplier); + var y = Math.round((array[2] + offsetY) * multiplier); + var w = Math.round((array[3] - keyMargin) * multiplier); + var h = Math.round((array[4] - keyMargin) * multiplier); + + var key = document.createElement('div'); + key.id = keyId(identifier, i); + key.className = 'keyboard-overlay-key'; + key.style.left = x + 'px'; + key.style.top = y + 'px'; + key.style.width = w + 'px'; + key.style.height = h + 'px'; + + var keyText = document.createElement('div'); + keyText.id = keyTextId(identifier, i); + keyText.className = 'keyboard-overlay-key-text'; + keyText.style.visibility = 'hidden'; + key.appendChild(keyText); + + var shortcutText = document.createElement('div'); + shortcutText.id = shortcutTextId(identifier, i); + shortcutText.className = 'keyboard-overlay-shortcut-text'; + shortcutText.style.visilibity = 'hidden'; + key.appendChild(shortcutText); + keyboard.appendChild(key); + + minX = Math.min(minX, x); + maxX = Math.max(maxX, x + w); + minY = Math.min(minY, y); + maxY = Math.max(maxY, y + h); + } + + var width = maxX - minX + 1; + var height = maxY - minY + 1; + keyboard.style.width = (width + 2 * (minX + 1)) + 'px'; + keyboard.style.height = (height + 2 * (minY + 1)) + 'px'; + + var instructions = document.createElement('div'); + instructions.id = 'instructions'; + instructions.className = 'keyboard-overlay-instructions'; + instructions.style.left = ((BASE_INSTRUCTIONS.left - BASE_KEYBOARD.left) * + width / BASE_KEYBOARD.width + minX) + 'px'; + instructions.style.top = ((BASE_INSTRUCTIONS.top - BASE_KEYBOARD.top) * + height / BASE_KEYBOARD.height + minY) + 'px'; + instructions.style.width = (width * BASE_INSTRUCTIONS.width / + BASE_KEYBOARD.width) + 'px'; + instructions.style.height = (height * BASE_INSTRUCTIONS.height / + BASE_KEYBOARD.height) + 'px'; + + var instructionsText = document.createElement('div'); + instructionsText.id = 'instructions-text'; + instructionsText.className = 'keyboard-overlay-instructions-text'; + instructionsText.innerHTML = + loadTimeData.getString('keyboardOverlayInstructions'); + instructions.appendChild(instructionsText); + var instructionsHideText = document.createElement('div'); + instructionsHideText.id = 'instructions-hide-text'; + instructionsHideText.className = 'keyboard-overlay-instructions-hide-text'; + instructionsHideText.innerHTML = + loadTimeData.getString('keyboardOverlayInstructionsHide'); + instructions.appendChild(instructionsHideText); + var learnMoreLinkText = document.createElement('div'); + learnMoreLinkText.id = 'learn-more-text'; + learnMoreLinkText.className = 'keyboard-overlay-learn-more-text'; + learnMoreLinkText.addEventListener('click', learnMoreClicked); + var learnMoreLinkAnchor = document.createElement('a'); + learnMoreLinkAnchor.href = + loadTimeData.getString('keyboardOverlayLearnMoreURL'); + learnMoreLinkAnchor.textContent = + loadTimeData.getString('keyboardOverlayLearnMore'); + learnMoreLinkText.appendChild(learnMoreLinkAnchor); + instructions.appendChild(learnMoreLinkText); + keyboard.appendChild(instructions); +} + +/** + * Returns true if the device has a diamond key. + * @return {boolean} Returns true if the device has a diamond key. + */ +function hasDiamondKey() { + return loadTimeData.getBoolean('keyboardOverlayHasChromeOSDiamondKey'); +} + +/** + * Returns true if display scaling feature is enabled. + * @return {boolean} True if display scaling feature is enabled. + */ +function isDisplayUIScalingEnabled() { + return loadTimeData.getBoolean('keyboardOverlayIsDisplayUIScalingEnabled'); +} + +/** + * Initializes the layout and the key labels for the keyboard that has a diamond + * key. + */ +function initDiamondKey() { + var newLayoutData = { + '1D': [65.0, 287.0, 60.0, 60.0], // left Ctrl + '38': [185.0, 287.0, 60.0, 60.0], // left Alt + 'E0 5B': [125.0, 287.0, 60.0, 60.0], // search + '3A': [5.0, 167.0, 105.0, 60.0], // caps lock + '5B': [803.0, 6.0, 72.0, 35.0], // lock key + '5D': [5.0, 287.0, 60.0, 60.0] // diamond key + }; + + var layout = getLayout(); + var powerKeyIndex = -1; + var powerKeyId = '00'; + for (var i = 0; i < layout.length; i++) { + var keyId = layout[i][0]; + if (keyId in newLayoutData) { + layout[i] = [keyId].concat(newLayoutData[keyId]); + delete newLayoutData[keyId]; + } + if (keyId == powerKeyId) + powerKeyIndex = i; + } + for (var keyId in newLayoutData) + layout.push([keyId].concat(newLayoutData[keyId])); + + // Remove the power key. + if (powerKeyIndex != -1) + layout.splice(powerKeyIndex, 1); + + var keyData = getKeyboardGlyphData()['keys']; + var newKeyData = { + '3A': {'label': 'caps lock', 'format': 'left'}, + '5B': {'label': 'lock'}, + '5D': {'label': 'diamond', 'format': 'left'} + }; + for (var keyId in newKeyData) + keyData[keyId] = newKeyData[keyId]; +} + +/** + * A callback function for the onload event of the body element. + */ +function init() { + document.addEventListener('keydown', handleKeyEvent); + document.addEventListener('keyup', handleKeyEvent); + chrome.send('getLabelMap'); +} + +/** + * Initializes the global map for remapping identifiers of modifier keys based + * on the preference. + * Called after sending the 'getLabelMap' message. + * @param {Object} remap Identifier map. + */ +function initIdentifierMap(remap) { + for (var key in remap) { + var val = remap[key]; + if ((key in LABEL_TO_IDENTIFIER) && + (val in LABEL_TO_IDENTIFIER)) { + identifierMap[LABEL_TO_IDENTIFIER[key]] = + LABEL_TO_IDENTIFIER[val]; + } else { + console.error('Invalid label map element: ' + key + ', ' + val); + } + } + chrome.send('getInputMethodId'); +} + +/** + * Initializes the global keyboad overlay ID and the layout of keys. + * Called after sending the 'getInputMethodId' message. + * @param {inputMethodId} inputMethodId Input Method Identifier. + */ +function initKeyboardOverlayId(inputMethodId) { + // Libcros returns an empty string when it cannot find the keyboard overlay ID + // corresponding to the current input method. + // In such a case, fallback to the default ID (en_US). + var inputMethodIdToOverlayId = + keyboardOverlayData['inputMethodIdToOverlayId']; + if (inputMethodId) { + keyboardOverlayId = inputMethodIdToOverlayId[inputMethodId]; + } + if (!keyboardOverlayId) { + console.error('No keyboard overlay ID for ' + inputMethodId); + keyboardOverlayId = 'en_US'; + } + while (document.body.firstChild) { + document.body.removeChild(document.body.firstChild); + } + // We show Japanese layout as-is because the user has chosen the layout + // that is quite diffrent from the physical layout that has a diamond key. + if (hasDiamondKey() && getLayoutName() != 'J') + initDiamondKey(); + initLayout(); + update([]); + window.webkitRequestAnimationFrame(function() { + chrome.send('didPaint'); + }); +} + +/** + * Handles click events of the learn more link. + * @param {Event} e Mouse click event. + */ +function learnMoreClicked(e) { + chrome.send('openLearnMorePage'); + chrome.send('DialogClose'); + e.preventDefault(); +} + +document.addEventListener('DOMContentLoaded', init); diff --git a/chromium/chrome/browser/resources/chromeos/keyboard_overlay_accessibility_helper.js b/chromium/chrome/browser/resources/chromeos/keyboard_overlay_accessibility_helper.js new file mode 100644 index 00000000000..c28a5001c2c --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/keyboard_overlay_accessibility_helper.js @@ -0,0 +1,40 @@ +// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// An object to implement keyboard overlay accessiblity. +var KeyboardOverlayAccessibilityHelper = { + // Returns true when ChromeVox is loaded and active, false otherwise. + cvoxIsActive: function() { + return window.cvox && window.cvox.Api.isChromeVoxActive(); + }, + // Speaks all the shortcut with the given modifiers. + maybeSpeakAllShortcuts: function(modifiers) { + if (!this.cvoxIsActive()) + return; + cvox.Api.stop(); + var keyboardGlyphData = getKeyboardGlyphData(); + var shortcutData = getShortcutData(); + var layout = getLayouts()[keyboardGlyphData.layoutName]; + var keysToShortcutText = {}; + for (var i = 0; i < layout.length; ++i) { + var identifier = remapIdentifier(layout[i][0]); + var keyData = keyboardGlyphData.keys[identifier]; + var keyLabel = getKeyLabel(keyData, modifiers); + var shortcutId = shortcutData[getAction(keyLabel, modifiers)]; + var shortcutText = templateData[shortcutId]; + var keysText = modifiers.concat(keyLabel).join(' + '); + if (shortcutText) + keysToShortcutText[keysText] = shortcutText; + } + for (var keysText in keysToShortcutText) { + this.speakShortcut_(keysText, keysToShortcutText[keysText]); + } + }, + // Speaks given shortcut description. + speakShortcut_: function(keysText, shortcutText) { + keysText = keysText.toLowerCase(); // For correct pronunciation. + cvox.Api.speak(keysText, 1, {}); + cvox.Api.speak(shortcutText, 1, {}); + }, +}; diff --git a/chromium/chrome/browser/resources/chromeos/keyboard_overlay_data.js b/chromium/chrome/browser/resources/chromeos/keyboard_overlay_data.js new file mode 100644 index 00000000000..76c911888fa --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/keyboard_overlay_data.js @@ -0,0 +1,15917 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// This is a generated file but may contain local modifications. See +// src/tools/gen_keyboard_overlay_data/gen_keyboard_overlay_data.py --help + +var keyboardOverlayData = { + 'inputMethodIdToOverlayId': { + 'm17n:ar:kbd': 'ar', + 'm17n:fa:isiri': 'ar', + 'm17n:hi:itrans': 'hi', + 'm17n:th:kesmanee': 'th', + 'm17n:th:pattachote': 'th', + 'm17n:th:tis820': 'th', + 'm17n:vi:tcvn': 'vi', + 'm17n:vi:telex': 'vi', + 'm17n:vi:viqr': 'vi', + 'm17n:vi:vni': 'vi', + 'm17n:zh:cangjie': 'zh_TW', + 'm17n:zh:quick': 'zh_TW', + 'mozc': 'en_US', + 'mozc-chewing': 'zh_TW', + 'mozc-dv': 'en_US_dvorak', + 'mozc-hangul': 'ko', + 'mozc-jp': 'ja', + 'pinyin': 'zh_CN', + 'pinyin-dv': 'en_US_dvorak', + 'xkb:be::fra': 'fr', + 'xkb:be::ger': 'de', + 'xkb:be::nld': 'nl', + 'xkb:bg::bul': 'bg', + 'xkb:bg:phonetic:bul': 'bg', + 'xkb:br::por': 'pt_BR', + 'xkb:ca::fra': 'fr_CA', + 'xkb:ca:eng:eng': 'ca', + 'xkb:ch::ger': 'de', + 'xkb:ch:fr:fra': 'fr', + 'xkb:cz::cze': 'cs', + 'xkb:de::ger': 'de', + 'xkb:de:neo:ger': 'de_neo', + 'xkb:dk::dan': 'da', + 'xkb:ee::est': 'et', + 'xkb:es::spa': 'es', + 'xkb:es:cat:cat': 'ca', + 'xkb:fi::fin': 'fi', + 'xkb:fr::fra': 'fr', + 'xkb:gb:dvorak:eng': 'en_GB_dvorak', + 'xkb:gb:extd:eng': 'en_GB', + 'xkb:gr::gre': 'el', + 'xkb:hr::scr': 'hr', + 'xkb:hu::hun': 'hu', + 'xkb:il::heb': 'iw', + 'xkb:it::ita': 'it', + 'xkb:jp::jpn': 'ja', + 'xkb:kr:kr104:kor': 'ko', + 'xkb:latam::spa': 'es_419', + 'xkb:lt::lit': 'lt', + 'xkb:lv:apostrophe:lav': 'lv', + 'xkb:no::nob': 'no', + 'xkb:pl::pol': 'pl', + 'xkb:pt::por': 'pt_PT', + 'xkb:ro::rum': 'ro', + 'xkb:rs::srp': 'sr', + 'xkb:ru::rus': 'ru', + 'xkb:ru:phonetic:rus': 'ru', + 'xkb:se::swe': 'sv', + 'xkb:si::slv': 'sl', + 'xkb:sk::slo': 'sk', + 'xkb:tr::tur': 'tr', + 'xkb:ua::ukr': 'uk', + 'xkb:us::eng': 'en_US', + 'xkb:us:altgr-intl:eng': 'en_US_altgr_intl', + 'xkb:us:colemak:eng': 'en_US_colemak', + 'xkb:us:dvorak:eng': 'en_US_dvorak', + 'xkb:us:intl:eng': 'en_US_intl', + 'zinnia-japanese': 'ja' + }, + 'keyboardGlyph': { + 'ar': { + 'keys': { + '00': { + 'label': 'power' + }, + '01': { + 'format': 'smaller', + 'label': 'esc' + }, + '02': { + 'p1': '21', + 'p7': '31', + 'p9': '661' + }, + '03': { + 'p1': '40', + 'p7': '32', + 'p9': '662' + }, + '04': { + 'p1': '23', + 'p7': '33', + 'p9': '663' + }, + '05': { + 'p1': '24', + 'p7': '34', + 'p9': '664' + }, + '06': { + 'p1': '66A', + 'p7': '35', + 'p9': '665' + }, + '07': { + 'p1': '5E', + 'p7': '36', + 'p9': '666' + }, + '08': { + 'p1': '26', + 'p7': '37', + 'p9': '667' + }, + '09': { + 'p1': '66D', + 'p7': '38', + 'p9': '668' + }, + '0A': { + 'p1': '28', + 'p7': '39', + 'p9': '669' + }, + '0B': { + 'p1': '29', + 'p7': '30', + 'p9': '660' + }, + '0C': { + 'p1': '5F', + 'p7': '2D' + }, + '0D': { + 'p1': '2B', + 'p7': '3D' + }, + '0E': { + 'format': 'right', + 'label': 'backspace' + }, + '0F': { + 'format': 'left', + 'label': 'tab' + }, + '10': { + 'p3': '064E', + 'p7': '71', + 'p9': 'FEBF' + }, + '11': { + 'p3': '064B', + 'p7': '77', + 'p9': 'FEBB' + }, + '12': { + 'p3': '064F', + 'p7': '65', + 'p9': 'FE9B' + }, + '13': { + 'p3': '064C', + 'p7': '72', + 'p9': 'FED7' + }, + '14': { + 'p3': 'FEF9', + 'p7': '74', + 'p9': 'FED3' + }, + '15': { + 'p3': 'FE87', + 'p7': '79', + 'p9': 'FECF' + }, + '16': { + 'p3': '60', + 'p7': '75', + 'p9': 'FECB' + }, + '17': { + 'p3': 'F7', + 'p7': '69', + 'p9': 'FEEB' + }, + '18': { + 'p3': 'D7', + 'p7': '6F', + 'p9': 'FEA7' + }, + '19': { + 'p3': '61B', + 'p7': '70', + 'p9': 'FEA3' + }, + '1A': { + 'p3': '3C', + 'p9': 'FE9F' + }, + '1B': { + 'p3': '3E', + 'p9': 'FEA9' + }, + '1C': { + 'format': 'right', + 'label': 'enter' + }, + '1D': { + 'format': 'left', + 'label': 'ctrl' + }, + '1E': { + 'p3': '650', + 'p7': '61', + 'p9': 'FEB7' + }, + '1F': { + 'p3': '064D', + 'p7': '73', + 'p9': 'FEB3' + }, + '20': { + 'p3': '005B', + 'p7': '64', + 'p9': 'FEF3' + }, + '21': { + 'p3': '005D', + 'p7': '66', + 'p9': 'FE91' + }, + '22': { + 'p3': 'FEF7', + 'p7': '67', + 'p9': 'FEDF' + }, + '23': { + 'p3': 'FE83', + 'p7': '68', + 'p9': 'FE8D' + }, + '24': { + 'p3': '640', + 'p7': '6A', + 'p9': 'FE97' + }, + '25': { + 'p3': '060C', + 'p7': '6B', + 'p9': 'FEE7' + }, + '26': { + 'p3': '002F', + 'p7': '6C', + 'p9': 'FEE3' + }, + '27': { + 'p3': '003A', + 'p9': 'FEDB' + }, + '28': { + 'p3': '22', + 'p9': 'FEC3' + }, + '29': { + 'p1': '007E', + 'p3': 'FE7C', + 'p7': '60', + 'p9': 'FEAB' + }, + '2A': { + 'format': 'left', + 'label': 'shift' + }, + '2B': { + 'p1': '007c', + 'p7': '005c' + }, + '2C': { + 'p3': '007E', + 'p7': '7A', + 'p9': 'FE8B' + }, + '2D': { + 'p3': 'FE7E', + 'p7': '78', + 'p9': 'FE80' + }, + '2E': { + 'p3': '007B', + 'p7': '63', + 'p9': 'FE85' + }, + '2F': { + 'p3': '007D', + 'p7': '76', + 'p9': 'FEAD' + }, + '30': { + 'p3': 'FEF5', + 'p7': '62', + 'p9': 'FEFB' + }, + '31': { + 'p3': 'FE81', + 'p7': '6E', + 'p9': 'FEEF' + }, + '32': { + 'p3': '27', + 'p7': '6D', + 'p9': 'FE93' + }, + '33': { + 'p3': '002C', + 'p9': 'FEED' + }, + '34': { + 'p3': '002E', + 'p9': 'FEAF' + }, + '35': { + 'p3': '61F', + 'p9': 'FEC7' + }, + '36': { + 'format': 'right', + 'label': 'shift' + }, + '37': {}, + '38': { + 'format': 'left', + 'label': 'alt' + }, + '39': { + 'label': 'space' + }, + '3B': { + 'label': 'back' + }, + '3C': { + 'label': 'forward' + }, + '3D': { + 'label': 'reload' + }, + '3E': { + 'label': 'full screen' + }, + '3F': { + 'label': 'switch window' + }, + '40': { + 'label': 'bright down' + }, + '41': { + 'label': 'bright up' + }, + '42': { + 'label': 'mute' + }, + '43': { + 'label': 'vol. down' + }, + '44': { + 'label': 'vol. up' + }, + '73': {}, + '79': { + 'format': 'smaller' + }, + '7B': { + 'format': 'smaller' + }, + '7D': {}, + 'E0 1D': { + 'format': 'smaller', + 'label': 'ctrl' + }, + 'E0 38': { + 'format': 'smaller', + 'label': 'alt' + }, + 'E0 48': { + 'label': 'up' + }, + 'E0 4B': { + 'label': 'left' + }, + 'E0 4D': { + 'label': 'right' + }, + 'E0 50': { + 'label': 'down' + }, + 'E0 5B': { + 'format': 'left', + 'label': 'search' + } + }, + 'layoutName': 'U' + }, + 'bg': { + 'keys': { + '00': { + 'label': 'power' + }, + '01': { + 'format': 'smaller', + 'label': 'esc' + }, + '02': { + 'p1': '21', + 'p7': '31' + }, + '03': { + 'p1': '40', + 'p3': '003f', + 'p7': '32' + }, + '04': { + 'p1': '23', + 'p3': '002b', + 'p7': '33' + }, + '05': { + 'p1': '24', + 'p3': '22', + 'p7': '34' + }, + '06': { + 'p1': '25', + 'p7': '35' + }, + '07': { + 'p1': '5e', + 'p3': '003d', + 'p7': '36' + }, + '08': { + 'p1': '26', + 'p3': '003a', + 'p7': '37' + }, + '09': { + 'p1': '2a', + 'p3': '002f', + 'p7': '38' + }, + '0A': { + 'p1': '28', + 'p3': '005f', + 'p7': '39' + }, + '0B': { + 'p1': '29', + 'p3': '2116', + 'p7': '30' + }, + '0C': { + 'p1': '5f', + 'p3': '49', + 'p7': '002d' + }, + '0D': { + 'p1': '2b', + 'p3': '56', + 'p7': '3d', + 'p9': '002e' + }, + '0E': { + 'format': 'right', + 'label': 'backspace' + }, + '0F': { + 'format': 'left', + 'label': 'tab' + }, + '10': { + 'p1': '71', + 'p3': '44b', + 'p9': '2c' + }, + '11': { + 'p1': '77', + 'p9': '443' + }, + '12': { + 'p1': '65', + 'p9': '435' + }, + '13': { + 'p1': '72', + 'p9': '438' + }, + '14': { + 'p1': '74', + 'p9': '448' + }, + '15': { + 'p1': '79', + 'p9': '449' + }, + '16': { + 'p1': '75', + 'p9': '43a' + }, + '17': { + 'p1': '69', + 'p9': '441' + }, + '18': { + 'p1': '6f', + 'p9': '434' + }, + '19': { + 'p1': '70', + 'p9': '437' + }, + '1A': { + 'p1': '7b', + 'p7': '5b', + 'p9': '446' + }, + '1B': { + 'p1': '7d', + 'p3': 'a7', + 'p7': '5d', + 'p9': '3b' + }, + '1C': { + 'format': 'right', + 'label': 'enter' + }, + '1D': { + 'format': 'left', + 'label': 'ctrl' + }, + '1E': { + 'p1': '61', + 'p9': '44c' + }, + '1F': { + 'p1': '73', + 'p9': '44f' + }, + '20': { + 'p1': '64', + 'p9': '430' + }, + '21': { + 'p1': '66', + 'p9': '43e' + }, + '22': { + 'p1': '67', + 'p9': '436' + }, + '23': { + 'p1': '68', + 'p9': '433' + }, + '24': { + 'p1': '6a', + 'p9': '442' + }, + '25': { + 'p1': '6b', + 'p9': '43d' + }, + '26': { + 'p1': '6c', + 'p9': '432' + }, + '27': { + 'p1': '3a', + 'p7': '3b', + 'p9': '43c' + }, + '28': { + 'p1': '201E', + 'p7': '27', + 'p9': '447' + }, + '29': { + 'p1': '007e', + 'p7': '60' + }, + '2A': { + 'format': 'left', + 'label': 'shift' + }, + '2B': { + 'p1': '7c', + 'p3': '29', + 'p7': '5c', + 'p9': '28' + }, + '2C': { + 'p1': '7a', + 'p9': '44e' + }, + '2D': { + 'p1': '78', + 'p9': '439' + }, + '2E': { + 'p1': '63', + 'p9': '44a' + }, + '2F': { + 'p1': '76', + 'p9': '44d' + }, + '30': { + 'p1': '62', + 'p9': '444' + }, + '31': { + 'p1': '6e', + 'p9': '445' + }, + '32': { + 'p1': '6d', + 'p9': '43f' + }, + '33': { + 'p1': '3c', + 'p7': '2c', + 'p9': '440' + }, + '34': { + 'p1': '3e', + 'p7': '2e', + 'p9': '43b' + }, + '35': { + 'p1': '3f', + 'p7': '2f', + 'p9': '431' + }, + '36': { + 'format': 'right', + 'label': 'shift' + }, + '37': {}, + '38': { + 'format': 'left', + 'label': 'alt' + }, + '39': { + 'label': 'space' + }, + '3B': { + 'label': 'back' + }, + '3C': { + 'label': 'forward' + }, + '3D': { + 'label': 'reload' + }, + '3E': { + 'label': 'full screen' + }, + '3F': { + 'label': 'switch window' + }, + '40': { + 'label': 'bright down' + }, + '41': { + 'label': 'bright up' + }, + '42': { + 'label': 'mute' + }, + '43': { + 'label': 'vol. down' + }, + '44': { + 'label': 'vol. up' + }, + '73': {}, + '79': { + 'format': 'smaller' + }, + '7B': { + 'format': 'smaller' + }, + '7D': {}, + 'E0 1D': { + 'format': 'smaller', + 'label': 'ctrl' + }, + 'E0 38': { + 'format': 'smaller', + 'label': 'alt gr' + }, + 'E0 48': { + 'label': 'up' + }, + 'E0 4B': { + 'label': 'left' + }, + 'E0 4D': { + 'label': 'right' + }, + 'E0 50': { + 'label': 'down' + }, + 'E0 5B': { + 'format': 'left', + 'label': 'search' + } + }, + 'layoutName': 'U' + }, + 'ca': { + 'keys': { + '00': { + 'label': 'power' + }, + '01': { + 'format': 'smaller', + 'label': 'esc' + }, + '02': { + 'p2': '21', + 'p8': '31', + 'p9': '007C' + }, + '03': { + 'p2': '22', + 'p8': '32', + 'p9': '40' + }, + '04': { + 'p2': '00B7', + 'p8': '33', + 'p9': '23' + }, + '05': { + 'p2': '24', + 'p8': '34', + 'p9': '007E' + }, + '06': { + 'p2': '25', + 'p8': '35' + }, + '07': { + 'p2': '26', + 'p8': '36', + 'p9': '00AC' + }, + '08': { + 'p2': '002F', + 'p8': '37' + }, + '09': { + 'p2': '28', + 'p8': '38' + }, + '0A': { + 'p2': '29', + 'p8': '39' + }, + '0B': { + 'p2': '003D', + 'p8': '30' + }, + '0C': { + 'p2': '003F', + 'p8': '27' + }, + '0D': { + 'p2': '00BF', + 'p8': '00A1' + }, + '0E': { + 'format': 'right', + 'label': 'backspace' + }, + '0F': { + 'format': 'left', + 'label': 'tab' + }, + '10': { + 'p5': '71' + }, + '11': { + 'p5': '77' + }, + '12': { + 'p5': '65', + 'p9': '20AC' + }, + '13': { + 'p5': '72' + }, + '14': { + 'p5': '74' + }, + '15': { + 'p5': '79' + }, + '16': { + 'p5': '75' + }, + '17': { + 'p5': '69' + }, + '18': { + 'p5': '006F' + }, + '19': { + 'p5': '70' + }, + '1A': { + 'p2': '005E', + 'p8': '60', + 'p9': '005B' + }, + '1B': { + 'p2': '002A', + 'p8': '002B', + 'p9': '005D' + }, + '1C': { + 'format': 'right', + 'label': 'enter' + }, + '1D': { + 'format': 'left', + 'label': 'ctrl' + }, + '1E': { + 'p5': '61' + }, + '1F': { + 'p5': '73' + }, + '20': { + 'p5': '64' + }, + '21': { + 'p5': '66' + }, + '22': { + 'p5': '67' + }, + '23': { + 'p5': '68' + }, + '24': { + 'p5': '006A' + }, + '25': { + 'p5': '006B' + }, + '26': { + 'p5': '006C' + }, + '27': { + 'p5': '00F1' + }, + '28': { + 'p2': '00A8', + 'p8': '00B4', + 'p9': '007B' + }, + '29': { + 'p2': '00AA', + 'p8': '00BA', + 'p9': '005C' + }, + '2A': { + 'format': 'left', + 'label': 'shift' + }, + '2B': { + 'p2': '00C7', + 'p8': 'E7', + 'p9': '007D' + }, + '2C': { + 'p5': '007A' + }, + '2D': { + 'p5': '78' + }, + '2E': { + 'p5': '63' + }, + '2F': { + 'p5': '76' + }, + '30': { + 'p5': '62' + }, + '31': { + 'p5': '006E' + }, + '32': { + 'p5': '006D' + }, + '33': { + 'p2': '003B', + 'p8': '002C' + }, + '34': { + 'p2': '003A', + 'p8': '002E' + }, + '35': { + 'p2': '005F', + 'p8': '002D' + }, + '36': { + 'format': 'right', + 'label': 'shift' + }, + '38': { + 'format': 'left', + 'label': 'alt' + }, + '39': { + 'label': 'space' + }, + '3B': { + 'label': 'back' + }, + '3C': { + 'label': 'forward' + }, + '3D': { + 'label': 'reload' + }, + '3E': { + 'label': 'full screen' + }, + '3F': { + 'label': 'switch window' + }, + '40': { + 'label': 'bright down' + }, + '41': { + 'label': 'bright up' + }, + '42': { + 'label': 'mute' + }, + '43': { + 'label': 'vol. down' + }, + '44': { + 'label': 'vol. up' + }, + '56': { + 'p2': '003E', + 'p8': '003C' + }, + 'E0 1D': { + 'format': 'smaller', + 'label': 'ctrl' + }, + 'E0 38': { + 'format': 'smaller', + 'label': 'alt gr' + }, + 'E0 48': { + 'label': 'up' + }, + 'E0 4B': { + 'label': 'left' + }, + 'E0 4D': { + 'label': 'right' + }, + 'E0 50': { + 'label': 'down' + }, + 'E0 5B': { + 'format': 'left', + 'label': 'search' + } + }, + 'layoutName': 'E' + }, + 'cs': { + 'keys': { + '00': { + 'label': 'power' + }, + '01': { + 'format': 'smaller', + 'label': 'esc' + }, + '02': { + 'p1': '21', + 'p3': '31', + 'p7': '31', + 'p9': '002b' + }, + '03': { + 'p1': '40', + 'p3': '32', + 'p7': '32', + 'p9': '011B' + }, + '04': { + 'p1': '23', + 'p3': '33', + 'p7': '33', + 'p9': '161' + }, + '05': { + 'p1': '24', + 'p3': '34', + 'p7': '34', + 'p9': '010d' + }, + '06': { + 'p1': '25', + 'p3': '35', + 'p7': '35', + 'p9': '159' + }, + '07': { + 'p1': '5e', + 'p3': '36', + 'p7': '36', + 'p9': '017e' + }, + '08': { + 'p1': '26', + 'p3': '37', + 'p7': '37', + 'p9': 'fd' + }, + '09': { + 'p1': '2a', + 'p3': '38', + 'p7': '38', + 'p9': 'e1' + }, + '0A': { + 'p1': '28', + 'p3': '39', + 'p7': '39', + 'p9': 'ed' + }, + '0B': { + 'p1': '29', + 'p3': '30', + 'p7': '30', + 'p9': 'e9' + }, + '0C': { + 'p1': '5f', + 'p3': '25', + 'p7': '2d', + 'p9': '3d' + }, + '0D': { + 'p1': '2b', + 'p3': '2c7', + 'p7': '3d', + 'p9': 'b4' + }, + '0E': { + 'format': 'right', + 'label': 'backspace' + }, + '0F': { + 'format': 'left', + 'label': 'tab' + }, + '10': { + 'p5': '71' + }, + '11': { + 'p5': '77' + }, + '12': { + 'p5': '65', + 'p9': '20ac' + }, + '13': { + 'p5': '72' + }, + '14': { + 'p5': '74' + }, + '15': { + 'p5': '7A', + 'p9': '79' + }, + '16': { + 'p5': '75' + }, + '17': { + 'p5': '69' + }, + '18': { + 'p5': '6F' + }, + '19': { + 'p5': '70' + }, + '1A': { + 'p1': '7b', + 'p3': '002f', + 'p7': '5b', + 'p9': 'fa' + }, + '1B': { + 'p1': '7d', + 'p3': '28', + 'p7': '5d', + 'p9': '29' + }, + '1C': { + 'format': 'right', + 'label': 'enter' + }, + '1D': { + 'format': 'left', + 'label': 'ctrl' + }, + '1E': { + 'p5': '61' + }, + '1F': { + 'p5': '73' + }, + '20': { + 'p5': '64' + }, + '21': { + 'p5': '66' + }, + '22': { + 'p5': '67' + }, + '23': { + 'p5': '68' + }, + '24': { + 'p5': '6A' + }, + '25': { + 'p5': '6B' + }, + '26': { + 'p5': '6C' + }, + '27': { + 'p1': '3a', + 'p3': '22', + 'p7': '3b', + 'p9': '16f' + }, + '28': { + 'p1': '22', + 'p3': '21', + 'p7': '27', + 'p9': 'a7' + }, + '29': { + 'p1': '7e', + 'p3': 'b0', + 'p7': '60', + 'p9': '3b' + }, + '2A': { + 'format': 'left', + 'label': 'shift' + }, + '2B': { + 'p1': '007c', + 'p3': '27', + 'p7': '5c', + 'p9': 'a8' + }, + '2C': { + 'p5': '79', + 'p9': '7A' + }, + '2D': { + 'p5': '78' + }, + '2E': { + 'p5': '63' + }, + '2F': { + 'p5': '76' + }, + '30': { + 'p5': '62' + }, + '31': { + 'p5': '6E' + }, + '32': { + 'p5': '6D' + }, + '33': { + 'p1': '3c', + 'p3': '3f', + 'p7': '2c', + 'p9': '2c' + }, + '34': { + 'p1': '3e', + 'p3': '3a', + 'p7': '2e', + 'p9': '2e' + }, + '35': { + 'p1': '3f', + 'p3': '5f', + 'p7': '2f', + 'p9': '2d' + }, + '36': { + 'format': 'right', + 'label': 'shift' + }, + '38': { + 'format': 'left', + 'label': 'alt' + }, + '39': { + 'label': 'space' + }, + '3B': { + 'label': 'back' + }, + '3C': { + 'label': 'forward' + }, + '3D': { + 'label': 'reload' + }, + '3E': { + 'label': 'full screen' + }, + '3F': { + 'label': 'switch window' + }, + '40': { + 'label': 'bright down' + }, + '41': { + 'label': 'bright up' + }, + '42': { + 'label': 'mute' + }, + '43': { + 'label': 'vol. down' + }, + '44': { + 'label': 'vol. up' + }, + '56': { + 'p1': '7c', + 'p3': '2a', + 'p7': '5c', + 'p9': '26' + }, + '73': {}, + '79': { + 'format': 'smaller' + }, + '7B': { + 'format': 'smaller' + }, + '7D': {}, + 'E0 1D': { + 'format': 'smaller', + 'label': 'ctrl' + }, + 'E0 38': { + 'format': 'smaller', + 'label': 'alt gr' + }, + 'E0 48': { + 'label': 'up' + }, + 'E0 4B': { + 'label': 'left' + }, + 'E0 4D': { + 'label': 'right' + }, + 'E0 50': { + 'label': 'down' + }, + 'E0 5B': { + 'format': 'left', + 'label': 'search' + } + }, + 'layoutName': 'E' + }, + 'da': { + 'keys': { + '00': { + 'label': 'power' + }, + '01': { + 'format': 'smaller', + 'label': 'esc' + }, + '02': { + 'p1': '21', + 'p7': '31' + }, + '03': { + 'p1': '22', + 'p7': '32', + 'p9': '40' + }, + '04': { + 'p1': '23', + 'p7': '33', + 'p9': '00A3' + }, + '05': { + 'p1': '00A4', + 'p7': '34', + 'p9': '24' + }, + '06': { + 'p1': '25', + 'p7': '35' + }, + '07': { + 'p1': '26', + 'p7': '36' + }, + '08': { + 'p1': '002F', + 'p7': '37', + 'p9': '007B' + }, + '09': { + 'p1': '28', + 'p7': '38', + 'p9': '005B' + }, + '0A': { + 'p1': '29', + 'p7': '39', + 'p9': '005D' + }, + '0B': { + 'p1': '003D', + 'p7': '30', + 'p9': '007D' + }, + '0C': { + 'p1': '003F', + 'p7': '002B' + }, + '0D': { + 'p1': '60', + 'p7': '00B4', + 'p9': '007C' + }, + '0E': { + 'format': 'right', + 'label': 'backspace' + }, + '0F': { + 'format': 'left', + 'label': 'tab' + }, + '10': { + 'p5': '71' + }, + '11': { + 'p5': '77' + }, + '12': { + 'p5': '65', + 'p9': '20AC' + }, + '13': { + 'p5': '72' + }, + '14': { + 'p5': '74' + }, + '15': { + 'p5': '79' + }, + '16': { + 'p5': '75' + }, + '17': { + 'p5': '69' + }, + '18': { + 'p5': '006F' + }, + '19': { + 'p5': '70' + }, + '1A': { + 'p5': 'E5' + }, + '1B': { + 'p1': '005E', + 'p7': '00A8', + 'p9': '007E' + }, + '1C': { + 'format': 'right', + 'label': 'enter' + }, + '1D': { + 'format': 'left', + 'label': 'ctrl' + }, + '1E': { + 'p5': '61' + }, + '1F': { + 'p5': '73' + }, + '20': { + 'p5': '64' + }, + '21': { + 'p5': '66' + }, + '22': { + 'p5': '67' + }, + '23': { + 'p5': '68' + }, + '24': { + 'p5': '006A' + }, + '25': { + 'p5': '006B' + }, + '26': { + 'p5': '006C' + }, + '27': { + 'p5': 'E6' + }, + '28': { + 'p5': '00F8' + }, + '29': { + 'p1': '00A7', + 'p7': '00BD' + }, + '2A': { + 'format': 'left', + 'label': 'shift' + }, + '2B': { + 'p1': '002A', + 'p7': '27' + }, + '2C': { + 'p5': '007A' + }, + '2D': { + 'p5': '78' + }, + '2E': { + 'p5': '63' + }, + '2F': { + 'p5': '76' + }, + '30': { + 'p5': '62' + }, + '31': { + 'p5': '006E' + }, + '32': { + 'p5': '006D' + }, + '33': { + 'p1': '003B', + 'p7': '002C' + }, + '34': { + 'p1': '003A', + 'p7': '002E' + }, + '35': { + 'p1': '005F', + 'p7': '002D' + }, + '36': { + 'format': 'right', + 'label': 'shift' + }, + '38': { + 'format': 'left', + 'label': 'alt' + }, + '39': { + 'label': 'space' + }, + '3B': { + 'label': 'back' + }, + '3C': { + 'label': 'forward' + }, + '3D': { + 'label': 'reload' + }, + '3E': { + 'label': 'full screen' + }, + '3F': { + 'label': 'switch window' + }, + '40': { + 'label': 'bright down' + }, + '41': { + 'label': 'bright up' + }, + '42': { + 'label': 'mute' + }, + '43': { + 'label': 'vol. down' + }, + '44': { + 'label': 'vol. up' + }, + '56': { + 'p1': '003E', + 'p7': '003C', + 'p9': '005C' + }, + '73': {}, + '79': { + 'format': 'smaller' + }, + '7B': { + 'format': 'smaller' + }, + '7D': {}, + 'E0 1D': { + 'format': 'smaller', + 'label': 'ctrl' + }, + 'E0 38': { + 'format': 'smaller', + 'label': 'alt gr' + }, + 'E0 48': { + 'label': 'up' + }, + 'E0 4B': { + 'label': 'left' + }, + 'E0 4D': { + 'label': 'right' + }, + 'E0 50': { + 'label': 'down' + }, + 'E0 5B': { + 'format': 'left', + 'label': 'search' + } + }, + 'layoutName': 'E' + }, + 'de': { + 'keys': { + '00': { + 'label': 'power' + }, + '01': { + 'format': 'smaller', + 'label': 'esc' + }, + '02': { + 'p2': '21', + 'p8': '31' + }, + '03': { + 'p2': '22', + 'p8': '32', + 'p9': '00B2' + }, + '04': { + 'p2': '00A7', + 'p8': '33', + 'p9': '00B3' + }, + '05': { + 'p2': '24', + 'p8': '34' + }, + '06': { + 'p2': '25', + 'p8': '35' + }, + '07': { + 'p2': '26', + 'p8': '36' + }, + '08': { + 'p2': '002F', + 'p8': '37', + 'p9': '007B' + }, + '09': { + 'p2': '28', + 'p8': '38', + 'p9': '005B' + }, + '0A': { + 'p2': '29', + 'p8': '39', + 'p9': '005D' + }, + '0B': { + 'p2': '3D', + 'p8': '30', + 'p9': '7D' + }, + '0C': { + 'p2': '3F', + 'p8': 'DF', + 'p9': '5C' + }, + '0D': { + 'p2': '60', + 'p8': 'B4' + }, + '0E': { + 'format': 'right', + 'label': 'backspace' + }, + '0F': { + 'format': 'left', + 'label': 'tab' + }, + '10': { + 'p5': '71', + 'p9': '40' + }, + '11': { + 'p5': '77' + }, + '12': { + 'p5': '65', + 'p9': '20AC' + }, + '13': { + 'p5': '72' + }, + '14': { + 'p5': '74' + }, + '15': { + 'p5': '007A' + }, + '16': { + 'p5': '75' + }, + '17': { + 'p5': '69' + }, + '18': { + 'p5': '006F' + }, + '19': { + 'p5': '70' + }, + '1A': { + 'p5': '00FC' + }, + '1B': { + 'p2': '2A', + 'p8': '2B', + 'p9': '7E' + }, + '1C': { + 'format': 'right', + 'label': 'enter' + }, + '1D': { + 'format': 'left', + 'label': 'strg' + }, + '1E': { + 'p5': '61' + }, + '1F': { + 'p5': '73' + }, + '20': { + 'p5': '64' + }, + '21': { + 'p5': '66' + }, + '22': { + 'p5': '67' + }, + '23': { + 'p5': '68' + }, + '24': { + 'p5': '006A' + }, + '25': { + 'p5': '006B' + }, + '26': { + 'p5': '006C' + }, + '27': { + 'p5': '00F6' + }, + '28': { + 'p5': 'E4' + }, + '29': { + 'p2': '00B0', + 'p8': '005E' + }, + '2A': { + 'format': 'left', + 'label': 'shift' + }, + '2B': { + 'p2': '27', + 'p8': '23' + }, + '2C': { + 'p5': '79' + }, + '2D': { + 'p5': '78' + }, + '2E': { + 'p5': '63' + }, + '2F': { + 'p5': '76' + }, + '30': { + 'p5': '62' + }, + '31': { + 'p5': '006E' + }, + '32': { + 'p5': '006D', + 'p9': 'B5' + }, + '33': { + 'p2': '3B', + 'p8': '2C' + }, + '34': { + 'p2': '3A', + 'p8': '2E' + }, + '35': { + 'p2': '5F', + 'p8': '2D' + }, + '36': { + 'format': 'right', + 'label': 'shift' + }, + '38': { + 'format': 'left', + 'label': 'alt' + }, + '39': { + 'label': 'space' + }, + '3B': { + 'label': 'back' + }, + '3C': { + 'label': 'forward' + }, + '3D': { + 'label': 'reload' + }, + '3E': { + 'label': 'full screen' + }, + '3F': { + 'label': 'switch window' + }, + '40': { + 'label': 'bright down' + }, + '41': { + 'label': 'bright up' + }, + '42': { + 'label': 'mute' + }, + '43': { + 'label': 'vol. down' + }, + '44': { + 'label': 'vol. up' + }, + '56': { + 'p2': '3E', + 'p8': '3C', + 'p9': '7C' + }, + 'E0 1D': { + 'format': 'smaller', + 'label': 'strg' + }, + 'E0 38': { + 'format': 'smaller', + 'label': 'alt gr' + }, + 'E0 48': { + 'label': 'up' + }, + 'E0 4B': { + 'label': 'left' + }, + 'E0 4D': { + 'label': 'right' + }, + 'E0 50': { + 'label': 'down' + }, + 'E0 5B': { + 'format': 'left', + 'label': 'search' + } + }, + 'layoutName': 'E' + }, + 'de_neo': { + 'keys': { + '00': { + 'label': 'power' + }, + '01': { + 'format': 'smaller', + 'label': 'esc' + }, + '02': { + 'p2': '00B0', + 'p8': '31', + 'p9': '00B9' + }, + '03': { + 'p2': '00A7', + 'p8': '32', + 'p9': '00B2' + }, + '04': { + 'p2': '2113', + 'p8': '33', + 'p9': '00B3' + }, + '05': { + 'p2': '00BB', + 'p8': '34', + 'p9': '203A' + }, + '06': { + 'p2': '00AB', + 'p8': '35', + 'p9': '2039' + }, + '07': { + 'p2': '24', + 'p8': '36', + 'p9': '00A2' + }, + '08': { + 'p2': '20AC', + 'p8': '37', + 'p9': '00A5' + }, + '09': { + 'p2': '201E', + 'p8': '38', + 'p9': '201A' + }, + '0A': { + 'p2': '201C', + 'p8': '39', + 'p9': '2018' + }, + '0B': { + 'p2': '201D', + 'p8': '30', + 'p9': '2019' + }, + '0C': { + 'p2': '2014', + 'p8': '2D' + }, + '0D': { + 'p2': '00B8', + 'p8': '02CB', + 'p9': '02DA' + }, + '0E': { + 'format': 'right', + 'label': 'backspace' + }, + '0F': { + 'format': 'left', + 'label': 'tab' + }, + '10': { + 'p5': '78', + 'p9': '2026' + }, + '11': { + 'p5': '76', + 'p9': '005F' + }, + '12': { + 'p5': '6C', + 'p9': '005B' + }, + '13': { + 'p5': '63', + 'p9': '005D' + }, + '14': { + 'p5': '77', + 'p9': '005E' + }, + '15': { + 'p5': '6B', + 'p9': '21' + }, + '16': { + 'p5': '68', + 'p9': '003C' + }, + '17': { + 'p5': '67', + 'p9': '003E' + }, + '18': { + 'p5': '66', + 'p9': '003D' + }, + '19': { + 'p5': '71', + 'p9': '26' + }, + '1A': { + 'p5': 'DF', + 'p9': '017F' + }, + '1B': { + 'p2': '02DC', + 'p8': '02CA', + 'p9': '002F' + }, + '1C': { + 'format': 'right', + 'label': 'enter' + }, + '1D': { + 'format': 'left', + 'label': 'strg' + }, + '1E': { + 'p5': '75', + 'p9': '005C' + }, + '1F': { + 'p5': '69', + 'p9': '002F' + }, + '20': { + 'p5': '61', + 'p9': '007B' + }, + '21': { + 'p5': '65', + 'p9': '007D' + }, + '22': { + 'p5': '6F', + 'p9': '002A' + }, + '23': { + 'p5': '73', + 'p9': '003F' + }, + '24': { + 'p5': '6E', + 'p9': '28' + }, + '25': { + 'p5': '72', + 'p9': '29' + }, + '26': { + 'p5': '74', + 'p9': '002D' + }, + '27': { + 'p5': '64', + 'p9': '003A' + }, + '28': { + 'p5': '79', + 'p9': '40' + }, + '29': { + 'p2': '02C7', + 'p8': '02C6' + }, + '2A': { + 'format': 'left', + 'label': 'shift' + }, + '2B': { + 'label': 'mod3' + }, + '2C': { + 'p5': '00FC', + 'p9': '23' + }, + '2D': { + 'p5': '00F6', + 'p9': '24' + }, + '2E': { + 'p5': 'E4', + 'p9': '007C' + }, + '2F': { + 'p5': '70', + 'p9': '007E' + }, + '30': { + 'p5': '7a', + 'p9': '60' + }, + '31': { + 'p5': '62', + 'p9': '002B' + }, + '32': { + 'p5': '6D', + 'p9': '25' + }, + '33': { + 'p2': '2013', + 'p8': '2C', + 'p9': '22' + }, + '34': { + 'p2': '2022', + 'p8': '2E', + 'p9': '27' + }, + '35': { + 'p5': '6A', + 'p9': '003B' + }, + '36': { + 'format': 'right', + 'label': 'shift' + }, + '38': { + 'format': 'left', + 'label': 'alt' + }, + '39': { + 'label': 'space' + }, + '3B': { + 'label': 'back' + }, + '3C': { + 'label': 'forward' + }, + '3D': { + 'label': 'reload' + }, + '3E': { + 'label': 'full screen' + }, + '3F': { + 'label': 'switch window' + }, + '40': { + 'label': 'bright down' + }, + '41': { + 'label': 'bright up' + }, + '42': { + 'label': 'mute' + }, + '43': { + 'label': 'vol. down' + }, + '44': { + 'label': 'vol. up' + }, + '56': { + 'label': 'mod4' + }, + 'E0 1D': { + 'format': 'smaller', + 'label': 'strg' + }, + 'E0 38': { + 'format': 'smaller', + 'label': 'mod4' + }, + 'E0 48': { + 'label': 'up' + }, + 'E0 4B': { + 'label': 'left' + }, + 'E0 4D': { + 'label': 'right' + }, + 'E0 50': { + 'label': 'down' + }, + 'E0 5B': { + 'format': 'left', + 'label': 'mod3' + } + }, + 'layoutName': 'E' + }, + 'el': { + 'keys': { + '00': { + 'label': 'power' + }, + '01': { + 'format': 'smaller', + 'label': 'Esc' + }, + '02': { + 'p1': '21', + 'p7': '31' + }, + '03': { + 'p1': '40', + 'p7': '32' + }, + '04': { + 'p1': '23', + 'p7': '33' + }, + '05': { + 'p1': '24', + 'p7': '34' + }, + '06': { + 'p1': '25', + 'p7': '35' + }, + '07': { + 'p1': '005E', + 'p7': '36' + }, + '08': { + 'p1': '26', + 'p7': '37' + }, + '09': { + 'p1': '002A', + 'p7': '38' + }, + '0A': { + 'p1': '28', + 'p7': '39' + }, + '0B': { + 'p1': '29', + 'p7': '30' + }, + '0C': { + 'p1': '005F', + 'p7': '002D' + }, + '0D': { + 'p1': '002B', + 'p7': '003D' + }, + '0E': { + 'format': 'right', + 'label': 'backspace' + }, + '0F': { + 'format': 'left', + 'label': 'tab' + }, + '10': { + 'p1': '51', + 'p3': '3A', + 'p9': '3B' + }, + '11': { + 'p1': '57', + 'p9': '3C2' + }, + '12': { + 'p1': '45', + 'p9': '20AC' + }, + '13': { + 'p1': '52', + 'p9': '03A1' + }, + '14': { + 'p1': '54' + }, + '15': { + 'p1': '03A5' + }, + '16': { + 'p1': '55', + 'p9': '398' + }, + '17': { + 'p1': '399' + }, + '18': { + 'p1': '039F' + }, + '19': { + 'p1': '50', + 'p9': '03A0' + }, + '1A': { + 'p1': '007B', + 'p7': '005B' + }, + '1B': { + 'p1': '007D', + 'p7': '005D' + }, + '1C': { + 'format': 'right', + 'label': 'enter' + }, + '1D': { + 'format': 'left', + 'label': 'Ctrl' + }, + '1E': { + 'p1': '391' + }, + '1F': { + 'p1': '53', + 'p9': '03A3' + }, + '20': { + 'p1': '44', + 'p9': '394' + }, + '21': { + 'p1': '46', + 'p9': '3A6' + }, + '22': { + 'p1': '47', + 'p9': '393' + }, + '23': { + 'p1': '397' + }, + '24': { + 'p1': '004A', + 'p9': '039E' + }, + '25': { + 'p1': '039A' + }, + '26': { + 'p1': '004C', + 'p9': '039B' + }, + '27': { + 'p1': '003A', + 'p3': '00A8', + 'p7': '003B', + 'p9': '00B4' + }, + '28': { + 'p1': '22', + 'p7': '27' + }, + '29': { + 'p1': '007E', + 'p7': '60' + }, + '2A': { + 'format': 'left', + 'label': 'shift' + }, + '2B': { + 'p1': '007C', + 'p7': '005C' + }, + '2C': { + 'p1': '396' + }, + '2D': { + 'p1': '03A7' + }, + '2E': { + 'p1': '43', + 'p9': '03A8' + }, + '2F': { + 'p1': '56', + 'p9': '03A9' + }, + '30': { + 'p1': '392' + }, + '31': { + 'p1': '039D' + }, + '32': { + 'p1': '039C' + }, + '33': { + 'p1': '003C', + 'p7': '002C' + }, + '34': { + 'p1': '003E', + 'p7': '002E' + }, + '35': { + 'p1': '003F', + 'p7': '002F' + }, + '36': { + 'format': 'right', + 'label': 'shift' + }, + '38': { + 'format': 'left', + 'label': 'Alt' + }, + '39': { + 'label': 'space' + }, + '3B': { + 'label': 'back' + }, + '3C': { + 'label': 'forward' + }, + '3D': { + 'label': 'reload' + }, + '3E': { + 'label': 'full screen' + }, + '3F': { + 'label': 'switch window' + }, + '40': { + 'label': 'bright down' + }, + '41': { + 'label': 'bright up' + }, + '42': { + 'label': 'mute' + }, + '43': { + 'label': 'vol. down' + }, + '44': { + 'label': 'vol. up' + }, + '56': {}, + '73': {}, + '79': { + 'format': 'smaller' + }, + '7B': { + 'format': 'smaller' + }, + '7D': {}, + 'E0 1D': { + 'format': 'smaller', + 'label': 'Ctrl' + }, + 'E0 38': { + 'format': 'smaller', + 'label': 'Alt Gr' + }, + 'E0 48': { + 'label': 'up' + }, + 'E0 4B': { + 'label': 'left' + }, + 'E0 4D': { + 'label': 'right' + }, + 'E0 50': { + 'label': 'down' + }, + 'E0 5B': { + 'format': 'left', + 'label': 'search' + } + }, + 'layoutName': 'U' + }, + 'en_GB': { + 'keys': { + '00': { + 'label': 'power' + }, + '01': { + 'format': 'smaller', + 'label': 'esc' + }, + '02': { + 'p2': '21', + 'p8': '31' + }, + '03': { + 'p2': '22', + 'p8': '32' + }, + '04': { + 'p2': 'A3', + 'p8': '33' + }, + '05': { + 'p2': '24', + 'p8': '34', + 'p9': '20AC' + }, + '06': { + 'p2': '25', + 'p8': '35' + }, + '07': { + 'p2': '5E', + 'p8': '36' + }, + '08': { + 'p2': '26', + 'p8': '37' + }, + '09': { + 'p2': '2A', + 'p8': '38' + }, + '0A': { + 'p2': '28', + 'p8': '39' + }, + '0B': { + 'p2': '29', + 'p8': '30' + }, + '0C': { + 'p2': '5F', + 'p8': '2D' + }, + '0D': { + 'p2': '2B', + 'p8': '3D' + }, + '0E': { + 'format': 'right', + 'label': 'backspace' + }, + '0F': { + 'format': 'left', + 'label': 'tab' + }, + '10': { + 'p5': '71' + }, + '11': { + 'p5': '77' + }, + '12': { + 'p5': '65' + }, + '13': { + 'p5': '72' + }, + '14': { + 'p5': '74' + }, + '15': { + 'p5': '79' + }, + '16': { + 'p5': '75' + }, + '17': { + 'p5': '69' + }, + '18': { + 'p5': '6F' + }, + '19': { + 'p5': '70' + }, + '1A': { + 'p2': '7B', + 'p8': '5B' + }, + '1B': { + 'p2': '7D', + 'p8': '5D' + }, + '1C': { + 'format': 'right', + 'label': 'enter' + }, + '1D': { + 'format': 'left', + 'label': 'ctrl' + }, + '1E': { + 'p5': '61' + }, + '1F': { + 'p5': '73' + }, + '20': { + 'p5': '64' + }, + '21': { + 'p5': '66' + }, + '22': { + 'p5': '67' + }, + '23': { + 'p5': '68' + }, + '24': { + 'p5': '6A' + }, + '25': { + 'p5': '6B' + }, + '26': { + 'p5': '6C' + }, + '27': { + 'p2': '3A', + 'p8': '3B' + }, + '28': { + 'p2': '40', + 'p8': '27' + }, + '29': { + 'p2': 'AC', + 'p8': '60', + 'p9': '00A6' + }, + '2A': { + 'format': 'left', + 'label': 'shift' + }, + '2B': { + 'p2': '007E', + 'p8': '23' + }, + '2C': { + 'p5': '7A' + }, + '2D': { + 'p5': '78' + }, + '2E': { + 'p5': '63' + }, + '2F': { + 'p5': '76' + }, + '30': { + 'p5': '62' + }, + '31': { + 'p5': '6E' + }, + '32': { + 'p5': '6D' + }, + '33': { + 'p2': '3C', + 'p8': '2C' + }, + '34': { + 'p2': '3E', + 'p8': '2E' + }, + '35': { + 'p2': '3F', + 'p8': '2F' + }, + '36': { + 'format': 'right', + 'label': 'shift' + }, + '38': { + 'format': 'left', + 'label': 'alt' + }, + '39': { + 'label': 'space' + }, + '3B': { + 'label': 'back' + }, + '3C': { + 'label': 'forward' + }, + '3D': { + 'label': 'reload' + }, + '3E': { + 'label': 'full screen' + }, + '3F': { + 'label': 'switch window' + }, + '40': { + 'label': 'bright down' + }, + '41': { + 'label': 'bright up' + }, + '42': { + 'label': 'mute' + }, + '43': { + 'label': 'vol. down' + }, + '44': { + 'label': 'vol. up' + }, + '56': { + 'p2': '007C', + 'p8': '005C' + }, + 'E0 1D': { + 'format': 'smaller', + 'label': 'ctrl' + }, + 'E0 38': { + 'format': 'smaller', + 'label': 'alt gr' + }, + 'E0 48': { + 'label': 'up' + }, + 'E0 4B': { + 'label': 'left' + }, + 'E0 4D': { + 'label': 'right' + }, + 'E0 50': { + 'label': 'down' + }, + 'E0 5B': { + 'format': 'left', + 'label': 'search' + } + }, + 'layoutName': 'E' + }, + 'en_GB_dvorak': { + 'keys': { + '00': { + 'label': 'power' + }, + '01': { + 'format': 'smaller', + 'label': 'esc' + }, + '02': { + 'p2': '21', + 'p8': '31' + }, + '03': { + 'p2': '22', + 'p8': '32' + }, + '04': { + 'p2': 'A3', + 'p8': '33' + }, + '05': { + 'p2': '24', + 'p8': '34', + 'p9': '20AC' + }, + '06': { + 'p2': '25', + 'p8': '35' + }, + '07': { + 'p2': '5E', + 'p8': '36' + }, + '08': { + 'p2': '26', + 'p8': '37' + }, + '09': { + 'p2': '2A', + 'p8': '38' + }, + '0A': { + 'p2': '28', + 'p8': '39' + }, + '0B': { + 'p2': '29', + 'p8': '30' + }, + '0C': { + 'p2': '7B', + 'p8': '5B' + }, + '0D': { + 'p2': '7D', + 'p8': '5D' + }, + '0E': { + 'format': 'right', + 'label': 'backspace' + }, + '0F': { + 'format': 'left', + 'label': 'tab' + }, + '10': { + 'p2': '40', + 'p8': '27' + }, + '11': { + 'p2': '3C', + 'p8': '2C' + }, + '12': { + 'p2': '3E', + 'p8': '2E' + }, + '13': { + 'p5': '70' + }, + '14': { + 'p5': '79' + }, + '15': { + 'p5': '66' + }, + '16': { + 'p5': '67' + }, + '17': { + 'p5': '63' + }, + '18': { + 'p5': '72' + }, + '19': { + 'p5': '6C' + }, + '1A': { + 'p2': '3F', + 'p8': '2F' + }, + '1B': { + 'p2': '2B', + 'p8': '3D' + }, + '1C': { + 'format': 'right', + 'label': 'enter' + }, + '1D': { + 'format': 'left', + 'label': 'ctrl' + }, + '1E': { + 'p5': '61' + }, + '1F': { + 'p5': '6F' + }, + '20': { + 'p5': '65' + }, + '21': { + 'p5': '75' + }, + '22': { + 'p5': '69' + }, + '23': { + 'p5': '64' + }, + '24': { + 'p5': '68' + }, + '25': { + 'p5': '74' + }, + '26': { + 'p5': '6E' + }, + '27': { + 'p5': '73' + }, + '28': { + 'p2': '5F', + 'p8': '2D' + }, + '29': { + 'p2': 'AC', + 'p8': '60', + 'p9': '00A6' + }, + '2A': { + 'format': 'left', + 'label': 'shift' + }, + '2B': { + 'p2': '007E', + 'p8': '23' + }, + '2C': { + 'p2': '3A', + 'p8': '3B' + }, + '2D': { + 'p5': '71' + }, + '2E': { + 'p5': '6A' + }, + '2F': { + 'p5': '6B' + }, + '30': { + 'p5': '78' + }, + '31': { + 'p5': '62' + }, + '32': { + 'p5': '6D' + }, + '33': { + 'p5': '77' + }, + '34': { + 'p5': '76' + }, + '35': { + 'p5': '7A' + }, + '36': { + 'format': 'right', + 'label': 'shift' + }, + '38': { + 'format': 'left', + 'label': 'alt' + }, + '39': { + 'label': 'space' + }, + '3B': { + 'label': 'back' + }, + '3C': { + 'label': 'forward' + }, + '3D': { + 'label': 'reload' + }, + '3E': { + 'label': 'full screen' + }, + '3F': { + 'label': 'switch window' + }, + '40': { + 'label': 'bright down' + }, + '41': { + 'label': 'bright up' + }, + '42': { + 'label': 'mute' + }, + '43': { + 'label': 'vol. down' + }, + '44': { + 'label': 'vol. up' + }, + '56': { + 'p2': '007C', + 'p8': '005C' + }, + 'E0 1D': { + 'format': 'smaller', + 'label': 'ctrl' + }, + 'E0 38': { + 'format': 'smaller', + 'label': 'alt gr' + }, + 'E0 48': { + 'label': 'up' + }, + 'E0 4B': { + 'label': 'left' + }, + 'E0 4D': { + 'label': 'right' + }, + 'E0 50': { + 'label': 'down' + }, + 'E0 5B': { + 'format': 'left', + 'label': 'search' + } + }, + 'layoutName': 'E' + }, + 'en_US': { + 'keys': { + '00': { + 'label': 'power' + }, + '01': { + 'format': 'smaller', + 'label': 'esc' + }, + '02': { + 'p2': '21', + 'p8': '31' + }, + '03': { + 'p2': '40', + 'p8': '32' + }, + '04': { + 'p2': '23', + 'p8': '33' + }, + '05': { + 'p2': '24', + 'p8': '34' + }, + '06': { + 'p2': '25', + 'p8': '35' + }, + '07': { + 'p2': '5E', + 'p8': '36' + }, + '08': { + 'p2': '26', + 'p8': '37' + }, + '09': { + 'p2': '2A', + 'p8': '38' + }, + '0A': { + 'p2': '28', + 'p8': '39' + }, + '0B': { + 'p2': '29', + 'p8': '30' + }, + '0C': { + 'p2': '5F', + 'p8': '2D' + }, + '0D': { + 'p2': '2B', + 'p8': '3D' + }, + '0E': { + 'format': 'right', + 'label': 'backspace' + }, + '0F': { + 'format': 'left', + 'label': 'tab' + }, + '10': { + 'p5': '71' + }, + '11': { + 'p5': '77' + }, + '12': { + 'p5': '65' + }, + '13': { + 'p5': '72' + }, + '14': { + 'p5': '74' + }, + '15': { + 'p5': '79' + }, + '16': { + 'p5': '75' + }, + '17': { + 'p5': '69' + }, + '18': { + 'p5': '6F' + }, + '19': { + 'p5': '70' + }, + '1A': { + 'p2': '7B', + 'p8': '5B' + }, + '1B': { + 'p2': '7D', + 'p8': '5D' + }, + '1C': { + 'format': 'right', + 'label': 'enter' + }, + '1D': { + 'format': 'left', + 'label': 'ctrl' + }, + '1E': { + 'p5': '61' + }, + '1F': { + 'p5': '73' + }, + '20': { + 'p5': '64' + }, + '21': { + 'p5': '66' + }, + '22': { + 'p5': '67' + }, + '23': { + 'p5': '68' + }, + '24': { + 'p5': '6A' + }, + '25': { + 'p5': '6B' + }, + '26': { + 'p5': '6C' + }, + '27': { + 'p2': '3A', + 'p8': '3B' + }, + '28': { + 'p2': '22', + 'p8': '27' + }, + '29': { + 'p2': '7E', + 'p8': '60' + }, + '2A': { + 'format': 'left', + 'label': 'shift' + }, + '2B': { + 'p2': '7C', + 'p8': '5C' + }, + '2C': { + 'p5': '7A' + }, + '2D': { + 'p5': '78' + }, + '2E': { + 'p5': '63' + }, + '2F': { + 'p5': '76' + }, + '30': { + 'p5': '62' + }, + '31': { + 'p5': '6E' + }, + '32': { + 'p5': '6D' + }, + '33': { + 'p2': '3C', + 'p8': '2C' + }, + '34': { + 'p2': '3E', + 'p8': '2E' + }, + '35': { + 'p2': '3F', + 'p8': '2F' + }, + '36': { + 'format': 'right', + 'label': 'shift' + }, + '38': { + 'format': 'left', + 'label': 'alt' + }, + '39': { + 'label': 'space' + }, + '3B': { + 'label': 'back' + }, + '3C': { + 'label': 'forward' + }, + '3D': { + 'label': 'reload' + }, + '3E': { + 'label': 'full screen' + }, + '3F': { + 'label': 'switch window' + }, + '40': { + 'label': 'bright down' + }, + '41': { + 'label': 'bright up' + }, + '42': { + 'label': 'mute' + }, + '43': { + 'label': 'vol. down' + }, + '44': { + 'label': 'vol. up' + }, + 'E0 1D': { + 'format': 'smaller', + 'label': 'ctrl' + }, + 'E0 38': { + 'format': 'smaller', + 'label': 'alt' + }, + 'E0 48': { + 'label': 'up' + }, + 'E0 4B': { + 'label': 'left' + }, + 'E0 4D': { + 'label': 'right' + }, + 'E0 50': { + 'label': 'down' + }, + 'E0 5B': { + 'format': 'left', + 'label': 'search' + } + }, + 'layoutName': 'U' + }, + 'en_US_altgr_intl': { + 'keys': { + '00': { + 'label': 'power' + }, + '01': { + 'format': 'smaller', + 'label': 'esc' + }, + '02': { + 'p2': '21', + 'p8': '31' + }, + '03': { + 'p2': '40', + 'p8': '32' + }, + '04': { + 'p2': '23', + 'p8': '33' + }, + '05': { + 'p2': '24', + 'p8': '34' + }, + '06': { + 'p2': '25', + 'p8': '35' + }, + '07': { + 'p2': '5E', + 'p8': '36' + }, + '08': { + 'p2': '26', + 'p8': '37' + }, + '09': { + 'p2': '2A', + 'p8': '38' + }, + '0A': { + 'p2': '28', + 'p8': '39' + }, + '0B': { + 'p2': '29', + 'p8': '30' + }, + '0C': { + 'p2': '5F', + 'p8': '2D' + }, + '0D': { + 'p2': '2B', + 'p8': '3D' + }, + '0E': { + 'format': 'right', + 'label': 'backspace' + }, + '0F': { + 'format': 'left', + 'label': 'tab' + }, + '10': { + 'p5': '71' + }, + '11': { + 'p5': '77' + }, + '12': { + 'p5': '65' + }, + '13': { + 'p5': '72' + }, + '14': { + 'p5': '74' + }, + '15': { + 'p5': '79' + }, + '16': { + 'p5': '75' + }, + '17': { + 'p5': '69' + }, + '18': { + 'p5': '6F' + }, + '19': { + 'p5': '70' + }, + '1A': { + 'p2': '7B', + 'p8': '5B' + }, + '1B': { + 'p2': '7D', + 'p8': '5D' + }, + '1C': { + 'format': 'right', + 'label': 'enter' + }, + '1D': { + 'format': 'left', + 'label': 'ctrl' + }, + '1E': { + 'p5': '61' + }, + '1F': { + 'p5': '73' + }, + '20': { + 'p5': '64' + }, + '21': { + 'p5': '66' + }, + '22': { + 'p5': '67' + }, + '23': { + 'p5': '68' + }, + '24': { + 'p5': '6A' + }, + '25': { + 'p5': '6B' + }, + '26': { + 'p5': '6C' + }, + '27': { + 'p2': '3A', + 'p8': '3B' + }, + '28': { + 'p2': '22', + 'p8': '27' + }, + '29': { + 'p2': '7E', + 'p8': '60' + }, + '2A': { + 'format': 'left', + 'label': 'shift' + }, + '2B': { + 'p2': '7C', + 'p8': '5C' + }, + '2C': { + 'p5': '7A' + }, + '2D': { + 'p5': '78' + }, + '2E': { + 'p5': '63' + }, + '2F': { + 'p5': '76' + }, + '30': { + 'p5': '62' + }, + '31': { + 'p5': '6E' + }, + '32': { + 'p5': '6D' + }, + '33': { + 'p2': '3C', + 'p8': '2C' + }, + '34': { + 'p2': '3E', + 'p8': '2E' + }, + '35': { + 'p2': '3F', + 'p8': '2F' + }, + '36': { + 'format': 'right', + 'label': 'shift' + }, + '38': { + 'format': 'left', + 'label': 'alt' + }, + '39': { + 'label': 'space' + }, + '3B': { + 'label': 'back' + }, + '3C': { + 'label': 'forward' + }, + '3D': { + 'label': 'reload' + }, + '3E': { + 'label': 'full screen' + }, + '3F': { + 'label': 'switch window' + }, + '40': { + 'label': 'bright down' + }, + '41': { + 'label': 'bright up' + }, + '42': { + 'label': 'mute' + }, + '43': { + 'label': 'vol. down' + }, + '44': { + 'label': 'vol. up' + }, + 'E0 1D': { + 'format': 'smaller', + 'label': 'ctrl' + }, + 'E0 38': { + 'format': 'smaller', + 'label': 'alt gr' + }, + 'E0 48': { + 'label': 'up' + }, + 'E0 4B': { + 'label': 'left' + }, + 'E0 4D': { + 'label': 'right' + }, + 'E0 50': { + 'label': 'down' + }, + 'E0 5B': { + 'format': 'left', + 'label': 'search' + } + }, + 'layoutName': 'U' + }, + 'en_US_colemak': { + 'keys': { + '00': { + 'label': 'power' + }, + '01': { + 'format': 'smaller', + 'label': 'esc' + }, + '02': { + 'p2': '21', + 'p8': '31' + }, + '03': { + 'p2': '40', + 'p8': '32' + }, + '04': { + 'p2': '23', + 'p8': '33' + }, + '05': { + 'p2': '24', + 'p8': '34' + }, + '06': { + 'p2': '25', + 'p8': '35' + }, + '07': { + 'p2': '5E', + 'p8': '36' + }, + '08': { + 'p2': '26', + 'p8': '37' + }, + '09': { + 'p2': '2A', + 'p8': '38' + }, + '0A': { + 'p2': '28', + 'p8': '39' + }, + '0B': { + 'p2': '29', + 'p8': '30' + }, + '0C': { + 'p2': '5F', + 'p8': '2D' + }, + '0D': { + 'p2': '2B', + 'p8': '3D' + }, + '0E': { + 'format': 'right', + 'label': 'backspace' + }, + '0F': { + 'format': 'left', + 'label': 'tab' + }, + '10': { + 'p5': '71' + }, + '11': { + 'p5': '77' + }, + '12': { + 'p5': '66' + }, + '13': { + 'p5': '70' + }, + '14': { + 'p5': '67' + }, + '15': { + 'p5': '6A' + }, + '16': { + 'p5': '6C' + }, + '17': { + 'p5': '75' + }, + '18': { + 'p5': '79' + }, + '19': { + 'p2': '3A', + 'p8': '3B' + }, + '1A': { + 'p2': '7B', + 'p8': '5B' + }, + '1B': { + 'p2': '7D', + 'p8': '5D' + }, + '1C': { + 'format': 'right', + 'label': 'enter' + }, + '1D': { + 'format': 'left', + 'label': 'ctrl' + }, + '1E': { + 'p5': '61' + }, + '1F': { + 'p5': '72' + }, + '20': { + 'p5': '73' + }, + '21': { + 'p5': '74' + }, + '22': { + 'p5': '64' + }, + '23': { + 'p5': '68' + }, + '24': { + 'p5': '6E' + }, + '25': { + 'p5': '65' + }, + '26': { + 'p5': '69' + }, + '27': { + 'p5': '6F' + }, + '28': { + 'p2': '22', + 'p8': '27' + }, + '29': { + 'p2': '7E', + 'p8': '60' + }, + '2A': { + 'format': 'left', + 'label': 'shift' + }, + '2B': { + 'p2': '7C', + 'p8': '5C' + }, + '2C': { + 'p5': '7A' + }, + '2D': { + 'p5': '78' + }, + '2E': { + 'p5': '63' + }, + '2F': { + 'p5': '76' + }, + '30': { + 'p5': '62' + }, + '31': { + 'p5': '6B' + }, + '32': { + 'p5': '6D' + }, + '33': { + 'p2': '3C', + 'p8': '2C' + }, + '34': { + 'p2': '3E', + 'p8': '2E' + }, + '35': { + 'p2': '3F', + 'p8': '2F' + }, + '36': { + 'format': 'right', + 'label': 'shift' + }, + '37': {}, + '38': { + 'format': 'left', + 'label': 'alt' + }, + '39': { + 'label': 'space' + }, + '3B': { + 'label': 'back' + }, + '3C': { + 'label': 'forward' + }, + '3D': { + 'label': 'reload' + }, + '3E': { + 'label': 'full screen' + }, + '3F': { + 'label': 'switch window' + }, + '40': { + 'label': 'bright down' + }, + '41': { + 'label': 'bright up' + }, + '42': { + 'label': 'mute' + }, + '43': { + 'label': 'vol. down' + }, + '44': { + 'label': 'vol. up' + }, + '73': {}, + '79': { + 'format': 'smaller' + }, + '7B': { + 'format': 'smaller' + }, + '7D': {}, + 'E0 1D': { + 'format': 'smaller', + 'label': 'ctrl' + }, + 'E0 38': { + 'format': 'smaller', + 'label': 'alt' + }, + 'E0 48': { + 'label': 'up' + }, + 'E0 4B': { + 'label': 'left' + }, + 'E0 4D': { + 'label': 'right' + }, + 'E0 50': { + 'label': 'down' + }, + 'E0 5B': { + 'format': 'left', + 'label': 'backspace' + } + }, + 'layoutName': 'U' + }, + 'en_US_dvorak': { + 'keys': { + '00': { + 'label': 'power' + }, + '01': { + 'format': 'smaller', + 'label': 'esc' + }, + '02': { + 'p2': '21', + 'p8': '31' + }, + '03': { + 'p2': '40', + 'p8': '32' + }, + '04': { + 'p2': '23', + 'p8': '33' + }, + '05': { + 'p2': '24', + 'p8': '34' + }, + '06': { + 'p2': '25', + 'p8': '35' + }, + '07': { + 'p2': '5E', + 'p8': '36' + }, + '08': { + 'p2': '26', + 'p8': '37' + }, + '09': { + 'p2': '2A', + 'p8': '38' + }, + '0A': { + 'p2': '28', + 'p8': '39' + }, + '0B': { + 'p2': '29', + 'p8': '30' + }, + '0C': { + 'p2': '7B', + 'p8': '5B' + }, + '0D': { + 'p2': '7D', + 'p8': '5D' + }, + '0E': { + 'format': 'right', + 'label': 'backspace' + }, + '0F': { + 'format': 'left', + 'label': 'tab' + }, + '10': { + 'p2': '22', + 'p8': '27' + }, + '11': { + 'p2': '3C', + 'p8': '2C' + }, + '12': { + 'p2': '3E', + 'p8': '2E' + }, + '13': { + 'p5': '70' + }, + '14': { + 'p5': '79' + }, + '15': { + 'p5': '66' + }, + '16': { + 'p5': '67' + }, + '17': { + 'p5': '63' + }, + '18': { + 'p5': '72' + }, + '19': { + 'p5': '6C' + }, + '1A': { + 'p2': '3F', + 'p8': '2F' + }, + '1B': { + 'p2': '2B', + 'p8': '3D' + }, + '1C': { + 'format': 'right', + 'label': 'enter' + }, + '1D': { + 'format': 'left', + 'label': 'ctrl' + }, + '1E': { + 'p5': '61' + }, + '1F': { + 'p5': '6F' + }, + '20': { + 'p5': '65' + }, + '21': { + 'p5': '75' + }, + '22': { + 'p5': '69' + }, + '23': { + 'p5': '64' + }, + '24': { + 'p5': '68' + }, + '25': { + 'p5': '74' + }, + '26': { + 'p5': '6E' + }, + '27': { + 'p5': '73' + }, + '28': { + 'p2': '5F', + 'p8': '2D' + }, + '29': { + 'p2': '7E', + 'p8': '60' + }, + '2A': { + 'format': 'left', + 'label': 'shift' + }, + '2B': { + 'p2': '7C', + 'p8': '5C' + }, + '2C': { + 'p2': '3A', + 'p8': '3B' + }, + '2D': { + 'p5': '71' + }, + '2E': { + 'p5': '6A' + }, + '2F': { + 'p5': '6B' + }, + '30': { + 'p5': '78' + }, + '31': { + 'p5': '62' + }, + '32': { + 'p5': '6D' + }, + '33': { + 'p5': '77' + }, + '34': { + 'p5': '76' + }, + '35': { + 'p5': '7A' + }, + '36': { + 'format': 'right', + 'label': 'shift' + }, + '37': {}, + '38': { + 'format': 'left', + 'label': 'alt' + }, + '39': { + 'label': 'space' + }, + '3B': { + 'label': 'back' + }, + '3C': { + 'label': 'forward' + }, + '3D': { + 'label': 'reload' + }, + '3E': { + 'label': 'full screen' + }, + '3F': { + 'label': 'switch window' + }, + '40': { + 'label': 'bright down' + }, + '41': { + 'label': 'bright up' + }, + '42': { + 'label': 'mute' + }, + '43': { + 'label': 'vol. down' + }, + '44': { + 'label': 'vol. up' + }, + '73': {}, + '79': { + 'format': 'smaller' + }, + '7B': { + 'format': 'smaller' + }, + '7D': {}, + 'E0 1D': { + 'format': 'smaller', + 'label': 'ctrl' + }, + 'E0 38': { + 'format': 'smaller', + 'label': 'alt' + }, + 'E0 48': { + 'label': 'up' + }, + 'E0 4B': { + 'label': 'left' + }, + 'E0 4D': { + 'label': 'right' + }, + 'E0 50': { + 'label': 'down' + }, + 'E0 5B': { + 'format': 'left', + 'label': 'search' + } + }, + 'layoutName': 'U' + }, + 'en_US_intl': { + 'keys': { + '00': { + 'label': 'power' + }, + '01': { + 'format': 'smaller', + 'label': 'esc' + }, + '02': { + 'p2': '21', + 'p8': '31' + }, + '03': { + 'p2': '40', + 'p8': '32' + }, + '04': { + 'p2': '23', + 'p8': '33' + }, + '05': { + 'p2': '24', + 'p8': '34' + }, + '06': { + 'p2': '25', + 'p8': '35' + }, + '07': { + 'p2': '5E', + 'p8': '36' + }, + '08': { + 'p2': '26', + 'p8': '37' + }, + '09': { + 'p2': '2A', + 'p8': '38' + }, + '0A': { + 'p2': '28', + 'p8': '39' + }, + '0B': { + 'p2': '29', + 'p8': '30' + }, + '0C': { + 'p2': '5F', + 'p8': '2D' + }, + '0D': { + 'p2': '2B', + 'p8': '3D' + }, + '0E': { + 'format': 'right', + 'label': 'backspace' + }, + '0F': { + 'format': 'left', + 'label': 'tab' + }, + '10': { + 'p5': '71' + }, + '11': { + 'p5': '77' + }, + '12': { + 'p5': '65' + }, + '13': { + 'p5': '72' + }, + '14': { + 'p5': '74' + }, + '15': { + 'p5': '79' + }, + '16': { + 'p5': '75' + }, + '17': { + 'p5': '69' + }, + '18': { + 'p5': '6F' + }, + '19': { + 'p5': '70' + }, + '1A': { + 'p2': '7B', + 'p8': '5B' + }, + '1B': { + 'p2': '7D', + 'p8': '5D' + }, + '1C': { + 'format': 'right', + 'label': 'enter' + }, + '1D': { + 'format': 'left', + 'label': 'ctrl' + }, + '1E': { + 'p5': '61' + }, + '1F': { + 'p5': '73' + }, + '20': { + 'p5': '64' + }, + '21': { + 'p5': '66' + }, + '22': { + 'p5': '67' + }, + '23': { + 'p5': '68' + }, + '24': { + 'p5': '6A' + }, + '25': { + 'p5': '6B' + }, + '26': { + 'p5': '6C' + }, + '27': { + 'p2': '3A', + 'p8': '3B' + }, + '28': { + 'p2': '22', + 'p8': '27' + }, + '29': { + 'p2': '7E', + 'p8': '60' + }, + '2A': { + 'format': 'left', + 'label': 'shift' + }, + '2B': { + 'p2': '7C', + 'p8': '5C' + }, + '2C': { + 'p5': '7A' + }, + '2D': { + 'p5': '78' + }, + '2E': { + 'p5': '63' + }, + '2F': { + 'p5': '76' + }, + '30': { + 'p5': '62' + }, + '31': { + 'p5': '6E' + }, + '32': { + 'p5': '6D' + }, + '33': { + 'p2': '3C', + 'p8': '2C' + }, + '34': { + 'p2': '3E', + 'p8': '2E' + }, + '35': { + 'p2': '3F', + 'p8': '2F' + }, + '36': { + 'format': 'right', + 'label': 'shift' + }, + '38': { + 'format': 'left', + 'label': 'alt' + }, + '39': { + 'label': 'space' + }, + '3B': { + 'label': 'back' + }, + '3C': { + 'label': 'forward' + }, + '3D': { + 'label': 'reload' + }, + '3E': { + 'label': 'full screen' + }, + '3F': { + 'label': 'switch window' + }, + '40': { + 'label': 'bright down' + }, + '41': { + 'label': 'bright up' + }, + '42': { + 'label': 'mute' + }, + '43': { + 'label': 'vol. down' + }, + '44': { + 'label': 'vol. up' + }, + 'E0 1D': { + 'format': 'smaller', + 'label': 'ctrl' + }, + 'E0 38': { + 'format': 'smaller', + 'label': 'alt gr' + }, + 'E0 48': { + 'label': 'up' + }, + 'E0 4B': { + 'label': 'left' + }, + 'E0 4D': { + 'label': 'right' + }, + 'E0 50': { + 'label': 'down' + }, + 'E0 5B': { + 'format': 'left', + 'label': 'search' + } + }, + 'layoutName': 'U' + }, + 'es': { + 'keys': { + '00': { + 'label': 'power' + }, + '01': { + 'format': 'smaller', + 'label': 'esc' + }, + '02': { + 'p2': '21', + 'p8': '31', + 'p9': '007C' + }, + '03': { + 'p2': '22', + 'p8': '32', + 'p9': '40' + }, + '04': { + 'p2': '00B7', + 'p8': '33', + 'p9': '23' + }, + '05': { + 'p2': '24', + 'p8': '34', + 'p9': '007E' + }, + '06': { + 'p2': '25', + 'p8': '35' + }, + '07': { + 'p2': '26', + 'p8': '36', + 'p9': '00AC' + }, + '08': { + 'p2': '002F', + 'p8': '37' + }, + '09': { + 'p2': '28', + 'p8': '38' + }, + '0A': { + 'p2': '29', + 'p8': '39' + }, + '0B': { + 'p2': '003D', + 'p8': '30' + }, + '0C': { + 'p2': '003F', + 'p8': '27' + }, + '0D': { + 'p2': '00BF', + 'p8': '00A1' + }, + '0E': { + 'format': 'right', + 'label': 'backspace' + }, + '0F': { + 'format': 'left', + 'label': 'tab' + }, + '10': { + 'p5': '71' + }, + '11': { + 'p5': '77' + }, + '12': { + 'p5': '65', + 'p9': '20AC' + }, + '13': { + 'p5': '72' + }, + '14': { + 'p5': '74' + }, + '15': { + 'p5': '79' + }, + '16': { + 'p5': '75' + }, + '17': { + 'p5': '69' + }, + '18': { + 'p5': '006F' + }, + '19': { + 'p5': '70' + }, + '1A': { + 'p2': '005E', + 'p8': '60', + 'p9': '005B' + }, + '1B': { + 'p2': '002A', + 'p8': '002B', + 'p9': '005D' + }, + '1C': { + 'format': 'right', + 'label': 'enter' + }, + '1D': { + 'format': 'left', + 'label': 'ctrl' + }, + '1E': { + 'p5': '61' + }, + '1F': { + 'p5': '73' + }, + '20': { + 'p5': '64' + }, + '21': { + 'p5': '66' + }, + '22': { + 'p5': '67' + }, + '23': { + 'p5': '68' + }, + '24': { + 'p5': '006A' + }, + '25': { + 'p5': '006B' + }, + '26': { + 'p5': '006C' + }, + '27': { + 'p5': '00F1' + }, + '28': { + 'p2': '00A8', + 'p8': '00B4', + 'p9': '007B' + }, + '29': { + 'p2': '00AA', + 'p8': '00BA', + 'p9': '005C' + }, + '2A': { + 'format': 'left', + 'label': 'shift' + }, + '2B': { + 'p2': '00C7', + 'p8': 'E7', + 'p9': '007D' + }, + '2C': { + 'p5': '007A' + }, + '2D': { + 'p5': '78' + }, + '2E': { + 'p5': '63' + }, + '2F': { + 'p5': '76' + }, + '30': { + 'p5': '62' + }, + '31': { + 'p5': '006E' + }, + '32': { + 'p5': '006D' + }, + '33': { + 'p2': '003B', + 'p8': '002C' + }, + '34': { + 'p2': '003A', + 'p8': '002E' + }, + '35': { + 'p2': '005F', + 'p8': '002D' + }, + '36': { + 'format': 'right', + 'label': 'shift' + }, + '38': { + 'format': 'left', + 'label': 'alt' + }, + '39': { + 'label': 'space' + }, + '3B': { + 'label': 'back' + }, + '3C': { + 'label': 'forward' + }, + '3D': { + 'label': 'reload' + }, + '3E': { + 'label': 'full screen' + }, + '3F': { + 'label': 'switch window' + }, + '40': { + 'label': 'bright down' + }, + '41': { + 'label': 'bright up' + }, + '42': { + 'label': 'mute' + }, + '43': { + 'label': 'vol. down' + }, + '44': { + 'label': 'vol. up' + }, + '56': { + 'p2': '003E', + 'p8': '003C' + }, + 'E0 1D': { + 'format': 'smaller', + 'label': 'ctrl' + }, + 'E0 38': { + 'format': 'smaller', + 'label': 'alt gr' + }, + 'E0 48': { + 'label': 'up' + }, + 'E0 4B': { + 'label': 'left' + }, + 'E0 4D': { + 'label': 'right' + }, + 'E0 50': { + 'label': 'down' + }, + 'E0 5B': { + 'format': 'left', + 'label': 'search' + } + }, + 'layoutName': 'E' + }, + 'es_419': { + 'keys': { + '00': { + 'label': 'power' + }, + '01': { + 'format': 'smaller', + 'label': 'esc' + }, + '02': { + 'p2': '21', + 'p8': '31' + }, + '03': { + 'p2': '22', + 'p8': '32' + }, + '04': { + 'p2': '23', + 'p8': '33' + }, + '05': { + 'p2': '24', + 'p8': '34' + }, + '06': { + 'p2': '25', + 'p8': '35' + }, + '07': { + 'p2': '26', + 'p8': '36' + }, + '08': { + 'p2': '002F', + 'p8': '37' + }, + '09': { + 'p2': '28', + 'p8': '38' + }, + '0A': { + 'p2': '29', + 'p8': '39' + }, + '0B': { + 'p2': '3d', + 'p8': '30' + }, + '0C': { + 'p2': '3f', + 'p8': '27', + 'p9': '005C' + }, + '0D': { + 'p2': 'a1', + 'p8': 'bf' + }, + '0E': { + 'format': 'right', + 'label': 'backspace' + }, + '0F': { + 'format': 'left', + 'label': 'tab' + }, + '10': { + 'p5': '71', + 'p9': '40' + }, + '11': { + 'p5': '77' + }, + '12': { + 'p5': '65' + }, + '13': { + 'p5': '72' + }, + '14': { + 'p5': '74' + }, + '15': { + 'p5': '79' + }, + '16': { + 'p5': '75' + }, + '17': { + 'p5': '69' + }, + '18': { + 'p5': '6f' + }, + '19': { + 'p5': '70' + }, + '1A': { + 'p2': 'A8', + 'p8': 'B4' + }, + '1B': { + 'p2': '2a', + 'p8': '2b', + 'p9': '7e' + }, + '1C': { + 'format': 'right', + 'label': 'intro' + }, + '1D': { + 'format': 'left', + 'label': 'ctrl' + }, + '1E': { + 'p5': '61' + }, + '1F': { + 'p5': '73' + }, + '20': { + 'p5': '64' + }, + '21': { + 'p5': '66' + }, + '22': { + 'p5': '67' + }, + '23': { + 'p5': '68' + }, + '24': { + 'p5': '6a' + }, + '25': { + 'p5': '6b' + }, + '26': { + 'p5': '6c' + }, + '27': { + 'p5': 'f1' + }, + '28': { + 'p2': '5B', + 'p8': '7B', + 'p9': '5E' + }, + '29': { + 'p2': '00B0', + 'p8': '007C', + 'p9': '00AC' + }, + '2A': { + 'format': 'left', + 'label': 'may\u00fas' + }, + '2B': { + 'p2': '5D', + 'p8': '7D', + 'p9': '60' + }, + '2C': { + 'p5': '7a' + }, + '2D': { + 'p5': '78' + }, + '2E': { + 'p5': '63' + }, + '2F': { + 'p5': '76' + }, + '30': { + 'p5': '62' + }, + '31': { + 'p5': '6e' + }, + '32': { + 'p5': '6d' + }, + '33': { + 'p2': '3b', + 'p8': '2C' + }, + '34': { + 'p2': '3a', + 'p8': '2e' + }, + '35': { + 'p2': '5f', + 'p8': '2d' + }, + '36': { + 'format': 'right', + 'label': 'may\u00fas' + }, + '38': { + 'format': 'left', + 'label': 'alt' + }, + '39': { + 'label': 'space' + }, + '3B': { + 'label': 'back' + }, + '3C': { + 'label': 'forward' + }, + '3D': { + 'label': 'reload' + }, + '3E': { + 'label': 'full screen' + }, + '3F': { + 'label': 'switch window' + }, + '40': { + 'label': 'bright down' + }, + '41': { + 'label': 'bright up' + }, + '42': { + 'label': 'mute' + }, + '43': { + 'label': 'vol. down' + }, + '44': { + 'label': 'vol. up' + }, + '56': { + 'p2': '3e', + 'p8': '3c' + }, + 'E0 1D': { + 'format': 'smaller', + 'label': 'ctrl' + }, + 'E0 38': { + 'format': 'smaller', + 'label': 'alt gr' + }, + 'E0 48': { + 'label': 'up' + }, + 'E0 4B': { + 'label': 'left' + }, + 'E0 4D': { + 'label': 'right' + }, + 'E0 50': { + 'label': 'down' + }, + 'E0 5B': { + 'format': 'left', + 'label': 'search' + } + }, + 'layoutName': 'E' + }, + 'et': { + 'keys': { + '00': { + 'label': 'power' + }, + '01': { + 'format': 'smaller', + 'label': 'esc' + }, + '02': { + 'p2': '21', + 'p8': '31' + }, + '03': { + 'p2': '22', + 'p8': '32', + 'p9': '40' + }, + '04': { + 'p2': '23', + 'p8': '33', + 'p9': 'A3' + }, + '05': { + 'p2': 'A4', + 'p8': '34', + 'p9': '24' + }, + '06': { + 'p2': '25', + 'p8': '35' + }, + '07': { + 'p2': '26', + 'p8': '36' + }, + '08': { + 'p2': '2F', + 'p8': '37', + 'p9': '7B' + }, + '09': { + 'p2': '28', + 'p8': '38', + 'p9': '5B' + }, + '0A': { + 'p2': '29', + 'p8': '39', + 'p9': '5D' + }, + '0B': { + 'p2': '3D', + 'p8': '30', + 'p9': '7D' + }, + '0C': { + 'p2': '3F', + 'p8': '2B', + 'p9': '5C' + }, + '0D': { + 'p2': '60', + 'p8': 'B4' + }, + '0E': { + 'format': 'right', + 'label': 'backspace' + }, + '0F': { + 'format': 'left', + 'label': 'tab' + }, + '10': { + 'p5': '71' + }, + '11': { + 'p5': '77' + }, + '12': { + 'p5': '65', + 'p9': '20AC' + }, + '13': { + 'p5': '72' + }, + '14': { + 'p5': '74' + }, + '15': { + 'p5': '79' + }, + '16': { + 'p5': '75' + }, + '17': { + 'p5': '69' + }, + '18': { + 'p5': '006F' + }, + '19': { + 'p5': '70' + }, + '1A': { + 'p5': 'FC' + }, + '1B': { + 'p5': 'F5', + 'p9': 'A7' + }, + '1C': { + 'format': 'right', + 'label': 'enter' + }, + '1D': { + 'format': 'left', + 'label': 'ctrl' + }, + '1E': { + 'p5': '61' + }, + '1F': { + 'p5': '73' + }, + '20': { + 'p5': '64' + }, + '21': { + 'p5': '66' + }, + '22': { + 'p5': '67' + }, + '23': { + 'p5': '68' + }, + '24': { + 'p5': '006A' + }, + '25': { + 'p5': '006B' + }, + '26': { + 'p5': '006C' + }, + '27': { + 'p5': '00F6' + }, + '28': { + 'p5': 'E4', + 'p9': '5E' + }, + '29': { + 'p2': '7E', + 'p8': '2C7' + }, + '2A': { + 'format': 'left', + 'label': 'shift' + }, + '2B': { + 'p2': '2A', + 'p8': '27', + 'p9': 'BD' + }, + '2C': { + 'p5': '007A' + }, + '2D': { + 'p5': '78' + }, + '2E': { + 'p5': '63' + }, + '2F': { + 'p5': '76' + }, + '30': { + 'p5': '62' + }, + '31': { + 'p5': '006E' + }, + '32': { + 'p5': '006D' + }, + '33': { + 'p2': '3B', + 'p8': '2C' + }, + '34': { + 'p2': '3A', + 'p8': '2E' + }, + '35': { + 'p2': '5F', + 'p8': '2D' + }, + '36': { + 'format': 'right', + 'label': 'shift' + }, + '38': { + 'format': 'left', + 'label': 'alt' + }, + '39': { + 'label': 'space' + }, + '3B': { + 'label': 'back' + }, + '3C': { + 'label': 'forward' + }, + '3D': { + 'label': 'reload' + }, + '3E': { + 'label': 'full screen' + }, + '3F': { + 'label': 'switch window' + }, + '40': { + 'label': 'bright down' + }, + '41': { + 'label': 'bright up' + }, + '42': { + 'label': 'mute' + }, + '43': { + 'label': 'vol. down' + }, + '44': { + 'label': 'vol. up' + }, + '56': { + 'p2': '3E', + 'p8': '3C', + 'p9': '7C' + }, + '73': {}, + '79': { + 'format': 'smaller' + }, + '7B': { + 'format': 'smaller' + }, + '7D': {}, + 'E0 1D': { + 'format': 'smaller', + 'label': 'ctrl' + }, + 'E0 38': { + 'format': 'smaller', + 'label': 'alt gr' + }, + 'E0 48': { + 'label': 'up' + }, + 'E0 4B': { + 'label': 'left' + }, + 'E0 4D': { + 'label': 'right' + }, + 'E0 50': { + 'label': 'down' + }, + 'E0 5B': { + 'format': 'left', + 'label': 'search' + } + }, + 'layoutName': 'E' + }, + 'fi': { + 'keys': { + '00': { + 'label': 'power' + }, + '01': { + 'format': 'smaller', + 'label': 'esc' + }, + '02': { + 'p2': '21', + 'p8': '31' + }, + '03': { + 'p2': '22', + 'p8': '32', + 'p9': '40' + }, + '04': { + 'p2': '23', + 'p8': '33', + 'p9': '00A3' + }, + '05': { + 'p2': '00A4', + 'p8': '34', + 'p9': '24' + }, + '06': { + 'p2': '25', + 'p8': '35' + }, + '07': { + 'p2': '26', + 'p8': '36' + }, + '08': { + 'p2': '002F', + 'p8': '37', + 'p9': '007B' + }, + '09': { + 'p2': '28', + 'p8': '38', + 'p9': '005B' + }, + '0A': { + 'p2': '29', + 'p8': '39', + 'p9': '005D' + }, + '0B': { + 'p2': '003D', + 'p8': '30', + 'p9': '007D' + }, + '0C': { + 'p2': '003F', + 'p8': '002B', + 'p9': '005C' + }, + '0D': { + 'p2': '60', + 'p8': '00B4' + }, + '0E': { + 'format': 'right', + 'label': 'backspace' + }, + '0F': { + 'format': 'left', + 'label': 'tab' + }, + '10': { + 'p5': '71' + }, + '11': { + 'p5': '77' + }, + '12': { + 'p5': '65', + 'p9': '20AC' + }, + '13': { + 'p5': '72' + }, + '14': { + 'p5': '74' + }, + '15': { + 'p5': '79' + }, + '16': { + 'p5': '75' + }, + '17': { + 'p5': '69' + }, + '18': { + 'p5': '006F' + }, + '19': { + 'p5': '70' + }, + '1A': { + 'p5': 'E5' + }, + '1B': { + 'p2': '005E', + 'p8': '00A8', + 'p9': '007E' + }, + '1C': { + 'format': 'right', + 'label': 'enter' + }, + '1D': { + 'format': 'left', + 'label': 'ctrl' + }, + '1E': { + 'p5': '61' + }, + '1F': { + 'p5': '73' + }, + '20': { + 'p5': '64' + }, + '21': { + 'p5': '66' + }, + '22': { + 'p5': '67' + }, + '23': { + 'p5': '68' + }, + '24': { + 'p5': '006A' + }, + '25': { + 'p5': '006B' + }, + '26': { + 'p5': '006C' + }, + '27': { + 'p5': '00F6' + }, + '28': { + 'p5': 'E4' + }, + '29': { + 'p2': '00BD', + 'p8': '00A7' + }, + '2A': { + 'format': 'left', + 'label': 'shift' + }, + '2B': { + 'p2': '002A', + 'p8': '27' + }, + '2C': { + 'p5': '007A' + }, + '2D': { + 'p5': '78' + }, + '2E': { + 'p5': '63' + }, + '2F': { + 'p5': '76' + }, + '30': { + 'p5': '62' + }, + '31': { + 'p5': '006E' + }, + '32': { + 'p5': '006D' + }, + '33': { + 'p2': '003B', + 'p8': '002C' + }, + '34': { + 'p2': '003A', + 'p8': '002E' + }, + '35': { + 'p2': '005F', + 'p8': '002D' + }, + '36': { + 'format': 'right', + 'label': 'shift' + }, + '38': { + 'format': 'left', + 'label': 'alt' + }, + '39': { + 'label': 'space' + }, + '3B': { + 'label': 'back' + }, + '3C': { + 'label': 'forward' + }, + '3D': { + 'label': 'reload' + }, + '3E': { + 'label': 'full screen' + }, + '3F': { + 'label': 'switch window' + }, + '40': { + 'label': 'bright down' + }, + '41': { + 'label': 'bright up' + }, + '42': { + 'label': 'mute' + }, + '43': { + 'label': 'vol. down' + }, + '44': { + 'label': 'vol. up' + }, + '56': { + 'p2': '003E', + 'p8': '003C', + 'p9': '007C' + }, + '73': {}, + '79': { + 'format': 'smaller' + }, + '7B': { + 'format': 'smaller' + }, + '7D': {}, + 'E0 1D': { + 'format': 'smaller', + 'label': 'ctrl' + }, + 'E0 38': { + 'format': 'smaller', + 'label': 'alt gr' + }, + 'E0 48': { + 'label': 'up' + }, + 'E0 4B': { + 'label': 'left' + }, + 'E0 4D': { + 'label': 'right' + }, + 'E0 50': { + 'label': 'down' + }, + 'E0 5B': { + 'format': 'left', + 'label': 'search' + } + }, + 'layoutName': 'E' + }, + 'fr': { + 'keys': { + '00': { + 'label': 'power' + }, + '01': { + 'format': 'smaller', + 'label': '\u00e9chap' + }, + '02': { + 'p2': '31', + 'p8': '26' + }, + '03': { + 'p2': '32', + 'p8': 'E9', + 'p9': '007E' + }, + '04': { + 'p2': '33', + 'p8': '22', + 'p9': '23' + }, + '05': { + 'p2': '34', + 'p8': '27', + 'p9': '007B' + }, + '06': { + 'p2': '35', + 'p8': '28', + 'p9': '005B' + }, + '07': { + 'p2': '36', + 'p8': '2D', + 'p9': '007C' + }, + '08': { + 'p2': '37', + 'p8': 'E8', + 'p9': '60' + }, + '09': { + 'p2': '38', + 'p8': '5F', + 'p9': '005C' + }, + '0A': { + 'p2': '39', + 'p8': 'E7', + 'p9': '005E' + }, + '0B': { + 'p2': '30', + 'p8': 'E0', + 'p9': '40' + }, + '0C': { + 'p2': '00B0', + 'p8': '29', + 'p9': '005D' + }, + '0D': { + 'p2': '002B', + 'p8': '003D', + 'p9': '007D' + }, + '0E': { + 'format': 'right', + 'label': 'backspace' + }, + '0F': { + 'format': 'left', + 'label': 'tab' + }, + '10': { + 'p5': '61' + }, + '11': { + 'p5': '007A' + }, + '12': { + 'p5': '65', + 'p9': '20AC' + }, + '13': { + 'p5': '72' + }, + '14': { + 'p5': '74' + }, + '15': { + 'p5': '79' + }, + '16': { + 'p5': '75' + }, + '17': { + 'p5': '69' + }, + '18': { + 'p5': '006F' + }, + '19': { + 'p5': '70' + }, + '1A': { + 'p2': 'A8', + 'p8': '5E' + }, + '1B': { + 'p2': 'A3', + 'p8': '24', + 'p9': 'A4' + }, + '1C': { + 'format': 'right', + 'label': 'enter' + }, + '1D': { + 'format': 'left', + 'label': 'ctrl' + }, + '1E': { + 'p5': '71' + }, + '1F': { + 'p5': '73' + }, + '20': { + 'p5': '64' + }, + '21': { + 'p5': '66' + }, + '22': { + 'p5': '67' + }, + '23': { + 'p5': '68' + }, + '24': { + 'p5': '006A' + }, + '25': { + 'p5': '006B' + }, + '26': { + 'p5': '006C' + }, + '27': { + 'p5': '006D' + }, + '28': { + 'p2': '25', + 'p8': 'F9' + }, + '29': { + 'p8': 'B2' + }, + '2A': { + 'format': 'left', + 'label': 'shift' + }, + '2B': { + 'p2': 'B5', + 'p8': '2A' + }, + '2C': { + 'p5': '77' + }, + '2D': { + 'p5': '78' + }, + '2E': { + 'p5': '63' + }, + '2F': { + 'p5': '76' + }, + '30': { + 'p5': '62' + }, + '31': { + 'p5': '006E' + }, + '32': { + 'p2': '3F', + 'p8': '2C' + }, + '33': { + 'p2': '2E', + 'p8': '3B' + }, + '34': { + 'p2': '2F', + 'p8': '3A' + }, + '35': { + 'p2': 'A7', + 'p8': '21' + }, + '36': { + 'format': 'right', + 'label': 'shift' + }, + '38': { + 'format': 'left', + 'label': 'alt' + }, + '39': { + 'label': 'space' + }, + '3B': { + 'label': 'back' + }, + '3C': { + 'label': 'forward' + }, + '3D': { + 'label': 'reload' + }, + '3E': { + 'label': 'full screen' + }, + '3F': { + 'label': 'switch window' + }, + '40': { + 'label': 'bright down' + }, + '41': { + 'label': 'bright up' + }, + '42': { + 'label': 'mute' + }, + '43': { + 'label': 'vol. down' + }, + '44': { + 'label': 'vol. up' + }, + '56': { + 'p2': '3E', + 'p8': '3C' + }, + 'E0 1D': { + 'format': 'smaller', + 'label': 'ctrl' + }, + 'E0 38': { + 'format': 'smaller', + 'label': 'alt gr' + }, + 'E0 48': { + 'label': 'up' + }, + 'E0 4B': { + 'label': 'left' + }, + 'E0 4D': { + 'label': 'right' + }, + 'E0 50': { + 'label': 'down' + }, + 'E0 5B': { + 'format': 'left', + 'label': 'search' + } + }, + 'layoutName': 'E' + }, + 'fr_CA': { + 'keys': { + '00': { + 'label': 'power' + }, + '01': { + 'format': 'smaller', + 'label': '\u00e9chap' + }, + '02': { + 'p2': '21', + 'p8': '31', + 'p9': 'B1' + }, + '03': { + 'p2': '22', + 'p8': '32', + 'p9': '40' + }, + '04': { + 'p2': '2F', + 'p8': '33', + 'p9': 'A3' + }, + '05': { + 'p2': '24', + 'p8': '34', + 'p9': 'A2' + }, + '06': { + 'p2': '25', + 'p8': '35', + 'p9': 'A4' + }, + '07': { + 'p2': '3F', + 'p8': '36', + 'p9': 'AC' + }, + '08': { + 'p2': '26', + 'p8': '37', + 'p9': 'A6' + }, + '09': { + 'p2': '2A', + 'p8': '38', + 'p9': 'B2' + }, + '0A': { + 'p2': '28', + 'p8': '39', + 'p9': 'B3' + }, + '0B': { + 'p2': '29', + 'p8': '30', + 'p9': 'BC' + }, + '0C': { + 'p2': '5F', + 'p8': '2D', + 'p9': 'BD' + }, + '0D': { + 'p2': '2B', + 'p8': '3D', + 'p9': 'BE' + }, + '0E': { + 'format': 'right', + 'label': 'backspace' + }, + '0F': { + 'format': 'left', + 'label': 'tab' + }, + '10': { + 'p5': '71' + }, + '11': { + 'p5': '77' + }, + '12': { + 'p5': '65' + }, + '13': { + 'p5': '72' + }, + '14': { + 'p5': '74' + }, + '15': { + 'p5': '79' + }, + '16': { + 'p5': '75' + }, + '17': { + 'p5': '69' + }, + '18': { + 'p5': '006F', + 'p9': '00A7' + }, + '19': { + 'p5': '70', + 'p9': '00B6' + }, + '1A': { + 'p2': '5E', + 'p8': '5E', + 'p9': '5B' + }, + '1B': { + 'p2': 'A8', + 'p8': 'B8', + 'p9': '5D' + }, + '1C': { + 'format': 'right', + 'label': 'enter' + }, + '1D': { + 'format': 'left', + 'label': 'ctrl' + }, + '1E': { + 'p5': '61' + }, + '1F': { + 'p5': '73' + }, + '20': { + 'p5': '64' + }, + '21': { + 'p5': '66' + }, + '22': { + 'p5': '67' + }, + '23': { + 'p5': '68' + }, + '24': { + 'p5': '6A' + }, + '25': { + 'p5': '6B' + }, + '26': { + 'p5': '6C' + }, + '27': { + 'p2': '3A', + 'p8': '3B', + 'p9': '7E' + }, + '28': { + 'p2': '60', + 'p8': '60', + 'p9': '7B' + }, + '29': { + 'p2': '7C', + 'p8': '23', + 'p9': '5C' + }, + '2A': { + 'format': 'left', + 'label': 'shift' + }, + '2B': { + 'p2': '3E', + 'p8': '3C', + 'p9': '7D' + }, + '2C': { + 'p5': '7A' + }, + '2D': { + 'p5': '78' + }, + '2E': { + 'p5': '63' + }, + '2F': { + 'p5': '76' + }, + '30': { + 'p5': '62' + }, + '31': { + 'p5': '6E' + }, + '32': { + 'p5': '6D', + 'p9': '00B5' + }, + '33': { + 'p2': '27', + 'p8': '2C', + 'p9': 'AF' + }, + '34': { + 'p2': '2E', + 'p8': '2E', + 'p9': 'AD' + }, + '35': { + 'p2': 'C9', + 'p8': 'E9', + 'p9': 'B4' + }, + '36': { + 'format': 'right', + 'label': 'shift' + }, + '38': { + 'format': 'left', + 'label': 'alt' + }, + '39': { + 'label': 'space' + }, + '3B': { + 'label': 'back' + }, + '3C': { + 'label': 'forward' + }, + '3D': { + 'label': 'reload' + }, + '3E': { + 'label': 'full screen' + }, + '3F': { + 'label': 'switch window' + }, + '40': { + 'label': 'bright down' + }, + '41': { + 'label': 'bright up' + }, + '42': { + 'label': 'mute' + }, + '43': { + 'label': 'vol. down' + }, + '44': { + 'label': 'vol. up' + }, + '56': { + 'p2': 'BB', + 'p8': 'AB', + 'p9': 'B0' + }, + 'E0 1D': { + 'format': 'smaller', + 'label': 'ctrl' + }, + 'E0 38': { + 'format': 'smaller', + 'label': 'alt gr' + }, + 'E0 48': { + 'label': 'up' + }, + 'E0 4B': { + 'label': 'left' + }, + 'E0 4D': { + 'label': 'right' + }, + 'E0 50': { + 'label': 'down' + }, + 'E0 5B': { + 'format': 'left', + 'label': 'search' + } + }, + 'layoutName': 'E' + }, + 'hi': { + 'keys': { + '00': { + 'label': 'power' + }, + '01': { + 'format': 'smaller', + 'label': 'esc' + }, + '02': { + 'p1': '21', + 'p3': '090D', + 'p7': '31', + 'p9': '967' + }, + '03': { + 'p1': '40', + 'p3': '945', + 'p7': '32', + 'p9': '968' + }, + '04': { + 'p1': '23', + 'p3': '094D0930', + 'p7': '33', + 'p9': '969' + }, + '05': { + 'p1': '24', + 'p3': '0930094D', + 'p7': '34', + 'p9': '96A' + }, + '06': { + 'p1': '25', + 'p3': '091C094D091E', + 'p7': '35', + 'p9': '96B' + }, + '07': { + 'p1': '5E', + 'p3': '0924094D0930', + 'p7': '36', + 'p9': '96C' + }, + '08': { + 'p1': '26', + 'p3': '0915094D0937', + 'p7': '37', + 'p9': '96D' + }, + '09': { + 'p1': '2A', + 'p3': '0936094D0930', + 'p7': '38', + 'p9': '96E' + }, + '0A': { + 'p1': '28', + 'p3': '28', + 'p7': '39', + 'p9': '96F' + }, + '0B': { + 'p1': '29', + 'p3': '29', + 'p7': '30', + 'p9': '966' + }, + '0C': { + 'p1': '5F', + 'p3': '903', + 'p7': '2D' + }, + '0D': { + 'p1': '2B', + 'p3': '090B', + 'p7': '3D', + 'p9': '943' + }, + '0E': { + 'format': 'right', + 'label': 'backspace' + }, + '0F': { + 'format': 'left', + 'label': 'tab' + }, + '10': { + 'p3': '914', + 'p7': '71', + 'p9': '094C' + }, + '11': { + 'p3': '910', + 'p7': '77', + 'p9': '948' + }, + '12': { + 'p3': '906', + 'p7': '65', + 'p9': '093E' + }, + '13': { + 'p3': '908', + 'p7': '72', + 'p9': '940' + }, + '14': { + 'p3': '090A', + 'p7': '74', + 'p9': '942' + }, + '15': { + 'p3': '092D', + 'p7': '79', + 'p9': '092C' + }, + '16': { + 'p3': '919', + 'p7': '75', + 'p9': '939' + }, + '17': { + 'p3': '918', + 'p7': '69', + 'p9': '917' + }, + '18': { + 'p3': '927', + 'p7': '6F', + 'p9': '926' + }, + '19': { + 'p3': '091D', + 'p7': '70', + 'p9': '091C' + }, + '1A': { + 'p1': '7B', + 'p3': '922', + 'p7': '5B', + 'p9': '921' + }, + '1B': { + 'p1': '7D', + 'p3': '091E', + 'p7': '5D', + 'p9': '093C' + }, + '1C': { + 'format': 'right', + 'label': 'enter' + }, + '1D': { + 'format': 'left', + 'label': 'ctrl' + }, + '1E': { + 'p3': '913', + 'p7': '61', + 'p9': '094B' + }, + '1F': { + 'p3': '090F', + 'p7': '73', + 'p9': '947' + }, + '20': { + 'p3': '905', + 'p7': '64', + 'p9': '094D' + }, + '21': { + 'p3': '907', + 'p7': '66', + 'p9': '093F' + }, + '22': { + 'p3': '909', + 'p7': '67', + 'p9': '941' + }, + '23': { + 'p3': '092B', + 'p7': '68', + 'p9': '092A' + }, + '24': { + 'p3': '931', + 'p7': '6A', + 'p9': '930' + }, + '25': { + 'p3': '916', + 'p7': '6B', + 'p9': '915' + }, + '26': { + 'p3': '925', + 'p7': '6C', + 'p9': '924' + }, + '27': { + 'p1': '3A', + 'p3': '091B', + 'p7': '3B', + 'p9': '091A' + }, + '28': { + 'p1': '22', + 'p3': '920', + 'p7': '27', + 'p9': '091F' + }, + '29': { + 'p1': '7E', + 'p3': '912', + 'p7': '60', + 'p9': '094A' + }, + '2A': { + 'format': 'left', + 'label': 'shift' + }, + '2B': { + 'p1': '7C', + 'p3': '911', + 'p7': '5C', + 'p9': '949' + }, + '2C': { + 'p3': '090E', + 'p7': '7A', + 'p9': '946' + }, + '2D': { + 'p3': '901', + 'p7': '78', + 'p9': '902' + }, + '2E': { + 'p3': '923', + 'p7': '63', + 'p9': '092E' + }, + '2F': { + 'p3': '929', + 'p7': '76', + 'p9': '928' + }, + '30': { + 'p3': '934', + 'p7': '62', + 'p9': '935' + }, + '31': { + 'p3': '933', + 'p7': '6E', + 'p9': '932' + }, + '32': { + 'p3': '936', + 'p7': '6D', + 'p9': '938' + }, + '33': { + 'p1': '3C', + 'p3': '937', + 'p7': '2C', + 'p9': '002C' + }, + '34': { + 'p1': '3E', + 'p3': '964', + 'p7': '2E', + 'p9': '002E' + }, + '35': { + 'p1': '3F', + 'p3': '095F', + 'p7': '2F', + 'p9': '092F' + }, + '36': { + 'format': 'right', + 'label': 'shift' + }, + '37': {}, + '38': { + 'format': 'left', + 'label': 'alt' + }, + '39': { + 'label': 'space' + }, + '3B': { + 'label': 'back' + }, + '3C': { + 'label': 'forward' + }, + '3D': { + 'label': 'reload' + }, + '3E': { + 'label': 'full screen' + }, + '3F': { + 'label': 'switch window' + }, + '40': { + 'label': 'bright down' + }, + '41': { + 'label': 'bright up' + }, + '42': { + 'label': 'mute' + }, + '43': { + 'label': 'vol. down' + }, + '44': { + 'label': 'vol. up' + }, + '73': {}, + '79': { + 'format': 'smaller' + }, + '7B': { + 'format': 'smaller' + }, + '7D': {}, + 'E0 1D': { + 'format': 'smaller', + 'label': 'ctrl' + }, + 'E0 38': { + 'format': 'smaller', + 'label': 'alt' + }, + 'E0 48': { + 'label': 'up' + }, + 'E0 4B': { + 'label': 'left' + }, + 'E0 4D': { + 'label': 'right' + }, + 'E0 50': { + 'label': 'down' + }, + 'E0 5B': { + 'format': 'left', + 'label': 'search' + } + }, + 'layoutName': 'U' + }, + 'hr': { + 'keys': { + '00': { + 'label': 'power' + }, + '01': { + 'format': 'smaller', + 'label': 'esc' + }, + '02': { + 'p2': '21', + 'p8': '31', + 'p9': '007E' + }, + '03': { + 'p2': '22', + 'p8': '32', + 'p9': '02C7' + }, + '04': { + 'p2': '23', + 'p8': '33', + 'p9': '005E' + }, + '05': { + 'p2': '24', + 'p8': '34', + 'p9': '02D8' + }, + '06': { + 'p2': '25', + 'p8': '35', + 'p9': '02DA' + }, + '07': { + 'p2': '26', + 'p8': '36', + 'p9': '02DB' + }, + '08': { + 'p2': '002F', + 'p8': '37', + 'p9': '60' + }, + '09': { + 'p2': '28', + 'p8': '38', + 'p9': '02D9' + }, + '0A': { + 'p2': '29', + 'p8': '39', + 'p9': '00B4' + }, + '0B': { + 'p2': '003D', + 'p8': '30', + 'p9': '02DD' + }, + '0C': { + 'p2': '003F', + 'p8': '27', + 'p9': '00A8' + }, + '0D': { + 'p2': '002A', + 'p8': '002B', + 'p9': '00B8' + }, + '0E': { + 'format': 'right', + 'label': 'backspace' + }, + '0F': { + 'format': 'left', + 'label': 'tab' + }, + '10': { + 'p5': '71', + 'p9': '005C' + }, + '11': { + 'p5': '77', + 'p9': '007C' + }, + '12': { + 'p5': '65', + 'p9': '20AC' + }, + '13': { + 'p5': '72' + }, + '14': { + 'p5': '74' + }, + '15': { + 'p5': '007A' + }, + '16': { + 'p5': '75' + }, + '17': { + 'p5': '69' + }, + '18': { + 'p5': '006F' + }, + '19': { + 'p5': '70' + }, + '1A': { + 'p5': '161', + 'p9': '00F7' + }, + '1B': { + 'p5': '111', + 'p9': '00D7' + }, + '1C': { + 'format': 'right', + 'label': 'enter' + }, + '1D': { + 'format': 'left', + 'label': 'ctrl' + }, + '1E': { + 'p5': '61' + }, + '1F': { + 'p5': '73' + }, + '20': { + 'p5': '64' + }, + '21': { + 'p5': '66', + 'p9': '005B' + }, + '22': { + 'p5': '67', + 'p9': '005D' + }, + '23': { + 'p5': '68' + }, + '24': { + 'p5': '006A' + }, + '25': { + 'p5': '006B', + 'p9': '142' + }, + '26': { + 'p5': '006C', + 'p9': '141' + }, + '27': { + 'p5': '10D' + }, + '28': { + 'p5': '107', + 'p9': '00DF' + }, + '29': { + 'p2': '00A8', + 'p8': '00B8' + }, + '2A': { + 'format': 'left', + 'label': 'shift' + }, + '2B': { + 'p5': '17E', + 'p9': '00A4' + }, + '2C': { + 'p5': '79' + }, + '2D': { + 'p5': '78' + }, + '2E': { + 'p5': '63' + }, + '2F': { + 'p5': '76', + 'p9': '40' + }, + '30': { + 'p5': '62', + 'p9': '007B' + }, + '31': { + 'p5': '006E', + 'p9': '007D' + }, + '32': { + 'p5': '006D', + 'p9': '00A7' + }, + '33': { + 'p2': '003B', + 'p8': '002C' + }, + '34': { + 'p2': '003A', + 'p8': '002E' + }, + '35': { + 'p2': '005F', + 'p8': '002D' + }, + '36': { + 'format': 'right', + 'label': 'shift' + }, + '38': { + 'format': 'left', + 'label': 'alt' + }, + '39': { + 'label': 'space' + }, + '3B': { + 'label': 'back' + }, + '3C': { + 'label': 'forward' + }, + '3D': { + 'label': 'reload' + }, + '3E': { + 'label': 'full screen' + }, + '3F': { + 'label': 'switch window' + }, + '40': { + 'label': 'bright down' + }, + '41': { + 'label': 'bright up' + }, + '42': { + 'label': 'mute' + }, + '43': { + 'label': 'vol. down' + }, + '44': { + 'label': 'vol. up' + }, + '56': { + 'p2': '003E', + 'p8': '003C' + }, + '73': {}, + '79': { + 'format': 'smaller' + }, + '7B': { + 'format': 'smaller' + }, + '7D': {}, + 'E0 1D': { + 'format': 'smaller', + 'label': 'ctrl' + }, + 'E0 38': { + 'format': 'smaller', + 'label': 'alt gr' + }, + 'E0 48': { + 'label': 'up' + }, + 'E0 4B': { + 'label': 'left' + }, + 'E0 4D': { + 'label': 'right' + }, + 'E0 50': { + 'label': 'down' + }, + 'E0 5B': { + 'format': 'left', + 'label': 'search' + } + }, + 'layoutName': 'E' + }, + 'hu': { + 'keys': { + '00': { + 'label': 'power' + }, + '01': { + 'format': 'smaller', + 'label': 'esc' + }, + '02': { + 'p2': '27', + 'p8': '31', + 'p9': '7e' + }, + '03': { + 'p2': '22', + 'p8': '32', + 'p9': '2c7' + }, + '04': { + 'p2': '2b', + 'p8': '33', + 'p9': '5e' + }, + '05': { + 'p2': '21', + 'p8': '34', + 'p9': '2d8' + }, + '06': { + 'p2': '25', + 'p8': '35', + 'p9': '2da' + }, + '07': { + 'p2': '2f', + 'p8': '36', + 'p9': '2db' + }, + '08': { + 'p2': '3d', + 'p8': '37', + 'p9': '60' + }, + '09': { + 'p2': '28', + 'p8': '38', + 'p9': '2d9' + }, + '0A': { + 'p2': '29', + 'p8': '39', + 'p9': 'b4' + }, + '0B': { + 'p5': 'f6', + 'p9': '2dd' + }, + '0C': { + 'p5': 'fc', + 'p9': 'a8' + }, + '0D': { + 'p5': 'f3', + 'p9': 'b8' + }, + '0E': { + 'label': 'backspace' + }, + '0F': { + 'format': 'left', + 'label': 'tab' + }, + '10': { + 'p5': '71', + 'p9': '5c' + }, + '11': { + 'p5': '77', + 'p9': '7c' + }, + '12': { + 'p5': '65' + }, + '13': { + 'p5': '72' + }, + '14': { + 'p5': '74' + }, + '15': { + 'p5': '7a' + }, + '16': { + 'p5': '75', + 'p9': '20ac' + }, + '17': { + 'p5': '69' + }, + '18': { + 'p5': '6f' + }, + '19': { + 'p5': '70' + }, + '1A': { + 'p5': '151', + 'p9': 'f7' + }, + '1B': { + 'p5': 'fa', + 'p9': 'd7' + }, + '1C': { + 'format': 'right', + 'label': 'enter' + }, + '1D': { + 'format': 'left', + 'label': 'ctrl' + }, + '1E': { + 'p5': '61' + }, + '1F': { + 'p5': '73', + 'p9': '111' + }, + '20': { + 'p5': '64', + 'p9': '110' + }, + '21': { + 'p5': '66', + 'p9': '5b' + }, + '22': { + 'p5': '67', + 'p9': '5d' + }, + '23': { + 'p5': '68' + }, + '24': { + 'p5': '6a' + }, + '25': { + 'p5': '6b', + 'p9': '142' + }, + '26': { + 'p5': '6c', + 'p9': '141' + }, + '27': { + 'p5': 'e9', + 'p9': '24' + }, + '28': { + 'p5': 'e1', + 'p9': 'df' + }, + '29': { + 'p2': 'a7', + 'p8': '30' + }, + '2A': { + 'format': 'left', + 'label': 'shift' + }, + '2B': { + 'p5': '171', + 'p9': 'a4' + }, + '2C': { + 'p5': '79', + 'p9': '3e' + }, + '2D': { + 'p5': '78', + 'p9': '23' + }, + '2E': { + 'p5': '63', + 'p9': '26' + }, + '2F': { + 'p5': '76', + 'p9': '40' + }, + '30': { + 'p5': '62', + 'p9': '7b' + }, + '31': { + 'p5': '6e', + 'p9': '7d' + }, + '32': { + 'p5': '6d' + }, + '33': { + 'p2': '3f', + 'p8': '2c', + 'p9': '3b' + }, + '34': { + 'p2': '3a', + 'p8': '2e' + }, + '35': { + 'p2': '5f', + 'p8': '2d', + 'p9': '2a' + }, + '36': { + 'format': 'right', + 'label': 'shift' + }, + '38': { + 'format': 'left' + }, + '39': { + 'label': 'space' + }, + '3B': { + 'label': 'back' + }, + '3C': { + 'label': 'forward' + }, + '3D': { + 'label': 'reload' + }, + '3E': { + 'label': 'full screen' + }, + '3F': { + 'label': 'switch window' + }, + '40': { + 'label': 'bright down' + }, + '41': { + 'label': 'bright up' + }, + '42': { + 'label': 'mute' + }, + '43': { + 'label': 'vol. down' + }, + '44': { + 'label': 'vol. up' + }, + '56': { + 'p5': 'ed', + 'p9': '3c' + }, + '73': {}, + '79': { + 'format': 'smaller' + }, + '7B': { + 'format': 'smaller' + }, + '7D': {}, + 'E0 1D': { + 'format': 'smaller' + }, + 'E0 38': { + 'format': 'smaller' + }, + 'E0 48': { + 'label': 'up' + }, + 'E0 4B': { + 'label': 'left' + }, + 'E0 4D': { + 'label': 'right' + }, + 'E0 50': { + 'label': 'down' + }, + 'E0 5B': { + 'format': 'left', + 'label': 'search' + } + }, + 'layoutName': 'E' + }, + 'it': { + 'keys': { + '00': { + 'label': 'power' + }, + '01': { + 'format': 'smaller', + 'label': 'esc' + }, + '02': { + 'p2': '21', + 'p8': '31' + }, + '03': { + 'p2': '22', + 'p8': '32' + }, + '04': { + 'p2': 'A3', + 'p8': '33' + }, + '05': { + 'p2': '24', + 'p8': '34' + }, + '06': { + 'p2': '25', + 'p8': '35' + }, + '07': { + 'p2': '26', + 'p8': '36' + }, + '08': { + 'p2': '2F', + 'p8': '37' + }, + '09': { + 'p2': '28', + 'p8': '38' + }, + '0A': { + 'p2': '29', + 'p8': '39' + }, + '0B': { + 'p2': '3D', + 'p8': '30' + }, + '0C': { + 'p2': '3F', + 'p8': '27' + }, + '0D': { + 'p2': '5E', + 'p8': 'EC' + }, + '0E': { + 'format': 'right', + 'label': 'backspace' + }, + '0F': { + 'format': 'left', + 'label': 'tab' + }, + '10': { + 'p5': '71' + }, + '11': { + 'p5': '77' + }, + '12': { + 'p5': '65', + 'p9': '20AC' + }, + '13': { + 'p5': '72' + }, + '14': { + 'p5': '74' + }, + '15': { + 'p5': '79' + }, + '16': { + 'p5': '75' + }, + '17': { + 'p5': '69' + }, + '18': { + 'p5': '006F' + }, + '19': { + 'p5': '70' + }, + '1A': { + 'p2': 'E9', + 'p8': 'E8', + 'p9': '5B' + }, + '1B': { + 'p2': '2A', + 'p8': '2B', + 'p9': '5D' + }, + '1C': { + 'format': 'right', + 'label': 'invio' + }, + '1D': { + 'format': 'left', + 'label': 'ctrl' + }, + '1E': { + 'p5': '61' + }, + '1F': { + 'p5': '73' + }, + '20': { + 'p5': '64' + }, + '21': { + 'p5': '66' + }, + '22': { + 'p5': '67' + }, + '23': { + 'p5': '68' + }, + '24': { + 'p5': '6A' + }, + '25': { + 'p5': '6B' + }, + '26': { + 'p5': '6C' + }, + '27': { + 'p2': 'E7', + 'p8': 'F2', + 'p9': '40' + }, + '28': { + 'p2': 'B0', + 'p8': 'E0', + 'p9': '23' + }, + '29': { + 'p2': '7C', + 'p8': '5C' + }, + '2A': { + 'format': 'left', + 'label': 'maiusc' + }, + '2B': { + 'p2': 'A7', + 'p8': 'F9', + 'p9': '60' + }, + '2C': { + 'p5': '7A' + }, + '2D': { + 'p5': '78' + }, + '2E': { + 'p5': '63' + }, + '2F': { + 'p5': '76' + }, + '30': { + 'p5': '62' + }, + '31': { + 'p5': '6E' + }, + '32': { + 'p5': '6D' + }, + '33': { + 'p2': '3B', + 'p8': '2C' + }, + '34': { + 'p2': '3A', + 'p8': '2E' + }, + '35': { + 'p2': '5F', + 'p8': '2D' + }, + '36': { + 'format': 'right', + 'label': 'maiusc' + }, + '38': { + 'format': 'left', + 'label': 'alt' + }, + '39': { + 'label': 'space' + }, + '3B': { + 'label': 'back' + }, + '3C': { + 'label': 'forward' + }, + '3D': { + 'label': 'reload' + }, + '3E': { + 'label': 'full screen' + }, + '3F': { + 'label': 'switch window' + }, + '40': { + 'label': 'bright down' + }, + '41': { + 'label': 'bright up' + }, + '42': { + 'label': 'mute' + }, + '43': { + 'label': 'vol. down' + }, + '44': { + 'label': 'vol. up' + }, + '56': { + 'p2': '3E', + 'p8': '3C' + }, + 'E0 1D': { + 'format': 'smaller', + 'label': 'ctrl' + }, + 'E0 38': { + 'format': 'smaller', + 'label': 'alt gr' + }, + 'E0 48': { + 'label': 'up' + }, + 'E0 4B': { + 'label': 'left' + }, + 'E0 4D': { + 'label': 'right' + }, + 'E0 50': { + 'label': 'down' + }, + 'E0 5B': { + 'format': 'left', + 'label': 'search' + } + }, + 'layoutName': 'E' + }, + 'iw': { + 'keys': { + '00': { + 'label': 'power' + }, + '01': { + 'format': 'smaller', + 'label': 'esc' + }, + '02': { + 'p1': '21', + 'p7': '31' + }, + '03': { + 'p1': '40', + 'p7': '32' + }, + '04': { + 'p1': '23', + 'p7': '33' + }, + '05': { + 'p1': '24', + 'p3': '20aa', + 'p7': '34' + }, + '06': { + 'p1': '25', + 'p7': '35' + }, + '07': { + 'p1': '5E', + 'p7': '36' + }, + '08': { + 'p1': '26', + 'p7': '37' + }, + '09': { + 'p1': '2A', + 'p7': '38' + }, + '0A': { + 'p1': '28', + 'p7': '39' + }, + '0B': { + 'p1': '29', + 'p7': '30' + }, + '0C': { + 'p1': '5F', + 'p7': '2D' + }, + '0D': { + 'p1': '2B', + 'p7': '3D' + }, + '0E': { + 'format': 'right', + 'label': 'backspace' + }, + '0F': { + 'format': 'left', + 'label': 'tab' + }, + '10': { + 'p5': '71', + 'p9': '2F' + }, + '11': { + 'p5': '77', + 'p9': '27' + }, + '12': { + 'p3': '20ac', + 'p5': '65', + 'p9': '5e7' + }, + '13': { + 'p5': '72', + 'p9': '5e8' + }, + '14': { + 'p5': '74', + 'p9': '5D0' + }, + '15': { + 'p5': '79', + 'p9': '5D8' + }, + '16': { + 'p5': '75', + 'p9': '5D5' + }, + '17': { + 'p5': '69', + 'p9': '5Df' + }, + '18': { + 'p5': '6F', + 'p9': '5dd' + }, + '19': { + 'p5': '70', + 'p9': '5e4' + }, + '1A': { + 'p1': '7b', + 'p7': '5B' + }, + '1B': { + 'p1': '7D', + 'p7': '5D' + }, + '1C': { + 'format': 'right', + 'label': 'enter' + }, + '1D': { + 'format': 'left', + 'label': 'ctrl' + }, + '1E': { + 'p5': '61', + 'p9': '5e9' + }, + '1F': { + 'p5': '73', + 'p9': '5d3' + }, + '20': { + 'p5': '64', + 'p9': '5d2' + }, + '21': { + 'p5': '66', + 'p9': '5db' + }, + '22': { + 'p5': '67', + 'p9': '5e2' + }, + '23': { + 'p5': '68', + 'p9': '5d9' + }, + '24': { + 'p5': '6A', + 'p9': '5d7' + }, + '25': { + 'p5': '6B', + 'p9': '5dc' + }, + '26': { + 'p5': '6C', + 'p9': '5da' + }, + '27': { + 'p1': '3a', + 'p7': '3b', + 'p9': '5e3' + }, + '28': { + 'p1': '22', + 'p7': 'b4' + }, + '29': { + 'p1': '7E', + 'p7': '60', + 'p9': '3b' + }, + '2A': { + 'format': 'left', + 'label': 'shift' + }, + '2B': { + 'p1': 'A6', + 'p7': '5C' + }, + '2C': { + 'p5': '7A', + 'p9': '5d6' + }, + '2D': { + 'p5': '78', + 'p9': '5e1' + }, + '2E': { + 'p5': '63', + 'p9': '5d1' + }, + '2F': { + 'p5': '76', + 'p9': '5d4' + }, + '30': { + 'p5': '62', + 'p9': '5e0' + }, + '31': { + 'p5': '6E', + 'p9': '5de' + }, + '32': { + 'p5': '6D', + 'p9': '5e6' + }, + '33': { + 'p1': '3c', + 'p7': 'b8', + 'p9': '5ea' + }, + '34': { + 'p1': '3e', + 'p7': '2e', + 'p9': '5e5' + }, + '35': { + 'p1': '3f', + 'p7': '2f', + 'p9': '2e' + }, + '36': { + 'format': 'right', + 'label': 'shift' + }, + '38': { + 'format': 'left', + 'label': 'alt' + }, + '39': { + 'label': 'space' + }, + '3B': { + 'label': 'back' + }, + '3C': { + 'label': 'forward' + }, + '3D': { + 'label': 'reload' + }, + '3E': { + 'label': 'full screen' + }, + '3F': { + 'label': 'switch window' + }, + '40': { + 'label': 'bright down' + }, + '41': { + 'label': 'bright up' + }, + '42': { + 'label': 'mute' + }, + '43': { + 'label': 'vol. down' + }, + '44': { + 'label': 'vol. up' + }, + 'E0 1D': { + 'format': 'smaller', + 'label': 'ctrl' + }, + 'E0 38': { + 'format': 'smaller', + 'label': 'alt gr' + }, + 'E0 48': { + 'label': 'up' + }, + 'E0 4B': { + 'label': 'left' + }, + 'E0 4D': { + 'label': 'right' + }, + 'E0 50': { + 'label': 'down' + }, + 'E0 5B': { + 'format': 'left', + 'label': 'search' + } + }, + 'layoutName': 'U' + }, + 'ja': { + 'keys': { + '00': { + 'label': 'power' + }, + '01': { + 'format': 'smaller', + 'label': 'esc' + }, + '02': { + 'p1': '21', + 'p7': '31', + 'p9': '306C' + }, + '03': { + 'p1': '22', + 'p7': '32', + 'p9': '3075' + }, + '04': { + 'p1': '23', + 'p3': '3041', + 'p7': '33', + 'p9': '3042' + }, + '05': { + 'p1': '24', + 'p3': '3045', + 'p7': '34', + 'p9': '3046' + }, + '06': { + 'p1': '25', + 'p3': '3047', + 'p7': '35', + 'p9': '3048' + }, + '07': { + 'p1': '26', + 'p3': '3049', + 'p7': '36', + 'p9': '304A' + }, + '08': { + 'p1': '27', + 'p3': '3083', + 'p7': '37', + 'p9': '3084' + }, + '09': { + 'p1': '28', + 'p3': '3085', + 'p7': '38', + 'p9': '3086' + }, + '0A': { + 'p1': '29', + 'p3': '3087', + 'p7': '39', + 'p9': '3088' + }, + '0B': { + 'p3': '3092', + 'p7': '30', + 'p9': '308F' + }, + '0C': { + 'p1': '3D', + 'p7': '2D', + 'p9': '307B' + }, + '0D': { + 'p1': '7E', + 'p7': '5E', + 'p9': '3078' + }, + '0E': { + 'format': 'right', + 'label': 'backspace' + }, + '0F': { + 'format': 'left', + 'label': 'tab' + }, + '10': { + 'p1': '71', + 'p9': '305F' + }, + '11': { + 'p1': '77', + 'p9': '3066' + }, + '12': { + 'p1': '65', + 'p3': '3043', + 'p9': '3044' + }, + '13': { + 'p1': '72', + 'p9': '3059' + }, + '14': { + 'p1': '74', + 'p9': '304B' + }, + '15': { + 'p1': '79', + 'p9': '3093' + }, + '16': { + 'p1': '75', + 'p9': '306A' + }, + '17': { + 'p1': '69', + 'p9': '306B' + }, + '18': { + 'p1': '6F', + 'p9': '3089' + }, + '19': { + 'p1': '70', + 'p9': '305B' + }, + '1A': { + 'p1': '60', + 'p7': '40', + 'p9': '3099' + }, + '1B': { + 'p1': '7B', + 'p3': '300C', + 'p7': '5B', + 'p9': '309A' + }, + '1C': { + 'format': 'right', + 'label': 'enter' + }, + '1D': { + 'format': 'left', + 'label': 'ctrl' + }, + '1E': { + 'p1': '61', + 'p9': '3061' + }, + '1F': { + 'p1': '73', + 'p9': '3068' + }, + '20': { + 'p1': '64', + 'p9': '3057' + }, + '21': { + 'p1': '66', + 'p9': '306F' + }, + '22': { + 'p1': '67', + 'p9': '304D' + }, + '23': { + 'p1': '68', + 'p9': '304F' + }, + '24': { + 'p1': '6A', + 'p9': '307E' + }, + '25': { + 'p1': '6B', + 'p9': '306E' + }, + '26': { + 'p1': '6C', + 'p9': '308A' + }, + '27': { + 'p1': '2B', + 'p7': '3B', + 'p9': '308C' + }, + '28': { + 'p1': '2A', + 'p7': '3A', + 'p9': '3051' + }, + '29': { + 'label': '\u304b\u306a / \u82f1\u6570' + }, + '2A': { + 'format': 'left', + 'label': 'shift' + }, + '2B': { + 'p1': '7D', + 'p3': '300D', + 'p7': '5D', + 'p9': '3080' + }, + '2C': { + 'p1': '7A', + 'p9': '3064' + }, + '2D': { + 'p1': '78', + 'p9': '3055' + }, + '2E': { + 'p1': '63', + 'p9': '305D' + }, + '2F': { + 'p1': '76', + 'p9': '3072' + }, + '30': { + 'p1': '62', + 'p9': '3053' + }, + '31': { + 'p1': '6E', + 'p9': '307F' + }, + '32': { + 'p1': '6D', + 'p9': '3082' + }, + '33': { + 'p1': '3C', + 'p3': 'FF64', + 'p7': '2C', + 'p9': '306D' + }, + '34': { + 'p1': '3E', + 'p3': 'FF61', + 'p7': '2E', + 'p9': '308B' + }, + '35': { + 'p1': '3F', + 'p3': 'FF65', + 'p7': '2F', + 'p9': '3081' + }, + '36': { + 'format': 'right', + 'label': 'shift' + }, + '38': { + 'format': 'left', + 'label': 'alt' + }, + '39': { + 'label': 'space' + }, + '3B': { + 'label': 'back' + }, + '3C': { + 'label': 'forward' + }, + '3D': { + 'label': 'reload' + }, + '3E': { + 'label': 'full screen' + }, + '3F': { + 'label': 'switch window' + }, + '40': { + 'label': 'bright down' + }, + '41': { + 'label': 'bright up' + }, + '42': { + 'label': 'mute' + }, + '43': { + 'label': 'vol. down' + }, + '44': { + 'label': 'vol. up' + }, + '73': { + 'p1': '5F', + 'p7': '5C', + 'p9': '308D' + }, + '79': { + 'format': 'smaller', + 'label': '\u304b\u306a' + }, + '7B': { + 'format': 'smaller', + 'label': '\u82f1\u6570' + }, + '7D': { + 'p1': '7C', + 'p7': 'A5', + 'p9': '30FC' + }, + 'E0 1D': { + 'format': 'smaller', + 'label': 'ctrl' + }, + 'E0 38': { + 'format': 'smaller', + 'label': 'alt' + }, + 'E0 48': { + 'label': 'up' + }, + 'E0 4B': { + 'label': 'left' + }, + 'E0 4D': { + 'label': 'right' + }, + 'E0 50': { + 'label': 'down' + }, + 'E0 5B': { + 'format': 'left', + 'label': 'search' + } + }, + 'layoutName': 'J' + }, + 'ko': { + 'keys': { + '00': { + 'label': 'power' + }, + '01': { + 'format': 'smaller', + 'label': 'esc' + }, + '02': { + 'p2': '21', + 'p8': '31' + }, + '03': { + 'p2': '40', + 'p8': '32' + }, + '04': { + 'p2': '23', + 'p8': '33' + }, + '05': { + 'p2': '24', + 'p8': '34' + }, + '06': { + 'p2': '25', + 'p8': '35' + }, + '07': { + 'p2': '005E', + 'p8': '36' + }, + '08': { + 'p2': '26', + 'p8': '37' + }, + '09': { + 'p2': '002A', + 'p8': '38' + }, + '0A': { + 'p2': '28', + 'p8': '39' + }, + '0B': { + 'p2': '29', + 'p8': '30' + }, + '0C': { + 'p2': '005F', + 'p8': '002D' + }, + '0D': { + 'p2': '002B', + 'p8': '003D' + }, + '0E': { + 'format': 'right', + 'label': 'backspace' + }, + '0F': { + 'format': 'left', + 'label': 'tab' + }, + '10': { + 'p1': '71', + 'p3': '3143', + 'p9': '3142' + }, + '11': { + 'p1': '77', + 'p3': '3149', + 'p9': '3148' + }, + '12': { + 'p1': '65', + 'p3': '3138', + 'p9': '3137' + }, + '13': { + 'p1': '72', + 'p3': '3132', + 'p9': '3131' + }, + '14': { + 'p1': '74', + 'p3': '3146', + 'p9': '3145' + }, + '15': { + 'p1': '79', + 'p9': '315B' + }, + '16': { + 'p1': '75', + 'p9': '3155' + }, + '17': { + 'p1': '69', + 'p9': '3151' + }, + '18': { + 'p1': '6F', + 'p3': '3152', + 'p9': '3150' + }, + '19': { + 'p1': '70', + 'p3': '3156', + 'p9': '3154' + }, + '1A': { + 'p1': '007B', + 'p7': '005B' + }, + '1B': { + 'p1': '007D', + 'p7': '005D' + }, + '1C': { + 'format': 'right', + 'label': 'enter' + }, + '1D': { + 'format': 'left', + 'label': 'ctrl' + }, + '1E': { + 'p1': '61', + 'p9': '3141' + }, + '1F': { + 'p1': '73', + 'p9': '3134' + }, + '20': { + 'p1': '64', + 'p9': '3147' + }, + '21': { + 'p1': '66', + 'p9': '3139' + }, + '22': { + 'p1': '67', + 'p9': '314E' + }, + '23': { + 'p1': '68', + 'p9': '3157' + }, + '24': { + 'p1': '6A', + 'p9': '3153' + }, + '25': { + 'p1': '6B', + 'p9': '314F' + }, + '26': { + 'p1': '6C', + 'p9': '3163' + }, + '27': { + 'p1': '003A', + 'p7': '003B' + }, + '28': { + 'p1': '22', + 'p7': '27' + }, + '29': { + 'p2': '007E', + 'p8': '60' + }, + '2A': { + 'format': 'left', + 'label': 'shift' + }, + '2B': { + 'p1': '007C', + 'p7': '005C', + 'p9': '20A9' + }, + '2C': { + 'p1': '7A', + 'p9': '314B' + }, + '2D': { + 'p1': '78', + 'p9': '314C' + }, + '2E': { + 'p1': '63', + 'p9': '314A' + }, + '2F': { + 'p1': '76', + 'p9': '314D' + }, + '30': { + 'p1': '62', + 'p9': '3160' + }, + '31': { + 'p1': '6E', + 'p9': '315C' + }, + '32': { + 'p1': '6D', + 'p9': '3161' + }, + '33': { + 'p1': '003C', + 'p7': '002C' + }, + '34': { + 'p1': '003E', + 'p7': '002E' + }, + '35': { + 'p1': '003F', + 'p7': '002F' + }, + '36': { + 'format': 'right', + 'label': 'shift' + }, + '37': {}, + '38': { + 'format': 'left', + 'label': 'alt' + }, + '39': { + 'label': 'space' + }, + '3B': { + 'label': 'back' + }, + '3C': { + 'label': 'forward' + }, + '3D': { + 'label': 'reload' + }, + '3E': { + 'label': 'full screen' + }, + '3F': { + 'label': 'switch window' + }, + '40': { + 'label': 'bright down' + }, + '41': { + 'label': 'bright up' + }, + '42': { + 'label': 'mute' + }, + '43': { + 'label': 'vol. down' + }, + '44': { + 'label': 'vol. up' + }, + '73': {}, + '79': { + 'format': 'smaller', + 'label': '\ud55c/\uc601' + }, + '7B': { + 'format': 'smaller', + 'label': '\ud55c\uc790' + }, + '7D': {}, + 'E0 1D': { + 'format': 'smaller', + 'label': ' \ud55c\uc790' + }, + 'E0 38': { + 'format': 'smaller', + 'label': '\ud55c/\uc601' + }, + 'E0 48': { + 'label': 'up' + }, + 'E0 4B': { + 'label': 'left' + }, + 'E0 4D': { + 'label': 'right' + }, + 'E0 50': { + 'label': 'down' + }, + 'E0 5B': { + 'format': 'left', + 'label': 'search' + } + }, + 'layoutName': 'U' + }, + 'lt': { + 'keys': { + '00': { + 'label': 'power' + }, + '01': { + 'format': 'smaller', + 'label': 'esc' + }, + '02': { + 'p2': '21', + 'p8': '31', + 'p9': '105' + }, + '03': { + 'p2': '40', + 'p8': '32', + 'p9': '10D' + }, + '04': { + 'p2': '23', + 'p8': '33', + 'p9': '119' + }, + '05': { + 'p2': '24', + 'p8': '34', + 'p9': '117' + }, + '06': { + 'p2': '25', + 'p8': '35', + 'p9': '12F' + }, + '07': { + 'p2': '005E', + 'p8': '36', + 'p9': '161' + }, + '08': { + 'p2': '26', + 'p8': '37', + 'p9': '173' + }, + '09': { + 'p2': '002A', + 'p8': '38', + 'p9': '016B' + }, + '0A': { + 'p2': '28', + 'p8': '39' + }, + '0B': { + 'p2': '29', + 'p8': '30' + }, + '0C': { + 'p2': '005F', + 'p8': '002D' + }, + '0D': { + 'p2': '002B', + 'p8': '003D', + 'p9': '017E' + }, + '0E': { + 'format': 'right', + 'label': 'backspace' + }, + '0F': { + 'format': 'left', + 'label': 'tab' + }, + '10': { + 'p5': '71' + }, + '11': { + 'p5': '77' + }, + '12': { + 'p5': '65' + }, + '13': { + 'p5': '72' + }, + '14': { + 'p5': '74' + }, + '15': { + 'p5': '79' + }, + '16': { + 'p5': '75' + }, + '17': { + 'p5': '69' + }, + '18': { + 'p5': '006F' + }, + '19': { + 'p5': '70' + }, + '1A': { + 'p2': '007B', + 'p8': '005B' + }, + '1B': { + 'p2': '007D', + 'p8': '005D' + }, + '1C': { + 'format': 'right', + 'label': 'enter' + }, + '1D': { + 'format': 'left', + 'label': 'ctrl' + }, + '1E': { + 'p5': '61' + }, + '1F': { + 'p5': '73' + }, + '20': { + 'p5': '64' + }, + '21': { + 'p5': '66' + }, + '22': { + 'p5': '67' + }, + '23': { + 'p5': '68' + }, + '24': { + 'p5': '006A' + }, + '25': { + 'p5': '006B' + }, + '26': { + 'p5': '006C' + }, + '27': { + 'p2': '003A', + 'p8': '003B' + }, + '28': { + 'p2': '22', + 'p8': '27' + }, + '29': { + 'p2': '007E', + 'p8': '60', + 'p9': '00B4' + }, + '2A': { + 'format': 'left', + 'label': 'shift' + }, + '2B': { + 'p2': '005C', + 'p8': '007C' + }, + '2C': { + 'p5': '007A' + }, + '2D': { + 'p5': '78' + }, + '2E': { + 'p5': '63' + }, + '2F': { + 'p5': '76' + }, + '30': { + 'p5': '62' + }, + '31': { + 'p5': '006E' + }, + '32': { + 'p5': '006D' + }, + '33': { + 'p2': '003C', + 'p8': '002C', + 'p9': '201E' + }, + '34': { + 'p2': '003E', + 'p8': '002E', + 'p9': '201C' + }, + '35': { + 'p2': '003F', + 'p8': '002F' + }, + '36': { + 'format': 'right', + 'label': 'shift' + }, + '37': {}, + '38': { + 'format': 'left', + 'label': 'alt' + }, + '39': { + 'label': 'space' + }, + '3B': { + 'label': 'back' + }, + '3C': { + 'label': 'forward' + }, + '3D': { + 'label': 'reload' + }, + '3E': { + 'label': 'full screen' + }, + '3F': { + 'label': 'switch window' + }, + '40': { + 'label': 'bright down' + }, + '41': { + 'label': 'bright up' + }, + '42': { + 'label': 'mute' + }, + '43': { + 'label': 'vol. down' + }, + '44': { + 'label': 'vol. up' + }, + '73': {}, + '79': {}, + '7B': { + 'format': 'smaller' + }, + '7D': {}, + 'E0 1D': { + 'format': 'smaller', + 'label': 'ctrl' + }, + 'E0 38': { + 'format': 'smaller', + 'label': 'alt gr' + }, + 'E0 48': { + 'label': 'up' + }, + 'E0 4B': { + 'label': 'left' + }, + 'E0 4D': { + 'label': 'right' + }, + 'E0 50': { + 'label': 'down' + }, + 'E0 5B': { + 'format': 'left', + 'label': 'search' + } + }, + 'layoutName': 'U' + }, + 'lv': { + 'keys': { + '00': { + 'label': 'power' + }, + '01': { + 'format': 'smaller', + 'label': 'esc' + }, + '02': { + 'p2': '21', + 'p8': '31' + }, + '03': { + 'p2': '40', + 'p8': '32' + }, + '04': { + 'p2': '23', + 'p8': '33' + }, + '05': { + 'p2': '24', + 'p8': '34' + }, + '06': { + 'p2': '25', + 'p8': '35' + }, + '07': { + 'p2': '005E', + 'p8': '36' + }, + '08': { + 'p2': '26', + 'p8': '37' + }, + '09': { + 'p2': '002A', + 'p8': '38' + }, + '0A': { + 'p2': '28', + 'p8': '39' + }, + '0B': { + 'p2': '29', + 'p8': '30' + }, + '0C': { + 'p2': '005F', + 'p8': '002D' + }, + '0D': { + 'p2': '002B', + 'p8': '003D' + }, + '0E': { + 'format': 'right', + 'label': 'backspace' + }, + '0F': { + 'format': 'left', + 'label': 'tab' + }, + '10': { + 'p5': '71' + }, + '11': { + 'p5': '77' + }, + '12': { + 'p5': '65' + }, + '13': { + 'p5': '72' + }, + '14': { + 'p5': '74' + }, + '15': { + 'p5': '79' + }, + '16': { + 'p5': '75' + }, + '17': { + 'p5': '69' + }, + '18': { + 'p5': '006F' + }, + '19': { + 'p5': '70' + }, + '1A': { + 'p2': '007B', + 'p8': '005B' + }, + '1B': { + 'p2': '007D', + 'p8': '005D' + }, + '1C': { + 'format': 'right', + 'label': 'enter' + }, + '1D': { + 'format': 'left', + 'label': 'ctrl' + }, + '1E': { + 'p5': '61' + }, + '1F': { + 'p5': '73' + }, + '20': { + 'p5': '64' + }, + '21': { + 'p5': '66' + }, + '22': { + 'p5': '67' + }, + '23': { + 'p5': '68' + }, + '24': { + 'p5': '6A' + }, + '25': { + 'p5': '6B' + }, + '26': { + 'p5': '6C' + }, + '27': { + 'p2': '003A', + 'p8': '003B' + }, + '28': { + 'p2': '22', + 'p8': '27' + }, + '29': { + 'p2': '007E', + 'p8': '60' + }, + '2A': { + 'format': 'left', + 'label': 'shift' + }, + '2B': { + 'p2': '7C', + 'p8': '005C' + }, + '2C': { + 'p5': '7A' + }, + '2D': { + 'p5': '78' + }, + '2E': { + 'p5': '63' + }, + '2F': { + 'p5': '76' + }, + '30': { + 'p5': '62' + }, + '31': { + 'p5': '6E' + }, + '32': { + 'p5': '6D' + }, + '33': { + 'p2': '003C', + 'p8': '002C' + }, + '34': { + 'p2': '003E', + 'p8': '002E' + }, + '35': { + 'p2': '003F', + 'p8': '002F' + }, + '36': { + 'format': 'right', + 'label': 'shift' + }, + '38': { + 'format': 'left', + 'label': 'alt' + }, + '39': { + 'label': 'space' + }, + '3B': { + 'label': 'back' + }, + '3C': { + 'label': 'forward' + }, + '3D': { + 'label': 'reload' + }, + '3E': { + 'label': 'full screen' + }, + '3F': { + 'label': 'switch window' + }, + '40': { + 'label': 'bright down' + }, + '41': { + 'label': 'bright up' + }, + '42': { + 'label': 'mute' + }, + '43': { + 'label': 'vol. down' + }, + '44': { + 'label': 'vol. up' + }, + '56': { + 'p2': '007C', + 'p8': '005C' + }, + '73': {}, + '79': { + 'format': 'smaller' + }, + '7B': { + 'format': 'smaller' + }, + '7D': {}, + 'E0 1D': { + 'format': 'smaller', + 'label': 'ctrl' + }, + 'E0 38': { + 'format': 'smaller', + 'label': 'alt' + }, + 'E0 48': { + 'label': 'up' + }, + 'E0 4B': { + 'label': 'left' + }, + 'E0 4D': { + 'label': 'right' + }, + 'E0 50': { + 'label': 'down' + }, + 'E0 5B': { + 'format': 'left', + 'label': 'search' + } + }, + 'layoutName': 'U' + }, + 'nl': { + 'keys': { + '00': { + 'label': 'power' + }, + '01': { + 'format': 'smaller', + 'label': 'esc' + }, + '02': { + 'p2': '21', + 'p8': '31' + }, + '03': { + 'p2': '40', + 'p8': '32' + }, + '04': { + 'p2': '23', + 'p8': '33' + }, + '05': { + 'p2': '24', + 'p8': '34' + }, + '06': { + 'p2': '25', + 'p8': '35', + 'p9': '20AC' + }, + '07': { + 'p2': '005E', + 'p8': '36' + }, + '08': { + 'p2': '26', + 'p8': '37' + }, + '09': { + 'p2': '002A', + 'p8': '38' + }, + '0A': { + 'p2': '28', + 'p8': '39' + }, + '0B': { + 'p2': '29', + 'p8': '30' + }, + '0C': { + 'p2': '005F', + 'p8': '002D' + }, + '0D': { + 'p2': '002B', + 'p8': '003D' + }, + '0E': { + 'format': 'right', + 'label': 'backspace' + }, + '0F': { + 'format': 'left', + 'label': 'tab' + }, + '10': { + 'p5': '71' + }, + '11': { + 'p5': '77' + }, + '12': { + 'p5': '65' + }, + '13': { + 'p5': '72' + }, + '14': { + 'p5': '74' + }, + '15': { + 'p5': '79' + }, + '16': { + 'p5': '75' + }, + '17': { + 'p5': '69' + }, + '18': { + 'p5': '6F' + }, + '19': { + 'p5': '70' + }, + '1A': { + 'p2': '007B', + 'p8': '005B' + }, + '1B': { + 'p2': '007D', + 'p8': '005D' + }, + '1C': { + 'format': 'right', + 'label': 'enter' + }, + '1D': { + 'format': 'left', + 'label': 'ctrl' + }, + '1E': { + 'p5': '61' + }, + '1F': { + 'p5': '73' + }, + '20': { + 'p5': '64' + }, + '21': { + 'p5': '66' + }, + '22': { + 'p5': '67' + }, + '23': { + 'p5': '68' + }, + '24': { + 'p5': '6A' + }, + '25': { + 'p5': '6B' + }, + '26': { + 'p5': '6C' + }, + '27': { + 'p2': '003A', + 'p8': '003B' + }, + '28': { + 'p2': '22', + 'p8': '27' + }, + '29': { + 'p2': '007E', + 'p8': '60' + }, + '2A': { + 'format': 'left', + 'label': 'shift' + }, + '2B': { + 'p2': '007C', + 'p8': '005C' + }, + '2C': { + 'p5': '7A' + }, + '2D': { + 'p5': '78' + }, + '2E': { + 'p5': '63' + }, + '2F': { + 'p5': '76' + }, + '30': { + 'p5': '62' + }, + '31': { + 'p5': '6E' + }, + '32': { + 'p5': '6D' + }, + '33': { + 'p2': '003C', + 'p8': '002C' + }, + '34': { + 'p2': '003E', + 'p8': '002E' + }, + '35': { + 'p2': '003F', + 'p8': '002F' + }, + '36': { + 'format': 'right', + 'label': 'shift' + }, + '38': { + 'format': 'left', + 'label': 'alt' + }, + '39': { + 'label': 'space' + }, + '3B': { + 'label': 'back' + }, + '3C': { + 'label': 'forward' + }, + '3D': { + 'label': 'reload' + }, + '3E': { + 'label': 'full screen' + }, + '3F': { + 'label': 'switch window' + }, + '40': { + 'label': 'bright down' + }, + '41': { + 'label': 'bright up' + }, + '42': { + 'label': 'mute' + }, + '43': { + 'label': 'vol. down' + }, + '44': { + 'label': 'vol. up' + }, + 'E0 1D': { + 'format': 'smaller', + 'label': 'ctrl' + }, + 'E0 38': { + 'format': 'smaller', + 'label': 'alt gr' + }, + 'E0 48': { + 'label': 'up' + }, + 'E0 4B': { + 'label': 'left' + }, + 'E0 4D': { + 'label': 'right' + }, + 'E0 50': { + 'label': 'down' + }, + 'E0 5B': { + 'format': 'left', + 'label': 'search' + } + }, + 'layoutName': 'U' + }, + 'no': { + 'keys': { + '00': { + 'label': 'power' + }, + '01': { + 'format': 'smaller', + 'label': 'esc' + }, + '02': { + 'p1': '21', + 'p7': '31' + }, + '03': { + 'p1': '22', + 'p7': '32', + 'p9': '40' + }, + '04': { + 'p1': '23', + 'p7': '33', + 'p9': '00A3' + }, + '05': { + 'p1': '00A4', + 'p7': '34', + 'p9': '24' + }, + '06': { + 'p1': '25', + 'p7': '35' + }, + '07': { + 'p1': '26', + 'p7': '36' + }, + '08': { + 'p1': '002F', + 'p7': '37', + 'p9': '007B' + }, + '09': { + 'p1': '28', + 'p7': '38', + 'p9': '005B' + }, + '0A': { + 'p1': '29', + 'p7': '39', + 'p9': '005D' + }, + '0B': { + 'p1': '003D', + 'p7': '30', + 'p9': '007D' + }, + '0C': { + 'p1': '003F', + 'p7': '002B' + }, + '0D': { + 'p1': '60', + 'p7': '005C', + 'p9': '00B4' + }, + '0E': { + 'format': 'right', + 'label': 'backspace' + }, + '0F': { + 'format': 'left', + 'label': 'tab' + }, + '10': { + 'p5': '71' + }, + '11': { + 'p5': '77' + }, + '12': { + 'p5': '65', + 'p9': '20AC' + }, + '13': { + 'p5': '72' + }, + '14': { + 'p5': '74' + }, + '15': { + 'p5': '79' + }, + '16': { + 'p5': '75' + }, + '17': { + 'p5': '69' + }, + '18': { + 'p5': '006F' + }, + '19': { + 'p5': '70' + }, + '1A': { + 'p5': 'E5' + }, + '1B': { + 'p1': '5e', + 'p7': '00A8', + 'p9': '7e' + }, + '1C': { + 'format': 'right', + 'label': 'enter' + }, + '1D': { + 'format': 'left', + 'label': 'ctrl' + }, + '1E': { + 'p5': '61' + }, + '1F': { + 'p5': '73' + }, + '20': { + 'p5': '64' + }, + '21': { + 'p5': '66' + }, + '22': { + 'p5': '67' + }, + '23': { + 'p5': '68' + }, + '24': { + 'p5': '006A' + }, + '25': { + 'p5': '006B' + }, + '26': { + 'p5': '006C' + }, + '27': { + 'p5': '00F8' + }, + '28': { + 'p5': 'E6' + }, + '29': { + 'p1': '00A7', + 'p7': '007C' + }, + '2A': { + 'format': 'left', + 'label': 'shift' + }, + '2B': { + 'p2': '2a', + 'p8': '27' + }, + '2C': { + 'p5': '007A' + }, + '2D': { + 'p5': '78' + }, + '2E': { + 'p5': '63' + }, + '2F': { + 'p5': '76' + }, + '30': { + 'p5': '62' + }, + '31': { + 'p5': '006E' + }, + '32': { + 'p5': '006D', + 'p9': '3bc' + }, + '33': { + 'p2': '003B', + 'p8': '002C' + }, + '34': { + 'p2': '003A', + 'p8': '002E' + }, + '35': { + 'p2': '005F', + 'p8': '002D' + }, + '36': { + 'format': 'right', + 'label': 'shift' + }, + '38': { + 'format': 'left', + 'label': 'alt' + }, + '39': { + 'label': 'space' + }, + '3B': { + 'label': 'back' + }, + '3C': { + 'label': 'forward' + }, + '3D': { + 'label': 'reload' + }, + '3E': { + 'label': 'full screen' + }, + '3F': { + 'label': 'switch window' + }, + '40': { + 'label': 'bright down' + }, + '41': { + 'label': 'bright up' + }, + '42': { + 'label': 'mute' + }, + '43': { + 'label': 'vol. down' + }, + '44': { + 'label': 'vol. up' + }, + '56': { + 'p2': '3e', + 'p8': '003C' + }, + '73': {}, + '79': { + 'format': 'smaller' + }, + '7B': { + 'format': 'smaller' + }, + '7D': {}, + 'E0 1D': { + 'format': 'smaller', + 'label': 'ctrl' + }, + 'E0 38': { + 'format': 'smaller', + 'label': 'alt gr' + }, + 'E0 48': { + 'label': 'up' + }, + 'E0 4B': { + 'label': 'left' + }, + 'E0 4D': { + 'label': 'right' + }, + 'E0 50': { + 'label': 'down' + }, + 'E0 5B': { + 'format': 'left', + 'label': 'search' + } + }, + 'layoutName': 'E' + }, + 'pl': { + 'keys': { + '00': { + 'label': 'power' + }, + '01': { + 'format': 'smaller', + 'label': 'esc' + }, + '02': { + 'p2': '21', + 'p8': '31' + }, + '03': { + 'p2': '40', + 'p8': '32' + }, + '04': { + 'p2': '23', + 'p8': '33' + }, + '05': { + 'p2': '24', + 'p8': '34' + }, + '06': { + 'p2': '25', + 'p8': '35' + }, + '07': { + 'p2': '5E', + 'p8': '36' + }, + '08': { + 'p2': '26', + 'p8': '37' + }, + '09': { + 'p2': '2A', + 'p8': '38' + }, + '0A': { + 'p2': '28', + 'p8': '39' + }, + '0B': { + 'p2': '29', + 'p8': '30' + }, + '0C': { + 'p2': '5F', + 'p8': '2D' + }, + '0D': { + 'p2': '2B', + 'p8': '3D' + }, + '0E': { + 'format': 'right', + 'label': 'backspace' + }, + '0F': { + 'format': 'left', + 'label': 'tab' + }, + '10': { + 'label': 'q', + 'p1': '51' + }, + '11': { + 'label': 'w', + 'p1': '57' + }, + '12': { + 'label': 'e', + 'p1': '45' + }, + '13': { + 'label': 'r', + 'p1': '52' + }, + '14': { + 'label': 't', + 'p1': '54' + }, + '15': { + 'label': 'y', + 'p1': '59' + }, + '16': { + 'label': 'u', + 'p1': '55' + }, + '17': { + 'label': 'i', + 'p1': '49' + }, + '18': { + 'label': 'o', + 'p1': '4F' + }, + '19': { + 'label': 'p', + 'p1': '50' + }, + '1A': { + 'p2': '7B', + 'p8': '5B' + }, + '1B': { + 'p2': '7D', + 'p8': '5D' + }, + '1C': { + 'format': 'right', + 'label': 'enter' + }, + '1D': { + 'format': 'left', + 'label': 'ctrl' + }, + '1E': { + 'label': 'a', + 'p1': '41' + }, + '1F': { + 'label': 's', + 'p1': '53' + }, + '20': { + 'label': 'd', + 'p1': '44' + }, + '21': { + 'label': 'f', + 'p1': '46' + }, + '22': { + 'label': 'g', + 'p1': '47' + }, + '23': { + 'label': 'h', + 'p1': '48' + }, + '24': { + 'label': 'j', + 'p1': '4A' + }, + '25': { + 'label': 'k', + 'p1': '4B' + }, + '26': { + 'label': 'l', + 'p1': '4C' + }, + '27': { + 'p2': '3A', + 'p8': '3B' + }, + '28': { + 'p2': '22', + 'p8': '27' + }, + '29': { + 'p2': '7E', + 'p8': '60' + }, + '2A': { + 'format': 'left', + 'label': 'shift' + }, + '2B': { + 'p2': '7C', + 'p8': '5C' + }, + '2C': { + 'label': 'z', + 'p1': '5A' + }, + '2D': { + 'label': 'x', + 'p1': '58' + }, + '2E': { + 'label': 'c', + 'p1': '43' + }, + '2F': { + 'label': 'v', + 'p1': '56' + }, + '30': { + 'label': 'b', + 'p1': '42' + }, + '31': { + 'label': 'n', + 'p1': '4E' + }, + '32': { + 'label': 'm', + 'p1': '4D' + }, + '33': { + 'p2': '3C', + 'p8': '2C' + }, + '34': { + 'p2': '3E', + 'p8': '2E' + }, + '35': { + 'p2': '3F', + 'p8': '2F' + }, + '36': { + 'format': 'right', + 'label': 'shift' + }, + '38': { + 'format': 'left', + 'label': 'alt' + }, + '39': { + 'label': 'space' + }, + '3B': { + 'label': 'back' + }, + '3C': { + 'label': 'forward' + }, + '3D': { + 'label': 'reload' + }, + '3E': { + 'label': 'full screen' + }, + '3F': { + 'label': 'switch window' + }, + '40': { + 'label': 'bright down' + }, + '41': { + 'label': 'bright up' + }, + '42': { + 'label': 'mute' + }, + '43': { + 'label': 'vol. down' + }, + '44': { + 'label': 'vol. up' + }, + '7D': {}, + 'E0 1D': { + 'format': 'smaller', + 'label': 'ctrl' + }, + 'E0 38': { + 'format': 'smaller', + 'label': 'alt gr' + }, + 'E0 48': { + 'label': 'up' + }, + 'E0 4B': { + 'label': 'left' + }, + 'E0 4D': { + 'label': 'right' + }, + 'E0 50': { + 'label': 'down' + }, + 'E0 5B': { + 'format': 'left', + 'label': 'search' + } + }, + 'layoutName': 'U' + }, + 'pt_BR': { + 'keys': { + '00': { + 'label': 'power' + }, + '01': { + 'format': 'smaller', + 'label': 'esc' + }, + '02': { + 'p1': '21', + 'p7': '31', + 'p9': 'B9' + }, + '03': { + 'p1': '40', + 'p7': '32', + 'p9': 'B2' + }, + '04': { + 'p1': '23', + 'p7': '33', + 'p9': 'B3' + }, + '05': { + 'p1': '24', + 'p7': '34', + 'p9': 'A3' + }, + '06': { + 'p1': '25', + 'p7': '35', + 'p9': 'A2' + }, + '07': { + 'p1': 'A8', + 'p7': '36', + 'p9': '00AC' + }, + '08': { + 'p1': '26', + 'p7': '37' + }, + '09': { + 'p1': '2A', + 'p7': '38' + }, + '0A': { + 'p1': '28', + 'p7': '39' + }, + '0B': { + 'p1': '29', + 'p7': '30' + }, + '0C': { + 'p1': '5F', + 'p7': '2D' + }, + '0D': { + 'p1': '2B', + 'p7': '3D', + 'p9': 'A7' + }, + '0E': { + 'format': 'right', + 'label': 'backspace' + }, + '0F': { + 'format': 'left', + 'label': 'tab' + }, + '10': { + 'p5': '71', + 'p9': '2F' + }, + '11': { + 'p5': '77', + 'p9': '3F' + }, + '12': { + 'p5': '65', + 'p9': '20AC' + }, + '13': { + 'p5': '72' + }, + '14': { + 'p5': '74' + }, + '15': { + 'p5': '79' + }, + '16': { + 'p5': '75' + }, + '17': { + 'p5': '69' + }, + '18': { + 'p5': '6F' + }, + '19': { + 'p5': '70' + }, + '1A': { + 'p1': '60', + 'p7': 'B4' + }, + '1B': { + 'p1': '7B', + 'p7': '5B', + 'p9': 'AA0332' + }, + '1C': { + 'format': 'right', + 'label': 'enter' + }, + '1D': { + 'format': 'left', + 'label': 'ctrl' + }, + '1E': { + 'p5': '61' + }, + '1F': { + 'p5': '73' + }, + '20': { + 'p5': '64' + }, + '21': { + 'p5': '66' + }, + '22': { + 'p5': '67' + }, + '23': { + 'p5': '68' + }, + '24': { + 'p5': '6A' + }, + '25': { + 'p5': '6B' + }, + '26': { + 'p5': '6C' + }, + '27': { + 'p5': 'e7' + }, + '28': { + 'p1': '5E', + 'p7': '7E' + }, + '29': { + 'p1': '22', + 'p7': '27' + }, + '2A': { + 'format': 'left', + 'label': 'shift' + }, + '2B': { + 'p1': '7D', + 'p7': '5D', + 'p9': 'BA0332' + }, + '2C': { + 'p5': '7A' + }, + '2D': { + 'p5': '78' + }, + '2E': { + 'p5': '63', + 'p9': '20A2' + }, + '2F': { + 'p5': '76' + }, + '30': { + 'p5': '62' + }, + '31': { + 'p5': '6E' + }, + '32': { + 'p5': '6D' + }, + '33': { + 'p1': '3C', + 'p7': '2C' + }, + '34': { + 'p1': '3E', + 'p7': '2E' + }, + '35': { + 'p1': '3A', + 'p7': '3B' + }, + '36': { + 'format': 'right', + 'label': 'shift' + }, + '38': { + 'format': 'left', + 'label': 'alt' + }, + '39': { + 'label': 'space' + }, + '3B': { + 'label': 'back' + }, + '3C': { + 'label': 'forward' + }, + '3D': { + 'label': 'reload' + }, + '3E': { + 'label': 'full screen' + }, + '3F': { + 'label': 'switch window' + }, + '40': { + 'label': 'bright down' + }, + '41': { + 'label': 'bright up' + }, + '42': { + 'label': 'mute' + }, + '43': { + 'label': 'vol. down' + }, + '44': { + 'label': 'vol. up' + }, + '56': { + 'p1': '7C', + 'p7': '5C' + }, + '73': { + 'p1': '3F', + 'p7': '2f' + }, + '79': { + 'format': 'smaller' + }, + '7B': { + 'format': 'smaller' + }, + '7D': {}, + 'E0 1D': { + 'format': 'smaller', + 'label': 'ctrl' + }, + 'E0 38': { + 'format': 'smaller', + 'label': 'alt gr' + }, + 'E0 48': { + 'label': 'up' + }, + 'E0 4B': { + 'label': 'left' + }, + 'E0 4D': { + 'label': 'right' + }, + 'E0 50': { + 'label': 'down' + }, + 'E0 5B': { + 'format': 'left', + 'label': 'search' + } + }, + 'layoutName': 'B' + }, + 'pt_PT': { + 'keys': { + '00': { + 'label': 'power' + }, + '01': { + 'format': 'smaller', + 'label': 'esc' + }, + '02': { + 'p2': '21', + 'p8': '31' + }, + '03': { + 'p2': '22', + 'p8': '32', + 'p9': '40' + }, + '04': { + 'p2': '23', + 'p8': '33', + 'p9': 'a3' + }, + '05': { + 'p2': '24', + 'p8': '34', + 'p9': 'a7' + }, + '06': { + 'p2': '25', + 'p8': '35' + }, + '07': { + 'p2': '26', + 'p8': '36' + }, + '08': { + 'p2': '2f', + 'p8': '37', + 'p9': '7b' + }, + '09': { + 'p2': '28', + 'p8': '38', + 'p9': '5b' + }, + '0A': { + 'p2': '29', + 'p8': '39', + 'p9': '5d' + }, + '0B': { + 'p2': '3d', + 'p8': '30', + 'p9': '7d' + }, + '0C': { + 'p2': '3f', + 'p8': '27' + }, + '0D': { + 'p2': 'bb', + 'p8': 'ab' + }, + '0E': { + 'format': 'right', + 'label': 'backspace' + }, + '0F': { + 'format': 'left', + 'label': 'tab' + }, + '10': { + 'p5': '71' + }, + '11': { + 'p5': '77' + }, + '12': { + 'p5': '65', + 'p9': '20ac' + }, + '13': { + 'p5': '72' + }, + '14': { + 'p5': '74' + }, + '15': { + 'p5': '79' + }, + '16': { + 'p5': '75' + }, + '17': { + 'p5': '69' + }, + '18': { + 'p5': '6F' + }, + '19': { + 'p5': '70' + }, + '1A': { + 'p2': '2a', + 'p8': '2b', + 'p9': 'a8' + }, + '1B': { + 'p2': '60', + 'p8': 'b4' + }, + '1C': { + 'format': 'right', + 'label': 'enter' + }, + '1D': { + 'format': 'left', + 'label': 'ctrl' + }, + '1E': { + 'p5': '61' + }, + '1F': { + 'p5': '73' + }, + '20': { + 'p5': '64' + }, + '21': { + 'p5': '66' + }, + '22': { + 'p5': '67' + }, + '23': { + 'p5': '68' + }, + '24': { + 'p5': '6A' + }, + '25': { + 'p5': '6B' + }, + '26': { + 'p5': '6C' + }, + '27': { + 'p5': 'e7' + }, + '28': { + 'p2': 'aa0332', + 'p8': 'ba0332' + }, + '29': { + 'p2': '7c', + 'p8': '5c' + }, + '2A': { + 'format': 'glyph_shift', + 'label': 'shift' + }, + '2B': { + 'p2': '5e', + 'p8': '7e' + }, + '2C': { + 'p5': '7A' + }, + '2D': { + 'p5': '78' + }, + '2E': { + 'p5': '63' + }, + '2F': { + 'p5': '76' + }, + '30': { + 'p5': '62' + }, + '31': { + 'p5': '6E' + }, + '32': { + 'p5': '6D' + }, + '33': { + 'p2': '3b', + 'p8': '2c' + }, + '34': { + 'p2': '3a', + 'p8': '2e' + }, + '35': { + 'p2': '5f', + 'p8': '2d' + }, + '36': { + 'format': 'right', + 'label': 'shift' + }, + '38': { + 'format': 'left', + 'label': 'alt' + }, + '39': { + 'label': 'space' + }, + '3B': { + 'label': 'back' + }, + '3C': { + 'label': 'forward' + }, + '3D': { + 'label': 'reload' + }, + '3E': { + 'label': 'full screen' + }, + '3F': { + 'label': 'switch window' + }, + '40': { + 'label': 'bright down' + }, + '41': { + 'label': 'bright up' + }, + '42': { + 'label': 'mute' + }, + '43': { + 'label': 'vol. down' + }, + '44': { + 'label': 'vol. up' + }, + '56': { + 'p2': '3e', + 'p8': '3c' + }, + '73': {}, + '79': { + 'format': 'smaller' + }, + '7B': { + 'format': 'smaller' + }, + '7D': {}, + 'E0 1D': { + 'format': 'smaller', + 'label': 'ctrl' + }, + 'E0 38': { + 'format': 'smaller', + 'label': 'alt gr' + }, + 'E0 48': { + 'label': 'up' + }, + 'E0 4B': { + 'label': 'left' + }, + 'E0 4D': { + 'label': 'right' + }, + 'E0 50': { + 'label': 'down' + }, + 'E0 5B': { + 'format': 'left', + 'label': 'search' + } + }, + 'layoutName': 'E' + }, + 'ro': { + 'keys': { + '00': { + 'label': 'power' + }, + '01': { + 'format': 'smaller', + 'label': 'esc' + }, + '02': { + 'p1': '21', + 'p7': '31', + 'p9': '7E' + }, + '03': { + 'p1': '22', + 'p7': '32', + 'p9': '2C7' + }, + '04': { + 'p1': '23', + 'p7': '33', + 'p9': '5E' + }, + '05': { + 'p1': '24', + 'p7': '34', + 'p9': '2D8' + }, + '06': { + 'p1': '25', + 'p7': '35', + 'p9': '2DA' + }, + '07': { + 'p1': '26', + 'p7': '36', + 'p9': '2DB' + }, + '08': { + 'p1': '2F', + 'p7': '37', + 'p9': '60' + }, + '09': { + 'p1': '28', + 'p7': '38', + 'p9': '2D9' + }, + '0A': { + 'p1': '29', + 'p7': '39', + 'p9': 'B4' + }, + '0B': { + 'p1': '3D', + 'p7': '30', + 'p9': '2DD' + }, + '0C': { + 'p1': '3F', + 'p7': '2B', + 'p9': 'A8' + }, + '0D': { + 'p1': '2A', + 'p7': '27', + 'p9': 'B8' + }, + '0E': { + 'format': 'right', + 'label': 'backspace' + }, + '0F': { + 'format': 'left', + 'label': 'tab' + }, + '10': { + 'p5': '71', + 'p9': '5c' + }, + '11': { + 'p5': '77', + 'p9': 'A6' + }, + '12': { + 'p5': '65', + 'p9': '20AC' + }, + '13': { + 'p5': '72', + 'p9': 'AE' + }, + '14': { + 'p5': '74' + }, + '15': { + 'p5': '79' + }, + '16': { + 'p5': '75' + }, + '17': { + 'p5': '69' + }, + '18': { + 'p5': '6F' + }, + '19': { + 'p5': '70' + }, + '1A': { + 'p5': '103', + 'p9': '00F7' + }, + '1B': { + 'p5': '00EE', + 'p9': '00D7' + }, + '1C': { + 'format': 'right', + 'label': 'enter' + }, + '1D': { + 'format': 'left', + 'label': 'ctrl' + }, + '1E': { + 'p5': '61', + 'p9': '201E' + }, + '1F': { + 'p5': '73', + 'p9': '201D' + }, + '20': { + 'p5': '64' + }, + '21': { + 'p5': '66' + }, + '22': { + 'p5': '67' + }, + '23': { + 'p5': '68' + }, + '24': { + 'p5': '6A' + }, + '25': { + 'p5': '6B' + }, + '26': { + 'p5': '6C', + 'p9': 'A3' + }, + '27': { + 'p5': '219', + 'p9': '40' + }, + '28': { + 'p5': '021b', + 'p9': 'DF' + }, + '29': { + 'p1': '5B', + 'p7': '5D' + }, + '2A': { + 'format': 'left', + 'label': 'shift' + }, + '2B': { + 'p5': 'E2' + }, + '2C': { + 'p5': '7a' + }, + '2D': { + 'p5': '78' + }, + '2E': { + 'p5': '63', + 'p9': '00A9' + }, + '2F': { + 'p5': '76' + }, + '30': { + 'p5': '62', + 'p9': '7b' + }, + '31': { + 'p5': '6E', + 'p9': '7d' + }, + '32': { + 'p5': '6D', + 'p9': 'a7' + }, + '33': { + 'p1': '3B', + 'p7': '2C' + }, + '34': { + 'p1': '3A', + 'p7': '2E' + }, + '35': { + 'p1': '5F', + 'p7': '2D' + }, + '36': { + 'format': 'right', + 'label': 'shift' + }, + '38': { + 'format': 'left', + 'label': 'alt' + }, + '39': { + 'label': 'space' + }, + '3B': { + 'label': 'back' + }, + '3C': { + 'label': 'forward' + }, + '3D': { + 'label': 'reload' + }, + '3E': { + 'label': 'full screen' + }, + '3F': { + 'label': 'switch window' + }, + '40': { + 'label': 'bright down' + }, + '41': { + 'label': 'bright up' + }, + '42': { + 'label': 'mute' + }, + '43': { + 'label': 'vol. down' + }, + '44': { + 'label': 'vol. up' + }, + '56': { + 'p1': '3C', + 'p7': '3E' + }, + '73': {}, + '79': { + 'format': 'smaller' + }, + '7B': { + 'format': 'smaller' + }, + '7D': { + 'p5': 'E2' + }, + 'E0 1D': { + 'format': 'smaller', + 'label': 'ctrl' + }, + 'E0 38': { + 'format': 'smaller', + 'label': 'alt gr' + }, + 'E0 48': { + 'label': 'up' + }, + 'E0 4B': { + 'label': 'left' + }, + 'E0 4D': { + 'label': 'right' + }, + 'E0 50': { + 'label': 'down' + }, + 'E0 5B': { + 'format': 'left', + 'label': 'search' + } + }, + 'layoutName': 'E' + }, + 'ru': { + 'keys': { + '00': { + 'label': 'power' + }, + '01': { + 'format': 'smaller', + 'label': 'esc' + }, + '02': { + 'p1': '21', + 'p7': '31' + }, + '03': { + 'p1': '40', + 'p3': '22', + 'p7': '32' + }, + '04': { + 'p1': '23', + 'p3': '2116', + 'p7': '33' + }, + '05': { + 'p1': '24', + 'p3': '3b', + 'p7': '34' + }, + '06': { + 'p1': '25', + 'p7': '35' + }, + '07': { + 'p1': '5e', + 'p3': '3a', + 'p7': '36' + }, + '08': { + 'p1': '26', + 'p3': '3f', + 'p7': '37' + }, + '09': { + 'p1': '2a', + 'p7': '38' + }, + '0A': { + 'p1': '28', + 'p7': '39' + }, + '0B': { + 'p1': '29', + 'p7': '30' + }, + '0C': { + 'p1': '5f', + 'p7': '2d' + }, + '0D': { + 'p1': '2b', + 'p7': '3d' + }, + '0E': { + 'format': 'right', + 'label': 'backspace' + }, + '0F': { + 'format': 'left', + 'label': 'tab' + }, + '10': { + 'p1': '71', + 'p9': '439' + }, + '11': { + 'p1': '77', + 'p9': '446' + }, + '12': { + 'p1': '65', + 'p9': '443' + }, + '13': { + 'p1': '72', + 'p9': '43a' + }, + '14': { + 'p1': '74', + 'p9': '435' + }, + '15': { + 'p1': '79', + 'p9': '43d' + }, + '16': { + 'p1': '75', + 'p9': '433' + }, + '17': { + 'p1': '69', + 'p9': '448' + }, + '18': { + 'p1': '6F', + 'p9': '449' + }, + '19': { + 'p1': '70', + 'p9': '437' + }, + '1A': { + 'p1': '7b', + 'p7': '5b', + 'p9': '445' + }, + '1B': { + 'p1': '7d', + 'p7': '5d', + 'p9': '44a' + }, + '1C': { + 'format': 'right', + 'label': 'enter' + }, + '1D': { + 'format': 'left', + 'label': 'ctrl' + }, + '1E': { + 'p1': '61', + 'p9': '444' + }, + '1F': { + 'p1': '73', + 'p9': '44b' + }, + '20': { + 'p1': '64', + 'p9': '432' + }, + '21': { + 'p1': '66', + 'p9': '430' + }, + '22': { + 'p1': '67', + 'p9': '43f' + }, + '23': { + 'p1': '68', + 'p9': '440' + }, + '24': { + 'p1': '6A', + 'p9': '43e' + }, + '25': { + 'p1': '6B', + 'p9': '43b' + }, + '26': { + 'p1': '6C', + 'p9': '434' + }, + '27': { + 'p1': '3a', + 'p7': '3b', + 'p9': '436' + }, + '28': { + 'p1': '22', + 'p7': '27', + 'p9': '44d' + }, + '29': { + 'p1': '7e', + 'p7': '60', + 'p9': '451' + }, + '2A': { + 'format': 'left', + 'label': 'shift' + }, + '2B': { + 'p1': '7c', + 'p3': '2f', + 'p7': '5c', + 'p9': '5c' + }, + '2C': { + 'p1': '7A', + 'p9': '44f' + }, + '2D': { + 'p1': '78', + 'p9': '447' + }, + '2E': { + 'p1': '63', + 'p9': '441' + }, + '2F': { + 'p1': '76', + 'p9': '43c' + }, + '30': { + 'p1': '62', + 'p9': '438' + }, + '31': { + 'p1': '6E', + 'p9': '442' + }, + '32': { + 'p1': '6D', + 'p9': '44c' + }, + '33': { + 'p1': '3c', + 'p7': '2c', + 'p9': '431' + }, + '34': { + 'p1': '3e', + 'p7': '2e', + 'p9': '44e' + }, + '35': { + 'p1': '3f', + 'p3': '2c', + 'p7': '2f', + 'p9': '2e' + }, + '36': { + 'format': 'right', + 'label': 'shift' + }, + '38': { + 'format': 'left', + 'label': 'alt' + }, + '39': { + 'label': 'space' + }, + '3B': { + 'label': 'back' + }, + '3C': { + 'label': 'forward' + }, + '3D': { + 'label': 'reload' + }, + '3E': { + 'label': 'full screen' + }, + '3F': { + 'label': 'switch window' + }, + '40': { + 'label': 'bright down' + }, + '41': { + 'label': 'bright up' + }, + '42': { + 'label': 'mute' + }, + '43': { + 'label': 'vol. down' + }, + '44': { + 'label': 'vol. up' + }, + '79': { + 'format': 'smaller' + }, + '7B': { + 'format': 'smaller' + }, + 'E0 1D': { + 'format': 'smaller', + 'label': 'ctrl' + }, + 'E0 38': { + 'format': 'smaller', + 'label': 'alt' + }, + 'E0 48': { + 'label': 'up' + }, + 'E0 4B': { + 'label': 'left' + }, + 'E0 4D': { + 'label': 'right' + }, + 'E0 50': { + 'label': 'down' + }, + 'E0 5B': { + 'format': 'left', + 'label': 'search' + } + }, + 'layoutName': 'U' + }, + 'sk': { + 'keys': { + '00': { + 'label': 'power' + }, + '01': { + 'format': 'smaller', + 'label': 'esc' + }, + '02': { + 'p1': '21', + 'p3': '31', + 'p7': '31', + 'p9': '002b' + }, + '03': { + 'p1': '40', + 'p3': '32', + 'p7': '32', + 'p9': '013E' + }, + '04': { + 'p1': '23', + 'p3': '33', + 'p7': '33', + 'p9': '161' + }, + '05': { + 'p1': '24', + 'p3': '34', + 'p7': '34', + 'p9': '010d' + }, + '06': { + 'p1': '25', + 'p3': '35', + 'p7': '35', + 'p9': '165' + }, + '07': { + 'p1': '5e', + 'p3': '36', + 'p7': '36', + 'p9': '017e' + }, + '08': { + 'p1': '26', + 'p3': '37', + 'p7': '37', + 'p9': 'fd' + }, + '09': { + 'p1': '2a', + 'p3': '38', + 'p7': '38', + 'p9': 'e1' + }, + '0A': { + 'p1': '28', + 'p3': '39', + 'p7': '39', + 'p9': 'ed' + }, + '0B': { + 'p1': '29', + 'p3': '30', + 'p7': '30', + 'p9': 'e9' + }, + '0C': { + 'p1': '5f', + 'p3': '25', + 'p7': '2d', + 'p9': '3d' + }, + '0D': { + 'p1': '2b', + 'p3': '2c7', + 'p7': '3d', + 'p9': 'b4' + }, + '0E': { + 'format': 'right', + 'label': 'backspace' + }, + '0F': { + 'format': 'left', + 'label': 'tab' + }, + '10': { + 'p5': '71' + }, + '11': { + 'p5': '77' + }, + '12': { + 'p5': '65', + 'p9': '20ac' + }, + '13': { + 'p5': '72' + }, + '14': { + 'p5': '74' + }, + '15': { + 'p5': '79' + }, + '16': { + 'p5': '75' + }, + '17': { + 'p5': '69' + }, + '18': { + 'p5': '6f' + }, + '19': { + 'p5': '70' + }, + '1A': { + 'p1': '7b', + 'p3': 'b4', + 'p7': '5b', + 'p9': 'fa' + }, + '1B': { + 'p1': '7d', + 'p3': '28', + 'p7': '5d', + 'p9': 'e4' + }, + '1C': { + 'format': 'right', + 'label': 'enter' + }, + '1D': { + 'format': 'left', + 'label': 'ctrl' + }, + '1E': { + 'p5': '61' + }, + '1F': { + 'p5': '73' + }, + '20': { + 'p5': '64' + }, + '21': { + 'p5': '66' + }, + '22': { + 'p5': '67' + }, + '23': { + 'p5': '68' + }, + '24': { + 'p5': '6a' + }, + '25': { + 'p5': '6b' + }, + '26': { + 'p5': '6c' + }, + '27': { + 'p1': '3a', + 'p3': '22', + 'p7': '3b', + 'p9': 'f4' + }, + '28': { + 'p1': '22', + 'p3': '21', + 'p7': '27', + 'p9': 'a7' + }, + '29': { + 'p1': '7e', + 'p3': 'b0', + 'p7': '60', + 'p9': '3b' + }, + '2A': { + 'format': 'left', + 'label': 'shift' + }, + '2B': { + 'p1': '7c', + 'p3': '29', + 'p7': '5c', + 'p9': '148' + }, + '2C': { + 'p5': '7a' + }, + '2D': { + 'p5': '78' + }, + '2E': { + 'p5': '63' + }, + '2F': { + 'p5': '76' + }, + '30': { + 'p5': '62' + }, + '31': { + 'p5': '6e' + }, + '32': { + 'p5': '6d' + }, + '33': { + 'p1': '3c', + 'p3': '3f', + 'p7': '2c', + 'p9': '2c' + }, + '34': { + 'p1': '3e', + 'p3': '3a', + 'p7': '2e', + 'p9': '2e' + }, + '35': { + 'p1': '3f', + 'p3': '5f', + 'p7': '2f', + 'p9': '2d' + }, + '36': { + 'format': 'right', + 'label': 'shift' + }, + '38': { + 'format': 'left', + 'label': 'alt' + }, + '39': { + 'label': 'space' + }, + '3B': { + 'label': 'back' + }, + '3C': { + 'label': 'forward' + }, + '3D': { + 'label': 'reload' + }, + '3E': { + 'label': 'full screen' + }, + '3F': { + 'label': 'switch window' + }, + '40': { + 'label': 'bright down' + }, + '41': { + 'label': 'bright up' + }, + '42': { + 'label': 'mute' + }, + '43': { + 'label': 'vol. down' + }, + '44': { + 'label': 'vol. up' + }, + '56': { + 'p1': '2a', + 'p3': '7c', + 'p7': '26', + 'p9': '5c' + }, + '73': {}, + '79': { + 'format': 'smaller' + }, + '7B': { + 'format': 'smaller' + }, + '7D': {}, + 'E0 1D': { + 'format': 'smaller', + 'label': 'ctrl' + }, + 'E0 38': { + 'format': 'smaller', + 'label': 'alt gr' + }, + 'E0 48': { + 'label': 'up' + }, + 'E0 4B': { + 'label': 'left' + }, + 'E0 4D': { + 'label': 'right' + }, + 'E0 50': { + 'label': 'down' + }, + 'E0 5B': { + 'format': 'left', + 'label': 'search' + } + }, + 'layoutName': 'E' + }, + 'sl': { + 'keys': { + '00': { + 'label': 'power' + }, + '01': { + 'format': 'smaller', + 'label': 'esc' + }, + '02': { + 'p2': '21', + 'p8': '31', + 'p9': '007E' + }, + '03': { + 'p2': '22', + 'p8': '32', + 'p9': '02C7' + }, + '04': { + 'p2': '23', + 'p8': '33', + 'p9': '005E' + }, + '05': { + 'p2': '24', + 'p8': '34', + 'p9': '02D8' + }, + '06': { + 'p2': '25', + 'p8': '35', + 'p9': '02DA' + }, + '07': { + 'p2': '26', + 'p8': '36', + 'p9': '02DB' + }, + '08': { + 'p2': '002F', + 'p8': '37', + 'p9': '60' + }, + '09': { + 'p2': '28', + 'p8': '38', + 'p9': '02D9' + }, + '0A': { + 'p2': '29', + 'p8': '39', + 'p9': '00B4' + }, + '0B': { + 'p2': '003D', + 'p8': '30', + 'p9': '02DD' + }, + '0C': { + 'p2': '003F', + 'p8': '27', + 'p9': '00A8' + }, + '0D': { + 'p2': '002A', + 'p8': '002B', + 'p9': '00B8' + }, + '0E': { + 'format': 'right', + 'label': 'backspace' + }, + '0F': { + 'format': 'left', + 'label': 'tab' + }, + '10': { + 'p5': '71', + 'p9': '005C' + }, + '11': { + 'p5': '77', + 'p9': '007C' + }, + '12': { + 'p5': '65', + 'p9': '20AC' + }, + '13': { + 'p5': '72' + }, + '14': { + 'p5': '74' + }, + '15': { + 'p5': '7A' + }, + '16': { + 'p5': '75' + }, + '17': { + 'p5': '69' + }, + '18': { + 'p5': '6F' + }, + '19': { + 'p5': '70' + }, + '1A': { + 'p5': '161', + 'p9': '00F7' + }, + '1B': { + 'p5': '111', + 'p9': '00D7' + }, + '1C': { + 'format': 'right', + 'label': 'enter' + }, + '1D': { + 'format': 'left', + 'label': 'ctrl' + }, + '1E': { + 'p5': '61' + }, + '1F': { + 'p5': '73' + }, + '20': { + 'p5': '64' + }, + '21': { + 'p5': '66', + 'p9': '005B' + }, + '22': { + 'p5': '67', + 'p9': '005D' + }, + '23': { + 'p5': '68' + }, + '24': { + 'p5': '6A' + }, + '25': { + 'p5': '6B', + 'p9': '142' + }, + '26': { + 'p5': '6C', + 'p9': '141' + }, + '27': { + 'p5': '10D' + }, + '28': { + 'p5': '107', + 'p9': '00DF' + }, + '29': { + 'p2': '00A8', + 'p8': '00B8' + }, + '2A': { + 'format': 'left', + 'label': 'shift' + }, + '2B': { + 'p5': '17E', + 'p9': '00A4' + }, + '2C': { + 'p5': '79' + }, + '2D': { + 'p5': '78' + }, + '2E': { + 'p5': '63' + }, + '2F': { + 'p5': '76', + 'p9': '40' + }, + '30': { + 'p5': '62', + 'p9': '007B' + }, + '31': { + 'p5': '6E', + 'p9': '007D' + }, + '32': { + 'p5': '6D', + 'p9': '00A7' + }, + '33': { + 'p2': '003B', + 'p8': '002C' + }, + '34': { + 'p2': '003A', + 'p8': '002E' + }, + '35': { + 'p2': '005F', + 'p8': '002D' + }, + '36': { + 'format': 'right', + 'label': 'shift' + }, + '38': { + 'format': 'left', + 'label': 'alt' + }, + '39': { + 'label': 'space' + }, + '3B': { + 'label': 'back' + }, + '3C': { + 'label': 'forward' + }, + '3D': { + 'label': 'reload' + }, + '3E': { + 'label': 'full screen' + }, + '3F': { + 'label': 'switch window' + }, + '40': { + 'label': 'bright down' + }, + '41': { + 'label': 'bright up' + }, + '42': { + 'label': 'mute' + }, + '43': { + 'label': 'vol. down' + }, + '44': { + 'label': 'vol. up' + }, + '56': { + 'p2': '003E', + 'p8': '003C' + }, + '73': {}, + '79': { + 'format': 'smaller' + }, + '7B': { + 'format': 'smaller' + }, + '7D': {}, + 'E0 1D': { + 'format': 'smaller', + 'label': 'ctrl' + }, + 'E0 38': { + 'format': 'smaller', + 'label': 'alt gr' + }, + 'E0 48': { + 'label': 'up' + }, + 'E0 4B': { + 'label': 'left' + }, + 'E0 4D': { + 'label': 'right' + }, + 'E0 50': { + 'label': 'down' + }, + 'E0 5B': { + 'format': 'left', + 'label': 'search' + } + }, + 'layoutName': 'E' + }, + 'sr': { + 'keys': { + '00': { + 'label': 'power' + }, + '01': { + 'format': 'smaller', + 'label': '\u0438\u0437\u043b' + }, + '02': { + 'p2': '21', + 'p8': '31', + 'p9': '007E' + }, + '03': { + 'p2': '22', + 'p8': '32' + }, + '04': { + 'p2': '23', + 'p8': '33', + 'p9': '005E' + }, + '05': { + 'p2': '24', + 'p8': '34' + }, + '06': { + 'p2': '25', + 'p8': '35' + }, + '07': { + 'p2': '26', + 'p8': '36' + }, + '08': { + 'p2': '27', + 'p8': '37', + 'p9': '60' + }, + '09': { + 'p2': '28', + 'p8': '38' + }, + '0A': { + 'p2': '29', + 'p8': '39' + }, + '0B': { + 'p2': '003D', + 'p8': '30' + }, + '0C': { + 'p2': '003F', + 'p8': '27' + }, + '0D': { + 'p2': '002A', + 'p8': '002B' + }, + '0E': { + 'format': 'right', + 'label': 'backspace' + }, + '0F': { + 'format': 'left', + 'label': 'tab' + }, + '10': { + 'p4': '71', + 'p6': '459' + }, + '11': { + 'p4': '77', + 'p6': '045A' + }, + '12': { + 'p5': '65' + }, + '13': { + 'p5': '72' + }, + '14': { + 'p5': '74' + }, + '15': { + 'p5': '7A' + }, + '16': { + 'p5': '75' + }, + '17': { + 'p5': '69' + }, + '18': { + 'p5': '6F' + }, + '19': { + 'p5': '70' + }, + '1A': { + 'p4': '161', + 'p6': '448' + }, + '1B': { + 'p4': '111', + 'p6': '442' + }, + '1C': { + 'format': 'right', + 'label': 'enter' + }, + '1D': { + 'format': 'left', + 'label': '\u043a\u043d\u0442\u0440' + }, + '1E': { + 'p5': '61' + }, + '1F': { + 'p5': '73' + }, + '20': { + 'p5': '64' + }, + '21': { + 'p5': '66', + 'p9': '005B' + }, + '22': { + 'p5': '67', + 'p9': '005D' + }, + '23': { + 'p5': '68' + }, + '24': { + 'p5': '6A' + }, + '25': { + 'p5': '6B' + }, + '26': { + 'p5': '6C' + }, + '27': { + 'p4': '10D', + 'p6': '447' + }, + '28': { + 'p4': '107', + 'p6': '045B' + }, + '29': { + 'p2': '007C', + 'p8': '005C' + }, + '2A': { + 'format': 'left', + 'label': 'shift' + }, + '2B': { + 'p4': '17E', + 'p6': '436' + }, + '2C': { + 'p5': '79' + }, + '2D': { + 'p4': '78', + 'p6': '045F' + }, + '2E': { + 'p4': '63', + 'p6': '446' + }, + '2F': { + 'p5': '76', + 'p9': '40' + }, + '30': { + 'p5': '62', + 'p9': '007B' + }, + '31': { + 'p5': '6E', + 'p9': '007D' + }, + '32': { + 'p5': '6D', + 'p9': '00A7' + }, + '33': { + 'p2': '003B', + 'p8': '002C' + }, + '34': { + 'p2': '003A', + 'p8': '002E' + }, + '35': { + 'p2': '005F', + 'p8': '002D' + }, + '36': { + 'format': 'right', + 'label': 'shift' + }, + '38': { + 'format': 'left', + 'label': '\u0430\u043b\u0442' + }, + '39': { + 'label': 'space' + }, + '3B': { + 'label': 'back' + }, + '3C': { + 'label': 'forward' + }, + '3D': { + 'label': 'reload' + }, + '3E': { + 'label': 'full screen' + }, + '3F': { + 'label': 'switch window' + }, + '40': { + 'label': 'bright down' + }, + '41': { + 'label': 'bright up' + }, + '42': { + 'label': 'mute' + }, + '43': { + 'label': 'vol. down' + }, + '44': { + 'label': 'vol. up' + }, + '56': { + 'p2': '003E', + 'p8': '003C' + }, + '73': {}, + '79': { + 'format': 'smaller' + }, + '7B': { + 'format': 'smaller' + }, + '7D': {}, + 'E0 1D': { + 'format': 'smaller', + 'label': '\u043a\u043d\u0442\u0440' + }, + 'E0 38': { + 'format': 'smaller', + 'label': '\u0430\u043b\u0442' + }, + 'E0 48': { + 'label': 'up' + }, + 'E0 4B': { + 'label': 'left' + }, + 'E0 4D': { + 'label': 'right' + }, + 'E0 50': { + 'label': 'down' + }, + 'E0 5B': { + 'format': 'left', + 'label': 'search' + } + }, + 'layoutName': 'E' + }, + 'sv': { + 'keys': { + '00': { + 'label': 'power' + }, + '01': { + 'format': 'smaller', + 'label': 'esc' + }, + '02': { + 'p2': '21', + 'p8': '31' + }, + '03': { + 'p2': '22', + 'p8': '32', + 'p9': '40' + }, + '04': { + 'p2': '23', + 'p8': '33', + 'p9': '00A3' + }, + '05': { + 'p2': '00A4', + 'p8': '34', + 'p9': '24' + }, + '06': { + 'p2': '25', + 'p8': '35' + }, + '07': { + 'p2': '26', + 'p8': '36' + }, + '08': { + 'p2': '002F', + 'p8': '37', + 'p9': '007B' + }, + '09': { + 'p2': '28', + 'p8': '38', + 'p9': '005B' + }, + '0A': { + 'p2': '29', + 'p8': '39', + 'p9': '005D' + }, + '0B': { + 'p2': '003D', + 'p8': '30', + 'p9': '007D' + }, + '0C': { + 'p2': '003F', + 'p8': '002B', + 'p9': '005C' + }, + '0D': { + 'p2': '60', + 'p8': '00B4' + }, + '0E': { + 'format': 'right', + 'label': 'backspace' + }, + '0F': { + 'format': 'left', + 'label': 'tab' + }, + '10': { + 'p5': '71' + }, + '11': { + 'p5': '77' + }, + '12': { + 'p5': '65', + 'p9': '20AC' + }, + '13': { + 'p5': '72' + }, + '14': { + 'p5': '74' + }, + '15': { + 'p5': '79' + }, + '16': { + 'p5': '75' + }, + '17': { + 'p5': '69' + }, + '18': { + 'p5': '006F' + }, + '19': { + 'p5': '70' + }, + '1A': { + 'p5': 'E5' + }, + '1B': { + 'p2': '005E', + 'p8': '00A8', + 'p9': '007E' + }, + '1C': { + 'format': 'right', + 'label': 'enter' + }, + '1D': { + 'format': 'left', + 'label': 'ctrl' + }, + '1E': { + 'p5': '61' + }, + '1F': { + 'p5': '73' + }, + '20': { + 'p5': '64' + }, + '21': { + 'p5': '66' + }, + '22': { + 'p5': '67' + }, + '23': { + 'p5': '68' + }, + '24': { + 'p5': '006A' + }, + '25': { + 'p5': '006B' + }, + '26': { + 'p5': '006C' + }, + '27': { + 'p5': '00F6' + }, + '28': { + 'p5': 'E4' + }, + '29': { + 'p2': '00BD', + 'p8': '00A7' + }, + '2A': { + 'format': 'left', + 'label': 'shift' + }, + '2B': { + 'p2': '002A', + 'p8': '27' + }, + '2C': { + 'p5': '007A' + }, + '2D': { + 'p5': '78' + }, + '2E': { + 'p5': '63' + }, + '2F': { + 'p5': '76' + }, + '30': { + 'p5': '62' + }, + '31': { + 'p5': '006E' + }, + '32': { + 'p5': '006D' + }, + '33': { + 'p2': '003B', + 'p8': '002C' + }, + '34': { + 'p2': '003A', + 'p8': '002E' + }, + '35': { + 'p2': '005F', + 'p8': '002D' + }, + '36': { + 'format': 'right', + 'label': 'shift' + }, + '38': { + 'format': 'left', + 'label': 'alt' + }, + '39': { + 'label': 'space' + }, + '3B': { + 'label': 'back' + }, + '3C': { + 'label': 'forward' + }, + '3D': { + 'label': 'reload' + }, + '3E': { + 'label': 'full screen' + }, + '3F': { + 'label': 'switch window' + }, + '40': { + 'label': 'bright down' + }, + '41': { + 'label': 'bright up' + }, + '42': { + 'label': 'mute' + }, + '43': { + 'label': 'vol. down' + }, + '44': { + 'label': 'vol. up' + }, + '56': { + 'p2': '003E', + 'p8': '003C', + 'p9': '007C' + }, + '73': {}, + '79': { + 'format': 'smaller' + }, + '7B': { + 'format': 'smaller' + }, + '7D': {}, + 'E0 1D': { + 'format': 'smaller', + 'label': 'ctrl' + }, + 'E0 38': { + 'format': 'smaller', + 'label': 'alt gr' + }, + 'E0 48': { + 'label': 'up' + }, + 'E0 4B': { + 'label': 'left' + }, + 'E0 4D': { + 'label': 'right' + }, + 'E0 50': { + 'label': 'down' + }, + 'E0 5B': { + 'format': 'left', + 'label': 'search' + } + }, + 'layoutName': 'E' + }, + 'th': { + 'keys': { + '00': { + 'label': 'power' + }, + '01': { + 'format': 'smaller', + 'label': 'esc' + }, + '02': { + 'p1': '21', + 'p3': '002B', + 'p7': '31', + 'p9': 'E45' + }, + '03': { + 'p1': '40', + 'p3': 'E51', + 'p7': '32', + 'p9': '002F' + }, + '04': { + 'p1': '23', + 'p3': 'E52', + 'p7': '33', + 'p9': '002D' + }, + '05': { + 'p1': '24', + 'p3': 'E53', + 'p7': '34', + 'p9': 'E20' + }, + '06': { + 'p1': '25', + 'p3': 'E54', + 'p7': '35', + 'p9': 'E16' + }, + '07': { + 'p1': '005E', + 'p3': 'E39', + 'p7': '36', + 'p9': 'E38' + }, + '08': { + 'p1': '26', + 'p3': '0E3F', + 'p7': '37', + 'p9': 'E36' + }, + '09': { + 'p1': '002A', + 'p3': 'E55', + 'p7': '38', + 'p9': 'E04' + }, + '0A': { + 'p1': '28', + 'p3': 'E56', + 'p7': '39', + 'p9': 'E15' + }, + '0B': { + 'p1': '29', + 'p3': 'E57', + 'p7': '30', + 'p9': 'E08' + }, + '0C': { + 'p1': '005F', + 'p3': 'E58', + 'p7': '002D', + 'p9': 'E02' + }, + '0D': { + 'p1': '002B', + 'p3': 'E59', + 'p7': '003D', + 'p9': '0E0A' + }, + '0E': { + 'format': 'right', + 'label': 'backspace' + }, + '0F': { + 'format': 'left', + 'label': 'tab' + }, + '10': { + 'p3': 'E50', + 'p7': '71', + 'p9': 'E46' + }, + '11': { + 'p3': '22', + 'p7': '77', + 'p9': 'E44' + }, + '12': { + 'p3': '0E0E', + 'p7': '65', + 'p9': 'E33' + }, + '13': { + 'p3': 'E11', + 'p7': '72', + 'p9': '0E1E' + }, + '14': { + 'p3': 'E18', + 'p7': '74', + 'p9': 'E30' + }, + '15': { + 'p3': '0E4D', + 'p7': '79', + 'p9': 'E31' + }, + '16': { + 'p3': '0E4A', + 'p7': '75', + 'p9': 'E35' + }, + '17': { + 'p3': 'E13', + 'p7': '69', + 'p9': 'E23' + }, + '18': { + 'p3': '0E2F', + 'p7': '006F', + 'p9': 'E19' + }, + '19': { + 'p3': '0E0D', + 'p7': '70', + 'p9': 'E22' + }, + '1A': { + 'p1': '007B', + 'p3': 'E10', + 'p7': '005B', + 'p9': '0E1A' + }, + '1B': { + 'p1': '007D', + 'p3': '002C', + 'p7': '005D', + 'p9': 'E25' + }, + '1C': { + 'format': 'right', + 'label': 'enter' + }, + '1D': { + 'format': 'left', + 'label': 'ctrl' + }, + '1E': { + 'p3': 'E24', + 'p7': '61', + 'p9': '0E1F' + }, + '1F': { + 'p3': 'E06', + 'p7': '73', + 'p9': '0E2B' + }, + '20': { + 'p3': '0E0F', + 'p7': '64', + 'p9': 'E01' + }, + '21': { + 'p3': 'E42', + 'p7': '66', + 'p9': 'E14' + }, + '22': { + 'p3': '0E0C', + 'p7': '67', + 'p9': 'E40' + }, + '23': { + 'p3': 'E47', + 'p7': '68', + 'p9': 'E49' + }, + '24': { + 'p3': '0E4B', + 'p7': '006A', + 'p9': 'E48' + }, + '25': { + 'p3': 'E29', + 'p7': '006B', + 'p9': 'E32' + }, + '26': { + 'p3': 'E28', + 'p7': '006C', + 'p9': '0E2A' + }, + '27': { + 'p1': '003A', + 'p3': '0E0B', + 'p7': '003B', + 'p9': 'E27' + }, + '28': { + 'p1': '22', + 'p3': '002E', + 'p7': '27', + 'p9': 'E07' + }, + '29': { + 'p1': '007E', + 'p3': '25', + 'p7': '60', + 'p9': '005F' + }, + '2A': { + 'format': 'left', + 'label': 'shift' + }, + '2B': { + 'p1': '00A6', + 'p3': 'E05', + 'p7': '005C', + 'p9': 'E03' + }, + '2C': { + 'p3': '28', + 'p7': '007A', + 'p9': '0E1C' + }, + '2D': { + 'p3': '29', + 'p7': '78', + 'p9': '0E1B' + }, + '2E': { + 'p3': 'E09', + 'p7': '63', + 'p9': 'E41' + }, + '2F': { + 'p3': '0E2E', + 'p7': '76', + 'p9': '0E2D' + }, + '30': { + 'p3': '0E3A', + 'p7': '62', + 'p9': 'E34' + }, + '31': { + 'p3': '0E4C', + 'p7': '006E', + 'p9': 'E37' + }, + '32': { + 'p3': '003F', + 'p7': '006D', + 'p9': 'E17' + }, + '33': { + 'p1': '003C', + 'p3': 'E12', + 'p7': '002C', + 'p9': 'E21' + }, + '34': { + 'p1': '003E', + 'p3': '0E2C', + 'p7': '002E', + 'p9': 'E43' + }, + '35': { + 'p1': '003F', + 'p3': 'E26', + 'p7': '002D', + 'p9': '0E1D' + }, + '36': { + 'format': 'right', + 'label': 'shirt' + }, + '38': { + 'format': 'left', + 'label': 'alt' + }, + '39': { + 'label': 'space' + }, + '3B': { + 'label': 'back' + }, + '3C': { + 'label': 'forward' + }, + '3D': { + 'label': 'reload' + }, + '3E': { + 'label': 'full screen' + }, + '3F': { + 'label': 'switch window' + }, + '40': { + 'label': 'bright down' + }, + '41': { + 'label': 'bright up' + }, + '42': { + 'label': 'mute' + }, + '43': { + 'label': 'vol. down' + }, + '44': { + 'label': 'vol. up' + }, + 'E0 1D': { + 'format': 'smaller', + 'label': 'ctrl' + }, + 'E0 38': { + 'format': 'smaller', + 'label': 'alt' + }, + 'E0 48': { + 'label': 'up' + }, + 'E0 4B': { + 'label': 'left' + }, + 'E0 4D': { + 'label': 'right' + }, + 'E0 50': { + 'label': 'down' + }, + 'E0 5B': { + 'format': 'left', + 'label': 'search' + } + }, + 'layoutName': 'U' + }, + 'tr': { + 'keys': { + '00': { + 'label': 'power' + }, + '01': { + 'format': 'smaller', + 'label': 'esc' + }, + '02': { + 'p1': '21', + 'p7': '31' + }, + '03': { + 'p1': '27', + 'p7': '32' + }, + '04': { + 'p1': '5e', + 'p7': '33', + 'p9': '23' + }, + '05': { + 'p1': '2b', + 'p7': '34', + 'p9': '24' + }, + '06': { + 'p1': '25', + 'p7': '35' + }, + '07': { + 'p1': '26', + 'p7': '36' + }, + '08': { + 'p1': '2f', + 'p7': '37', + 'p9': '7b' + }, + '09': { + 'p1': '28', + 'p7': '38', + 'p9': '5b' + }, + '0A': { + 'p1': '29', + 'p7': '39', + 'p9': '5d' + }, + '0B': { + 'p1': '3d', + 'p7': '30', + 'p9': '7d' + }, + '0C': { + 'p1': '3f', + 'p7': '2a', + 'p9': '5c' + }, + '0D': { + 'p1': '5f', + 'p7': '2d' + }, + '0E': { + 'format': 'right', + 'label': 'backspace' + }, + '0F': { + 'format': 'left', + 'label': 'tab' + }, + '10': { + 'p5': '71', + 'p9': '40' + }, + '11': { + 'p5': '77' + }, + '12': { + 'p5': '65', + 'p9': '20ac' + }, + '13': { + 'p5': '72' + }, + '14': { + 'p5': '74' + }, + '15': { + 'p5': '79' + }, + '16': { + 'p5': '75' + }, + '17': { + 'p5': '69' + }, + '18': { + 'p5': '6F' + }, + '19': { + 'p5': '70' + }, + '1A': { + 'p5': '11F', + 'p9': 'A8' + }, + '1B': { + 'p5': '0FC', + 'p9': '7e' + }, + '1C': { + 'format': 'right', + 'label': 'enter' + }, + '1D': { + 'format': 'left', + 'label': 'ctrl' + }, + '1E': { + 'p5': '61' + }, + '1F': { + 'p5': '73' + }, + '20': { + 'p5': '64' + }, + '21': { + 'p5': '66' + }, + '22': { + 'p5': '67' + }, + '23': { + 'p5': '68' + }, + '24': { + 'p5': '6A' + }, + '25': { + 'p5': '6B' + }, + '26': { + 'p5': '6C' + }, + '27': { + 'p5': '15f', + 'p9': 'B4' + }, + '28': { + 'p5': '69' + }, + '29': { + 'p1': 'E9', + 'p7': '22' + }, + '2A': { + 'format': 'left', + 'label': 'shift' + }, + '2B': { + 'p1': '3b', + 'p7': '2c', + 'p9': '60' + }, + '2C': { + 'p5': '7A' + }, + '2D': { + 'p5': '78' + }, + '2E': { + 'p5': '63' + }, + '2F': { + 'p5': '76' + }, + '30': { + 'p5': '62' + }, + '31': { + 'p5': '6E' + }, + '32': { + 'p5': '6D' + }, + '33': { + 'p5': '0F6' + }, + '34': { + 'p5': 'E7' + }, + '35': { + 'p1': '3a', + 'p7': '2e' + }, + '36': { + 'format': 'right', + 'label': 'shift' + }, + '38': { + 'format': 'left', + 'label': 'alt' + }, + '39': { + 'label': 'space' + }, + '3B': { + 'label': 'back' + }, + '3C': { + 'label': 'forward' + }, + '3D': { + 'label': 'reload' + }, + '3E': { + 'label': 'full screen' + }, + '3F': { + 'label': 'switch window' + }, + '40': { + 'label': 'bright down' + }, + '41': { + 'label': 'bright up' + }, + '42': { + 'label': 'mute' + }, + '43': { + 'label': 'vol. down' + }, + '44': { + 'label': 'vol. up' + }, + '56': { + 'p1': '3e', + 'p7': '3c', + 'p9': '7c' + }, + '73': {}, + '79': { + 'format': 'smaller' + }, + '7B': { + 'format': 'smaller' + }, + '7D': {}, + 'E0 1D': { + 'format': 'smaller', + 'label': 'ctrl' + }, + 'E0 38': { + 'format': 'smaller', + 'label': 'alt gr' + }, + 'E0 48': { + 'label': 'up' + }, + 'E0 4B': { + 'label': 'left' + }, + 'E0 4D': { + 'label': 'right' + }, + 'E0 50': { + 'label': 'down' + }, + 'E0 5B': { + 'format': 'left', + 'label': 'search' + } + }, + 'layoutName': 'E' + }, + 'uk': { + 'keys': { + '00': { + 'label': 'power' + }, + '01': { + 'format': 'smaller', + 'label': 'esc' + }, + '02': { + 'p2': '21', + 'p8': '31', + 'p9': '2013' + }, + '03': { + 'p2': '40', + 'p8': '32', + 'p9': '22' + }, + '04': { + 'p2': '2116', + 'p8': '33', + 'p9': '20AC' + }, + '05': { + 'p2': '003B', + 'p8': '34', + 'p9': '24' + }, + '06': { + 'p2': '25', + 'p8': '35', + 'p9': '00BA' + }, + '07': { + 'p2': '003A', + 'p8': '36' + }, + '08': { + 'p2': '003F', + 'p8': '37' + }, + '09': { + 'p2': '002A', + 'p8': '38', + 'p9': '00A7' + }, + '0A': { + 'p2': '28', + 'p8': '39' + }, + '0B': { + 'p2': '29', + 'p8': '30' + }, + '0C': { + 'p2': '005F', + 'p8': '002D', + 'p9': '005B' + }, + '0D': { + 'p2': '002B', + 'p8': '003D', + 'p9': '005D' + }, + '0E': { + 'format': 'right', + 'label': 'backspace' + }, + '0F': { + 'format': 'left', + 'label': 'tab' + }, + '10': { + 'p5': '71', + 'p9': '439' + }, + '11': { + 'p5': '77', + 'p9': '446' + }, + '12': { + 'p5': '65', + 'p9': '443' + }, + '13': { + 'p5': '72', + 'p9': '043A' + }, + '14': { + 'p5': '74', + 'p9': '435' + }, + '15': { + 'p5': '79', + 'p9': '043D' + }, + '16': { + 'p5': '75', + 'p9': '433' + }, + '17': { + 'p5': '69', + 'p9': '448' + }, + '18': { + 'p5': '006F', + 'p9': '449' + }, + '19': { + 'p5': '70', + 'p9': '437' + }, + '1A': { + 'p2': '007B', + 'p8': '445' + }, + '1B': { + 'p2': '007D', + 'p8': '044A', + 'p9': '457' + }, + '1C': { + 'format': 'right', + 'label': 'enter' + }, + '1D': { + 'format': 'left', + 'label': 'ctrl' + }, + '1E': { + 'p5': '61', + 'p9': '444' + }, + '1F': { + 'p2': '73', + 'p8': '044B', + 'p9': '456' + }, + '20': { + 'p5': '64', + 'p9': '432' + }, + '21': { + 'p5': '66', + 'p9': '430' + }, + '22': { + 'p5': '67', + 'p9': '043F' + }, + '23': { + 'p5': '68', + 'p9': '440' + }, + '24': { + 'p5': '006A', + 'p9': '043E' + }, + '25': { + 'p5': '006B', + 'p9': '043B' + }, + '26': { + 'p5': '006C', + 'p9': '434' + }, + '27': { + 'p2': '003A', + 'p8': '003B', + 'p9': '436' + }, + '28': { + 'p1': '22', + 'p3': '454', + 'p7': '27', + 'p9': '044D' + }, + '29': { + 'p2': '491', + 'p8': '27', + 'p9': '20B4' + }, + '2A': { + 'format': 'left', + 'label': 'shift' + }, + '2B': { + 'p1': '00BB', + 'p3': '002F', + 'p7': '00AB', + 'p9': '005C' + }, + '2C': { + 'p5': '007A', + 'p9': '044F' + }, + '2D': { + 'p5': '78', + 'p9': '447' + }, + '2E': { + 'p5': '63', + 'p9': '441' + }, + '2F': { + 'p5': '76', + 'p9': '043C' + }, + '30': { + 'p5': '62', + 'p9': '438' + }, + '31': { + 'p5': '006E', + 'p9': '442' + }, + '32': { + 'p5': '006D', + 'p9': '044C' + }, + '33': { + 'p2': '003C', + 'p8': '002C', + 'p9': '431' + }, + '34': { + 'p2': '003E', + 'p8': '002E', + 'p9': '044E' + }, + '35': { + 'p1': '003F', + 'p3': '002C', + 'p7': '002F', + 'p9': '002E' + }, + '36': { + 'format': 'right', + 'label': 'shift' + }, + '37': {}, + '38': { + 'format': 'left', + 'label': 'alt' + }, + '39': { + 'label': 'space' + }, + '3B': { + 'label': 'back' + }, + '3C': { + 'label': 'forward' + }, + '3D': { + 'label': 'reload' + }, + '3E': { + 'label': 'full screen' + }, + '3F': { + 'label': 'switch window' + }, + '40': { + 'label': 'bright down' + }, + '41': { + 'label': 'bright up' + }, + '42': { + 'label': 'mute' + }, + '43': { + 'label': 'vol. down' + }, + '44': { + 'label': 'vol. up' + }, + '73': {}, + '79': { + 'format': 'smaller' + }, + '7B': { + 'format': 'smaller' + }, + '7D': {}, + 'E0 1D': { + 'format': 'smaller', + 'label': 'ctrl' + }, + 'E0 38': { + 'format': 'smaller', + 'label': 'alt gr' + }, + 'E0 48': { + 'label': 'up' + }, + 'E0 4B': { + 'label': 'left' + }, + 'E0 4D': { + 'label': 'right' + }, + 'E0 50': { + 'label': 'down' + }, + 'E0 5B': { + 'format': 'left', + 'label': 'search' + } + }, + 'layoutName': 'U' + }, + 'vi': { + 'keys': { + '00': { + 'label': 'power' + }, + '01': { + 'format': 'smaller', + 'label': 'esc' + }, + '02': { + 'p5': '103' + }, + '03': { + 'p5': 'E2' + }, + '04': { + 'p5': 'EA' + }, + '05': { + 'p5': 'F4' + }, + '06': { + 'p2': '300' + }, + '07': { + 'p2': '309' + }, + '08': { + 'p2': '303' + }, + '09': { + 'p2': '301' + }, + '0A': { + 'p2': '323' + }, + '0B': { + 'p5': '111' + }, + '0C': { + 'p2': '5F', + 'p8': '2D' + }, + '0D': { + 'p2': '2B', + 'p8': '20AB' + }, + '0E': { + 'format': 'right', + 'label': 'backspace' + }, + '0F': { + 'format': 'left', + 'label': 'tab' + }, + '10': { + 'p5': '71' + }, + '11': { + 'p5': '77' + }, + '12': { + 'p5': '65' + }, + '13': { + 'p5': '72' + }, + '14': { + 'p5': '74' + }, + '15': { + 'p5': '79' + }, + '16': { + 'p5': '75' + }, + '17': { + 'p5': '69' + }, + '18': { + 'p5': '6F' + }, + '19': { + 'p5': '70' + }, + '1A': { + 'p5': '1B0' + }, + '1B': { + 'p5': '1A1' + }, + '1C': { + 'format': 'right', + 'label': 'enter' + }, + '1D': { + 'format': 'left', + 'label': 'ctrl' + }, + '1E': { + 'p5': '61' + }, + '1F': { + 'p5': '73' + }, + '20': { + 'p5': '64' + }, + '21': { + 'p5': '66' + }, + '22': { + 'p5': '67' + }, + '23': { + 'p5': '68' + }, + '24': { + 'p5': '6A' + }, + '25': { + 'p5': '6B' + }, + '26': { + 'p5': '6C' + }, + '27': { + 'p2': '3A', + 'p8': '3B' + }, + '28': { + 'p2': '22', + 'p8': '27' + }, + '29': { + 'p2': '7E', + 'p8': '60' + }, + '2A': { + 'format': 'left', + 'label': 'shift' + }, + '2B': {}, + '2C': { + 'p5': '7A' + }, + '2D': { + 'p5': '78' + }, + '2E': { + 'p5': '63' + }, + '2F': { + 'p5': '76' + }, + '30': { + 'p5': '62' + }, + '31': { + 'p5': '6E' + }, + '32': { + 'p5': '6D' + }, + '33': { + 'p2': '3C', + 'p8': '2C' + }, + '34': { + 'p2': '3E', + 'p8': '2E' + }, + '35': { + 'p2': '3F', + 'p8': '2F' + }, + '36': { + 'format': 'right', + 'label': 'shift' + }, + '37': {}, + '38': { + 'format': 'left', + 'label': 'alt' + }, + '39': { + 'label': 'space' + }, + '3B': { + 'label': 'back' + }, + '3C': { + 'label': 'forward' + }, + '3D': { + 'label': 'reload' + }, + '3E': { + 'label': 'full screen' + }, + '3F': { + 'label': 'switch window' + }, + '40': { + 'label': 'bright down' + }, + '41': { + 'label': 'bright up' + }, + '42': { + 'label': 'mute' + }, + '43': { + 'label': 'vol. down' + }, + '44': { + 'label': 'vol. up' + }, + '73': {}, + '79': { + 'format': 'smaller' + }, + '7B': { + 'format': 'smaller' + }, + '7D': { + 'p2': 'A6', + 'p8': '5C' + }, + 'E0 1D': { + 'format': 'smaller', + 'label': 'ctrl' + }, + 'E0 38': { + 'format': 'smaller', + 'label': 'alt' + }, + 'E0 48': { + 'label': 'up' + }, + 'E0 4B': { + 'label': 'left' + }, + 'E0 4D': { + 'label': 'right' + }, + 'E0 50': { + 'label': 'down' + }, + 'E0 5B': { + 'format': 'left', + 'label': 'search' + } + }, + 'layoutName': 'U' + }, + 'zh_CN': { + 'keys': { + '00': { + 'label': 'power' + }, + '01': { + 'format': 'smaller', + 'label': 'esc' + }, + '02': { + 'p2': '21', + 'p8': '31' + }, + '03': { + 'p2': '40', + 'p8': '32' + }, + '04': { + 'p2': '23', + 'p8': '33' + }, + '05': { + 'p2': '24', + 'p8': '34' + }, + '06': { + 'p2': '25', + 'p8': '35' + }, + '07': { + 'p2': '005E', + 'p8': '36' + }, + '08': { + 'p2': '26', + 'p8': '37' + }, + '09': { + 'p2': '002A', + 'p8': '38' + }, + '0A': { + 'p2': '28', + 'p8': '39' + }, + '0B': { + 'p2': '29', + 'p8': '30' + }, + '0C': { + 'p2': '005F', + 'p8': '002D' + }, + '0D': { + 'p2': '002B', + 'p8': '003D' + }, + '0E': { + 'format': 'right', + 'label': 'backspace' + }, + '0F': { + 'format': 'left', + 'label': 'tab' + }, + '10': { + 'p5': '71' + }, + '11': { + 'p5': '77' + }, + '12': { + 'p5': '65' + }, + '13': { + 'p5': '72' + }, + '14': { + 'p5': '74' + }, + '15': { + 'p5': '79' + }, + '16': { + 'p5': '75' + }, + '17': { + 'p5': '69' + }, + '18': { + 'p5': '6F' + }, + '19': { + 'p5': '70' + }, + '1A': { + 'p2': '007B', + 'p8': '005B' + }, + '1B': { + 'p2': '007D', + 'p8': '005D' + }, + '1C': { + 'format': 'right', + 'label': 'enter' + }, + '1D': { + 'format': 'left', + 'label': 'ctrl' + }, + '1E': { + 'p5': '61' + }, + '1F': { + 'p5': '73' + }, + '20': { + 'p5': '64' + }, + '21': { + 'p5': '66' + }, + '22': { + 'p5': '67' + }, + '23': { + 'p5': '68' + }, + '24': { + 'p5': '6A' + }, + '25': { + 'p5': '6B' + }, + '26': { + 'p5': '6C' + }, + '27': { + 'p2': '003A', + 'p8': '003B' + }, + '28': { + 'p2': '22', + 'p8': '27' + }, + '29': { + 'p2': '007E', + 'p8': '60' + }, + '2A': { + 'format': 'left', + 'label': 'shift' + }, + '2B': { + 'p2': '007C', + 'p8': '005C' + }, + '2C': { + 'p5': '7A' + }, + '2D': { + 'p5': '78' + }, + '2E': { + 'p5': '63' + }, + '2F': { + 'p5': '76' + }, + '30': { + 'p5': '62' + }, + '31': { + 'p5': '6E' + }, + '32': { + 'p5': '6D' + }, + '33': { + 'p2': '003C', + 'p8': '002C' + }, + '34': { + 'p2': '003E', + 'p8': '002E' + }, + '35': { + 'p2': '003F', + 'p8': '002F' + }, + '36': { + 'format': 'right', + 'label': 'shift' + }, + '38': { + 'format': 'left', + 'label': 'alt' + }, + '39': { + 'label': 'space' + }, + '3B': { + 'label': 'back' + }, + '3C': { + 'label': 'forward' + }, + '3D': { + 'label': 'reload' + }, + '3E': { + 'label': 'full screen' + }, + '3F': { + 'label': 'switch window' + }, + '40': { + 'label': 'bright down' + }, + '41': { + 'label': 'bright up' + }, + '42': { + 'label': 'mute' + }, + '43': { + 'label': 'vol. down' + }, + '44': { + 'label': 'vol. up' + }, + 'E0 1D': { + 'format': 'smaller', + 'label': 'ctrl' + }, + 'E0 38': { + 'format': 'smaller', + 'label': 'alt' + }, + 'E0 48': { + 'label': 'up' + }, + 'E0 4B': { + 'label': 'left' + }, + 'E0 4D': { + 'label': 'right' + }, + 'E0 50': { + 'label': 'down' + }, + 'E0 5B': { + 'format': 'left', + 'label': 'search' + } + }, + 'layoutName': 'U' + }, + 'zh_TW': { + 'keys': { + '00': { + 'label': 'power' + }, + '01': { + 'format': 'smaller', + 'label': 'esc' + }, + '02': { + 'p1': '21', + 'p3': '3105', + 'p7': '31' + }, + '03': { + 'p1': '40', + 'p3': '3109', + 'p7': '32' + }, + '04': { + 'p1': '23', + 'p3': '02C7', + 'p7': '33' + }, + '05': { + 'p1': '24', + 'p3': '02CB', + 'p7': '34' + }, + '06': { + 'p1': '25', + 'p3': '3113', + 'p7': '35' + }, + '07': { + 'p1': '005E', + 'p3': '02CA', + 'p7': '36' + }, + '08': { + 'p1': '26', + 'p3': '02D9', + 'p7': '37' + }, + '09': { + 'p1': '002A', + 'p3': '311A', + 'p7': '38' + }, + '0A': { + 'p1': '28', + 'p3': '311E', + 'p7': '39' + }, + '0B': { + 'p1': '29', + 'p3': '3122', + 'p7': '30' + }, + '0C': { + 'p1': '005F', + 'p3': '3126', + 'p7': '002D' + }, + '0D': { + 'p1': '002B', + 'p7': '003D' + }, + '0E': { + 'format': 'right', + 'label': 'backspace' + }, + '0F': { + 'format': 'left', + 'label': 'tab' + }, + '10': { + 'p1': '71', + 'p3': '3106', + 'p7': '624B' + }, + '11': { + 'p1': '77', + 'p3': '310A', + 'p7': '7530' + }, + '12': { + 'p1': '65', + 'p3': '310D', + 'p7': '6C34' + }, + '13': { + 'p1': '72', + 'p3': '3110', + 'p7': '53E3' + }, + '14': { + 'p1': '74', + 'p3': '3114', + 'p7': '5EFF' + }, + '15': { + 'p1': '79', + 'p3': '3117', + 'p7': '535C' + }, + '16': { + 'p1': '75', + 'p3': '3127', + 'p7': '5C71' + }, + '17': { + 'p1': '69', + 'p3': '311B', + 'p7': '6208' + }, + '18': { + 'p1': '6F', + 'p3': '311F', + 'p7': '4EBA' + }, + '19': { + 'p1': '70', + 'p3': '3123', + 'p7': '5FC3' + }, + '1A': { + 'p1': '007B', + 'p7': '005B' + }, + '1B': { + 'p1': '007D', + 'p7': '005D' + }, + '1C': { + 'format': 'right', + 'label': 'enter' + }, + '1D': { + 'format': 'left', + 'label': 'ctrl' + }, + '1E': { + 'p1': '61', + 'p3': '3107', + 'p7': '65E5' + }, + '1F': { + 'p1': '73', + 'p3': '310B', + 'p7': '5C38' + }, + '20': { + 'p1': '64', + 'p3': '310E', + 'p7': '6728' + }, + '21': { + 'p1': '66', + 'p3': '3111', + 'p7': '706B' + }, + '22': { + 'p1': '67', + 'p3': '3115', + 'p7': '571F' + }, + '23': { + 'p1': '68', + 'p3': '3118', + 'p7': '7AF9' + }, + '24': { + 'p1': '6A', + 'p3': '3128', + 'p7': '5341' + }, + '25': { + 'p1': '6B', + 'p3': '311C', + 'p7': '5927' + }, + '26': { + 'p1': '6C', + 'p3': '3120', + 'p7': '4E2D' + }, + '27': { + 'p1': '003A', + 'p3': '3124', + 'p7': '003B' + }, + '28': { + 'p1': '22', + 'p7': '27' + }, + '29': { + 'p1': '007E', + 'p7': '60' + }, + '2A': { + 'format': 'left', + 'label': 'shift' + }, + '2B': { + 'p1': '007C', + 'p7': '005C' + }, + '2C': { + 'p1': '7A', + 'p3': '3108', + 'p7': '91CD' + }, + '2D': { + 'p1': '78', + 'p3': '310C', + 'p7': '96E3' + }, + '2E': { + 'p1': '63', + 'p3': '310F', + 'p7': '91D1' + }, + '2F': { + 'p1': '76', + 'p3': '3112', + 'p7': '5973' + }, + '30': { + 'p1': '62', + 'p3': '3116', + 'p7': '6708' + }, + '31': { + 'p1': '6E', + 'p3': '3119', + 'p7': '5F13' + }, + '32': { + 'p1': '6D', + 'p3': '3129', + 'p7': '4E00' + }, + '33': { + 'p1': '003C', + 'p3': '311D', + 'p7': '002C' + }, + '34': { + 'p1': '003E', + 'p3': '3121', + 'p7': '002E' + }, + '35': { + 'p1': '003F', + 'p3': '3125', + 'p7': '002F' + }, + '36': { + 'format': 'right', + 'label': 'shift' + }, + '38': { + 'format': 'left', + 'label': 'alt' + }, + '39': { + 'label': 'space' + }, + '3B': { + 'label': 'back' + }, + '3C': { + 'label': 'forward' + }, + '3D': { + 'label': 'reload' + }, + '3E': { + 'label': 'full screen' + }, + '3F': { + 'label': 'switch window' + }, + '40': { + 'label': 'bright down' + }, + '41': { + 'label': 'bright up' + }, + '42': { + 'label': 'mute' + }, + '43': { + 'label': 'vol. down' + }, + '44': { + 'label': 'vol. up' + }, + 'E0 1D': { + 'format': 'smaller', + 'label': 'ctrl' + }, + 'E0 38': { + 'format': 'smaller', + 'label': 'alt' + }, + 'E0 48': { + 'label': 'up' + }, + 'E0 4B': { + 'label': 'left' + }, + 'E0 4D': { + 'label': 'right' + }, + 'E0 50': { + 'label': 'down' + }, + 'E0 5B': { + 'format': 'left', + 'label': 'search' + } + }, + 'layoutName': 'U' + } + }, + 'layouts': { + 'B': [ + [ + '43', + 658.0, + 6.0, + 72.0, + 35.0 + ], + [ + '44', + 730.0, + 6.0, + 73.0, + 35.0 + ], + [ + '42', + 585.0, + 6.0, + 73.0, + 35.0 + ], + [ + '41', + 513.0, + 6.0, + 72.0, + 35.0 + ], + [ + '40', + 440.0, + 6.0, + 73.0, + 35.0 + ], + [ + '3F', + 368.0, + 6.0, + 72.0, + 35.0 + ], + [ + '3D', + 223.0, + 6.0, + 72.0, + 35.0 + ], + [ + '3E', + 295.0, + 6.0, + 73.0, + 35.0 + ], + [ + '3C', + 150.0, + 6.0, + 73.0, + 35.0 + ], + [ + '3B', + 77.0, + 6.0, + 73.0, + 35.0 + ], + [ + '00', + 803.0, + 6.0, + 72.0, + 35.0 + ], + [ + '01', + 5.0, + 6.0, + 72.0, + 35.0 + ], + [ + '', + 815.0, + 107.0, + 30.0, + 60.0 + ], + [ + '73', + 740.0, + 227.0, + 60.0, + 60.0 + ], + [ + '56', + 80.0, + 227.0, + 60.0, + 60.0 + ], + [ + '39', + 245.0, + 287.0, + 330.0, + 60.0 + ], + [ + '0E', + 785.0, + 47.0, + 90.0, + 60.0 + ], + [ + '1C', + 830.0, + 107.0, + 45.0, + 120.0 + ], + [ + '36', + 800.0, + 227.0, + 75.0, + 60.0 + ], + [ + '0F', + 5.0, + 107.0, + 90.0, + 60.0 + ], + [ + '2A', + 5.0, + 227.0, + 75.0, + 60.0 + ], + [ + 'E0 50', + 755.0, + 318.0, + 60.0, + 29.0 + ], + [ + 'E0 48', + 755.0, + 287.0, + 60.0, + 31.0 + ], + [ + 'E0 4D', + 815.0, + 287.0, + 60.0, + 60.0 + ], + [ + 'E0 4B', + 695.0, + 287.0, + 60.0, + 60.0 + ], + [ + 'E0 5B', + 5.0, + 167.0, + 105.0, + 60.0 + ], + [ + '38', + 125.0, + 287.0, + 120.0, + 60.0 + ], + [ + '1D', + 5.0, + 287.0, + 120.0, + 60.0 + ], + [ + 'E0 1D', + 635.0, + 287.0, + 60.0, + 60.0 + ], + [ + 'E0 38', + 575.0, + 287.0, + 60.0, + 60.0 + ], + [ + '2B', + 770.0, + 167.0, + 60.0, + 60.0 + ], + [ + '0D', + 725.0, + 47.0, + 60.0, + 60.0 + ], + [ + '0C', + 665.0, + 47.0, + 60.0, + 60.0 + ], + [ + '0B', + 605.0, + 47.0, + 60.0, + 60.0 + ], + [ + '0A', + 545.0, + 47.0, + 60.0, + 60.0 + ], + [ + '09', + 485.0, + 47.0, + 60.0, + 60.0 + ], + [ + '08', + 425.0, + 47.0, + 60.0, + 60.0 + ], + [ + '07', + 365.0, + 47.0, + 60.0, + 60.0 + ], + [ + '06', + 305.0, + 47.0, + 60.0, + 60.0 + ], + [ + '05', + 245.0, + 47.0, + 60.0, + 60.0 + ], + [ + '04', + 185.0, + 47.0, + 60.0, + 60.0 + ], + [ + '03', + 125.0, + 47.0, + 60.0, + 60.0 + ], + [ + '02', + 65.0, + 47.0, + 60.0, + 60.0 + ], + [ + '29', + 5.0, + 47.0, + 60.0, + 60.0 + ], + [ + '35', + 680.0, + 227.0, + 60.0, + 60.0 + ], + [ + '34', + 620.0, + 227.0, + 60.0, + 60.0 + ], + [ + '33', + 560.0, + 227.0, + 60.0, + 60.0 + ], + [ + '32', + 500.0, + 227.0, + 60.0, + 60.0 + ], + [ + '31', + 440.0, + 227.0, + 60.0, + 60.0 + ], + [ + '30', + 380.0, + 227.0, + 60.0, + 60.0 + ], + [ + '2F', + 320.0, + 227.0, + 60.0, + 60.0 + ], + [ + '2E', + 260.0, + 227.0, + 60.0, + 60.0 + ], + [ + '2D', + 200.0, + 227.0, + 60.0, + 60.0 + ], + [ + '2C', + 140.0, + 227.0, + 60.0, + 60.0 + ], + [ + '28', + 710.0, + 167.0, + 60.0, + 60.0 + ], + [ + '27', + 650.0, + 167.0, + 60.0, + 60.0 + ], + [ + '26', + 590.0, + 167.0, + 60.0, + 60.0 + ], + [ + '25', + 530.0, + 167.0, + 60.0, + 60.0 + ], + [ + '24', + 470.0, + 167.0, + 60.0, + 60.0 + ], + [ + '23', + 410.0, + 167.0, + 60.0, + 60.0 + ], + [ + '22', + 350.0, + 167.0, + 60.0, + 60.0 + ], + [ + '21', + 290.0, + 167.0, + 60.0, + 60.0 + ], + [ + '20', + 230.0, + 167.0, + 60.0, + 60.0 + ], + [ + '1F', + 170.0, + 167.0, + 60.0, + 60.0 + ], + [ + '1E', + 110.0, + 167.0, + 60.0, + 60.0 + ], + [ + '1B', + 755.0, + 107.0, + 60.0, + 60.0 + ], + [ + '1A', + 695.0, + 107.0, + 60.0, + 60.0 + ], + [ + '19', + 635.0, + 107.0, + 60.0, + 60.0 + ], + [ + '18', + 575.0, + 107.0, + 60.0, + 60.0 + ], + [ + '17', + 515.0, + 107.0, + 60.0, + 60.0 + ], + [ + '16', + 455.0, + 107.0, + 60.0, + 60.0 + ], + [ + '15', + 395.0, + 107.0, + 60.0, + 60.0 + ], + [ + '14', + 335.0, + 107.0, + 60.0, + 60.0 + ], + [ + '13', + 275.0, + 107.0, + 60.0, + 60.0 + ], + [ + '12', + 215.0, + 107.0, + 60.0, + 60.0 + ], + [ + '11', + 155.0, + 107.0, + 60.0, + 60.0 + ], + [ + '10', + 95.0, + 107.0, + 60.0, + 60.0 + ] + ], + 'E': [ + [ + '43', + 658.0, + 6.0, + 72.0, + 35.0 + ], + [ + '44', + 730.0, + 6.0, + 73.0, + 35.0 + ], + [ + '42', + 585.0, + 6.0, + 73.0, + 35.0 + ], + [ + '41', + 513.0, + 6.0, + 72.0, + 35.0 + ], + [ + '40', + 440.0, + 6.0, + 73.0, + 35.0 + ], + [ + '3F', + 368.0, + 6.0, + 72.0, + 35.0 + ], + [ + '3D', + 223.0, + 6.0, + 72.0, + 35.0 + ], + [ + '3E', + 295.0, + 6.0, + 73.0, + 35.0 + ], + [ + '3C', + 150.0, + 6.0, + 73.0, + 35.0 + ], + [ + '3B', + 77.0, + 6.0, + 73.0, + 35.0 + ], + [ + '00', + 803.0, + 6.0, + 72.0, + 35.0 + ], + [ + '01', + 5.0, + 6.0, + 72.0, + 35.0 + ], + [ + '', + 815.0, + 107.0, + 30.0, + 60.0 + ], + [ + '56', + 80.0, + 227.0, + 60.0, + 60.0 + ], + [ + '39', + 245.0, + 287.0, + 330.0, + 60.0 + ], + [ + '0E', + 785.0, + 47.0, + 90.0, + 60.0 + ], + [ + '1C', + 830.0, + 107.0, + 45.0, + 120.0 + ], + [ + '36', + 740.0, + 227.0, + 135.0, + 60.0 + ], + [ + '0F', + 5.0, + 107.0, + 90.0, + 60.0 + ], + [ + '2A', + 5.0, + 227.0, + 75.0, + 60.0 + ], + [ + 'E0 50', + 755.0, + 318.0, + 60.0, + 29.0 + ], + [ + 'E0 48', + 755.0, + 287.0, + 60.0, + 31.0 + ], + [ + 'E0 4D', + 815.0, + 287.0, + 60.0, + 60.0 + ], + [ + 'E0 4B', + 695.0, + 287.0, + 60.0, + 60.0 + ], + [ + 'E0 5B', + 5.0, + 167.0, + 105.0, + 60.0 + ], + [ + '38', + 125.0, + 287.0, + 120.0, + 60.0 + ], + [ + '1D', + 5.0, + 287.0, + 120.0, + 60.0 + ], + [ + 'E0 1D', + 635.0, + 287.0, + 60.0, + 60.0 + ], + [ + 'E0 38', + 575.0, + 287.0, + 60.0, + 60.0 + ], + [ + '2B', + 770.5, + 167.0, + 60.0, + 60.0 + ], + [ + '0D', + 725.0, + 47.0, + 60.0, + 60.0 + ], + [ + '0C', + 665.0, + 47.0, + 60.0, + 60.0 + ], + [ + '0B', + 605.0, + 47.0, + 60.0, + 60.0 + ], + [ + '0A', + 545.0, + 47.0, + 60.0, + 60.0 + ], + [ + '09', + 485.0, + 47.0, + 60.0, + 60.0 + ], + [ + '08', + 425.0, + 47.0, + 60.0, + 60.0 + ], + [ + '07', + 365.0, + 47.0, + 60.0, + 60.0 + ], + [ + '06', + 305.0, + 47.0, + 60.0, + 60.0 + ], + [ + '05', + 245.0, + 47.0, + 60.0, + 60.0 + ], + [ + '04', + 185.0, + 47.0, + 60.0, + 60.0 + ], + [ + '03', + 125.0, + 47.0, + 60.0, + 60.0 + ], + [ + '02', + 65.0, + 47.0, + 60.0, + 60.0 + ], + [ + '29', + 5.0, + 47.0, + 60.0, + 60.0 + ], + [ + '35', + 680.0, + 227.0, + 60.0, + 60.0 + ], + [ + '34', + 620.0, + 227.0, + 60.0, + 60.0 + ], + [ + '33', + 560.0, + 227.0, + 60.0, + 60.0 + ], + [ + '32', + 500.0, + 227.0, + 60.0, + 60.0 + ], + [ + '31', + 440.0, + 227.0, + 60.0, + 60.0 + ], + [ + '30', + 380.0, + 227.0, + 60.0, + 60.0 + ], + [ + '2F', + 320.0, + 227.0, + 60.0, + 60.0 + ], + [ + '2E', + 260.0, + 227.0, + 60.0, + 60.0 + ], + [ + '2D', + 200.0, + 227.0, + 60.0, + 60.0 + ], + [ + '2C', + 140.0, + 227.0, + 60.0, + 60.0 + ], + [ + '28', + 710.0, + 167.0, + 60.0, + 60.0 + ], + [ + '27', + 650.0, + 167.0, + 60.0, + 60.0 + ], + [ + '26', + 590.0, + 167.0, + 60.0, + 60.0 + ], + [ + '25', + 530.0, + 167.0, + 60.0, + 60.0 + ], + [ + '24', + 470.0, + 167.0, + 60.0, + 60.0 + ], + [ + '23', + 410.0, + 167.0, + 60.0, + 60.0 + ], + [ + '22', + 350.0, + 167.0, + 60.0, + 60.0 + ], + [ + '21', + 290.0, + 167.0, + 60.0, + 60.0 + ], + [ + '20', + 230.0, + 167.0, + 60.0, + 60.0 + ], + [ + '1F', + 170.0, + 167.0, + 60.0, + 60.0 + ], + [ + '1E', + 110.0, + 167.0, + 60.0, + 60.0 + ], + [ + '1B', + 755.0, + 107.0, + 60.0, + 60.0 + ], + [ + '1A', + 695.0, + 107.0, + 60.0, + 60.0 + ], + [ + '19', + 635.0, + 107.0, + 60.0, + 60.0 + ], + [ + '18', + 575.0, + 107.0, + 60.0, + 60.0 + ], + [ + '17', + 515.0, + 107.0, + 60.0, + 60.0 + ], + [ + '16', + 455.0, + 107.0, + 60.0, + 60.0 + ], + [ + '15', + 395.0, + 107.0, + 60.0, + 60.0 + ], + [ + '14', + 335.0, + 107.0, + 60.0, + 60.0 + ], + [ + '13', + 275.0, + 107.0, + 60.0, + 60.0 + ], + [ + '12', + 215.0, + 107.0, + 60.0, + 60.0 + ], + [ + '11', + 155.0, + 107.0, + 60.0, + 60.0 + ], + [ + '10', + 95.0, + 107.0, + 60.0, + 60.0 + ] + ], + 'J': [ + [ + '43', + 658.0, + 6.0, + 72.0, + 35.0 + ], + [ + '44', + 730.0, + 6.0, + 73.0, + 35.0 + ], + [ + '42', + 585.0, + 6.0, + 73.0, + 35.0 + ], + [ + '41', + 513.0, + 6.0, + 72.0, + 35.0 + ], + [ + '40', + 440.0, + 6.0, + 73.0, + 35.0 + ], + [ + '3F', + 368.0, + 6.0, + 72.0, + 35.0 + ], + [ + '3D', + 223.0, + 6.0, + 72.0, + 35.0 + ], + [ + '3E', + 295.0, + 6.0, + 73.0, + 35.0 + ], + [ + '3C', + 150.0, + 6.0, + 73.0, + 35.0 + ], + [ + '3B', + 77.0, + 6.0, + 73.0, + 35.0 + ], + [ + '00', + 803.0, + 6.0, + 72.0, + 35.0 + ], + [ + '01', + 5.0, + 6.0, + 72.0, + 35.0 + ], + [ + '', + 800.0, + 107.0, + 30.0, + 60.0 + ], + [ + '73', + 725.0, + 227.0, + 60.0, + 60.0 + ], + [ + '39', + 260.0, + 287.0, + 240.0, + 60.0 + ], + [ + '79', + 500.0, + 287.0, + 75.0, + 60.0 + ], + [ + '7B', + 185.0, + 287.0, + 75.0, + 60.0 + ], + [ + '7D', + 759.0, + 47.0, + 56.0, + 60.0 + ], + [ + '0E', + 815.0, + 47.0, + 60.0, + 60.0 + ], + [ + '1C', + 815.0, + 107.0, + 60.0, + 120.0 + ], + [ + '36', + 785.0, + 227.0, + 90.0, + 60.0 + ], + [ + '0F', + 5.0, + 107.0, + 75.0, + 60.0 + ], + [ + '2A', + 5.0, + 227.0, + 120.0, + 60.0 + ], + [ + 'E0 50', + 755.0, + 318.0, + 60.0, + 29.0 + ], + [ + 'E0 48', + 755.0, + 287.0, + 60.0, + 31.0 + ], + [ + 'E0 4D', + 815.0, + 287.0, + 60.0, + 60.0 + ], + [ + 'E0 4B', + 695.0, + 287.0, + 60.0, + 60.0 + ], + [ + 'E0 5B', + 5.0, + 167.0, + 90.0, + 60.0 + ], + [ + '38', + 95.0, + 287.0, + 90.0, + 60.0 + ], + [ + '1D', + 5.0, + 287.0, + 90.0, + 60.0 + ], + [ + 'E0 1D', + 635.0, + 287.0, + 60.0, + 60.0 + ], + [ + 'E0 38', + 575.0, + 287.0, + 60.0, + 60.0 + ], + [ + '2B', + 755.0, + 167.0, + 60.0, + 60.0 + ], + [ + '0D', + 701.0, + 47.0, + 58.0, + 60.0 + ], + [ + '0C', + 643.0, + 47.0, + 58.0, + 60.0 + ], + [ + '0B', + 585.0, + 47.0, + 58.0, + 60.0 + ], + [ + '0A', + 527.0, + 47.0, + 58.0, + 60.0 + ], + [ + '09', + 469.0, + 47.0, + 58.0, + 60.0 + ], + [ + '08', + 411.0, + 47.0, + 58.0, + 60.0 + ], + [ + '07', + 353.0, + 47.0, + 58.0, + 60.0 + ], + [ + '06', + 295.0, + 47.0, + 58.0, + 60.0 + ], + [ + '05', + 237.0, + 47.0, + 58.0, + 60.0 + ], + [ + '04', + 179.0, + 47.0, + 58.0, + 60.0 + ], + [ + '03', + 121.0, + 47.0, + 58.0, + 60.0 + ], + [ + '02', + 63.0, + 47.0, + 58.0, + 60.0 + ], + [ + '29', + 5.0, + 47.0, + 58.0, + 60.0 + ], + [ + '35', + 665.0, + 227.0, + 60.0, + 60.0 + ], + [ + '34', + 605.0, + 227.0, + 60.0, + 60.0 + ], + [ + '33', + 545.0, + 227.0, + 60.0, + 60.0 + ], + [ + '32', + 485.0, + 227.0, + 60.0, + 60.0 + ], + [ + '31', + 425.0, + 227.0, + 60.0, + 60.0 + ], + [ + '30', + 365.0, + 227.0, + 60.0, + 60.0 + ], + [ + '2F', + 305.0, + 227.0, + 60.0, + 60.0 + ], + [ + '2E', + 245.0, + 227.0, + 60.0, + 60.0 + ], + [ + '2D', + 185.0, + 227.0, + 60.0, + 60.0 + ], + [ + '2C', + 125.0, + 227.0, + 60.0, + 60.0 + ], + [ + '28', + 695.0, + 167.0, + 60.0, + 60.0 + ], + [ + '27', + 635.0, + 167.0, + 60.0, + 60.0 + ], + [ + '26', + 575.0, + 167.0, + 60.0, + 60.0 + ], + [ + '25', + 515.0, + 167.0, + 60.0, + 60.0 + ], + [ + '24', + 455.0, + 167.0, + 60.0, + 60.0 + ], + [ + '23', + 395.0, + 167.0, + 60.0, + 60.0 + ], + [ + '22', + 335.0, + 167.0, + 60.0, + 60.0 + ], + [ + '21', + 275.0, + 167.0, + 60.0, + 60.0 + ], + [ + '20', + 215.0, + 167.0, + 60.0, + 60.0 + ], + [ + '1F', + 155.0, + 167.0, + 60.0, + 60.0 + ], + [ + '1E', + 95.0, + 167.0, + 60.0, + 60.0 + ], + [ + '1B', + 740.0, + 107.0, + 60.0, + 60.0 + ], + [ + '1A', + 680.0, + 107.0, + 60.0, + 60.0 + ], + [ + '19', + 620.0, + 107.0, + 60.0, + 60.0 + ], + [ + '18', + 560.0, + 107.0, + 60.0, + 60.0 + ], + [ + '17', + 500.0, + 107.0, + 60.0, + 60.0 + ], + [ + '16', + 440.0, + 107.0, + 60.0, + 60.0 + ], + [ + '15', + 380.0, + 107.0, + 60.0, + 60.0 + ], + [ + '14', + 320.0, + 107.0, + 60.0, + 60.0 + ], + [ + '13', + 260.0, + 107.0, + 60.0, + 60.0 + ], + [ + '12', + 200.0, + 107.0, + 60.0, + 60.0 + ], + [ + '11', + 140.0, + 107.0, + 60.0, + 60.0 + ], + [ + '10', + 80.0, + 107.0, + 60.0, + 60.0 + ] + ], + 'U': [ + [ + '39', + 245.0, + 287.0, + 330.0, + 60.0 + ], + [ + '43', + 658.0, + 6.0, + 72.0, + 35.0 + ], + [ + '44', + 730.0, + 6.0, + 73.0, + 35.0 + ], + [ + '42', + 585.0, + 6.0, + 73.0, + 35.0 + ], + [ + '41', + 513.0, + 6.0, + 72.0, + 35.0 + ], + [ + '40', + 440.0, + 6.0, + 73.0, + 35.0 + ], + [ + '3F', + 368.0, + 6.0, + 72.0, + 35.0 + ], + [ + '3D', + 223.0, + 6.0, + 72.0, + 35.0 + ], + [ + '3E', + 295.0, + 6.0, + 73.0, + 35.0 + ], + [ + '3C', + 150.0, + 6.0, + 73.0, + 35.0 + ], + [ + '3B', + 77.0, + 6.0, + 73.0, + 35.0 + ], + [ + '00', + 803.0, + 6.0, + 72.0, + 35.0 + ], + [ + '01', + 5.0, + 6.0, + 72.0, + 35.0 + ], + [ + '0E', + 785.0, + 47.0, + 90.0, + 60.0 + ], + [ + '1C', + 770.0, + 167.0, + 105.0, + 60.0 + ], + [ + '36', + 740.0, + 227.0, + 135.0, + 60.0 + ], + [ + '0F', + 5.0, + 107.0, + 90.0, + 60.0 + ], + [ + '2A', + 5.0, + 227.0, + 135.0, + 60.0 + ], + [ + 'E0 50', + 755.0, + 318.0, + 60.0, + 29.0 + ], + [ + 'E0 48', + 755.0, + 287.0, + 60.0, + 31.0 + ], + [ + 'E0 4D', + 815.0, + 287.0, + 60.0, + 60.0 + ], + [ + 'E0 4B', + 695.0, + 287.0, + 60.0, + 60.0 + ], + [ + 'E0 5B', + 5.0, + 167.0, + 105.0, + 60.0 + ], + [ + '38', + 125.0, + 287.0, + 120.0, + 60.0 + ], + [ + '1D', + 5.0, + 287.0, + 120.0, + 60.0 + ], + [ + 'E0 1D', + 635.0, + 287.0, + 60.0, + 60.0 + ], + [ + 'E0 38', + 575.0, + 287.0, + 60.0, + 60.0 + ], + [ + '2B', + 815.0, + 107.0, + 60.0, + 60.0 + ], + [ + '0D', + 725.0, + 47.0, + 60.0, + 60.0 + ], + [ + '0C', + 665.0, + 47.0, + 60.0, + 60.0 + ], + [ + '0B', + 605.0, + 47.0, + 60.0, + 60.0 + ], + [ + '0A', + 545.0, + 47.0, + 60.0, + 60.0 + ], + [ + '09', + 485.0, + 47.0, + 60.0, + 60.0 + ], + [ + '08', + 425.0, + 47.0, + 60.0, + 60.0 + ], + [ + '07', + 365.0, + 47.0, + 60.0, + 60.0 + ], + [ + '06', + 305.0, + 47.0, + 60.0, + 60.0 + ], + [ + '05', + 245.0, + 47.0, + 60.0, + 60.0 + ], + [ + '04', + 185.0, + 47.0, + 60.0, + 60.0 + ], + [ + '03', + 125.0, + 47.0, + 60.0, + 60.0 + ], + [ + '02', + 65.0, + 47.0, + 60.0, + 60.0 + ], + [ + '29', + 5.0, + 47.0, + 60.0, + 60.0 + ], + [ + '35', + 680.0, + 227.0, + 60.0, + 60.0 + ], + [ + '34', + 620.0, + 227.0, + 60.0, + 60.0 + ], + [ + '33', + 560.0, + 227.0, + 60.0, + 60.0 + ], + [ + '32', + 500.0, + 227.0, + 60.0, + 60.0 + ], + [ + '31', + 440.0, + 227.0, + 60.0, + 60.0 + ], + [ + '30', + 380.0, + 227.0, + 60.0, + 60.0 + ], + [ + '2F', + 320.0, + 227.0, + 60.0, + 60.0 + ], + [ + '2E', + 260.0, + 227.0, + 60.0, + 60.0 + ], + [ + '2D', + 200.0, + 227.0, + 60.0, + 60.0 + ], + [ + '2C', + 140.0, + 227.0, + 60.0, + 60.0 + ], + [ + '28', + 710.0, + 167.0, + 60.0, + 60.0 + ], + [ + '27', + 650.0, + 167.0, + 60.0, + 60.0 + ], + [ + '26', + 590.0, + 167.0, + 60.0, + 60.0 + ], + [ + '25', + 530.0, + 167.0, + 60.0, + 60.0 + ], + [ + '24', + 470.0, + 167.0, + 60.0, + 60.0 + ], + [ + '23', + 410.0, + 167.0, + 60.0, + 60.0 + ], + [ + '22', + 350.0, + 167.0, + 60.0, + 60.0 + ], + [ + '21', + 290.0, + 167.0, + 60.0, + 60.0 + ], + [ + '20', + 230.0, + 167.0, + 60.0, + 60.0 + ], + [ + '1F', + 170.0, + 167.0, + 60.0, + 60.0 + ], + [ + '1E', + 110.0, + 167.0, + 60.0, + 60.0 + ], + [ + '1B', + 755.0, + 107.0, + 60.0, + 60.0 + ], + [ + '1A', + 695.0, + 107.0, + 60.0, + 60.0 + ], + [ + '19', + 635.0, + 107.0, + 60.0, + 60.0 + ], + [ + '18', + 575.0, + 107.0, + 60.0, + 60.0 + ], + [ + '17', + 515.0, + 107.0, + 60.0, + 60.0 + ], + [ + '16', + 455.0, + 107.0, + 60.0, + 60.0 + ], + [ + '15', + 395.0, + 107.0, + 60.0, + 60.0 + ], + [ + '14', + 335.0, + 107.0, + 60.0, + 60.0 + ], + [ + '13', + 275.0, + 107.0, + 60.0, + 60.0 + ], + [ + '12', + 215.0, + 107.0, + 60.0, + 60.0 + ], + [ + '11', + 155.0, + 107.0, + 60.0, + 60.0 + ], + [ + '10', + 95.0, + 107.0, + 60.0, + 60.0 + ] + ] + }, + 'shortcut': { + '+<>ALT': 'keyboardOverlayMaximizeWindow', + '+<>ALT<>SHIFT': 'keyboardOverlayCenterWindow', + '+<>CTRL': 'keyboardOverlayZoomIn', + '+<>CTRL<>SHIFT': 'keyboardOverlayZoomScreenIn', + '-<>ALT': 'keyboardOverlayMinimizeWindow', + '-<>CTRL': 'keyboardOverlayZoomOut', + '-<>CTRL<>SHIFT': 'keyboardOverlayZoomScreenOut', + '-<>SEARCH': 'keyboardOverlayF11', + '.<>CTRL<>SHIFT': 'keyboardOverlayToggleSpeechInput', + '.<>SEARCH': 'keyboardOverlayInsert', + '/<>ALT<>CTRL': 'keyboardOverlayViewKeyboardOverlay', + '/<>ALT<>CTRL<>SHIFT': 'keyboardOverlayViewKeyboardOverlay', + '/<>CTRL': 'keyboardOverlayHelp', + '/<>CTRL<>SHIFT': 'keyboardOverlayHelp', + '0<>CTRL': 'keyboardOverlayResetZoom', + '0<>CTRL<>SHIFT': 'keyboardOverlayResetScreenZoom', + '0<>SEARCH': 'keyboardOverlayF10', + '1<>ALT': 'keyboardOverlayActivateLauncherItem1', + '1<>CTRL': 'keyboardOverlayActivateTab1', + '1<>SEARCH': 'keyboardOverlayF1', + '2<>ALT': 'keyboardOverlayActivateLauncherItem2', + '2<>CTRL': 'keyboardOverlayActivateTab2', + '2<>SEARCH': 'keyboardOverlayF2', + '3<>ALT': 'keyboardOverlayActivateLauncherItem3', + '3<>CTRL': 'keyboardOverlayActivateTab3', + '3<>SEARCH': 'keyboardOverlayF3', + '4<>ALT': 'keyboardOverlayActivateLauncherItem4', + '4<>CTRL': 'keyboardOverlayActivateTab4', + '4<>SEARCH': 'keyboardOverlayF4', + '5<>ALT': 'keyboardOverlayActivateLauncherItem5', + '5<>CTRL': 'keyboardOverlayActivateTab5', + '5<>SEARCH': 'keyboardOverlayF5', + '6<>ALT': 'keyboardOverlayActivateLauncherItem6', + '6<>CTRL': 'keyboardOverlayActivateTab6', + '6<>SEARCH': 'keyboardOverlayF6', + '7<>ALT': 'keyboardOverlayActivateLauncherItem7', + '7<>CTRL': 'keyboardOverlayActivateTab7', + '7<>SEARCH': 'keyboardOverlayF7', + '8<>ALT': 'keyboardOverlayActivateLauncherItem8', + '8<>CTRL': 'keyboardOverlayActivateTab8', + '8<>SEARCH': 'keyboardOverlayF8', + '9<>ALT': 'keyboardOverlayActivateLastLauncherItem', + '9<>CTRL': 'keyboardOverlayActivateLastTab', + '9<>CTRL<>SHIFT': 'keyboardOverlayToggleProjectionTouchHud', + '9<>SEARCH': 'keyboardOverlayF9', + '=<>SEARCH': 'keyboardOverlayF12', + 'ALT<>SEARCH': 'keyboardOverlayToggleCapsLock', + 'ALT<>SHIFT': 'keyboardOverlayCycleThroughInputMethods', + '[<>ALT': 'keyboardOverlayDockWindowLeft', + ']<>ALT': 'keyboardOverlayDockWindowRight', + 'a<>CTRL': 'keyboardOverlaySelectAll', + 'arrowkeys<>CTRL': 'keyboardOverlayWordMove', + 'b<>ALT<>SHIFT': 'keyboardOverlayFocusBookmarks', + 'b<>CTRL<>SHIFT': 'keyboardOverlayToggleBookmarkBar', + 'back<>CTRL': 'keyboardOverlayFocusPreviousPane', + 'back<>SEARCH': 'keyboardOverlayF1', + 'backspace': 'keyboardOverlayGoBack', + 'backspace<>ALT': 'keyboardOverlayDelete', + 'backspace<>CTRL': 'keyboardOverlayDeleteWord', + 'backspace<>CTRL<>SHIFT': 'keyboardOverlayClearBrowsingDataDialog', + 'backspace<>SEARCH': 'keyboardOverlayDelete', + 'backspace<>SHIFT': 'keyboardOverlayGoForward', + 'bright down<>ALT': 'keyboardOverlayDecreaseKeyBrightness', + 'bright down<>ALT<>CTRL': 'keyboardOverlayMagnifierDecreaseZoom', + 'bright down<>SEARCH': 'keyboardOverlayF6', + 'bright up<>ALT': 'keyboardOverlayIncreaseKeyBrightness', + 'bright up<>ALT<>CTRL': 'keyboardOverlayMagnifierIncreaseZoom', + 'bright up<>SEARCH': 'keyboardOverlayF7', + 'c<>CTRL': 'keyboardOverlayCopy', + 'c<>CTRL<>SHIFT': 'keyboardOverlayDomInspector', + 'd<>ALT': 'keyboardOverlayFocusAddressBar', + 'd<>CTRL': 'keyboardOverlayBookmarkCurrentPage', + 'd<>CTRL<>SHIFT': 'keyboardOverlayBookmarkAllTabs', + 'down<>ALT': 'keyboardOverlayPageDown', + 'down<>ALT<>CTRL': 'keyboardOverlayEnd', + 'down<>SEARCH': 'keyboardOverlayPageDown', + 'e<>ALT': 'keyboardOverlayShowWrenchMenu', + 'e<>CTRL': 'keyboardOverlayFocusAddressBarInSearchMode', + 'enter<>ALT': 'keyboardOverlayOpenAddressInNewTab', + 'enter<>CTRL': 'keyboardOverlayAddWwwAndComAndOpenAddress', + 'enter<>SHIFT': 'keyboardOverlayFindPreviousText', + 'esc<>SHIFT': 'keyboardOverlayTaskManager', + 'f<>ALT': 'keyboardOverlayShowWrenchMenu', + 'f<>CTRL': 'keyboardOverlayFindText', + 'forward<>CTRL': 'keyboardOverlayFocusNextPane', + 'forward<>SEARCH': 'keyboardOverlayF2', + 'full screen<>ALT': 'keyboardOverlaySwapPrimaryMonitor', + 'full screen<>CTRL': 'keyboardOverlayMirrorMonitors', + 'full screen<>SEARCH': 'keyboardOverlayF4', + 'g<>CTRL': 'keyboardOverlayFindTextAgain', + 'g<>CTRL<>SHIFT': 'keyboardOverlayFindPreviousText', + 'h<>CTRL': 'keyboardOverlayHistory', + 'i<>ALT<>SHIFT': 'keyboardOverlayReportIssue', + 'i<>CTRL<>SHIFT': 'keyboardOverlayDeveloperTools', + 'j<>CTRL': 'keyboardOverlayDownloads', + 'j<>CTRL<>SHIFT': 'keyboardOverlayJavascriptConsole', + 'k<>CTRL': 'keyboardOverlayFocusAddressBarInSearchMode', + 'l<>ALT<>SHIFT': 'keyboardOverlayFocusLauncher', + 'l<>CTRL': 'keyboardOverlayFocusAddressBar', + 'l<>CTRL<>SHIFT': 'keyboardOverlayLockScreen', + 'left<>ALT': 'keyboardOverlayGoBack', + 'left<>CTRL': 'keyboardOverlayPreviousWord', + 'left<>CTRL<>SHIFT': 'keyboardOverlaySelectWordAtATime', + 'left<>SEARCH': 'keyboardOverlayHome', + 'm<>ALT<>SHIFT': 'keyboardOverlayOpenFileManager', + 'm<>CTRL': 'keyboardOverlayMinimizeWindow', + 'mute<>SEARCH': 'keyboardOverlayF8', + 'n<>ALT<>SHIFT': 'keyboardOverlayShowMessageCenter', + 'n<>CTRL': 'keyboardOverlayNewWindow', + 'n<>CTRL<>SHIFT': 'keyboardOverlayNewIncognitoWindow', + 'o<>CTRL': 'keyboardOverlayOpen', + 'o<>CTRL<>SHIFT': 'keyboardOverlayBookmarkManager', + 'p<>CTRL': 'keyboardOverlayPrint', + 'p<>CTRL<>SHIFT': 'keyboardOverlayOpenGoogleCloudPrint', + 'power': 'keyboardOverlayLockScreenOrPowerOff', + 'q<>CTRL<>SHIFT': 'keyboardOverlaySignOut', + 'r<>CTRL': 'keyboardOverlayReloadCurrentPage', + 'r<>CTRL<>SHIFT': 'keyboardOverlayReloadIgnoringCache', + 'reload<>CTRL<>SHIFT': 'keyboardOverlayRotateScreen', + 'reload<>SEARCH': 'keyboardOverlayF3', + 'right<>ALT': 'keyboardOverlayGoForward', + 'right<>CTRL': 'keyboardOverlayNextWord', + 'right<>CTRL<>SHIFT': 'keyboardOverlaySelectWordAtATime', + 'right<>SEARCH': 'keyboardOverlayEnd', + 's<>ALT<>SHIFT': 'keyboardOverlayShowStatusMenu', + 's<>CTRL': 'keyboardOverlaySave', + 'space<>CTRL': 'keyboardOverlaySelectPreviousInputMethod', + 'space<>SHIFT': 'keyboardOverlayScrollUpOnePage', + 'switch window<>CTRL': 'keyboardOverlayTakeScreenshot', + 'switch window<>CTRL<>SHIFT': 'keyboardOverlayScreenshotRegion', + 'switch window<>SEARCH': 'keyboardOverlayF5', + 't<>ALT<>CTRL': 'keyboardOverlayNewTerminal', + 't<>ALT<>SHIFT': 'keyboardOverlayFocusToolbar', + 't<>CTRL': 'keyboardOverlayNewTab', + 't<>CTRL<>SHIFT': 'keyboardOverlayReopenLastClosedTab', + 'tab<>ALT': 'keyboardOverlayNextWindow', + 'tab<>ALT<>SHIFT': 'keyboardOverlayPreviousWindow', + 'tab<>CTRL': 'keyboardOverlayActivateNextTab', + 'tab<>CTRL<>SHIFT': 'keyboardOverlayActivatePreviousTab', + 'u<>CTRL': 'keyboardOverlayViewSource', + 'u<>CTRL<>SHIFT': 'keyboardOverlayInputUnicodeCharacters', + 'up<>ALT': 'keyboardOverlayPageUp', + 'up<>ALT<>CTRL': 'keyboardOverlayHome', + 'up<>SEARCH': 'keyboardOverlayPageUp', + 'v<>CTRL': 'keyboardOverlayPaste', + 'v<>CTRL<>SHIFT': 'keyboardOverlayPasteAsPlainText', + 'vol. down<>SEARCH': 'keyboardOverlayF9', + 'vol. up<>SEARCH': 'keyboardOverlayF10', + 'w<>CTRL': 'keyboardOverlayCloseTab', + 'w<>CTRL<>SHIFT': 'keyboardOverlayCloseWindow', + 'x<>CTRL': 'keyboardOverlayCut', + 'z<>ALT<>CTRL': 'keyboardOverlayToggleChromevoxSpokenFeedback', + 'z<>CTRL': 'keyboardOverlayUndo' + } +}; diff --git a/chromium/chrome/browser/resources/chromeos/login/OWNERS b/chromium/chrome/browser/resources/chromeos/login/OWNERS new file mode 100644 index 00000000000..7cbbc2d0d0e --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/OWNERS @@ -0,0 +1,5 @@ +nkostylev@chromium.org +dpolukhin@chromium.org +ygorshenin@chromium.org +antrim@chromium.org +dzhioev@chromium.org diff --git a/chromium/chrome/browser/resources/chromeos/login/accessibility_menu.css b/chromium/chrome/browser/resources/chromeos/login/accessibility_menu.css new file mode 100644 index 00000000000..425fb6b54ae --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/accessibility_menu.css @@ -0,0 +1,43 @@ +/* Copyright (c) 2012 The Chromium Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#accessibility-menu { + -webkit-padding-after: 25px; + -webkit-padding-before: 15px; + -webkit-padding-end: 80px; + -webkit-padding-start: 25px; +} + +.checkboxrow { + -webkit-margin-before: 10px; + display: -webkit-box; +} + +.checkboxlabel { + -webkit-margin-start: 10px; +} + +.close-button { + background: url('chrome://theme/IDR_CLOSE_DIALOG') center no-repeat; + height: 14px; + position: absolute; + right: 7px; + top: 7px; + width: 14px; +} + +.close-button:hover { + background-image: url('chrome://theme/IDR_CLOSE_DIALOG_H'); +} + +.close-button:active { + background-image: url('chrome://theme/IDR_CLOSE_DIALOG_P'); +} + +html[dir=rtl] .close-button { + left: 10px; + right: auto; +} + diff --git a/chromium/chrome/browser/resources/chromeos/login/accessibility_menu.html b/chromium/chrome/browser/resources/chromeos/login/accessibility_menu.html new file mode 100644 index 00000000000..80786926f19 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/accessibility_menu.html @@ -0,0 +1,27 @@ +<div id="accessibility-menu" class="bubble faded" hidden> + <div class="close-button"></div> + <div class="checkboxrow"> + <input id="spoken-feedback" type="checkbox"> + <label for="spoken-feedback" class="checkboxlabel" + i18n-content="spokenFeedbackOption"> + </label> + </div> + <div class="checkboxrow"> + <input id="large-cursor" type="checkbox"> + <label for="large-cursor" class="checkboxlabel" + i18n-content="largeCursorOption"> + </label> + </div> + <div class="checkboxrow"> + <input id="high-contrast" type="checkbox"> + <label for="high-contrast" class="checkboxlabel" + i18n-content="highContrastOption"> + </label> + </div> + <div class="checkboxrow"> + <input id="screen-magnifier" type="checkbox"> + <label for="screen-magnifier" class="checkboxlabel" + i18n-content="screenMagnifierOption"> + </label> + </div> +</div> diff --git a/chromium/chrome/browser/resources/chromeos/login/apps_menu.css b/chromium/chrome/browser/resources/chromeos/login/apps_menu.css new file mode 100644 index 00000000000..9068fabaa5d --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/apps_menu.css @@ -0,0 +1,13 @@ +/* Copyright 2013 The Chromium Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +.apps-menu-item { + -webkit-padding-start: 24px; + background: no-repeat 4px 50%; + background-size: 16px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} diff --git a/chromium/chrome/browser/resources/chromeos/login/apps_menu.js b/chromium/chrome/browser/resources/chromeos/login/apps_menu.js new file mode 100644 index 00000000000..5fa968ede47 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/apps_menu.js @@ -0,0 +1,141 @@ +// Copyright 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** + * @fileoverview Kiosk apps menu implementation. + */ + +cr.define('login', function() { + 'use strict'; + + var Menu = cr.ui.Menu; + var MenuButton = cr.ui.MenuButton; + + /** + * Creates apps menu button. + * @constructor + * @extends {cr.ui.MenuButton} + */ + var AppsMenuButton = cr.ui.define('button'); + + AppsMenuButton.prototype = { + __proto__: MenuButton.prototype, + + /** + * Flag of whether to rebuild the menu. + * @type {boolean} + * @private + */ + needsRebuild_: true, + + /** + * Array to hold apps info. + * @type {Array} + */ + data_: null, + get data() { + return this.data_; + }, + set data(data) { + this.data_ = data; + this.needsRebuild_ = true; + }, + + /** @override */ + decorate: function() { + MenuButton.prototype.decorate.call(this); + this.menu = new Menu; + cr.ui.decorate(this.menu, Menu); + document.body.appendChild(this.menu); + + this.anchorType = cr.ui.AnchorType.ABOVE; + chrome.send('initializeKioskApps'); + }, + + /** @override */ + showMenu: function(shouldSetFocus) { + if (this.needsRebuild_) { + this.menu.textContent = ''; + this.data_.forEach(this.addItem_, this); + this.needsRebuild_ = false; + } + + MenuButton.prototype.showMenu.apply(this, arguments); + }, + + /** + * Invoked when apps menu becomes visible. + */ + didShow: function() { + window.setTimeout(function() { + if (!$('apps-header-bar-item').hidden) + chrome.send('checkKioskAppLaunchError'); + }, 500); + }, + + findAndRunAppForTesting: function(id) { + this.showMenu(true); + for (var i = 0; i < this.menu.menuItems.length; i++) { + var menuNode = this.menu.menuItems[i]; + if (menuNode.appId == id) { + var activationEvent = cr.doc.createEvent('Event'); + activationEvent.initEvent('activate', true, true); + menuNode.dispatchEvent(activationEvent); + break; + } + } + }, + + /** + * Adds an app to the menu. + * @param {Object} app An app info object. + * @private + */ + addItem_: function(app) { + var menuItem = this.menu.addMenuItem(app); + menuItem.classList.add('apps-menu-item'); + menuItem.appId = app.id; + menuItem.addEventListener('activate', function() { + chrome.send('launchKioskApp', [app.id]); + }); + } + }; + + /** + * Sets apps to be displayed in the apps menu. + * @param {!Array.<!Object>} apps An array of app info objects. + */ + AppsMenuButton.setApps = function(apps) { + $('show-apps-button').data = apps; + $('login-header-bar').hasApps = apps.length > 0; + chrome.send('kioskAppsLoaded'); + }; + + /** + * Shows the given error message. + * @param {!string} message Error message to show. + */ + AppsMenuButton.showError = function(message) { + /** @const */ var BUBBLE_OFFSET = 25; + /** @const */ var BUBBLE_PADDING = 12; + $('bubble').showTextForElement($('show-apps-button'), + message, + cr.ui.Bubble.Attachment.TOP, + BUBBLE_OFFSET, + BUBBLE_PADDING); + }; + + + /** + * Runs app with a given id from the list of loaded apps. + * @param {!string} id of an app to run. + */ + AppsMenuButton.runAppForTesting = function(id) { + $('show-apps-button').findAndRunAppForTesting(id); + }; + + return { + AppsMenuButton: AppsMenuButton + }; +}); diff --git a/chromium/chrome/browser/resources/chromeos/login/bubble.css b/chromium/chrome/browser/resources/chromeos/login/bubble.css new file mode 100644 index 00000000000..d1732231891 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/bubble.css @@ -0,0 +1,128 @@ +/* Copyright (c) 2012 The Chromium Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Css based bubble. + */ + +.bubble { + -webkit-transition: opacity 200ms ease-in-out; + background: white; + border: 1px solid rgba(0, 0, 0, 0.25); + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + font-size: 12px; + margin: 2px; + max-width: 250px; + padding: 16px; + position: absolute; +} + +.bubble::before { + border-style: solid; + border-width: 8px; + content: ''; + display: block; + position: absolute; +} + +.bubble-top::before { + border-color: rgba(0, 0, 0, 0.25) transparent transparent transparent; + bottom: -16px; +} + +html[dir=ltr] .bubble-top::before { + left: 17px; +} + +html[dir=rtl] .bubble-top::before { + right: 17px; +} + +html[dir=ltr] .bubble-right::before, +html[dir=rtl] .bubble-left::before { + border-color: transparent rgba(0, 0, 0, 0.25) transparent transparent; + left: -16px; + top: 17px; +} + +.bubble-bottom::before { + border-color: transparent transparent rgba(0, 0, 0, 0.25) transparent; + top: -16px; +} + +html[dir=ltr] .bubble-bottom::before { + left: 17px; +} + +html[dir=rtl] .bubble-bottom::before { + right: 17px; +} + +html[dir=ltr] .bubble-left::before, +html[dir=rtl] .bubble-right::before { + border-color: transparent transparent transparent rgba(0, 0, 0, 0.25); + right: -16px; + top: 17px; +} + +.bubble::after { + border-style: solid; + border-width: 8px; + content: ''; + display: block; + position: absolute; +} + +.bubble-top::after { + border-color: white transparent transparent transparent; + bottom: -15px; +} + +html[dir=ltr] .bubble-top::after { + left: 17px; +} + +html[dir=rtl] .bubble-top::after { + right: 17px; +} + +html[dir=ltr] .bubble-right::after, +html[dir=rtl] .bubble-left::after { + border-color: transparent white transparent transparent; + left: -15px; + top: 17px; +} + +.bubble-bottom::after { + border-color: transparent transparent white transparent; + top: -15px; +} + +html[dir=ltr] .bubble-bottom::after { + left: 17px; +} + +html[dir=rtl] .bubble-bottom::after { + right: 17px; +} + +html[dir=ltr] .bubble-left::after, +html[dir=rtl] .bubble-right::after { + border-color: transparent transparent transparent white; + right: -15px; + top: 17px; +} + +.error-message-bubble { + -webkit-padding-start: 30px; + background: url('chrome://theme/IDR_WARNING') left top no-repeat; + background-size: 24px; +} + +.error-message-bubble-padding { + margin-bottom: 10px; +} + +html[dir=rtl] .error-message-bubble { + background-position: right top; +}
\ No newline at end of file diff --git a/chromium/chrome/browser/resources/chromeos/login/bubble.js b/chromium/chrome/browser/resources/chromeos/login/bubble.js new file mode 100644 index 00000000000..cce6f8d23e4 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/bubble.js @@ -0,0 +1,315 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** + * @fileoverview Bubble implementation. + */ + +// TODO(xiyuan): Move this into shared. +cr.define('cr.ui', function() { + /** + * Creates a bubble div. + * @constructor + * @extends {HTMLDivElement} + */ + var Bubble = cr.ui.define('div'); + + /** + * Bubble attachment side. + * @enum {string} + */ + Bubble.Attachment = { + RIGHT: 'bubble-right', + LEFT: 'bubble-left', + TOP: 'bubble-top', + BOTTOM: 'bubble-bottom' + }; + + Bubble.prototype = { + __proto__: HTMLDivElement.prototype, + + // Anchor element for this bubble. + anchor_: undefined, + + // If defined, sets focus to this element once bubble is closed. Focus is + // set to this element only if there's no any other focused element. + elementToFocusOnHide_: undefined, + + // Whether to hide bubble when key is pressed. + hideOnKeyPress_: true, + + /** @override */ + decorate: function() { + this.docKeyDownHandler_ = this.handleDocKeyDown_.bind(this); + this.selfClickHandler_ = this.handleSelfClick_.bind(this); + this.ownerDocument.addEventListener('click', + this.handleDocClick_.bind(this)); + this.ownerDocument.addEventListener('keydown', + this.docKeyDownHandler_); + window.addEventListener('blur', this.handleWindowBlur_.bind(this)); + this.addEventListener('webkitTransitionEnd', + this.handleTransitionEnd_.bind(this)); + // Guard timer for 200ms + epsilon. + ensureTransitionEndEvent(this, 250); + }, + + /** + * Element that should be focused on hide. + * @type {HTMLElement} + */ + set elementToFocusOnHide(value) { + this.elementToFocusOnHide_ = value; + }, + + /** + * Whether to hide bubble when key is pressed. + * @type {boolean} + */ + set hideOnKeyPress(value) { + this.hideOnKeyPress_ = value; + }, + + /** + * Whether to hide bubble when clicked inside bubble element. + * Default is true. + * @type {boolean} + */ + set hideOnSelfClick(value) { + if (value) + this.removeEventListener('click', this.selfClickHandler_); + else + this.addEventListener('click', this.selfClickHandler_); + }, + + /** + * Handler for click event which prevents bubble auto hide. + * @private + */ + handleSelfClick_: function(e) { + // Allow clicking on [x] button. + if (e.target && e.target.classList.contains('close-button')) + return; + + e.stopPropagation(); + }, + + /** + * Sets the attachment of the bubble. + * @param {!Attachment} attachment Bubble attachment. + */ + setAttachment_: function(attachment) { + for (var k in Bubble.Attachment) { + var v = Bubble.Attachment[k]; + this.classList.toggle(v, v == attachment); + } + }, + + /** + * Shows the bubble for given anchor element. + * @param {!Object} pos Bubble position (left, top, right, bottom in px). + * @param {!Attachment} attachment Bubble attachment (on which side of the + * specified position it should be displayed). + * @param {HTMLElement} opt_content Content to show in bubble. + * If not specified, bubble element content is shown. + * @private + */ + showContentAt_: function(pos, attachment, opt_content) { + this.style.top = this.style.left = this.style.right = this.style.bottom = + 'auto'; + for (var k in pos) { + if (typeof pos[k] == 'number') + this.style[k] = pos[k] + 'px'; + } + if (opt_content !== undefined) { + this.innerHTML = ''; + this.appendChild(opt_content); + } + this.setAttachment_(attachment); + this.hidden = false; + this.classList.remove('faded'); + }, + + /** + * Shows the bubble for given anchor element. Bubble content is not cleared. + * @param {!HTMLElement} el Anchor element of the bubble. + * @param {!Attachment} attachment Bubble attachment (on which side of the + * element it should be displayed). + * @param {number=} opt_offset Offset of the bubble. + * @param {number=} opt_padding Optional padding of the bubble. + */ + showForElement: function(el, attachment, opt_offset, opt_padding) { + this.showContentForElement( + el, attachment, undefined, opt_offset, opt_padding); + }, + + /** + * Shows the bubble for given anchor element. + * @param {!HTMLElement} el Anchor element of the bubble. + * @param {!Attachment} attachment Bubble attachment (on which side of the + * element it should be displayed). + * @param {HTMLElement} opt_content Content to show in bubble. + * If not specified, bubble element content is shown. + * @param {number=} opt_offset Offset of the bubble attachment point from + * left (for vertical attachment) or top (for horizontal attachment) + * side of the element. If not specified, the bubble is positioned to + * be aligned with the left/top side of the element but not farther than + * half of its width/height. + * @param {number=} opt_padding Optional padding of the bubble. + */ + showContentForElement: function(el, attachment, opt_content, + opt_offset, opt_padding) { + /** @const */ var ARROW_OFFSET = 25; + /** @const */ var DEFAULT_PADDING = 18; + + if (opt_padding == undefined) + opt_padding = DEFAULT_PADDING; + + var origin = cr.ui.login.DisplayManager.getPosition(el); + var offset = opt_offset == undefined ? + [Math.min(ARROW_OFFSET, el.offsetWidth / 2), + Math.min(ARROW_OFFSET, el.offsetHeight / 2)] : + [opt_offset, opt_offset]; + + var pos = {}; + if (isRTL()) { + switch (attachment) { + case Bubble.Attachment.TOP: + pos.right = origin.right + offset[0] - ARROW_OFFSET; + pos.bottom = origin.bottom + el.offsetHeight + opt_padding; + break; + case Bubble.Attachment.RIGHT: + pos.top = origin.top + offset[1] - ARROW_OFFSET; + pos.right = origin.right + el.offsetWidth + opt_padding; + break; + case Bubble.Attachment.BOTTOM: + pos.right = origin.right + offset[0] - ARROW_OFFSET; + pos.top = origin.top + el.offsetHeight + opt_padding; + break; + case Bubble.Attachment.LEFT: + pos.top = origin.top + offset[1] - ARROW_OFFSET; + pos.left = origin.left + el.offsetWidth + opt_padding; + break; + } + } else { + switch (attachment) { + case Bubble.Attachment.TOP: + pos.left = origin.left + offset[0] - ARROW_OFFSET; + pos.bottom = origin.bottom + el.offsetHeight + opt_padding; + break; + case Bubble.Attachment.RIGHT: + pos.top = origin.top + offset[1] - ARROW_OFFSET; + pos.left = origin.left + el.offsetWidth + opt_padding; + break; + case Bubble.Attachment.BOTTOM: + pos.left = origin.left + offset[0] - ARROW_OFFSET; + pos.top = origin.top + el.offsetHeight + opt_padding; + break; + case Bubble.Attachment.LEFT: + pos.top = origin.top + offset[1] - ARROW_OFFSET; + pos.right = origin.right + el.offsetWidth + opt_padding; + break; + } + } + + this.anchor_ = el; + this.showContentAt_(pos, attachment, opt_content); + }, + + /** + * Shows the bubble for given anchor element. + * @param {!HTMLElement} el Anchor element of the bubble. + * @param {string} text Text content to show in bubble. + * @param {!Attachment} attachment Bubble attachment (on which side of the + * element it should be displayed). + * @param {number=} opt_offset Offset of the bubble attachment point from + * left (for vertical attachment) or top (for horizontal attachment) + * side of the element. If not specified, the bubble is positioned to + * be aligned with the left/top side of the element but not farther than + * half of its weight/height. + * @param {number=} opt_padding Optional padding of the bubble. + */ + showTextForElement: function(el, text, attachment, + opt_offset, opt_padding) { + var span = this.ownerDocument.createElement('span'); + span.textContent = text; + this.showContentForElement(el, attachment, span, opt_offset, opt_padding); + }, + + /** + * Hides the bubble. + */ + hide: function() { + if (!this.classList.contains('faded')) + this.classList.add('faded'); + }, + + /** + * Hides the bubble anchored to the given element (if any). + * @param {!Object} el Anchor element. + */ + hideForElement: function(el) { + if (!this.hidden && this.anchor_ == el) + this.hide(); + }, + + /** + * Handler for faded transition end. + * @private + */ + handleTransitionEnd_: function(e) { + if (this.classList.contains('faded')) { + this.hidden = true; + if (this.elementToFocusOnHide_ && + document.activeElement == document.body) { + // Restore focus to default element only if there's no other + // element that is focused. + this.elementToFocusOnHide_.focus(); + } + } + }, + + /** + * Handler of document click event. + * @private + */ + handleDocClick_: function(e) { + // Ignore clicks on anchor element. + if (e.target == this.anchor_) + return; + + if (!this.hidden) + this.hide(); + }, + + /** + * Handle of document keydown event. + * @private + */ + handleDocKeyDown_: function(e) { + if (this.hideOnKeyPress_ && !this.hidden) { + this.hide(); + return; + } + + if (e.keyCode == 27 && !this.hidden) { + if (this.elementToFocusOnHide_) + this.elementToFocusOnHide_.focus(); + this.hide(); + } + }, + + /** + * Handler of window blur event. + * @private + */ + handleWindowBlur_: function(e) { + if (!this.hidden) + this.hide(); + } + }; + + return { + Bubble: Bubble + }; +}); diff --git a/chromium/chrome/browser/resources/chromeos/login/demo_user_login.css b/chromium/chrome/browser/resources/chromeos/login/demo_user_login.css new file mode 100644 index 00000000000..dae85d085d8 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/demo_user_login.css @@ -0,0 +1,48 @@ +/* Copyright (c) 2012 The Chromium Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +html, +body { + height: 100%; + width: 100%; +} + +body { + background: #000; + margin: 0; + overflow: hidden; + padding: 0; +} + +#page { + -webkit-box-align: center; + -webkit-box-pack: center; + /* Delay the login screen for 2 seconds then fade it in. */ + -webkit-transition: opacity 1s linear 2s; + background: white; + display: -webkit-box; + height: 100%; + opacity: 0; + position: absolute; + width: 100%; +} + +#logo-container { + text-align: center; +} + +#logo { + width: 150px; +} + +#demo-login-text { + font-size: 14px; + padding-left: 30px; + padding-top: 10px; +} + +#lower-container { + height: 40px; +} diff --git a/chromium/chrome/browser/resources/chromeos/login/demo_user_login.html b/chromium/chrome/browser/resources/chromeos/login/demo_user_login.html new file mode 100644 index 00000000000..a541fef2551 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/demo_user_login.html @@ -0,0 +1,27 @@ +<!DOCTYPE HTML> +<html i18n-values="dir:textdirection"> +<head> +<meta charset="utf-8"> +<link rel="stylesheet" href="chrome://resources/css/spinner.css"> +<link rel="stylesheet" href="chrome://resources/css/chrome_shared.css"> +<link rel="stylesheet" href="demo_user_login.css"> +<script src="chrome://resources/js/load_time_data.js"></script> +<script src="chrome://resources/js/util.js"></script> +<script src="chrome://oobe/strings.js"></script> +<script src="chrome://oobe/demo_user_login.js"></script> +</head> +<body i18n-values=".style.fontFamily:fontfamily;"> + <div id="page"> + <div id="logo-container"> + <div> + <img id="logo" src="images/chrome_retail_login.png"> + </div> + <div id="lower-container"> + <div id="demo-login-text" i18n-content="demoLoginMessage"></div> + <div id="login-spinner" class="inline-spinner" hidden></div> + </div> + </div> + </div> + <script src="chrome://resources/js/i18n_template2.js"></script> +</body> +</html> diff --git a/chromium/chrome/browser/resources/chromeos/login/demo_user_login.js b/chromium/chrome/browser/resources/chromeos/login/demo_user_login.js new file mode 100644 index 00000000000..1fefc236857 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/demo_user_login.js @@ -0,0 +1,46 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** + * @fileoverview Demo login UI. + */ + +/** + * Handles a user clicking anywhere on the screen. This will log the demo user + * in. Yes, this actually _is the intention. + * @param {Event} e The click event that triggered this function. + */ +onClick = function(e) { + document.removeEventListener('click', onClick); + e.stopPropagation(); + showLoginSpinner(); + chrome.send('launchDemoUser'); +}; + +/** + * Initializes the click handler. + */ +initialize = function() { + $('page').style.opacity = 1; + document.addEventListener('click', onClick); + // Report back sign in UI being painted. + window.webkitRequestAnimationFrame(function() { + chrome.send('loginVisible', ['demo']); + }); +}; + +/** + * Show the login spinner. + */ +showLoginSpinner = function() { + // We're already logging in - don't login on click. + document.removeEventListener('click', onClick); + + // Hide the "Click to start" and show the spinner. + $('demo-login-text').hidden = true; + $('login-spinner').hidden = false; +}; + +disableTextSelectAndDrag(); +document.addEventListener('DOMContentLoaded', initialize); diff --git a/chromium/chrome/browser/resources/chromeos/login/display_manager.js b/chromium/chrome/browser/resources/chromeos/login/display_manager.js new file mode 100644 index 00000000000..50d0422e3e5 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/display_manager.js @@ -0,0 +1,866 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** + * @fileoverview Display manager for WebUI OOBE and login. + */ + +// TODO(xiyuan): Find a better to share those constants. +/** @const */ var SCREEN_OOBE_NETWORK = 'connect'; +/** @const */ var SCREEN_OOBE_EULA = 'eula'; +/** @const */ var SCREEN_OOBE_UPDATE = 'update'; +/** @const */ var SCREEN_OOBE_ENROLLMENT = 'oauth-enrollment'; +/** @const */ var SCREEN_OOBE_KIOSK_ENABLE = 'kiosk-enable'; +/** @const */ var SCREEN_GAIA_SIGNIN = 'gaia-signin'; +/** @const */ var SCREEN_ACCOUNT_PICKER = 'account-picker'; +/** @const */ var SCREEN_ERROR_MESSAGE = 'error-message'; +/** @const */ var SCREEN_USER_IMAGE_PICKER = 'user-image'; +/** @const */ var SCREEN_TPM_ERROR = 'tpm-error-message'; +/** @const */ var SCREEN_PASSWORD_CHANGED = 'password-changed'; +/** @const */ var SCREEN_CREATE_MANAGED_USER_FLOW = + 'managed-user-creation'; +/** @const */ var SCREEN_APP_LAUNCH_SPLASH = 'app-launch-splash'; +/** @const */ var SCREEN_CONFIRM_PASSWORD = 'confirm-password'; +/** @const */ var SCREEN_MESSAGE_BOX = 'message-box'; + +/* Accelerator identifiers. Must be kept in sync with webui_login_view.cc. */ +/** @const */ var ACCELERATOR_CANCEL = 'cancel'; +/** @const */ var ACCELERATOR_ENROLLMENT = 'enrollment'; +/** @const */ var ACCELERATOR_KIOSK_ENABLE = 'kiosk_enable'; +/** @const */ var ACCELERATOR_VERSION = 'version'; +/** @const */ var ACCELERATOR_RESET = 'reset'; +/** @const */ var ACCELERATOR_FOCUS_PREV = 'focus_prev'; +/** @const */ var ACCELERATOR_FOCUS_NEXT = 'focus_next'; +/** @const */ var ACCELERATOR_DEVICE_REQUISITION = 'device_requisition'; +/** @const */ var ACCELERATOR_DEVICE_REQUISITION_REMORA = + 'device_requisition_remora'; +/** @const */ var ACCELERATOR_APP_LAUNCH_BAILOUT = 'app_launch_bailout'; + +/* Signin UI state constants. Used to control header bar UI. */ +/** @const */ var SIGNIN_UI_STATE = { + HIDDEN: 0, + GAIA_SIGNIN: 1, + ACCOUNT_PICKER: 2, + WRONG_HWID_WARNING: 3, + MANAGED_USER_CREATION_FLOW: 4, +}; + +/* Possible UI states of the error screen. */ +/** @const */ var ERROR_SCREEN_UI_STATE = { + UNKNOWN: 'ui-state-unknown', + UPDATE: 'ui-state-update', + SIGNIN: 'ui-state-signin', + MANAGED_USER_CREATION_FLOW: 'ui-state-locally-managed', + KIOSK_MODE: 'ui-state-kiosk-mode', + LOCAL_STATE_ERROR: 'ui-state-local-state-error' +}; + +/* Possible types of UI. */ +/** @const */ var DISPLAY_TYPE = { + UNKNOWN: 'unknown', + OOBE: 'oobe', + LOGIN: 'login', + LOCK: 'lock', + USER_ADDING: 'user-adding', + APP_LAUNCH_SPLASH: 'app-launch-splash', + DESKTOP_USER_MANAGER: 'login-add-user' +}; + +cr.define('cr.ui.login', function() { + var Bubble = cr.ui.Bubble; + + /** + * Maximum time in milliseconds to wait for step transition to finish. + * The value is used as the duration for ensureTransitionEndEvent below. + * It needs to be inline with the step screen transition duration time + * defined in css file. The current value in css is 200ms. To avoid emulated + * webkitTransitionEnd fired before real one, 250ms is used. + * @const + */ + var MAX_SCREEN_TRANSITION_DURATION = 250; + + /** + * Groups of screens (screen IDs) that should have the same dimensions. + * @type Array.<Array.<string>> + * @const + */ + var SCREEN_GROUPS = [[SCREEN_OOBE_NETWORK, + SCREEN_OOBE_EULA, + SCREEN_OOBE_UPDATE] + ]; + + /** + * Constructor a display manager that manages initialization of screens, + * transitions, error messages display. + * + * @constructor + */ + function DisplayManager() { + } + + DisplayManager.prototype = { + /** + * Registered screens. + */ + screens_: [], + + /** + * Current OOBE step, index in the screens array. + * @type {number} + */ + currentStep_: 0, + + /** + * Whether version label can be toggled by ACCELERATOR_VERSION. + * @type {boolean} + */ + allowToggleVersion_: false, + + /** + * Whether keyboard navigation flow is enforced. + * @type {boolean} + */ + forceKeyboardFlow_: false, + + /** + * Type of UI. + * @type {string} + */ + displayType_: DISPLAY_TYPE.UNKNOWN, + + get displayType() { + return this.displayType_; + }, + + set displayType(displayType) { + this.displayType_ = displayType; + document.documentElement.setAttribute('screen', displayType); + }, + + /** + * Returns dimensions of screen exluding header bar. + * @type {Object} + */ + get clientAreaSize() { + var container = $('outer-container'); + return {width: container.offsetWidth, height: container.offsetHeight}; + }, + + /** + * Gets current screen element. + * @type {HTMLElement} + */ + get currentScreen() { + return $(this.screens_[this.currentStep_]); + }, + + /** + * Hides/shows header (Shutdown/Add User/Cancel buttons). + * @param {boolean} hidden Whether header is hidden. + */ + set headerHidden(hidden) { + $('login-header-bar').hidden = hidden; + }, + + /** + * Toggles background of main body between transparency and solid. + * @param {boolean} solid Whether to show a solid background. + */ + set solidBackground(solid) { + if (solid) + document.body.classList.add('solid'); + else + document.body.classList.remove('solid'); + }, + + /** + * Forces keyboard based OOBE navigation. + * @param {boolean} value True if keyboard navigation flow is forced. + */ + set forceKeyboardFlow(value) { + this.forceKeyboardFlow_ = value; + if (value) { + keyboard.initializeKeyboardFlow(); + cr.ui.Dropdown.enableKeyboardFlow(); + } + }, + + /** + * Shows/hides version labels. + * @param {boolean} show Whether labels should be visible by default. If + * false, visibility can be toggled by ACCELERATOR_VERSION. + */ + showVersion: function(show) { + $('version-labels').hidden = !show; + this.allowToggleVersion_ = !show; + }, + + /** + * Handle accelerators. + * @param {string} name Accelerator name. + */ + handleAccelerator: function(name) { + if (name == ACCELERATOR_CANCEL) { + if (this.currentScreen.cancel) { + this.currentScreen.cancel(); + } + } else if (name == ACCELERATOR_ENROLLMENT) { + var currentStepId = this.screens_[this.currentStep_]; + if (currentStepId == SCREEN_GAIA_SIGNIN || + currentStepId == SCREEN_ACCOUNT_PICKER) { + chrome.send('toggleEnrollmentScreen'); + } else if (currentStepId == SCREEN_OOBE_NETWORK || + currentStepId == SCREEN_OOBE_EULA) { + // In this case update check will be skipped and OOBE will + // proceed straight to enrollment screen when EULA is accepted. + chrome.send('skipUpdateEnrollAfterEula'); + } else if (currentStepId == SCREEN_OOBE_ENROLLMENT) { + // This accelerator is also used to manually cancel auto-enrollment. + if (this.currentScreen.cancelAutoEnrollment) + this.currentScreen.cancelAutoEnrollment(); + } + } else if (name == ACCELERATOR_KIOSK_ENABLE) { + var currentStepId = this.screens_[this.currentStep_]; + if (currentStepId == SCREEN_GAIA_SIGNIN || + currentStepId == SCREEN_ACCOUNT_PICKER) { + chrome.send('toggleKioskEnableScreen'); + } + } else if (name == ACCELERATOR_VERSION) { + if (this.allowToggleVersion_) + $('version-labels').hidden = !$('version-labels').hidden; + } else if (name == ACCELERATOR_RESET) { + var currentStepId = this.screens_[this.currentStep_]; + if (currentStepId == SCREEN_GAIA_SIGNIN || + currentStepId == SCREEN_ACCOUNT_PICKER) { + chrome.send('toggleResetScreen'); + } + } else if (name == ACCELERATOR_DEVICE_REQUISITION) { + if (this.isOobeUI()) + this.showDeviceRequisitionPrompt_(); + } else if (name == ACCELERATOR_DEVICE_REQUISITION_REMORA) { + if (this.isOobeUI()) + this.showDeviceRequisitionRemoraPrompt_(); + } else if (name == ACCELERATOR_APP_LAUNCH_BAILOUT) { + var currentStepId = this.screens_[this.currentStep_]; + if (currentStepId == SCREEN_APP_LAUNCH_SPLASH) + chrome.send('cancelAppLaunch'); + } + + if (!this.forceKeyboardFlow_) + return; + + // Handle special accelerators for keyboard enhanced navigation flow. + if (name == ACCELERATOR_FOCUS_PREV) + keyboard.raiseKeyFocusPrevious(document.activeElement); + else if (name == ACCELERATOR_FOCUS_NEXT) + keyboard.raiseKeyFocusNext(document.activeElement); + }, + + /** + * Appends buttons to the button strip. + * @param {Array.<HTMLElement>} buttons Array with the buttons to append. + * @param {string} screenId Id of the screen that buttons belong to. + */ + appendButtons_: function(buttons, screenId) { + if (buttons) { + var buttonStrip = $(screenId + '-controls'); + if (buttonStrip) { + for (var i = 0; i < buttons.length; ++i) + buttonStrip.appendChild(buttons[i]); + } + } + }, + + /** + * Disables or enables control buttons on the specified screen. + * @param {HTMLElement} screen Screen which controls should be affected. + * @param {boolean} disabled Whether to disable controls. + */ + disableButtons_: function(screen, disabled) { + var buttons = document.querySelectorAll( + '#' + screen.id + '-controls button:not(.preserve-disabled-state)'); + for (var i = 0; i < buttons.length; ++i) { + buttons[i].disabled = disabled; + } + }, + + /** + * Updates a step's css classes to reflect left, current, or right position. + * @param {number} stepIndex step index. + * @param {string} state one of 'left', 'current', 'right'. + */ + updateStep_: function(stepIndex, state) { + var stepId = this.screens_[stepIndex]; + var step = $(stepId); + var header = $('header-' + stepId); + var states = ['left', 'right', 'current']; + for (var i = 0; i < states.length; ++i) { + if (states[i] != state) { + step.classList.remove(states[i]); + header.classList.remove(states[i]); + } + } + step.classList.add(state); + header.classList.add(state); + }, + + /** + * Switches to the next OOBE step. + * @param {number} nextStepIndex Index of the next step. + */ + toggleStep_: function(nextStepIndex, screenData) { + var currentStepId = this.screens_[this.currentStep_]; + var nextStepId = this.screens_[nextStepIndex]; + var oldStep = $(currentStepId); + var newStep = $(nextStepId); + var newHeader = $('header-' + nextStepId); + + // Disable controls before starting animation. + this.disableButtons_(oldStep, true); + + if (oldStep.onBeforeHide) + oldStep.onBeforeHide(); + + $('oobe').className = nextStepId; + + if (newStep.onBeforeShow) + newStep.onBeforeShow(screenData); + + newStep.classList.remove('hidden'); + + if (this.isOobeUI()) { + // Start gliding animation for OOBE steps. + if (nextStepIndex > this.currentStep_) { + for (var i = this.currentStep_; i < nextStepIndex; ++i) + this.updateStep_(i, 'left'); + this.updateStep_(nextStepIndex, 'current'); + } else if (nextStepIndex < this.currentStep_) { + for (var i = this.currentStep_; i > nextStepIndex; --i) + this.updateStep_(i, 'right'); + this.updateStep_(nextStepIndex, 'current'); + } + } else { + // Start fading animation for login display. + oldStep.classList.add('faded'); + newStep.classList.remove('faded'); + } + + this.disableButtons_(newStep, false); + + // Adjust inner container height based on new step's height. + this.updateScreenSize(newStep); + + if (newStep.onAfterShow) + newStep.onAfterShow(screenData); + + // Default control to be focused (if specified). + var defaultControl = newStep.defaultControl; + + var innerContainer = $('inner-container'); + if (this.currentStep_ != nextStepIndex && + !oldStep.classList.contains('hidden')) { + if (oldStep.classList.contains('animated')) { + innerContainer.classList.add('animation'); + oldStep.addEventListener('webkitTransitionEnd', function f(e) { + oldStep.removeEventListener('webkitTransitionEnd', f); + if (oldStep.classList.contains('faded') || + oldStep.classList.contains('left') || + oldStep.classList.contains('right')) { + innerContainer.classList.remove('animation'); + oldStep.classList.add('hidden'); + } + // Refresh defaultControl. It could have changed. + var defaultControl = newStep.defaultControl; + if (defaultControl) + defaultControl.focus(); + }); + ensureTransitionEndEvent(oldStep, MAX_SCREEN_TRANSITION_DURATION); + } else { + oldStep.classList.add('hidden'); + if (defaultControl) + defaultControl.focus(); + } + } else { + // First screen on OOBE launch. + if (this.isOobeUI() && innerContainer.classList.contains('down')) { + innerContainer.classList.remove('down'); + innerContainer.addEventListener( + 'webkitTransitionEnd', function f(e) { + innerContainer.removeEventListener('webkitTransitionEnd', f); + $('progress-dots').classList.remove('down'); + chrome.send('loginVisible', ['oobe']); + // Refresh defaultControl. It could have changed. + var defaultControl = newStep.defaultControl; + if (defaultControl) + defaultControl.focus(); + }); + ensureTransitionEndEvent(innerContainer, + MAX_SCREEN_TRANSITION_DURATION); + } else { + if (defaultControl) + defaultControl.focus(); + chrome.send('loginVisible', ['oobe']); + } + } + this.currentStep_ = nextStepIndex; + + $('step-logo').hidden = newStep.classList.contains('no-logo'); + + chrome.send('updateCurrentScreen', [this.currentScreen.id]); + }, + + /** + * Make sure that screen is initialized and decorated. + * @param {Object} screen Screen params dict, e.g. {id: screenId, data: {}}. + */ + preloadScreen: function(screen) { + var screenEl = $(screen.id); + if (screenEl.deferredDecorate !== undefined) { + screenEl.deferredDecorate(); + delete screenEl.deferredDecorate; + } + }, + + /** + * Show screen of given screen id. + * @param {Object} screen Screen params dict, e.g. {id: screenId, data: {}}. + */ + showScreen: function(screen) { + var screenId = screen.id; + + // Make sure the screen is decorated. + this.preloadScreen(screen); + + if (screen.data !== undefined && screen.data.disableAddUser) + DisplayManager.updateAddUserButtonStatus(true); + + + // Show sign-in screen instead of account picker if pod row is empty. + if (screenId == SCREEN_ACCOUNT_PICKER && $('pod-row').pods.length == 0) { + // Manually hide 'add-user' header bar, because of the case when + // 'Cancel' button is used on the offline login page. + $('add-user-header-bar-item').hidden = true; + Oobe.showSigninUI(true); + return; + } + + var data = screen.data; + var index = this.getScreenIndex_(screenId); + if (index >= 0) + this.toggleStep_(index, data); + }, + + /** + * Gets index of given screen id in screens_. + * @param {string} screenId Id of the screen to look up. + * @private + */ + getScreenIndex_: function(screenId) { + for (var i = 0; i < this.screens_.length; ++i) { + if (this.screens_[i] == screenId) + return i; + } + return -1; + }, + + /** + * Register an oobe screen. + * @param {Element} el Decorated screen element. + */ + registerScreen: function(el) { + var screenId = el.id; + this.screens_.push(screenId); + + var header = document.createElement('span'); + header.id = 'header-' + screenId; + header.textContent = el.header ? el.header : ''; + header.className = 'header-section'; + $('header-sections').appendChild(header); + + var dot = document.createElement('div'); + dot.id = screenId + '-dot'; + dot.className = 'progdot'; + var progressDots = $('progress-dots'); + if (progressDots) + progressDots.appendChild(dot); + + this.appendButtons_(el.buttons, screenId); + }, + + /** + * Updates inner container size based on the size of the current screen and + * other screens in the same group. + * Should be executed on screen change / screen size change. + * @param {!HTMLElement} screen Screen that is being shown. + */ + updateScreenSize: function(screen) { + // Have to reset any previously predefined screen size first + // so that screen contents would define it instead. + $('inner-container').style.height = ''; + $('inner-container').style.width = ''; + screen.style.width = ''; + screen.style.height = ''; + + $('outer-container').classList.toggle( + 'fullscreen', screen.classList.contains('fullscreen')); + + var width = screen.getPreferredSize().width; + var height = screen.getPreferredSize().height; + for (var i = 0, screenGroup; screenGroup = SCREEN_GROUPS[i]; i++) { + if (screenGroup.indexOf(screen.id) != -1) { + // Set screen dimensions to maximum dimensions within this group. + for (var j = 0, screen2; screen2 = $(screenGroup[j]); j++) { + width = Math.max(width, screen2.getPreferredSize().width); + height = Math.max(height, screen2.getPreferredSize().height); + } + break; + } + } + $('inner-container').style.height = height + 'px'; + $('inner-container').style.width = width + 'px'; + // This requires |screen| to have 'box-sizing: border-box'. + screen.style.width = width + 'px'; + screen.style.height = height + 'px'; + }, + + /** + * Updates localized content of the screens like headers, buttons and links. + * Should be executed on language change. + */ + updateLocalizedContent_: function() { + for (var i = 0, screenId; screenId = this.screens_[i]; ++i) { + var screen = $(screenId); + var buttonStrip = $(screenId + '-controls'); + if (buttonStrip) + buttonStrip.innerHTML = ''; + // TODO(nkostylev): Update screen headers for new OOBE design. + this.appendButtons_(screen.buttons, screenId); + if (screen.updateLocalizedContent) + screen.updateLocalizedContent(); + } + + var currentScreenId = this.screens_[this.currentStep_]; + var currentScreen = $(currentScreenId); + this.updateScreenSize(currentScreen); + + // Trigger network drop-down to reload its state + // so that strings are reloaded. + // Will be reloaded if drowdown is actually shown. + cr.ui.DropDown.refresh(); + }, + + /** + * Prepares screens to use in login display. + */ + prepareForLoginDisplay_: function() { + for (var i = 0, screenId; screenId = this.screens_[i]; ++i) { + var screen = $(screenId); + screen.classList.add('faded'); + screen.classList.remove('right'); + screen.classList.remove('left'); + } + }, + + /** + * Shows the device requisition prompt. + */ + showDeviceRequisitionPrompt_: function() { + if (!this.deviceRequisitionDialog_) { + this.deviceRequisitionDialog_ = + new cr.ui.dialogs.PromptDialog(document.body); + this.deviceRequisitionDialog_.setOkLabel( + loadTimeData.getString('deviceRequisitionPromptOk')); + this.deviceRequisitionDialog_.setCancelLabel( + loadTimeData.getString('deviceRequisitionPromptCancel')); + } + this.deviceRequisitionDialog_.show( + loadTimeData.getString('deviceRequisitionPromptText'), + this.deviceRequisition_, + this.onConfirmDeviceRequisitionPrompt_.bind(this)); + }, + + /** + * Confirmation handle for the device requisition prompt. + * @param {string} value The value entered by the user. + * @private + */ + onConfirmDeviceRequisitionPrompt_: function(value) { + this.deviceRequisition_ = value; + chrome.send('setDeviceRequisition', [value == '' ? 'none' : value]); + }, + + /** + * Called when window size changed. Notifies current screen about change. + * @private + */ + onWindowResize_: function() { + var currentScreenId = this.screens_[this.currentStep_]; + var currentScreen = $(currentScreenId); + if (currentScreen) + currentScreen.onWindowResize(); + }, + + /* + * Updates the device requisition string shown in the requisition prompt. + * @param {string} requisition The device requisition. + */ + updateDeviceRequisition: function(requisition) { + this.deviceRequisition_ = requisition; + }, + + /** + * Shows the special remora device requisition prompt. + * @private + */ + showDeviceRequisitionRemoraPrompt_: function() { + if (!this.deviceRequisitionRemoraDialog_) { + this.deviceRequisitionRemoraDialog_ = + new cr.ui.dialogs.ConfirmDialog(document.body); + this.deviceRequisitionRemoraDialog_.setOkLabel( + loadTimeData.getString('deviceRequisitionRemoraPromptOk')); + this.deviceRequisitionRemoraDialog_.setCancelLabel( + loadTimeData.getString('deviceRequisitionRemoraPromptCancel')); + } + this.deviceRequisitionRemoraDialog_.showWithTitle( + loadTimeData.getString('deviceRequisitionRemoraPromptTitle'), + loadTimeData.getString('deviceRequisitionRemoraPromptText'), + function() { // onShow + chrome.send('setDeviceRequisition', ['remora']); + }, + function() { // onCancel + chrome.send('setDeviceRequisition', ['none']); + }); + }, + + /** + * Returns true if Oobe UI is shown. + */ + isOobeUI: function() { + return document.body.classList.contains('oobe-display'); + }, + + /** + * Returns true if sign in UI should trigger wallpaper load on boot. + */ + shouldLoadWallpaperOnBoot: function() { + return loadTimeData.getString('bootIntoWallpaper') == 'on'; + }, + + /** + * Sets or unsets given |className| for top-level container. Useful for + * customizing #inner-container with CSS rules. All classes set with with + * this method will be removed after screen change. + * @param {string} className Class to toggle. + * @param {boolean} enabled Whether class should be enabled or disabled. + */ + toggleClass: function(className, enabled) { + $('oobe').classList.toggle(className, enabled); + } + }; + + /** + * Initializes display manager. + */ + DisplayManager.initialize = function() { + var givenDisplayType = DISPLAY_TYPE.UNKNOWN; + if (document.documentElement.hasAttribute('screen')) { + // Display type set in HTML property. + givenDisplayType = document.documentElement.getAttribute('screen'); + } else { + // Extracting display type from URL. + givenDisplayType = window.location.pathname.substr(1); + } + var instance = Oobe.getInstance(); + Object.getOwnPropertyNames(DISPLAY_TYPE).forEach(function(type) { + if (DISPLAY_TYPE[type] == givenDisplayType) { + instance.displayType = givenDisplayType; + } + }); + if (instance.displayType == DISPLAY_TYPE.UNKNOWN) { + console.error("Unknown display type '" + givenDisplayType + + "'. Setting default."); + instance.displayType = DISPLAY_TYPE.LOGIN; + } + + window.addEventListener('resize', instance.onWindowResize_.bind(instance)); + }; + + /** + * Returns offset (top, left) of the element. + * @param {!Element} element HTML element. + * @return {!Object} The offset (top, left). + */ + DisplayManager.getOffset = function(element) { + var x = 0; + var y = 0; + while (element && !isNaN(element.offsetLeft) && !isNaN(element.offsetTop)) { + x += element.offsetLeft - element.scrollLeft; + y += element.offsetTop - element.scrollTop; + element = element.offsetParent; + } + return { top: y, left: x }; + }; + + /** + * Returns position (top, left, right, bottom) of the element. + * @param {!Element} element HTML element. + * @return {!Object} Element position (top, left, right, bottom). + */ + DisplayManager.getPosition = function(element) { + var offset = DisplayManager.getOffset(element); + return { top: offset.top, + right: window.innerWidth - element.offsetWidth - offset.left, + bottom: window.innerHeight - element.offsetHeight - offset.top, + left: offset.left }; + }; + + /** + * Disables signin UI. + */ + DisplayManager.disableSigninUI = function() { + $('login-header-bar').disabled = true; + $('pod-row').disabled = true; + }; + + /** + * Shows signin UI. + * @param {string} opt_email An optional email for signin UI. + */ + DisplayManager.showSigninUI = function(opt_email) { + var currentScreenId = Oobe.getInstance().currentScreen.id; + if (currentScreenId == SCREEN_GAIA_SIGNIN) + $('login-header-bar').signinUIState = SIGNIN_UI_STATE.GAIA_SIGNIN; + else if (currentScreenId == SCREEN_ACCOUNT_PICKER) + $('login-header-bar').signinUIState = SIGNIN_UI_STATE.ACCOUNT_PICKER; + chrome.send('showAddUser', [opt_email]); + }; + + /** + * Resets sign-in input fields. + * @param {boolean} forceOnline Whether online sign-in should be forced. + * If |forceOnline| is false previously used sign-in type will be used. + */ + DisplayManager.resetSigninUI = function(forceOnline) { + var currentScreenId = Oobe.getInstance().currentScreen.id; + + $(SCREEN_GAIA_SIGNIN).reset( + currentScreenId == SCREEN_GAIA_SIGNIN, forceOnline); + $('login-header-bar').disabled = false; + $('pod-row').reset(currentScreenId == SCREEN_ACCOUNT_PICKER); + }; + + /** + * Shows sign-in error bubble. + * @param {number} loginAttempts Number of login attemps tried. + * @param {string} message Error message to show. + * @param {string} link Text to use for help link. + * @param {number} helpId Help topic Id associated with help link. + */ + DisplayManager.showSignInError = function(loginAttempts, message, link, + helpId) { + var error = document.createElement('div'); + + var messageDiv = document.createElement('div'); + messageDiv.className = 'error-message-bubble'; + messageDiv.textContent = message; + error.appendChild(messageDiv); + + if (link) { + messageDiv.classList.add('error-message-bubble-padding'); + + var helpLink = document.createElement('a'); + helpLink.href = '#'; + helpLink.textContent = link; + helpLink.addEventListener('click', function(e) { + chrome.send('launchHelpApp', [helpId]); + e.preventDefault(); + }); + error.appendChild(helpLink); + } + + var currentScreen = Oobe.getInstance().currentScreen; + if (currentScreen && typeof currentScreen.showErrorBubble === 'function') + currentScreen.showErrorBubble(loginAttempts, error); + }; + + /** + * Shows password changed screen that offers migration. + * @param {boolean} showError Whether to show the incorrect password error. + */ + DisplayManager.showPasswordChangedScreen = function(showError) { + login.PasswordChangedScreen.show(showError); + }; + + /** + * Shows dialog to create managed user. + */ + DisplayManager.showManagedUserCreationScreen = function() { + login.ManagedUserCreationScreen.show(); + }; + + /** + * Shows TPM error screen. + */ + DisplayManager.showTpmError = function() { + login.TPMErrorMessageScreen.show(); + }; + + /** + * Clears error bubble. + */ + DisplayManager.clearErrors = function() { + $('bubble').hide(); + }; + + /** + * Sets text content for a div with |labelId|. + * @param {string} labelId Id of the label div. + * @param {string} labelText Text for the label. + */ + DisplayManager.setLabelText = function(labelId, labelText) { + $(labelId).textContent = labelText; + }; + + /** + * Sets the text content of the enterprise info message. + * @param {string} messageText The message text. + */ + DisplayManager.setEnterpriseInfo = function(messageText) { + $('enterprise-info-message').textContent = messageText; + if (messageText) { + $('enterprise-info').hidden = false; + } + }; + + /** + * Disable Add users button if said. + * @param {boolean} disable true to disable + */ + DisplayManager.updateAddUserButtonStatus = function(disable) { + $('add-user-button').disabled = disable; + $('add-user-button').classList[ + disable ? 'add' : 'remove']('button-restricted'); + $('add-user-button').title = disable ? + loadTimeData.getString('disabledAddUserTooltip') : ''; + } + + /** + * Clears password field in user-pod. + */ + DisplayManager.clearUserPodPassword = function() { + $('pod-row').clearFocusedPod(); + }; + + /** + * Restores input focus to currently selected pod. + */ + DisplayManager.refocusCurrentPod = function() { + $('pod-row').refocusCurrentPod(); + }; + + // Export + return { + DisplayManager: DisplayManager + }; +}); diff --git a/chromium/chrome/browser/resources/chromeos/login/enterprise_info.css b/chromium/chrome/browser/resources/chromeos/login/enterprise_info.css new file mode 100644 index 00000000000..2b67520502a --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/enterprise_info.css @@ -0,0 +1,31 @@ +/* Copyright (c) 2012 The Chromium Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * This is the stylesheet used for notifications in enterprise-enrolled devices. + */ + +#enterprise-info { + background-color: rgb(250, 245, 202); + border: 2px solid rgb(250, 245, 202); + border-radius: 2px; + margin-left: auto; + margin-right: auto; + padding: 3px 8px 7px; +} + +#enterprise-info[location='guest-tab'] { + margin-bottom: -49px; + max-width: 600px; +} + +#enterprise-info[visible='false'] { + display: none; +} + +#enterprise-info img { + -webkit-margin-end: 4px; + position: relative; + top: 3px; +} + diff --git a/chromium/chrome/browser/resources/chromeos/login/enterprise_info.html b/chromium/chrome/browser/resources/chromeos/login/enterprise_info.html new file mode 100644 index 00000000000..6727e3c00a8 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/enterprise_info.html @@ -0,0 +1,6 @@ +<div id="enterprise-info" hidden> + <img src="chrome://theme/IDR_CONTROLLED_SETTING_MANDATORY"/> + <span id="enterprise-info-message"></span> + <a id="enterprise-info-hint-link" href="#" i18n-content="learnMore"></a> +</div> + diff --git a/chromium/chrome/browser/resources/chromeos/login/header_bar.css b/chromium/chrome/browser/resources/chromeos/login/header_bar.css new file mode 100644 index 00000000000..30f6d5112fd --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/header_bar.css @@ -0,0 +1,109 @@ +/* Copyright (c) 2012 The Chromium Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#login-header-bar { + -webkit-padding-after: 7px; + border-bottom: 3px solid black; + bottom: 0; + left: 0; + position: absolute; + right: 0; +} + +#login-header-bar { + -webkit-padding-before: 7px; + /* Using copy of Ash launcher background with 0.8 opacity applied to it. + Otherwise if opacity: 0.8 is set here it will affect button text as well. + Have to position background differently so that opacity is not applied + to child elements. */ + background-image: url('chrome://theme/IDR_LAUNCHER_BACKGROUND'); +} + +html[screen=lock] .login-header-bar-hidden { + opacity: 0; +} +html[screen=lock] .login-header-bar-animate-fast { + -webkit-transition: opacity 200ms ease-out; +} + +html[screen=lock] .login-header-bar-animate-slow { + -webkit-transition: opacity 2s ease-out; +} + +.header-bar-item:first-child { + -webkit-padding-start: 15px; +} + +#login-header-bar button, +#login-header-bar button:active, +#login-header-bar button:focus, +#login-header-bar button:hover { + -webkit-box-shadow: none; + background: transparent none; + cursor: pointer; + height: 34px; + margin: 0; + min-width: 0; + opacity: 0.6; + padding: 5px 8px; + vertical-align: middle; +} + +#login-header-bar button:not(.button-restricted), +#login-header-bar button:active:not(.button-restricted), +#login-header-bar button:focus:not(.button-restricted), +#login-header-bar button:hover:not(.button-restricted) { + color: white !important; + opacity: 1 !important; +} + +.header-bar-item { + display: inline-block; + height: 34px; +} + +html[dir=rtl] .header-bar-item { + background-position: right center; +} + +#login-header-bar #shutdown-button, +#login-header-bar #add-user-button, +#login-header-bar #guest-user-button, +#login-header-bar #cancel-multiple-sign-in-button { + -webkit-padding-start: 24px; + background-position: left center; + background-repeat: no-repeat; + background-size: 24px; +} + +html[dir=rtl] #login-header-bar #shutdown-button, +html[dir=rtl] #login-header-bar #add-user-button, +html[dir=rtl] #login-header-bar #guest-user-button, +html[dir=rtl] #login-header-bar #cancel-multiple-sign-in-button { + background-position: right center; +} + +#login-header-bar #shutdown-button { + background-image: url('chrome://theme/IDR_ICON_POWER_WHITE'); +} + +#login-header-bar #add-user-button { + background-image: url('chrome://theme/IDR_ICON_ADD_USER_WHITE'); +} + +#login-header-bar #guest-user-button { + background-image: url('chrome://theme/IDR_ICON_GUEST_WHITE'); +} + +#login-header-bar #cancel-multiple-sign-in-button { + /* TODO(dzhioev): replace with appropriate image when possible. */ + background-image: url('chrome://theme/IDR_PANEL_CLOSE'); +} + +.button-restricted { + border: 1px solid transparent; + color: white !important; + opacity: 0.4 !important; +} diff --git a/chromium/chrome/browser/resources/chromeos/login/header_bar.html b/chromium/chrome/browser/resources/chromeos/login/header_bar.html new file mode 100644 index 00000000000..ec17b1a89a8 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/header_bar.html @@ -0,0 +1,29 @@ +<div id="login-header-bar" hidden class="login-header-bar-hidden"> + <div id="shutdown-header-bar-item" class="header-bar-item"> + <button id="shutdown-button" class="custom-appearance" + i18n-content="shutDown"></button> + </div> + <div id="apps-header-bar-item" class="header-bar-item" hidden> + <button id="show-apps-button" class="custom-appearance" + i18n-content="showApps"></button> + </div> + <div id="add-user-header-bar-item" class="header-bar-item" hidden> + <button id="add-user-button" class="custom-appearance" + i18n-content="addUser"></button> + <button id="cancel-add-user-button" class="custom-appearance" + i18n-content="cancel" hidden></button> + </div> + <div id="guest-user-header-bar-item" class="header-bar-item" hidden> + <button id="guest-user-button" class="custom-appearance" + i18n-content="browseAsGuest"></button> + </div> + <div id="sign-out-user-item" class="header-bar-item" hidden> + <button id="sign-out-user-button" class="custom-appearance" + i18n-content="signOutUser"></button> + </div> + <div id="cancel-multiple-sign-in-item" class="header-bar-item" hidden> + <button id="cancel-multiple-sign-in-button" class="custom-appearance" + i18n-content="cancel"></button> + </button> + </div> +</div> diff --git a/chromium/chrome/browser/resources/chromeos/login/header_bar.js b/chromium/chrome/browser/resources/chromeos/login/header_bar.js new file mode 100644 index 00000000000..06e7434da36 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/header_bar.js @@ -0,0 +1,260 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** + * @fileoverview Login UI header bar implementation. + */ + +cr.define('login', function() { + /** + * Creates a header bar element. + * @constructor + * @extends {HTMLDivElement} + */ + var HeaderBar = cr.ui.define('div'); + + HeaderBar.prototype = { + __proto__: HTMLDivElement.prototype, + + // Whether guest button should be shown when header bar is in normal mode. + showGuest_: false, + + // Current UI state of the sign-in screen. + signinUIState_: SIGNIN_UI_STATE.HIDDEN, + + // Whether to show kiosk apps menu. + hasApps_: false, + + /** @override */ + decorate: function() { + $('shutdown-header-bar-item').addEventListener('click', + this.handleShutdownClick_); + $('shutdown-button').addEventListener('click', + this.handleShutdownClick_); + $('add-user-button').addEventListener('click', + this.handleAddUserClick_); + $('cancel-add-user-button').addEventListener('click', + this.handleCancelAddUserClick_); + $('guest-user-header-bar-item').addEventListener('click', + this.handleGuestClick_); + $('guest-user-button').addEventListener('click', + this.handleGuestClick_); + $('sign-out-user-button').addEventListener('click', + this.handleSignoutClick_); + $('cancel-multiple-sign-in-button').addEventListener('click', + this.handleCancelMultipleSignInClick_); + if (Oobe.getInstance().displayType == DISPLAY_TYPE.LOGIN || + Oobe.getInstance().displayType == DISPLAY_TYPE.OOBE) + login.AppsMenuButton.decorate($('show-apps-button')); + }, + + /** + * Tab index value for all button elements. + * @type {number} + */ + set buttonsTabIndex(tabIndex) { + var buttons = this.getElementsByTagName('button'); + for (var i = 0, button; button = buttons[i]; ++i) { + button.tabIndex = tabIndex; + } + }, + + /** + * Disables the header bar and all of its elements. + * @type {boolean} + */ + set disabled(value) { + var buttons = this.getElementsByTagName('button'); + for (var i = 0, button; button = buttons[i]; ++i) + if (!button.classList.contains('button-restricted')) + button.disabled = value; + }, + + /** + * Add user button click handler. + * @private + */ + handleAddUserClick_: function(e) { + Oobe.showSigninUI(); + // Prevent further propagation of click event. Otherwise, the click event + // handler of document object will set wallpaper to user's wallpaper when + // there is only one existing user. See http://crbug.com/166477 + e.stopPropagation(); + }, + + /** + * Cancel add user button click handler. + * @private + */ + handleCancelAddUserClick_: function(e) { + // Let screen handle cancel itself if that is capable of doing so. + if (Oobe.getInstance().currentScreen && + Oobe.getInstance().currentScreen.cancel) { + Oobe.getInstance().currentScreen.cancel(); + return; + } + + $('pod-row').loadLastWallpaper(); + + Oobe.showScreen({id: SCREEN_ACCOUNT_PICKER}); + Oobe.resetSigninUI(true); + }, + + /** + * Guest button click handler. + * @private + */ + handleGuestClick_: function(e) { + Oobe.disableSigninUI(); + chrome.send('launchIncognito'); + e.stopPropagation(); + }, + + /** + * Sign out button click handler. + * @private + */ + handleSignoutClick_: function(e) { + this.disabled = true; + chrome.send('signOutUser'); + e.stopPropagation(); + }, + + /** + * Shutdown button click handler. + * @private + */ + handleShutdownClick_: function(e) { + chrome.send('shutdownSystem'); + e.stopPropagation(); + }, + + /** + * Cancel user adding button handler. + * @private + */ + handleCancelMultipleSignInClick_: function(e) { + chrome.send('cancelUserAdding'); + e.stopPropagation(); + }, + + /** + * If true then "Browse as Guest" button is shown. + * @type {boolean} + */ + set showGuestButton(value) { + this.showGuest_ = value; + this.updateUI_(); + }, + + /** + * Update current header bar UI. + * @type {number} state Current state of the sign-in screen + * (see SIGNIN_UI_STATE). + */ + set signinUIState(state) { + this.signinUIState_ = state; + this.updateUI_(); + }, + + /** + * Whether the Cancel button is enabled during Gaia sign-in. + * @type {boolean} + */ + set allowCancel(value) { + this.allowCancel_ = value; + this.updateUI_(); + }, + + /** + * Update whether there are kiosk apps. + * @type {boolean} + */ + set hasApps(value) { + this.hasApps_ = value; + this.updateUI_(); + }, + + /** + * Updates visibility state of action buttons. + * @private + */ + updateUI_: function() { + var gaiaIsActive = (this.signinUIState_ == SIGNIN_UI_STATE.GAIA_SIGNIN); + var accountPickerIsActive = + (this.signinUIState_ == SIGNIN_UI_STATE.ACCOUNT_PICKER); + var managedUserCreationDialogIsActive = + (this.signinUIState_ == SIGNIN_UI_STATE.MANAGED_USER_CREATION_FLOW); + var wrongHWIDWarningIsActive = + (this.signinUIState_ == SIGNIN_UI_STATE.WRONG_HWID_WARNING); + var isMultiProfilesUI = + (Oobe.getInstance().displayType == DISPLAY_TYPE.USER_ADDING); + + $('add-user-button').hidden = !accountPickerIsActive || isMultiProfilesUI; + $('cancel-add-user-button').hidden = accountPickerIsActive || + !this.allowCancel_ || + wrongHWIDWarningIsActive || + isMultiProfilesUI; + $('guest-user-header-bar-item').hidden = gaiaIsActive || + managedUserCreationDialogIsActive || + !this.showGuest_ || + wrongHWIDWarningIsActive || + isMultiProfilesUI; + $('add-user-header-bar-item').hidden = + $('add-user-button').hidden && $('cancel-add-user-button').hidden; + $('apps-header-bar-item').hidden = !this.hasApps_ || + (!gaiaIsActive && !accountPickerIsActive); + $('cancel-multiple-sign-in-item').hidden = !isMultiProfilesUI; + + if (!$('apps-header-bar-item').hidden) + $('show-apps-button').didShow(); + }, + + /** + * Animates Header bar to hide from the screen. + * @param {function()} callback will be called once animation is finished. + */ + animateOut: function(callback) { + var launcher = this; + launcher.addEventListener( + 'webkitTransitionEnd', function f(e) { + launcher.removeEventListener('webkitTransitionEnd', f); + callback(); + }); + // Guard timer for 2 seconds + 200 ms + epsilon. + ensureTransitionEndEvent(launcher, 2250); + + this.classList.remove('login-header-bar-animate-slow'); + this.classList.add('login-header-bar-animate-fast'); + this.classList.add('login-header-bar-hidden'); + }, + + /** + * Animates Header bar to slowly appear on the screen. + */ + animateIn: function() { + this.classList.remove('login-header-bar-animate-fast'); + this.classList.add('login-header-bar-animate-slow'); + this.classList.remove('login-header-bar-hidden'); + }, + }; + + /** + * Convenience wrapper of animateOut. + */ + HeaderBar.animateOut = function(callback) { + $('login-header-bar').animateOut(callback); + }; + + /** + * Convenience wrapper of animateIn. + */ + HeaderBar.animateIn = function() { + $('login-header-bar').animateIn(); + } + + return { + HeaderBar: HeaderBar + }; +}); diff --git a/chromium/chrome/browser/resources/chromeos/login/images/chrome_retail_login.png b/chromium/chrome/browser/resources/chromeos/login/images/chrome_retail_login.png Binary files differnew file mode 100644 index 00000000000..9799d38acbd --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/images/chrome_retail_login.png diff --git a/chromium/chrome/browser/resources/chromeos/login/login.html b/chromium/chrome/browser/resources/chromeos/login/login.html new file mode 100644 index 00000000000..52e2c10c497 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/login.html @@ -0,0 +1,14 @@ +<!DOCTYPE html> +<html i18n-values="dir:textdirection;build:buildType"> +<head> +<meta charset="utf-8"> +<meta name="google" value="notranslate"> +<title i18n-content="title"></title> +<include src="login_resources.html"> +<script src="chrome://oobe/login.js"></script> +</head> +<body i18n-values=".style.fontFamily:fontfamily;"> + <include src="screen_container.html"> + <script src="chrome://resources/js/i18n_template2.js"></script> +</body> +</html> diff --git a/chromium/chrome/browser/resources/chromeos/login/login.js b/chromium/chrome/browser/resources/chromeos/login/login.js new file mode 100644 index 00000000000..03687ed662d --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/login.js @@ -0,0 +1,53 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** + * @fileoverview Login UI based on a stripped down OOBE controller. + */ + +<include src="login_common.js"></include> + +cr.define('cr.ui.Oobe', function() { + return { + /** + * Initializes the OOBE flow. This will cause all C++ handlers to + * be invoked to do final setup. + */ + initialize: function() { + cr.ui.login.DisplayManager.initialize(); + login.WrongHWIDScreen.register(); + login.AccountPickerScreen.register(); + login.GaiaSigninScreen.register(); + login.UserImageScreen.register(/* lazyInit= */ true); + login.ResetScreen.register(); + login.AutolaunchScreen.register(); + login.KioskEnableScreen.register(); + login.ErrorMessageScreen.register(); + login.TPMErrorMessageScreen.register(); + login.PasswordChangedScreen.register(); + login.LocallyManagedUserCreationScreen.register(); + login.TermsOfServiceScreen.register(); + login.AppLaunchSplashScreen.register(); + login.ConfirmPasswordScreen.register(); + login.MessageBoxScreen.register(); + + cr.ui.Bubble.decorate($('bubble')); + login.HeaderBar.decorate($('login-header-bar')); + + chrome.send('screenStateInitialize'); + }, + + // Dummy Oobe functions not present with stripped login UI. + initializeA11yMenu: function(e) {}, + handleAccessbilityLinkClick: function(e) {}, + handleSpokenFeedbackClick: function(e) {}, + handleHighContrastClick: function(e) {}, + handleScreenMagnifierClick: function(e) {}, + setUsageStats: function(checked) {}, + setOemEulaUrl: function(oemEulaUrl) {}, + setTpmPassword: function(password) {}, + refreshA11yInfo: function(data) {}, + reloadContent: function(data) {}, + }; +}); diff --git a/chromium/chrome/browser/resources/chromeos/login/login_common.js b/chromium/chrome/browser/resources/chromeos/login/login_common.js new file mode 100644 index 00000000000..1a8bbac88d1 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/login_common.js @@ -0,0 +1,302 @@ +// Copyright 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** + * @fileoverview Common OOBE controller methods. + */ + +<include src="screen.js"></include> +<include src="../user_images_grid.js"></include> +<include src="apps_menu.js"></include> +<include src="bubble.js"></include> +<include src="display_manager.js"></include> +<include src="header_bar.js"></include> +<include src="network_dropdown.js"></include> +<include src="oobe_screen_reset.js"></include> +<include src="oobe_screen_autolaunch.js"></include> +<include src="oobe_screen_enable_kiosk.js"></include> +<include src="oobe_screen_terms_of_service.js"></include> +<include src="oobe_screen_user_image.js"></include> +<include src="screen_account_picker.js"></include> +<include src="screen_app_launch_splash.js"></include> +<include src="screen_error_message.js"></include> +<include src="screen_gaia_signin.js"></include> +<include src="screen_locally_managed_user_creation.js"></include> +<include src="screen_password_changed.js"></include> +<include src="screen_tpm_error.js"></include> +<include src="screen_wrong_hwid.js"></include> +<include src="screen_confirm_password.js"></include> +<include src="screen_message_box.js"></include> +<include src="user_pod_row.js"></include> +<include src="resource_loader.js"></include> + +cr.define('cr.ui', function() { + var DisplayManager = cr.ui.login.DisplayManager; + + /** + * Constructs an Out of box controller. It manages initialization of screens, + * transitions, error messages display. + * @extends {DisplayManager} + * @constructor + */ + function Oobe() { + } + + cr.addSingletonGetter(Oobe); + + Oobe.prototype = { + __proto__: DisplayManager.prototype, + }; + + /** + * Handle accelerators. These are passed from native code instead of a JS + * event handler in order to make sure that embedded iframes cannot swallow + * them. + * @param {string} name Accelerator name. + */ + Oobe.handleAccelerator = function(name) { + Oobe.getInstance().handleAccelerator(name); + }; + + /** + * Shows the given screen. + * @param {Object} screen Screen params dict, e.g. {id: screenId, data: data} + */ + Oobe.showScreen = function(screen) { + Oobe.getInstance().showScreen(screen); + }; + + /** + * Updates version label visibilty. + * @param {boolean} show True if version label should be visible. + */ + Oobe.showVersion = function(show) { + Oobe.getInstance().showVersion(show); + }; + + /** + * Update body class to switch between OOBE UI and Login UI. + */ + Oobe.showOobeUI = function(showOobe) { + if (showOobe) { + document.body.classList.add('oobe-display'); + } else { + document.body.classList.remove('oobe-display'); + Oobe.getInstance().prepareForLoginDisplay_(); + } + + // Don't show header bar for OOBE. + Oobe.getInstance().headerHidden = showOobe; + }; + + /** + * Enables keyboard driven flow. + */ + Oobe.enableKeyboardFlow = function(value) { + // Don't show header bar for OOBE. + Oobe.getInstance().forceKeyboardFlow = value; + }; + + /** + * Disables signin UI. + */ + Oobe.disableSigninUI = function() { + DisplayManager.disableSigninUI(); + }; + + /** + * Shows signin UI. + * @param {string} opt_email An optional email for signin UI. + */ + Oobe.showSigninUI = function(opt_email) { + DisplayManager.showSigninUI(opt_email); + }; + + /** + * Resets sign-in input fields. + * @param {boolean} forceOnline Whether online sign-in should be forced. + * If |forceOnline| is false previously used sign-in type will be used. + */ + Oobe.resetSigninUI = function(forceOnline) { + DisplayManager.resetSigninUI(forceOnline); + }; + + /** + * Shows sign-in error bubble. + * @param {number} loginAttempts Number of login attemps tried. + * @param {string} message Error message to show. + * @param {string} link Text to use for help link. + * @param {number} helpId Help topic Id associated with help link. + */ + Oobe.showSignInError = function(loginAttempts, message, link, helpId) { + DisplayManager.showSignInError(loginAttempts, message, link, helpId); + }; + + /** + * Shows password changed screen that offers migration. + * @param {boolean} showError Whether to show the incorrect password error. + */ + Oobe.showPasswordChangedScreen = function(showError) { + DisplayManager.showPasswordChangedScreen(showError); + }; + + /** + * Shows dialog to create managed user. + */ + Oobe.showManagedUserCreationScreen = function() { + DisplayManager.showManagedUserCreationScreen(); + }; + + /** + * Shows TPM error screen. + */ + Oobe.showTpmError = function() { + DisplayManager.showTpmError(); + }; + + /** + * Clears error bubble as well as optional menus that could be open. + */ + Oobe.clearErrors = function() { + var accessibilityMenu = $('accessibility-menu'); + if (accessibilityMenu) + accessibilityMenu.hide(); + DisplayManager.clearErrors(); + }; + + /** + * Displays animations on successful authentication, that have to happen + * before login UI is dismissed. + */ + Oobe.animateAuthenticationSuccess = function() { + login.HeaderBar.animateOut(function() { + chrome.send('unlockOnLoginSuccess'); + }); + }; + + /** + * Displays animations that have to happen once login UI is fully displayed. + */ + Oobe.animateOnceFullyDisplayed = function() { + login.HeaderBar.animateIn(); + }; + + /** + * Handles login success notification. + */ + Oobe.onLoginSuccess = function(username) { + if (Oobe.getInstance().currentScreen.id == SCREEN_ACCOUNT_PICKER) { + // TODO(nkostylev): Enable animation back when session start jank + // is reduced. See http://crosbug.com/11116 http://crosbug.com/18307 + // $('pod-row').startAuthenticatedAnimation(); + } + }; + + /** + * Sets text content for a div with |labelId|. + * @param {string} labelId Id of the label div. + * @param {string} labelText Text for the label. + */ + Oobe.setLabelText = function(labelId, labelText) { + DisplayManager.setLabelText(labelId, labelText); + }; + + /** + * Sets the text content of the enterprise info message. + * If the text is empty, the entire notification will be hidden. + * @param {string} messageText The message text. + */ + Oobe.setEnterpriseInfo = function(messageText) { + DisplayManager.setEnterpriseInfo(messageText); + }; + + /** + * Updates the device requisition string shown in the requisition prompt. + * @param {string} requisition The device requisition. + */ + Oobe.updateDeviceRequisition = function(requisition) { + Oobe.getInstance().updateDeviceRequisition(requisition); + }; + + /** + * Enforces focus on user pod of locked user. + */ + Oobe.forceLockedUserPodFocus = function() { + login.AccountPickerScreen.forceLockedUserPodFocus(); + }; + + /** + * Clears password field in user-pod. + */ + Oobe.clearUserPodPassword = function() { + DisplayManager.clearUserPodPassword(); + }; + + /** + * Restores input focus to currently selected pod. + */ + Oobe.refocusCurrentPod = function() { + DisplayManager.refocusCurrentPod(); + }; + + /** + * Login for autotests. + * @param {string} username Login username. + * @param {string} password Login password. + */ + Oobe.loginForTesting = function(username, password) { + chrome.send('skipToLoginForTesting', [username]); + chrome.send('completeLogin', [username, password]); + }; + + /** + * Authenticate for autotests. + * @param {string} username Login username. + * @param {string} password Login password. + */ + Oobe.authenticateForTesting = function(username, password) { + chrome.send('authenticateUser', [username, password]); + }; + + // Export + return { + Oobe: Oobe + }; +}); + +var Oobe = cr.ui.Oobe; + +// Allow selection events on components with editable text (password field) +// bug (http://code.google.com/p/chromium/issues/detail?id=125863) +disableTextSelectAndDrag(function(e) { + var src = e.target; + return src instanceof HTMLTextAreaElement || + src instanceof HTMLInputElement && + /text|password|search/.test(src.type); +}); + +// Register assets for async loading. +[{ + id: SCREEN_OOBE_ENROLLMENT, + html: [{ url: 'chrome://oobe/enrollment.html', targetID: 'inner-container' }], + css: ['chrome://oobe/enrollment.css'], + js: ['chrome://oobe/enrollment.js'] +}].forEach(cr.ui.login.ResourceLoader.registerAssets); + +document.addEventListener('DOMContentLoaded', function() { + 'use strict'; + + // Immediately load async assets. + // TODO(dconnelly): remove this at some point and only load as needed. + // See crbug.com/236426 + cr.ui.login.ResourceLoader.loadAssets(SCREEN_OOBE_ENROLLMENT, function() { + // This screen is async-loaded so we manually trigger i18n processing. + i18nTemplate.process($('oauth-enrollment'), loadTimeData); + // Delayed binding since this isn't defined yet. + login.OAuthEnrollmentScreen.register(); + }); + + // Delayed binding since this isn't defined yet. + cr.ui.Oobe.initialize(); +}); diff --git a/chromium/chrome/browser/resources/chromeos/login/login_resources.html b/chromium/chrome/browser/resources/chromeos/login/login_resources.html new file mode 100644 index 00000000000..340f6f34f36 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/login_resources.html @@ -0,0 +1,55 @@ +<link rel="stylesheet" href="chrome://resources/css/butter_bar.css"> +<link rel="stylesheet" href="chrome://resources/css/dialogs.css"> +<link rel="stylesheet" href="chrome://resources/css/list.css"> +<link rel="stylesheet" href="chrome://resources/css/menu_button.css"> +<link rel="stylesheet" href="chrome://resources/css/menu.css"> +<link rel="stylesheet" href="chrome://resources/css/spinner.css"> +<link rel="stylesheet" href="chrome://resources/css/widgets.css"> +<link rel="stylesheet" href="apps_menu.css"> +<link rel="stylesheet" href="bubble.css"> +<link rel="stylesheet" href="enterprise_info.css"> +<link rel="stylesheet" href="header_bar.css"> +<link rel="stylesheet" href="network_dropdown.css"> +<link rel="stylesheet" href="oobe.css"> +<link rel="stylesheet" href="oobe_screen.css"> +<link rel="stylesheet" href="oobe_screen_eula.css"> +<link rel="stylesheet" href="oobe_screen_network.css"> +<link rel="stylesheet" href="oobe_screen_reset.css"> +<link rel="stylesheet" href="oobe_screen_autolaunch.css"> +<link rel="stylesheet" href="oobe_screen_enable_kiosk.css"> +<link rel="stylesheet" href="oobe_screen_terms_of_service.css"> +<link rel="stylesheet" href="oobe_screen_update.css"> +<link rel="stylesheet" href="oobe_screen_user_image.css"> +<link rel="stylesheet" href="screen_app_launch_splash.css"> +<link rel="stylesheet" href="screen_container.css"> +<link rel="stylesheet" href="screen_account_picker.css"> +<link rel="stylesheet" href="screen_gaia_signin.css"> +<link rel="stylesheet" href="screen_error_message.css"> +<link rel="stylesheet" href="screen_tpm_error.css"> +<link rel="stylesheet" href="screen_password_changed.css"> +<link rel="stylesheet" href="screen_wrong_hwid.css"> +<link rel="stylesheet" href="screen_locally_managed_user_creation.css"> +<link rel="stylesheet" href="screen_confirm_password.css"> +<link rel="stylesheet" href="screen_message_box.css"> +<link rel="stylesheet" href="user_pod_row.css"> +<script src="chrome://resources/js/cr.js"></script> +<script src="chrome://resources/js/event_tracker.js"></script> +<script src="chrome://resources/js/cr/event_target.js"></script> +<script src="chrome://resources/js/cr/ui.js"></script> +<script src="chrome://resources/js/cr/ui/touch_handler.js"></script> +<script src="chrome://resources/js/cr/ui/array_data_model.js"></script> +<script src="chrome://resources/js/cr/ui/dialogs.js"></script> +<script src="chrome://resources/js/cr/ui/list_selection_controller.js"></script> +<script src="chrome://resources/js/cr/ui/list_selection_model.js"></script> +<script src="chrome://resources/js/cr/ui/list_single_selection_model.js"></script> +<script src="chrome://resources/js/cr/ui/list_item.js"></script> +<script src="chrome://resources/js/cr/ui/list.js"></script> +<script src="chrome://resources/js/cr/ui/grid.js"></script> +<script src="chrome://resources/js/cr/ui/position_util.js"></script> +<script src="chrome://resources/js/cr/ui/menu_item.js"></script> +<script src="chrome://resources/js/cr/ui/menu.js"></script> +<script src="chrome://resources/js/cr/ui/menu_button.js"></script> +<script src="chrome://resources/js/load_time_data.js"></script> +<script src="chrome://resources/js/util.js"></script> +<script src="chrome://oobe/strings.js"></script> +<script src="chrome://oobe/keyboard_utils.js"></script> diff --git a/chromium/chrome/browser/resources/chromeos/login/login_screens.html b/chromium/chrome/browser/resources/chromeos/login/login_screens.html new file mode 100644 index 00000000000..8c441d48dc8 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/login_screens.html @@ -0,0 +1,15 @@ +<include src="oobe_screen_reset.html"> +<include src="oobe_screen_autolaunch.html"> +<include src="oobe_screen_enable_kiosk.html"> +<include src="oobe_screen_terms_of_service.html"> +<include src="oobe_screen_user_image.html"> +<include src="screen_account_picker.html"> +<include src="screen_error_message.html"> +<include src="screen_gaia_signin.html"> +<include src="screen_locally_managed_user_creation.html"> +<include src="screen_password_changed.html"> +<include src="screen_tpm_error.html"> +<include src="screen_wrong_hwid.html"> +<include src="screen_app_launch_splash.html"> +<include src="screen_confirm_password.html"> +<include src="screen_message_box.html"> diff --git a/chromium/chrome/browser/resources/chromeos/login/network_dropdown.css b/chromium/chrome/browser/resources/chromeos/login/network_dropdown.css new file mode 100644 index 00000000000..33f0a1b1310 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/network_dropdown.css @@ -0,0 +1,146 @@ +/* Copyright (c) 2012 The Chromium Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * This is the stylesheet used by the network drop-down control. + */ + +.dropdown-title { + -webkit-appearance: none; + -webkit-box-align: start; + -webkit-padding-end: 20px; + -webkit-padding-start: 1px; + -webkit-user-select: none; + background-image: url('../../../../../ui/webui/resources/images/select.png'), + -webkit-gradient(linear, left top, left bottom, + color-stop(0, rgb(237, 237, 237)), + color-stop(0.38, rgb(237, 237, 237)), + color-stop(1, rgb(222, 222, 222))); + background-position: center right; + background-repeat: no-repeat; + border: 1px solid rgba(0, 0, 0, 0.25); + border-radius: 2px; + box-shadow: 0 1px 0 rgba(0, 0, 0, 0.08), + inset 0 1px 2px rgba(255, 255, 255, 0.75); + color: #444; + display: -webkit-box; + font-size: inherit; + height: 22px; + margin: 0; + overflow: hidden; + padding-bottom: 2px; + padding-top: 2px; + text-align: left; + text-indent: 4px; + text-overflow: ellipsis; + text-shadow: 0 1px 0 rgb(240, 240, 240); + white-space: nowrap; + z-index: 10; +} + +html[dir=rtl] .dropdown-title { + background-position: center left; +} + +.dropdown-title:enabled:hover { + background-image: url('../../../../../ui/webui/resources/images/select.png'), + -webkit-gradient(linear, left top, left bottom, + color-stop(0, rgb(237, 237, 237)), + color-stop(0.38, rgb(237, 237, 237)), + color-stop(1, rgb(222, 222, 222))); + border-color: rgba(0, 0, 0, 0.3); + box-shadow: 0 1px 0 rgba(0, 0, 0, 0.12), + inset 0 1px 2px rgba(255, 255, 255, 0.95); + color: black; +} + +.dropdown-title:enabled:active { + background-image: url('../../../../../ui/webui/resources/images/select.png'), + -webkit-gradient(linear, left top, left bottom, + color-stop(0, rgb(231, 231, 231)), + color-stop(0.38, rgb(231, 231, 231)), + color-stop(1, rgb(215, 215, 215))); + box-shadow: none; + text-shadow: none; +} + +.dropdown-title:focus { + -webkit-transition: border-color 200ms; + border-color: rgb(77, 144, 254); + outline: none; +} + +html[highlight=strong] .dropdown-title:focus { + box-shadow: 0 0 23px rgb(77, 144, 254); +} + +.dropdown-title img { + margin-top: -1px; +} + +.dropdown-title div { + -webkit-box-flex: 1; + margin-top: 1px; + overflow: hidden; + text-overflow: ellipsis; +} + +.dropdown-container { + background: #f7f7f7; + border: 1px solid rgb(124, 145, 191); + max-height: 234px; + overflow-x: hidden; + overflow-y: auto; + padding-bottom: 2px; + padding-top: 2px; + position: absolute; + top: 100%; + width: 99.5%; + z-index: 10; +} + +.dropdown-item-container { + -webkit-padding-start: 5px; + display: -webkit-box; + height: 24px; +} + +.dropdown-item-container.hover { + background: rgb(220, 228, 250); +} + +.dropdown-image { + width: 25px; +} + +.dropdown-item { + -webkit-box-flex: 1; + color: #555; + cursor: default; + overflow: hidden; + padding-top: 4px; + text-overflow: ellipsis; + white-space: nowrap; +} + +.dropdown-divider { + height: 3px; +} + +.dropdown-divider hr { + -webkit-margin-after: 2px; + -webkit-margin-before: 2px; +} + +.dropdown-item.disabled-item { + color: graytext; +} + +.dropdown-overlay { + bottom: 0; + left: 0; + position: fixed; + right: 0; + top: 0; + z-index: 5; +} diff --git a/chromium/chrome/browser/resources/chromeos/login/network_dropdown.js b/chromium/chrome/browser/resources/chromeos/login/network_dropdown.js new file mode 100644 index 00000000000..3a5a3f5fe79 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/network_dropdown.js @@ -0,0 +1,438 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** + * @fileoverview Network drop-down implementation. + */ + +cr.define('cr.ui', function() { + /** + * Whether keyboard flow is in use. When setting to true, up/down arrow key + * will be used to move focus instead of opening the drop down. + */ + var useKeyboardFlow = false; + + /** + * Creates a new container for the drop down menu items. + * @constructor + * @extends {HTMLDivElement} + */ + var DropDownContainer = cr.ui.define('div'); + + DropDownContainer.prototype = { + __proto__: HTMLDivElement.prototype, + + /** @override */ + decorate: function() { + this.classList.add('dropdown-container'); + // Selected item in the menu list. + this.selectedItem = null; + // First item which could be selected. + this.firstItem = null; + this.setAttribute('role', 'menu'); + // Whether scroll has just happened. + this.scrollJustHappened = false; + }, + + /** + * Gets scroll action to be done for the item. + * @param {!Object} item Menu item. + * @return {integer} -1 for scroll up; 0 for no action; 1 for scroll down. + */ + scrollAction: function(item) { + var thisTop = this.scrollTop; + var thisBottom = thisTop + this.offsetHeight; + var itemTop = item.offsetTop; + var itemBottom = itemTop + item.offsetHeight; + if (itemTop <= thisTop) return -1; + if (itemBottom >= thisBottom) return 1; + return 0; + }, + + /** + * Selects new item. + * @param {!Object} selectedItem Item to be selected. + * @param {boolean} mouseOver Is mouseover event triggered? + */ + selectItem: function(selectedItem, mouseOver) { + if (mouseOver && this.scrollJustHappened) { + this.scrollJustHappened = false; + return; + } + if (this.selectedItem) + this.selectedItem.classList.remove('hover'); + selectedItem.classList.add('hover'); + this.selectedItem = selectedItem; + if (!this.hidden) { + this.previousSibling.setAttribute( + 'aria-activedescendant', selectedItem.id); + } + var action = this.scrollAction(selectedItem); + if (action != 0) { + selectedItem.scrollIntoView(action < 0); + this.scrollJustHappened = true; + } + } + }; + + /** + * Creates a new DropDown div. + * @constructor + * @extends {HTMLDivElement} + */ + var DropDown = cr.ui.define('div'); + + DropDown.ITEM_DIVIDER_ID = -2; + + DropDown.KEYCODE_DOWN = 40; + DropDown.KEYCODE_ENTER = 13; + DropDown.KEYCODE_ESC = 27; + DropDown.KEYCODE_SPACE = 32; + DropDown.KEYCODE_TAB = 9; + DropDown.KEYCODE_UP = 38; + + DropDown.prototype = { + __proto__: HTMLDivElement.prototype, + + /** @override */ + decorate: function() { + this.appendChild(this.createOverlay_()); + this.appendChild(this.title_ = this.createTitle_()); + var container = new DropDownContainer(); + container.id = this.id + '-dropdown-container'; + this.appendChild(container); + + this.addEventListener('keydown', this.keyDownHandler_); + + this.title_.id = this.id + '-dropdown'; + this.title_.setAttribute('role', 'button'); + this.title_.setAttribute('aria-haspopup', 'true'); + this.title_.setAttribute('aria-owns', container.id); + }, + + /** + * Returns true if dropdown menu is shown. + * @type {bool} Whether menu element is shown. + */ + get isShown() { + return !this.container.hidden; + }, + + /** + * Sets dropdown menu visibility. + * @param {bool} show New visibility state for dropdown menu. + */ + set isShown(show) { + this.firstElementChild.hidden = !show; + this.container.hidden = !show; + if (show) { + this.container.selectItem(this.container.firstItem, false); + } else { + this.title_.removeAttribute('aria-activedescendant'); + } + + // Flag for keyboard flow util to forward the up/down keys. + this.title_.classList.toggle('needs-up-down-keys', show); + }, + + /** + * Returns container of the menu items. + */ + get container() { + return this.lastElementChild; + }, + + /** + * Sets title and icon. + * @param {string} title Text on dropdown. + * @param {string} icon Icon in dataURL format. + */ + setTitle: function(title, icon) { + this.title_.firstElementChild.src = icon; + this.title_.lastElementChild.textContent = title; + }, + + /** + * Sets dropdown items. + * @param {Array} items Dropdown items array. + */ + setItems: function(items) { + this.container.innerHTML = ''; + this.container.firstItem = null; + this.container.selectedItem = null; + for (var i = 0; i < items.length; ++i) { + var item = items[i]; + if ('sub' in item) { + // Workaround for submenus, add items on top level. + // TODO(altimofeev): support submenus. + for (var j = 0; j < item.sub.length; ++j) + this.createItem_(this.container, item.sub[j]); + continue; + } + this.createItem_(this.container, item); + } + this.container.selectItem(this.container.firstItem, false); + }, + + /** + * Id of the active drop-down element. + * @private + */ + activeElementId_: '', + + /** + * Creates dropdown item element and adds into container. + * @param {HTMLElement} container Container where item is added. + * @param {!Object} item Item to be added. + * @private + */ + createItem_: function(container, item) { + var itemContentElement; + var className = 'dropdown-item'; + if (item.id == DropDown.ITEM_DIVIDER_ID) { + className = 'dropdown-divider'; + itemContentElement = this.ownerDocument.createElement('hr'); + } else { + var span = this.ownerDocument.createElement('span'); + itemContentElement = span; + span.textContent = item.label; + if ('bold' in item && item.bold) + span.classList.add('bold'); + var image = this.ownerDocument.createElement('img'); + image.alt = ''; + image.classList.add('dropdown-image'); + if (item.icon) + image.src = item.icon; + } + + var itemElement = this.ownerDocument.createElement('div'); + itemElement.classList.add(className); + itemElement.appendChild(itemContentElement); + itemElement.iid = item.id; + itemElement.controller = this; + var enabled = 'enabled' in item && item.enabled; + if (!enabled) + itemElement.classList.add('disabled-item'); + + if (item.id > 0) { + var wrapperDiv = this.ownerDocument.createElement('div'); + wrapperDiv.setAttribute('role', 'menuitem'); + wrapperDiv.id = this.id + item.id; + if (!enabled) + wrapperDiv.setAttribute('aria-disabled', 'true'); + wrapperDiv.classList.add('dropdown-item-container'); + var imageDiv = this.ownerDocument.createElement('div'); + imageDiv.appendChild(image); + wrapperDiv.appendChild(imageDiv); + wrapperDiv.appendChild(itemElement); + wrapperDiv.addEventListener('click', function f(e) { + var item = this.lastElementChild; + if (item.iid < -1 || item.classList.contains('disabled-item')) + return; + item.controller.isShown = false; + if (item.iid >= 0) + chrome.send('networkItemChosen', [item.iid]); + this.parentNode.parentNode.title_.focus(); + }); + wrapperDiv.addEventListener('mouseover', function f(e) { + this.parentNode.selectItem(this, true); + }); + itemElement = wrapperDiv; + } + container.appendChild(itemElement); + if (!container.firstItem && item.id >= 0) { + container.firstItem = itemElement; + } + }, + + /** + * Creates dropdown overlay element, which catches outside clicks. + * @type {HTMLElement} + * @private + */ + createOverlay_: function() { + var overlay = this.ownerDocument.createElement('div'); + overlay.classList.add('dropdown-overlay'); + overlay.addEventListener('click', function() { + this.parentNode.title_.focus(); + this.parentNode.isShown = false; + }); + return overlay; + }, + + /** + * Creates dropdown title element. + * @type {HTMLElement} + * @private + */ + createTitle_: function() { + var image = this.ownerDocument.createElement('img'); + image.alt = ''; + image.classList.add('dropdown-image'); + var text = this.ownerDocument.createElement('div'); + + var el = this.ownerDocument.createElement('div'); + el.appendChild(image); + el.appendChild(text); + + el.tabIndex = 0; + el.classList.add('dropdown-title'); + el.iid = -1; + el.controller = this; + el.inFocus = false; + el.opening = false; + + el.addEventListener('click', function f(e) { + this.controller.isShown = !this.controller.isShown; + }); + + el.addEventListener('focus', function(e) { + this.inFocus = true; + }); + + el.addEventListener('blur', function(e) { + this.inFocus = false; + }); + + el.addEventListener('keydown', function f(e) { + if (this.inFocus && !this.controller.isShown && + (e.keyCode == DropDown.KEYCODE_ENTER || + e.keyCode == DropDown.KEYCODE_SPACE || + (!useKeyboardFlow && (e.keyCode == DropDown.KEYCODE_UP || + e.keyCode == DropDown.KEYCODE_DOWN)))) { + this.opening = true; + this.controller.isShown = true; + e.stopPropagation(); + e.preventDefault(); + } + }); + return el; + }, + + /** + * Handles keydown event from the keyboard. + * @private + * @param {!Event} e Keydown event. + */ + keyDownHandler_: function(e) { + if (!this.isShown) + return; + var selected = this.container.selectedItem; + var handled = false; + switch (e.keyCode) { + case DropDown.KEYCODE_UP: { + do { + selected = selected.previousSibling; + if (!selected) + selected = this.container.lastElementChild; + } while (selected.iid < 0); + this.container.selectItem(selected, false); + handled = true; + break; + } + case DropDown.KEYCODE_DOWN: { + do { + selected = selected.nextSibling; + if (!selected) + selected = this.container.firstItem; + } while (selected.iid < 0); + this.container.selectItem(selected, false); + handled = true; + break; + } + case DropDown.KEYCODE_ESC: { + this.isShown = false; + handled = true; + break; + } + case DropDown.KEYCODE_TAB: { + this.isShown = false; + handled = true; + break; + } + case DropDown.KEYCODE_ENTER: { + if (!this.title_.opening) { + this.title_.focus(); + this.isShown = false; + var item = + this.title_.controller.container.selectedItem.lastElementChild; + if (item.iid >= 0 && !item.classList.contains('disabled-item')) + chrome.send('networkItemChosen', [item.iid]); + } + handled = true; + break; + } + } + if (handled) { + e.stopPropagation(); + e.preventDefault(); + } + this.title_.opening = false; + } + }; + + /** + * Updates networks list with the new data. + * @param {!Object} data Networks list. + */ + DropDown.updateNetworks = function(data) { + if (DropDown.activeElementId_) + $(DropDown.activeElementId_).setItems(data); + }; + + /** + * Updates network title, which is shown by the drop-down. + * @param {string} title Title to be displayed. + * @param {!Object} icon Icon to be displayed. + */ + DropDown.updateNetworkTitle = function(title, icon) { + if (DropDown.activeElementId_) + $(DropDown.activeElementId_).setTitle(title, icon); + }; + + /** + * Activates network drop-down. Only one network drop-down + * can be active at the same time. So activating new drop-down deactivates + * the previous one. + * @param {string} elementId Id of network drop-down element. + * @param {boolean} isOobe Whether drop-down is used by an Oobe screen. + */ + DropDown.show = function(elementId, isOobe) { + $(elementId).isShown = false; + if (DropDown.activeElementId_ != elementId) { + DropDown.activeElementId_ = elementId; + chrome.send('networkDropdownShow', [elementId, isOobe]); + } + }; + + /** + * Deactivates network drop-down. Deactivating inactive drop-down does + * nothing. + * @param {string} elementId Id of network drop-down element. + */ + DropDown.hide = function(elementId) { + if (DropDown.activeElementId_ == elementId) { + DropDown.activeElementId_ = ''; + chrome.send('networkDropdownHide'); + } + }; + + /** + * Refreshes network drop-down. Should be called on language change. + */ + DropDown.refresh = function() { + chrome.send('networkDropdownRefresh'); + }; + + /** + * Sets the keyboard flow flag. + */ + DropDown.enableKeyboardFlow = function() { + useKeyboardFlow = true; + }; + + return { + DropDown: DropDown + }; +}); diff --git a/chromium/chrome/browser/resources/chromeos/login/oobe.css b/chromium/chrome/browser/resources/chromeos/login/oobe.css new file mode 100644 index 00000000000..3221b4c1579 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/oobe.css @@ -0,0 +1,245 @@ +/* Copyright (c) 2012 The Chromium Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * This is the stylesheet used by the Out of the box experience (OOBE) flow, + * sign in and lock screens. + */ + +html, +body { + height: 100%; + width: 100%; +} + +body { + background-color: transparent; + cursor: default; + font-size: 14px; + margin: 0; + overflow: hidden; + padding: 0; + position: fixed; + top: 0; +} + +body.solid { + background-color: white; +} + +button { + font-family: inherit; + outline: none; +} + +/* Follow same focus coloring as in widgets.css */ +/* Do not apply this style to restricted button state. */ +button.custom-appearance:not(.button-restricted):not(.button-fancy) { + -webkit-transition: border-color 200ms; + border: 1px solid transparent; + /* Don't grey out disabled buttons. */ + color: buttontext !important; +} + +/* ':focus' used twice to increase specificity. */ +button.custom-appearance:focus:focus { + border-color: rgb(77, 144, 254); +} + +button:not(.custom-appearance) { + min-width: 72px !important; +} + +button.button-fancy { + min-width: 72px !important; +} + +button.button-blue { + background-image: -webkit-linear-gradient(rgb(93, 154, 255), + rgb(93, 154, 255) 38%, + rgb(88, 145, 240)); + border: 1px solid rgba(45, 102, 195, 1); + border-radius: 2px; + box-shadow: 0 1px 0 rgba(0, 0, 0, 0.15), inset 0 1px 2px + rgba(255, 255, 255, 0.4); + color: #fff; + font-size: 14px; + margin: 0 1px 0 0; + min-height: 2em; + min-width: 4em; + text-shadow: 0 1px 0 rgba(0, 0, 0, 0.5); +} + + +button.button-blue:hover { + background-image: -webkit-linear-gradient(rgb(101, 158, 253), + rgb(101, 158, 253) 38%, + rgb(96, 151, 241)); + box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25), inset 0 1px 2px + rgba(255, 255, 255, 0.4); +} + +button.button-blue:active { + background-image: -webkit-linear-gradient(rgb(96, 149, 237), + rgb(96, 149, 237) 38%, + rgb(96, 149, 237)); + border: 1px solid rgba(38, 84, 160, 1); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.1); +} + +button.button-red { + background-image: -webkit-linear-gradient(rgb(221, 75, 57), + rgb(221, 75, 57) 38%, + rgb(197, 66, 49)); + border: 1px solid rgba(167, 57, 44, 1); + border-radius: 2px; + box-shadow: 0 1px 0 rgba(0, 0, 0, 0.15), inset 0 1px 2px + rgba(255, 255, 255, 0.4); + color: #fff; + margin: 0 1px 0 0; + min-height: 2em; + min-width: 4em; + text-shadow: 0 1px 0 rgba(0, 0, 0, 0.15); +} + +button.button-red:hover { + background-image: -webkit-linear-gradient(rgb(231, 78, 59), + rgb(231, 78, 59) 38%, + rgb(209, 70, 52)); + box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25), inset 0 1px 2px + rgba(255, 255, 255, 0.4); +} + +button.button-red:active { + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); +} + +.label, +.flexible-label { + display: block; + margin: 5px 5px 5px 0; + padding: 5px 5px 5px 0; +} + +.label { + width: 170px; +} + +.flexible-label { + max-width: 250px; +} + +#installation-settings-popup { + background: white; + border: 1px solid rgb(188, 193, 208); + border-radius: 2px; + box-shadow: 0 5px 80px #505050; + min-height: 250px; + position: relative; + width: 460px; + z-index: 10; +} + +#installation-settings-popup h1 { + -webkit-padding-end: 24px; + -webkit-user-select: none; + background: -webkit-linear-gradient(white, #F8F8F8); + color: rgb(83, 99, 125); + font-size: 105%; + font-weight: bold; + margin: 0; + padding: 10px 15px 8px 15px; + text-shadow: white 0 1px 2px; +} + +.popup-content-area { + padding: 0 20px 60px 20px; +} + +#installation-settings-popup button { + bottom: 20px; + position: absolute; + right: 20px; +} + +#tpm-busy { + text-align: center; +} + +#tpm-password { + font-weight: bold; + text-align: center; +} + +[hidden] { + display: none !important; +} + +#popup-overlay { + -webkit-box-align: center; + -webkit-box-pack: center; + -webkit-transition: 250ms opacity; + background: rgba(255, 255, 255, .75); + bottom: 0; + display: -webkit-box; + left: 0; + padding: 20px; + position: fixed; + right: 0; + top: 0; + z-index: 5; +} + +#bubble { + -webkit-transition: 250ms opacity; +} + +span.bold { + font-weight: bold; +} + +#version-labels { + -webkit-transition: all 500ms linear; + color: #fff; + font-size: 11px; + margin: 10px; + text-align: end; + text-shadow: + 0 0 4px rgba(0,0,0,.6), + 0 1px 2px rgba(0,0,0,.8), + 0 -1px 2px rgba(0,0,0,1); +} + +#background { + -webkit-transition: 700ms opacity; + background-size: 100% 100%; + height: 100%; + left: 0; + position: absolute; + top: 0; + width: 100%; +} + +.background-initial { + opacity: 0; +} + +.throbber { + -webkit-animation: throbber-animation 1s steps(36) infinite; + -webkit-margin-before: 2px; + -webkit-margin-end: 4px; + background-image: url(chrome://theme/IDR_CROS_DEFAULT_THROBBER); + display: inline-block; + height: 16px; + width: 16px; +} + +@-webkit-keyframes throbber-animation { + from { + background-position: 0; + } + to { + background-position: -576px; + } +} + diff --git a/chromium/chrome/browser/resources/chromeos/login/oobe.html b/chromium/chrome/browser/resources/chromeos/login/oobe.html new file mode 100644 index 00000000000..44d0eaa3cc6 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/oobe.html @@ -0,0 +1,37 @@ +<!DOCTYPE html> +<html i18n-values="dir:textdirection;build:buildType;highlight:highlightStrength"> +<head> +<meta charset="utf-8"> +<meta name="google" value="notranslate"> +<title i18n-content="title"></title> +<include src="login_resources.html"> +<link rel="stylesheet" href="accessibility_menu.css"> +<script src="chrome://oobe/oobe.js"></script> +</head> +<body class="oobe-display" i18n-values=".style.fontFamily:fontfamily;"> + <include src="screen_container.html"> + <include src="accessibility_menu.html"> + <div id="popup-overlay" hidden> + <div id="installation-settings-popup"> + <h1 i18n-content="eulaSystemInstallationSettings"></h1> + <div class="popup-content-area"> + <div id="tpm-settings"> + <p i18n-content="eulaTpmDesc"></p> + <p id="tpm-desc" i18n-content="eulaTpmKeyDesc"></p> + <p id="tpm-desc-powerwash" i18n-content="eulaTpmDescPowerwash" hidden> + </p> + <div id="tpm-busy"> + <div id="spinner" class="inline-spinner"></div> + <span i18n-content="eulaTpmBusy"></span> + </div> + <p id="tpm-password"></p> + </div> + </div> + <button id="installation-settings-ok-button" + i18n-content="eulaSystemInstallationSettingsOkButton"> + </button> + </div> + </div> + <script src="chrome://resources/js/i18n_template2.js"></script> +</body> +</html> diff --git a/chromium/chrome/browser/resources/chromeos/login/oobe.js b/chromium/chrome/browser/resources/chromeos/login/oobe.js new file mode 100644 index 00000000000..db990d85a74 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/oobe.js @@ -0,0 +1,241 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** + * @fileoverview Out of the box experience flow (OOBE). + * This is the main code for the OOBE WebUI implementation. + */ + +<include src="login_common.js"></include> +<include src="oobe_screen_eula.js"></include> +<include src="oobe_screen_network.js"></include> +<include src="oobe_screen_update.js"></include> + +cr.define('cr.ui.Oobe', function() { + return { + /** + * Setups given "select" element using the list and adds callback. + * @param {!Element} select Select object to be updated. + * @param {!Object} list List of the options to be added. + * @param {string} callback Callback name which should be send to Chrome or + * an empty string if the event listener shouldn't be added. + */ + setupSelect: function(select, list, callback) { + select.options.length = 0; + for (var i = 0; i < list.length; ++i) { + var item = list[i]; + var option = + new Option(item.title, item.value, item.selected, item.selected); + select.appendChild(option); + } + if (callback) { + var sendCallback = function() { + chrome.send(callback, [select.options[select.selectedIndex].value]); + }; + select.addEventListener('blur', sendCallback); + select.addEventListener('click', sendCallback); + select.addEventListener('keyup', function(event) { + var keycodeInterested = [ + 9, // Tab + 13, // Enter + 27, // Escape + ]; + if (keycodeInterested.indexOf(event.keyCode) >= 0) + sendCallback(); + }); + } + }, + + /** + * Initializes the OOBE flow. This will cause all C++ handlers to + * be invoked to do final setup. + */ + initialize: function() { + cr.ui.login.DisplayManager.initialize(); + login.WrongHWIDScreen.register(); + login.NetworkScreen.register(); + login.EulaScreen.register(); + login.UpdateScreen.register(); + login.ResetScreen.register(); + login.AutolaunchScreen.register(); + login.KioskEnableScreen.register(); + login.AccountPickerScreen.register(); + login.GaiaSigninScreen.register(); + login.UserImageScreen.register(/* lazyInit= */ false); + login.ErrorMessageScreen.register(); + login.TPMErrorMessageScreen.register(); + login.PasswordChangedScreen.register(); + login.LocallyManagedUserCreationScreen.register(); + login.TermsOfServiceScreen.register(); + login.AppLaunchSplashScreen.register(); + login.ConfirmPasswordScreen.register(); + login.MessageBoxScreen.register(); + + cr.ui.Bubble.decorate($('bubble')); + login.HeaderBar.decorate($('login-header-bar')); + + Oobe.initializeA11yMenu(); + + chrome.send('screenStateInitialize'); + }, + + /** + * Initializes OOBE accessibility menu. + */ + initializeA11yMenu: function() { + cr.ui.Bubble.decorate($('accessibility-menu')); + $('connect-accessibility-link').addEventListener( + 'click', Oobe.handleAccessbilityLinkClick); + $('eula-accessibility-link').addEventListener( + 'click', Oobe.handleAccessbilityLinkClick); + $('update-accessibility-link').addEventListener( + 'click', Oobe.handleAccessbilityLinkClick); + + $('high-contrast').addEventListener('click', + Oobe.handleHighContrastClick); + $('large-cursor').addEventListener('click', + Oobe.handleLargeCursorClick); + $('spoken-feedback').addEventListener('click', + Oobe.handleSpokenFeedbackClick); + $('screen-magnifier').addEventListener('click', + Oobe.handleScreenMagnifierClick); + + // A11y menu should be accessible i.e. disable autohide on any + // keydown or click inside menu. + $('accessibility-menu').hideOnKeyPress = false; + $('accessibility-menu').hideOnSelfClick = false; + }, + + /** + * Accessibility link handler. + */ + handleAccessbilityLinkClick: function(e) { + /** @const */ var BUBBLE_OFFSET = 5; + /** @const */ var BUBBLE_PADDING = 10; + $('accessibility-menu').showForElement(e.target, + cr.ui.Bubble.Attachment.BOTTOM, + BUBBLE_OFFSET, BUBBLE_PADDING); + if (Oobe.getInstance().currentScreen && + Oobe.getInstance().currentScreen.defaultControl) { + $('accessibility-menu').elementToFocusOnHide = + Oobe.getInstance().currentScreen.defaultControl; + } else { + // Update screen falls into this category. Since it doesn't have any + // controls other than a11y link we don't want that link to receive + // focus when screen is shown i.e. defaultControl is not defined. + // Focus a11y link instead. + $('accessibility-menu').elementToFocusOnHide = e.target; + } + e.stopPropagation(); + }, + + /** + * Spoken feedback checkbox handler. + */ + handleSpokenFeedbackClick: function(e) { + chrome.send('enableSpokenFeedback', [$('spoken-feedback').checked]); + e.stopPropagation(); + }, + + /** + * Large cursor checkbox handler. + */ + handleLargeCursorClick: function(e) { + chrome.send('enableLargeCursor', [$('large-cursor').checked]); + e.stopPropagation(); + }, + + /** + * High contrast mode checkbox handler. + */ + handleHighContrastClick: function(e) { + chrome.send('enableHighContrast', [$('high-contrast').checked]); + e.stopPropagation(); + }, + + /** + * Screen magnifier checkbox handler. + */ + handleScreenMagnifierClick: function(e) { + chrome.send('enableScreenMagnifier', [$('screen-magnifier').checked]); + e.stopPropagation(); + }, + + /** + * Sets usage statistics checkbox. + * @param {boolean} checked Is the checkbox checked? + */ + setUsageStats: function(checked) { + $('usage-stats').checked = checked; + }, + + /** + * Set OEM EULA URL. + * @param {text} oemEulaUrl OEM EULA URL. + */ + setOemEulaUrl: function(oemEulaUrl) { + if (oemEulaUrl) { + $('oem-eula-frame').src = oemEulaUrl; + $('eulas').classList.remove('one-column'); + } else { + $('eulas').classList.add('one-column'); + } + }, + + /** + * Sets TPM password. + * @param {text} password TPM password to be shown. + */ + setTpmPassword: function(password) { + $('tpm-busy').hidden = true; + + if (password.length) { + $('tpm-password').textContent = password; + $('tpm-password').hidden = false; + } else { + $('tpm-desc').hidden = true; + $('tpm-desc-powerwash').hidden = false; + } + }, + + /** + * Refreshes a11y menu state. + * @param {!Object} data New dictionary with a11y features state. + */ + refreshA11yInfo: function(data) { + $('high-contrast').checked = data.highContrastEnabled; + $('spoken-feedback').checked = data.spokenFeedbackEnabled; + $('screen-magnifier').checked = data.screenMagnifierEnabled; + $('large-cursor').checked = data.largeCursorEnabled; + }, + + /** + * Reloads content of the page (localized strings, options of the select + * controls). + * @param {!Object} data New dictionary with i18n values. + */ + reloadContent: function(data) { + // Reload global local strings, process DOM tree again. + loadTimeData.overrideValues(data); + i18nTemplate.process(document, loadTimeData); + + // Update language and input method menu lists. + Oobe.setupSelect($('language-select'), data.languageList, ''); + Oobe.setupSelect($('keyboard-select'), data.inputMethodsList, ''); + Oobe.setupSelect($('timezone-select'), data.timezoneList, ''); + + // Update localized content of the screens. + Oobe.updateLocalizedContent(); + }, + + /** + * Updates localized content of the screens. + * Should be executed on language change. + */ + updateLocalizedContent: function() { + // Buttons, headers and links. + Oobe.getInstance().updateLocalizedContent_(); + } + }; +}); diff --git a/chromium/chrome/browser/resources/chromeos/login/oobe_screen.css b/chromium/chrome/browser/resources/chromeos/login/oobe_screen.css new file mode 100644 index 00000000000..8a36e1ce49b --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/oobe_screen.css @@ -0,0 +1,181 @@ +/* Copyright 2013 The Chromium Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * This contains common styling for all the OOBE screens. + */ + +.step { + box-sizing: border-box; + position: absolute; +} + +.step.animated { + -webkit-transition: -webkit-transform 200ms ease-in-out, + opacity 200ms ease-in-out, + visibility 200ms ease-in-out; +} + +.step.hidden { + visibility: hidden; +} + +.faded, +.left, +.right { + opacity: 0; +} + +.step.right { + -webkit-transform: translateX(50px); +} + +.step.left { + -webkit-transform: translateX(-50px) +} + +.step.fullscreen { + height: 100%; + left: 0; + right: 0; + top: 0; + width: 100%; +} + +.step-controls { + -webkit-box-pack: end; + -webkit-padding-end: 34px; /* Double the padding of .step */ + bottom: 21px; + box-sizing: border-box; + display: -webkit-box; + height: 28px; + position: absolute; + width: 100%; +} + +.animation .step-controls button { + /* Don't grey out disabled buttons during animation. */ + color: buttontext !important; +} + +.step.loading .step-contents, +.step.loading .step-controls, +.step.loading .step-extra-controls { + visibility: hidden; +} + +.step:not(.loading) #user-images-loading { + visibility: hidden; +} + +.step:not(.loading) #eula-busy { + visibility: hidden; +} + +/* Center spinner wrapper vertically and horizontally. + * Vertical centering uses top: 50% and negative margin + * instead of top: 0; bottom: 0 due to http://crbug.com/155320. + */ +.step-loading { + -webkit-align-items: center; + -webkit-justify-content: center; + display: -webkit-flex; + left: 0; + margin-top: -8px; + position: absolute; + right: 0; + top: 50%; +} + +/* Fixes perfomance problem caused by http://crbug.com/229405 . */ +.step.hidden .throbber, +.step.hidden .spinner, +.step.hidden .inline-spinner { + display: none; +} + +#security-info a, +#eula a, +.step-extra-controls a { + color: #8c8c8c; + font-size: 12px; + text-decoration: none; +} + +.step-extra-controls { + bottom: 26px; + left: 49px; + position: absolute; +} + +/* EULA screen extra controls have 2 elements + so they require different alignment. */ +#eula-extra-controls { + bottom: 17px; +} + +#security-info a:focus, +#eula a:focus, +.step-extra-controls a:focus { + -webkit-transition: outline-color 200ms; + /* Note: May use 1px solid here. */ + outline-color: rgb(77, 144, 254); +} + +.step-extra-controls > *:not(:first-child) { + -webkit-margin-before: 7px; +} + +html[dir=rtl] .step-extra-controls { + left: auto; + right: 49px; +} + +#oobe.autolaunch #autolaunch-confirm-button, +#oobe.autolaunch #autolaunch-cancel-button, +#oobe.connect #continue-button, +#oobe.eula #accept-button, +#oobe.eula #back-button, +#oobe.kiosk-enable #kiosk-cancel-button, +#oobe.kiosk-enable #kiosk-enable-button, +#oobe.oauth-enrollment #oauth-enroll-cancel-button, +#oobe.oauth-enrollment #oauth-enroll-done-button, +#oobe.oauth-enrollment #oauth-enroll-explain-button, +#oobe.oauth-enrollment #oauth-enroll-try-again-button, +#oobe.reset #reset-button, +#oobe.reset #reset-cancel-button, +#oobe.signin #signin-button, +#oobe.user-image #ok-button { + display: block; +} + +#autolaunch-confirm-button, +#back-button, +#kiosk-enable-button, +#reset-button, +#password-changed-back-button, +#tos-back-button { + -webkit-margin-end: 8px; +} + +.menu-area { + margin: 5px; +} + +.menu-control { + color: #444; + font-family: inherit; + line-height: 20px; + position: relative; + width: 250px; +} + +html[highlight=strong] #security-info a:focus, +html[highlight=strong] #eula a:focus, +html[highlight=strong] .step-extra-controls a:focus, +html[highlight=strong] .menu-control:focus, +html[highlight=strong] input[type='button']:focus, +html[highlight=strong] button:focus { + box-shadow: 0 0 23px rgb(77, 144, 254) !important; +} + diff --git a/chromium/chrome/browser/resources/chromeos/login/oobe_screen_autolaunch.css b/chromium/chrome/browser/resources/chromeos/login/oobe_screen_autolaunch.css new file mode 100644 index 00000000000..7c9c8a3c869 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/oobe_screen_autolaunch.css @@ -0,0 +1,44 @@ +/* Copyright 2013 The Chromium Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#autolaunch { + min-height: 423px; + padding: 40px 17px 80px; + text-align: center; + width: 722px; +} + +#autolaunch-controls { + -webkit-box-pack: center; + bottom: 80px; +} + +#autolaunch-warning-title { + color: #606060; + font-size: 22px; + padding: 5px 45px 30px; +} + +#autolaunch-warning { + color: #606060; + font-size: 16px; + padding: 35px 40px 10px; +} + +#autolaunch-app { + padding-bottom: 40px; +} + +#autolaunch-app-container { + -webkit-align-items: center; + -webkit-justify-content: center; + display: -webkit-flex; +} + +#autolaunch-app-name { + color: #404040; + font-size: 22px; + padding-left: 10px; +} diff --git a/chromium/chrome/browser/resources/chromeos/login/oobe_screen_autolaunch.html b/chromium/chrome/browser/resources/chromeos/login/oobe_screen_autolaunch.html new file mode 100644 index 00000000000..ac4b5ee90da --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/oobe_screen_autolaunch.html @@ -0,0 +1,11 @@ +<div class="step hidden no-logo" id="autolaunch"> + <div class="step-contents"> + <div id="autolaunch-warning-title" i18n-content="autolaunchTitle"></div> + <div id="autolaunch-app-container"> + <img id="autolaunch-app-icon" alt=""> + <div id="autolaunch-app-name"></div> + </div> + <div id="autolaunch-warning" i18n-content="autolaunchWarning"></div> + </div> + <div id="autolaunch-controls" class="step-controls"></div> +</div> diff --git a/chromium/chrome/browser/resources/chromeos/login/oobe_screen_autolaunch.js b/chromium/chrome/browser/resources/chromeos/login/oobe_screen_autolaunch.js new file mode 100644 index 00000000000..ed9fe639e25 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/oobe_screen_autolaunch.js @@ -0,0 +1,96 @@ +// Copyright 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** + * @fileoverview Oobe reset screen implementation. + */ + +login.createScreen('AutolaunchScreen', 'autolaunch', function() { + return { + EXTERNAL_API: ['updateApp', 'confirmAutoLaunchForTesting'], + /** + * Header text of the screen. + * @type {string} + */ + get header() { + return loadTimeData.getString('autolaunchTitle'); + }, + + /** + * Buttons in oobe wizard's button strip. + * @type {array} Array of Buttons. + */ + get buttons() { + var buttons = []; + + var confirmButton = this.ownerDocument.createElement('button'); + confirmButton.id = 'autolaunch-confirm-button'; + confirmButton.textContent = + loadTimeData.getString('autolaunchConfirmButton'); + confirmButton.addEventListener('click', function(e) { + chrome.send('autolaunchOnConfirm'); + e.stopPropagation(); + }); + buttons.push(confirmButton); + + var cancelButton = this.ownerDocument.createElement('button'); + cancelButton.id = 'autolaunch-cancel-button'; + cancelButton.textContent = + loadTimeData.getString('autolaunchCancelButton'); + cancelButton.addEventListener('click', function(e) { + chrome.send('autolaunchOnCancel'); + e.stopPropagation(); + }); + buttons.push(cancelButton); + return buttons; + }, + + /** + * Event handler invoked when the page is shown and ready. + */ + onBeforeShow: function() { + chrome.send('autolaunchVisible'); + }, + + /** + * Returns a control which should receive an initial focus. + */ + get defaultControl() { + return $('autolaunch-cancel-button'); + }, + + /** + * Cancels the reset and drops the user back to the login screen. + */ + cancel: function() { + chrome.send('autolaunchOnCancel'); + }, + + /** + * Sets app to be displayed in the auto-launch warning. + * @param {!Object} app An dictionary with app info. + */ + updateApp: function(app) { + if (app.appIconUrl && app.appIconUrl.length) + $('autolaunch-app-icon').src = app.appIconUrl; + + $('autolaunch-app-name').innerText = app.appName; + }, + + /** + * Initiates confirm/cancel response for testing. + * @param {boolean} confirm True if the screen should confirm auto-launch. + */ + confirmAutoLaunchForTesting: function(confirm) { + var button = confirm ? $('autolaunch-confirm-button') : + $('autolaunch-cancel-button'); + var clickEvent = cr.doc.createEvent('Event'); + clickEvent.initEvent('click', true, true); + button.dispatchEvent(clickEvent); + } + }; +}); + + + diff --git a/chromium/chrome/browser/resources/chromeos/login/oobe_screen_enable_kiosk.css b/chromium/chrome/browser/resources/chromeos/login/oobe_screen_enable_kiosk.css new file mode 100644 index 00000000000..578e611b84d --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/oobe_screen_enable_kiosk.css @@ -0,0 +1,28 @@ +/* Copyright 2013 The Chromium Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#kiosk-enable { + min-height: 423px; + padding: 40px 17px 80px; + text-align: center; + width: 722px; +} + +#kiosk-enable-controls { + -webkit-box-pack: center; + bottom: 80px; +} + +#kiosk-enable-msg { + color: #606060; + font-size: 22px; + padding: 5px 45px 30px; +} + +#kiosk-enable-details { + color: #606060; + font-size: 16px; + padding: 35px 40px 80px; +} diff --git a/chromium/chrome/browser/resources/chromeos/login/oobe_screen_enable_kiosk.html b/chromium/chrome/browser/resources/chromeos/login/oobe_screen_enable_kiosk.html new file mode 100644 index 00000000000..899d137cf3d --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/oobe_screen_enable_kiosk.html @@ -0,0 +1,9 @@ +<div class="step hidden no-logo" id="kiosk-enable"> + <div class="step-contents"> + <div id="kiosk-enable-msg" i18n-content="kioskEnableWarningText"></div> + <img id="kiosk-enable-icon" src="chrome://theme/IDR_RESET_WARNING" alt=""> + <div id="kiosk-enable-details" + i18n-content="kioskEnableWarningDetails"></div> + </div> + <div id="kiosk-enable-controls" class="step-controls"></div> +</div> diff --git a/chromium/chrome/browser/resources/chromeos/login/oobe_screen_enable_kiosk.js b/chromium/chrome/browser/resources/chromeos/login/oobe_screen_enable_kiosk.js new file mode 100644 index 00000000000..8bb2bb43bc5 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/oobe_screen_enable_kiosk.js @@ -0,0 +1,114 @@ +// Copyright 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** + * @fileoverview Oobe reset screen implementation. + */ + +login.createScreen('KioskEnableScreen', 'kiosk-enable', function() { + return { + EXTERNAL_API: ['enableKioskForTesting', + 'onCompleted'], + /** + * Header text of the screen. + * @type {string} + */ + get header() { + return loadTimeData.getString('kioskEnableTitle'); + }, + + /** + * Buttons in oobe wizard's button strip. + * @type {array} Array of Buttons. + */ + get buttons() { + var buttons = []; + + var confirmButton = this.ownerDocument.createElement('button'); + confirmButton.id = 'kiosk-enable-button'; + confirmButton.textContent = + loadTimeData.getString('kioskEnableButton'); + confirmButton.addEventListener('click', function(e) { + chrome.send('kioskOnEnable'); + e.stopPropagation(); + }); + buttons.push(confirmButton); + + var cancelButton = this.ownerDocument.createElement('button'); + cancelButton.id = 'kiosk-cancel-button'; + cancelButton.textContent = + loadTimeData.getString('kioskCancelButton'); + cancelButton.addEventListener('click', function(e) { + chrome.send('kioskOnClose'); + e.stopPropagation(); + }); + buttons.push(cancelButton); + + var okButton = this.ownerDocument.createElement('button'); + okButton.id = 'kiosk-ok-button'; + okButton.hidden = true; + okButton.textContent = + loadTimeData.getString('kioskOKButton'); + okButton.addEventListener('click', function(e) { + chrome.send('kioskOnClose'); + e.stopPropagation(); + }); + buttons.push(okButton); + return buttons; + }, + + /** + * Event handler invoked when the page is shown and ready. + */ + onBeforeShow: function() { + $('kiosk-enable-button').hidden = false; + $('kiosk-cancel-button').hidden = false; + $('kiosk-ok-button').hidden = true; + $('kiosk-enable-details').textContent = + loadTimeData.getString('kioskEnableWarningDetails'); + }, + + /** + * Returns a control which should receive an initial focus. + */ + get defaultControl() { + return $('kiosk-cancel-button'); + }, + + /** + * Cancels the reset and drops the user back to the login screen. + */ + cancel: function() { + chrome.send('kioskOnClose'); + }, + + /** + * Initiates enable/cancel response for testing. + * @param {boolean} confirm True if the screen should confirm auto-launch. + */ + enableKioskForTesting: function(confirm) { + var button = confirm ? $('kiosk-enable-button') : + $('kiosk-cancel-button'); + var clickEvent = cr.doc.createEvent('Event'); + clickEvent.initEvent('click', true, true); + button.dispatchEvent(clickEvent); + }, + + /** + * Updates completion message on the screen. + * @param {boolean} success True if consumer kiosk was successfully enabled. + */ + onCompleted: function(success) { + $('kiosk-enable-button').hidden = true; + $('kiosk-cancel-button').hidden = true; + $('kiosk-ok-button').hidden = false; + $('kiosk-enable-details').textContent = + loadTimeData.getString(success ? 'kioskEnableSuccessMsg' : + 'kioskEnableErrorMsg'); + } + }; +}); + + + diff --git a/chromium/chrome/browser/resources/chromeos/login/oobe_screen_eula.css b/chromium/chrome/browser/resources/chromeos/login/oobe_screen_eula.css new file mode 100644 index 00000000000..654ddd0e995 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/oobe_screen_eula.css @@ -0,0 +1,100 @@ +/* Copyright 2013 The Chromium Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#eula { + min-height: 395px; + padding: 70px 17px 21px; +} + +#cros-eula, +#oem-eula { + border: 1px solid #d9d9d9; + height: 222px; +} + +.eula-frame { + height: 222px; +} + +#logging { + clear: both; + font-size: small; + margin-top: 20px; + width: 620px; +} + +#logging div { + display: table-cell; + vertical-align: middle; +} + +#usage-stats { + -webkit-margin-end: 10px; +} + +.eula-columns { + display: -webkit-box; + width: 630px; +} + +.eula-frame { + border: none; + padding: 0 0 0 5px; +} + +#cros-eula { + width: 314px; +} + +#cros-eula-frame { + width: 309px; +} + +#oem-eula { + border-left: none; + width: 313px; +} + +#oem-eula-frame { + width: 308px; +} + +#eulas.one-column #cros-eula { + width: 628px; +} + +#eulas.one-column #cros-eula-frame { + width: 623px; +} + +#eulas.one-column #oem-eula { + display: none; +} + +#eula #stats-help-link { + color: rgb(49, 106, 197); +} + +#eula .step-contents { + -webkit-margin-after: 30px; + -webkit-margin-start: 32px; +} + +#cros-eula-loading { + -webkit-align-items: center; + -webkit-flex-direction: column; + -webkit-justify-content: center; + display: none; + height: 100%; + width: 100%; +} + +.step.eula-loading #cros-eula-frame { + display: none; +} + +.step.eula-loading #cros-eula-loading { + display: -webkit-flex; +} diff --git a/chromium/chrome/browser/resources/chromeos/login/oobe_screen_eula.html b/chromium/chrome/browser/resources/chromeos/login/oobe_screen_eula.html new file mode 100644 index 00000000000..b58b58ce0bf --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/oobe_screen_eula.html @@ -0,0 +1,42 @@ +<div class="step right hidden animated eula-loading" id="eula"> + <div class="step-contents"> + <div id="eulas" class="eula-columns one-column"> + <div id="cros-eula" tabindex="0"> + <iframe id="cros-eula-frame" class="eula-frame" + src="about:blank"></iframe> + <div id="cros-eula-loading"> + <div> + <p i18n-content="termsOfServiceLoading"></p> + </div> + </div> + </div> + <div id="oem-eula"> + <iframe id="oem-eula-frame" class="eula-frame"></iframe> + </div> + </div> + <div id="logging"> + <div> + <input id="usage-stats" type="checkbox"> + </div> + <div> + <label for="usage-stats" i18n-content="checkboxLogging"></label> + <a id="stats-help-link" href="#" i18n-content="learnMore"></a> + </div> + </div> + </div> + <div id="eula-controls" class="step-controls"></div> + <div id="eula-extra-controls" class="step-extra-controls"> + <div id="installation-settings"> + <a id="installation-settings-link" href="#" + i18n-content="eulaSystemInstallationSettings"> + </a> + </div> + <div id="eula-accessibility"> + <a id="eula-accessibility-link" href="#" + i18n-content="accessibilityLink"></a> + </div> + </div> + <div id="eula-busy" class="step-loading"> + <div class="throbber"></div> + </div> +</div> diff --git a/chromium/chrome/browser/resources/chromeos/login/oobe_screen_eula.js b/chromium/chrome/browser/resources/chromeos/login/oobe_screen_eula.js new file mode 100644 index 00000000000..8a30335dc3d --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/oobe_screen_eula.js @@ -0,0 +1,124 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** + * @fileoverview Oobe eula screen implementation. + */ + +login.createScreen('EulaScreen', 'eula', function() { + return { + /** @override */ + decorate: function() { + $('stats-help-link').addEventListener('click', function(event) { + chrome.send('eulaOnLearnMore'); + }); + $('installation-settings-link').addEventListener( + 'click', function(event) { + chrome.send('eulaOnInstallationSettingsPopupOpened'); + $('popup-overlay').hidden = false; + $('installation-settings-ok-button').focus(); + }); + $('installation-settings-ok-button').addEventListener( + 'click', function(event) { + $('popup-overlay').hidden = true; + }); + // Do not allow focus leaving the overlay. + $('popup-overlay').addEventListener('focusout', function(event) { + // WebKit does not allow immediate focus return. + window.setTimeout(function() { + // TODO(ivankr): focus cycling. + $('installation-settings-ok-button').focus(); + }, 0); + event.preventDefault(); + }); + }, + + /** + * Event handler that is invoked when 'chrome://terms' is loaded. + */ + onFrameLoad: function() { + $('accept-button').disabled = false; + $('eula').classList.remove('eula-loading'); + // Initially, the back button is focused and the accept button is + // disabled. + // Move the focus to the accept button now but only if the user has not + // moved the focus anywhere in the meantime. + if (!$('back-button').blurred) + $('accept-button').focus(); + }, + + /** + * Event handler that is invoked just before the screen is shown. + * @param {object} data Screen init payload. + */ + onBeforeShow: function() { + $('eula').classList.add('eula-loading'); + $('cros-eula-frame').onload = this.onFrameLoad; + $('accept-button').disabled = true; + $('cros-eula-frame').src = 'chrome://terms'; + }, + + /** + * Header text of the screen. + * @type {string} + */ + get header() { + return loadTimeData.getString('eulaScreenTitle'); + }, + + /** + * Buttons in oobe wizard's button strip. + * @type {Array} Array of Buttons. + */ + get buttons() { + var buttons = []; + + var backButton = this.ownerDocument.createElement('button'); + backButton.id = 'back-button'; + backButton.textContent = loadTimeData.getString('back'); + backButton.addEventListener('click', function(e) { + chrome.send('eulaOnExit', [false, $('usage-stats').checked]); + e.stopPropagation(); + }); + buttons.push(backButton); + + var acceptButton = this.ownerDocument.createElement('button'); + acceptButton.id = 'accept-button'; + acceptButton.disabled = true; + acceptButton.classList.add('preserve-disabled-state'); + acceptButton.textContent = loadTimeData.getString('acceptAgreement'); + acceptButton.addEventListener('click', function(e) { + $('eula').classList.add('loading'); // Mark EULA screen busy. + chrome.send('eulaOnExit', [true, $('usage-stats').checked]); + e.stopPropagation(); + }); + buttons.push(acceptButton); + + return buttons; + }, + + /** + * Returns a control which should receive an initial focus. + */ + get defaultControl() { + return $('accept-button').disabled ? $('back-button') : + $('accept-button'); + }, + + /** + * Updates localized content of the screen that is not updated via template. + */ + updateLocalizedContent: function() { + // Force iframes to refresh. It's only available method because we have + // no access to iframe.contentWindow. + if ($('cros-eula-frame').src) { + $('cros-eula-frame').src = $('cros-eula-frame').src; + } + if ($('oem-eula-frame').src) { + $('oem-eula-frame').src = $('oem-eula-frame').src; + } + } + }; +}); + diff --git a/chromium/chrome/browser/resources/chromeos/login/oobe_screen_network.css b/chromium/chrome/browser/resources/chromeos/login/oobe_screen_network.css new file mode 100644 index 00000000000..7e3d86006c2 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/oobe_screen_network.css @@ -0,0 +1,34 @@ +/* Copyright 2013 The Chromium Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#connect { + min-height: 395px; + padding: 70px 17px 21px; +} + +#connect table { + margin: 7em auto; +} + +.control-with-label { + -webkit-box-align: start; + display: -webkit-box; + margin: 10px 0; +} + +#welcome-message { + color: #444; + font-size: 16px; + margin-bottom: 30px; +} + +#connect .step-contents { + margin: 33px auto 82px; + width: 435px; +} + +html:not([highlight=strong]) #network-timezone-setting { + display: none; +} diff --git a/chromium/chrome/browser/resources/chromeos/login/oobe_screen_network.html b/chromium/chrome/browser/resources/chromeos/login/oobe_screen_network.html new file mode 100644 index 00000000000..1c2a5b83aea --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/oobe_screen_network.html @@ -0,0 +1,41 @@ +<div class="step hidden animated" id="connect"> + <div class="step-contents"> + <div id="welcome-message" i18n-content="networkScreenGreeting"> + </div> + <div class="control-with-label"> + <label for="language-select" i18n-content="selectLanguage" + class="label"></label> + <div class="menu-area"> + <select id="language-select" class="menu-control"></select> + </div> + </div> + <div class="control-with-label"> + <label for="keyboard-select" i18n-content="selectKeyboard" + class="label"></label> + <div class="menu-area"> + <select id="keyboard-select" class="menu-control"></select> + </div> + </div> + <div class="control-with-label" id="network-timezone-setting"> + <label for="timezone-select" i18n-content="selectTimezone" + class="label"></label> + <div class="menu-area"> + <select id="timezone-select" class="menu-control"></select> + </div> + </div> + <div class="control-with-label"> + <label for="networks-list-dropdown" i18n-content="selectNetwork" + class="label"></label> + <div class="menu-area"> + <div id="networks-list" class="menu-control"></div> + </div> + </div> + </div> + <div id="connect-controls" class="step-controls"></div> + <div id="connect-extra-controls" class="step-extra-controls"> + <div id="connect-accessibility"> + <a id="connect-accessibility-link" href="#" + i18n-content="accessibilityLink"></a> + </div> + </div> +</div> diff --git a/chromium/chrome/browser/resources/chromeos/login/oobe_screen_network.js b/chromium/chrome/browser/resources/chromeos/login/oobe_screen_network.js new file mode 100644 index 00000000000..6101874cde4 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/oobe_screen_network.js @@ -0,0 +1,118 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** + * @fileoverview Oobe network screen implementation. + */ + +login.createScreen('NetworkScreen', 'connect', function() { + return { + EXTERNAL_API: [ + 'enableContinueButton', + 'setTimezone', + 'showError' + ], + + /** + * Dropdown element for networks selection. + */ + dropdown_: null, + + /** @override */ + decorate: function() { + Oobe.setupSelect($('language-select'), + loadTimeData.getValue('languageList'), + 'networkOnLanguageChanged'); + + Oobe.setupSelect($('keyboard-select'), + loadTimeData.getValue('inputMethodsList'), + 'networkOnInputMethodChanged'); + + Oobe.setupSelect($('timezone-select'), + loadTimeData.getValue('timezoneList'), + 'networkOnTimezoneChanged'); + + this.dropdown_ = $('networks-list'); + cr.ui.DropDown.decorate(this.dropdown_); + }, + + onBeforeShow: function(data) { + cr.ui.DropDown.show('networks-list', true, -1); + }, + + onBeforeHide: function() { + cr.ui.DropDown.hide('networks-list'); + this.enableContinueButton(false); + }, + + /** + * Header text of the screen. + * @type {string} + */ + get header() { + return loadTimeData.getString('networkScreenTitle'); + }, + + /** + * Buttons in oobe wizard's button strip. + * @type {array} Array of Buttons. + */ + get buttons() { + var buttons = []; + + var continueButton = this.ownerDocument.createElement('button'); + continueButton.disabled = true; + continueButton.id = 'continue-button'; + continueButton.textContent = loadTimeData.getString('continueButton'); + continueButton.classList.add('preserve-disabled-state'); + continueButton.addEventListener('click', function(e) { + chrome.send('networkOnExit'); + e.stopPropagation(); + }); + buttons.push(continueButton); + + return buttons; + }, + + /** + * Returns a control which should receive an initial focus. + */ + get defaultControl() { + return $('language-select'); + }, + + /** + * Enables/disables continue button. + * @param {boolean} enable Should the button be enabled? + */ + enableContinueButton: function(enable) { + $('continue-button').disabled = !enable; + }, + + /** + * Sets the current timezone. + * @param {string} timezoneId The timezone ID to select. + */ + setTimezone: function(timezoneId) { + $('timezone-select').value = timezoneId; + }, + + /** + * Shows the network error message. + * @param {string} message Message to be shown. + */ + showError: function(message) { + var error = document.createElement('div'); + var messageDiv = document.createElement('div'); + messageDiv.className = 'error-message-bubble'; + messageDiv.textContent = message; + error.appendChild(messageDiv); + + $('bubble').showContentForElement($('networks-list'), + cr.ui.Bubble.Attachment.BOTTOM, + error); + } + }; +}); + diff --git a/chromium/chrome/browser/resources/chromeos/login/oobe_screen_oauth_enrollment.css b/chromium/chrome/browser/resources/chromeos/login/oobe_screen_oauth_enrollment.css new file mode 100644 index 00000000000..d323a865c87 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/oobe_screen_oauth_enrollment.css @@ -0,0 +1,92 @@ +/* Copyright 2013 The Chromium Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#oauth-enrollment { + min-height: 609px; + padding: 70px 17px 21px; + width: 722px; +} + +#oauth-enroll-container { + display: -webkit-box; +} + +#oauth-enroll-signin-frame { + height: 456px; +} + +#oauth-enroll-signin-frame { + border: 0 none; + width: 100%; +} + +#oauth-enroll-signin-frame-container { + box-sizing: border-box; + padding-bottom: 20px; + width: 100%; +} + +#oauth-enroll-signin-link-container { + -webkit-box-pack: end; + display: -webkit-box; +} +#oauth-enroll-step-signin { + width: 100%; +} + +.oauth-enroll-step-center { + height: 480px; +} + +.oauth-enroll-step-center { + display: table; + margin: 0 auto; +} + +.oauth-enroll-step-content { + display: table-cell; + vertical-align: middle; +} + +.oauth-enroll-step-icon { + display: inline-block; + position: relative; + top: 0.5em; + vertical-align: top; +} + +.oauth-enroll-step-icon > * { + -webkit-margin-end: .4em; + display: inline-block; + height: 22px; + position: relative; + top: -11px; + width: 22px; +} + +.oauth-enroll-step-message { + display: inline-block; + max-width: 400px; + text-align: left; + vertical-align: top; +} + +#oauth-enroll-explain-message { + white-space: pre-line; +} + +.oauth-enroll-link { + color: -webkit-link; + cursor: pointer; + text-decoration: underline; +} + +#oobe.oauth-enrollment #header-oauth-enrollment { + display: block; +} + +#oauth-enrollment .step-contents { + -webkit-margin-after: 10px; +} diff --git a/chromium/chrome/browser/resources/chromeos/login/oobe_screen_oauth_enrollment.html b/chromium/chrome/browser/resources/chromeos/login/oobe_screen_oauth_enrollment.html new file mode 100644 index 00000000000..dbf1de3f588 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/oobe_screen_oauth_enrollment.html @@ -0,0 +1,62 @@ +<div id="oauth-enrollment" class="step hidden"> + <div id="oauth-enroll-container" class="step-contents"> + <div id="oauth-enroll-step-signin"> + <div id="oauth-enroll-signin-frame-container"> + <iframe id="oauth-enroll-signin-frame" src="about:blank" marginwidth="0" + marginheight="0" frameborder="0" scrolling="no"></iframe> + </div> + <div id="oauth-enroll-signin-link-container"> + <a class="oauth-enroll-explain-link oauth-enroll-link" + i18n-content="oauthEnrollExplainLink" hidden></a> + </div> + </div> + <div id="oauth-enroll-step-working" class="oauth-enroll-step-center" hidden> + <div class="oauth-enroll-step-content"> + <span class="oauth-enroll-step-icon"> + <span class="spinner"></span> + </span> + <span class="oauth-enroll-step-message"> + <span id="oauth-enroll-working-message"></span> + </span> + </div> + </div> + <div id="oauth-enroll-step-error" class="oauth-enroll-step-center" hidden> + <div class="oauth-enroll-step-content"> + <span class="oauth-enroll-step-icon"> + <img src="chrome://theme/IDR_ENROLL_FAILURE"> + </span> + <span class="oauth-enroll-step-message"> + <span id="oauth-enroll-error-message"></span> + <p> + <a id="oauth-enroll-error-retry" class="oauth-enroll-link" href="#" + i18n-content="oauthEnrollRetry"></a> + <a class="oauth-enroll-explain-link oauth-enroll-link" href="#" + i18n-content="oauthEnrollExplainLink" hidden></a> + </p> + </span> + </div> + </div> + <div id="oauth-enroll-step-explain" class="oauth-enroll-step-center" hidden> + <div class="oauth-enroll-step-content"> + <span class="oauth-enroll-step-icon"> + <img src="chrome://theme/IDR_INFO"> + </span> + <span class="oauth-enroll-step-message"> + <span id="oauth-enroll-explain-message" + i18n-content="oauthEnrollExplain"></span> + </span> + </div> + </div> + <div id="oauth-enroll-step-success" class="oauth-enroll-step-center" hidden> + <div class="oauth-enroll-step-content"> + <span class="oauth-enroll-step-icon"> + <img src="chrome://theme/IDR_ENROLL_SUCCESS"> + </span> + <span class="oauth-enroll-step-message"> + <span i18n-content="oauthEnrollSuccess"></span> + </span> + </div> + </div> + </div> + <div id="oauth-enrollment-controls" class="step-controls"></div> +</div> diff --git a/chromium/chrome/browser/resources/chromeos/login/oobe_screen_oauth_enrollment.js b/chromium/chrome/browser/resources/chromeos/login/oobe_screen_oauth_enrollment.js new file mode 100644 index 00000000000..205b83526e5 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/oobe_screen_oauth_enrollment.js @@ -0,0 +1,308 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +login.createScreen('OAuthEnrollmentScreen', 'oauth-enrollment', function() { + /** @const */ var STEP_SIGNIN = 'signin'; + /** @const */ var STEP_WORKING = 'working'; + /** @const */ var STEP_ERROR = 'error'; + /** @const */ var STEP_EXPLAIN = 'explain'; + /** @const */ var STEP_SUCCESS = 'success'; + + return { + EXTERNAL_API: [ + 'setIsAutoEnrollment', + 'showStep', + 'showError', + 'showWorking', + ], + + /** + * URL to load in the sign in frame. + */ + signInUrl_: null, + + /** + * Whether this is a manual or auto enrollment. + */ + isAutoEnrollment_: false, + + /** + * True if enrollment cancellation should be prevented. + */ + preventCancellation_: false, + + /** + * Enrollment steps with names and buttons to show. + */ + steps_: null, + + /** + * Dialog to confirm that auto-enrollment should really be cancelled. + * This is only created the first time it's used. + */ + confirmDialog_: null, + + /** + * The current step. This is the last value passed to showStep(). + */ + currentStep_: null, + + /** @override */ + decorate: function() { + window.addEventListener('message', + this.onMessage_.bind(this), false); + $('oauth-enroll-error-retry').addEventListener('click', + this.doRetry_.bind(this)); + var links = document.querySelectorAll('.oauth-enroll-explain-link'); + for (var i = 0; i < links.length; i++) { + links[i].addEventListener('click', + this.showStep.bind(this, STEP_EXPLAIN)); + } + }, + + /** + * Header text of the screen. + * @type {string} + */ + get header() { + return loadTimeData.getString('oauthEnrollScreenTitle'); + }, + + /** + * Buttons in oobe wizard's button strip. + * @type {array} Array of Buttons. + */ + get buttons() { + var buttons = []; + + var cancelButton = this.ownerDocument.createElement('button'); + cancelButton.id = 'oauth-enroll-cancel-button'; + cancelButton.textContent = loadTimeData.getString('oauthEnrollCancel'); + + cancelButton.addEventListener('click', function(e) { + chrome.send('oauthEnrollClose', ['cancel']); + }.bind(this)); + buttons.push(cancelButton); + + var tryAgainButton = this.ownerDocument.createElement('button'); + tryAgainButton.id = 'oauth-enroll-try-again-button'; + tryAgainButton.hidden = true; + tryAgainButton.textContent = + loadTimeData.getString('oauthEnrollRetry'); + tryAgainButton.addEventListener('click', this.doRetry_.bind(this)); + buttons.push(tryAgainButton); + + var explainButton = this.ownerDocument.createElement('button'); + explainButton.id = 'oauth-enroll-explain-button'; + explainButton.hidden = true; + explainButton.textContent = + loadTimeData.getString('oauthEnrollExplainButton'); + explainButton.addEventListener('click', this.doRetry_.bind(this)); + buttons.push(explainButton); + + var doneButton = this.ownerDocument.createElement('button'); + doneButton.id = 'oauth-enroll-done-button'; + doneButton.hidden = true; + doneButton.textContent = + loadTimeData.getString('oauthEnrollDone'); + doneButton.addEventListener('click', function(e) { + chrome.send('oauthEnrollClose', ['done']); + }); + buttons.push(doneButton); + + return buttons; + }, + + /** + * Sets the |isAutoEnrollment| flag of the OAuthEnrollmentScreen class and + * updates the UI. + * @param {boolean} is_auto_enrollment the new value of the flag. + */ + setIsAutoEnrollment: function(is_auto_enrollment) { + this.isAutoEnrollment_ = is_auto_enrollment; + // The cancel button is not available during auto-enrollment. + var cancel = this.isAutoEnrollment_ ? null : 'cancel'; + // During auto-enrollment the user must try again from the error screen. + var errorCancel = this.isAutoEnrollment_ ? 'try-again' : 'cancel'; + this.steps_ = [ + { + name: STEP_SIGNIN, + button: cancel + }, + { + name: STEP_WORKING, + button: cancel + }, + { + name: STEP_ERROR, + button: errorCancel, + focusButton: this.isAutoEnrollment_ + }, + { + name: STEP_EXPLAIN, + button: 'explain', + focusButton: true + }, + { + name: STEP_SUCCESS, + button: 'done', + focusButton: true + }, + ]; + + var links = document.querySelectorAll('.oauth-enroll-explain-link'); + for (var i = 0; i < links.length; i++) { + links[i].hidden = !this.isAutoEnrollment_; + } + }, + + /** + * Event handler that is invoked just before the frame is shown. + * @param {Object} data Screen init payload, contains the signin frame + * URL. + */ + onBeforeShow: function(data) { + var url = data.signin_url; + url += '?gaiaUrl=' + encodeURIComponent(data.gaiaUrl); + this.signInUrl_ = url; + this.setIsAutoEnrollment(data.is_auto_enrollment); + this.preventCancellation_ = data.prevent_cancellation; + $('oauth-enroll-signin-frame').contentWindow.location.href = + this.signInUrl_; + if (this.preventCancellation_) { + $('oauth-enroll-cancel-button').textContent = + loadTimeData.getString('oauthEnrollCancelAutoEnrollmentGoBack'); + } + + this.showStep(STEP_SIGNIN); + }, + + /** + * Cancels enrollment and drops the user back to the login screen. + */ + cancel: function() { + if (this.isAutoEnrollment_) + return; + + chrome.send('oauthEnrollClose', ['cancel']); + }, + + /** + * Switches between the different steps in the enrollment flow. + * @param {string} step the steps to show, one of "signin", "working", + * "error", "success". + */ + showStep: function(step) { + this.currentStep_ = step; + $('oauth-enroll-cancel-button').hidden = true; + $('oauth-enroll-try-again-button').hidden = true; + $('oauth-enroll-explain-button').hidden = true; + $('oauth-enroll-done-button').hidden = true; + for (var i = 0; i < this.steps_.length; i++) { + var theStep = this.steps_[i]; + var active = (theStep.name == step); + $('oauth-enroll-step-' + theStep.name).hidden = !active; + if (active && theStep.button) { + var button = $('oauth-enroll-' + theStep.button + '-button'); + button.hidden = false; + if (theStep.focusButton) + button.focus(); + } + } + }, + + /** + * Sets an error message and switches to the error screen. + * @param {string} message the error message. + * @param {boolean} retry whether the retry link should be shown. + */ + showError: function(message, retry) { + $('oauth-enroll-error-message').textContent = message; + $('oauth-enroll-error-retry').hidden = !retry || this.isAutoEnrollment_; + this.showStep(STEP_ERROR); + }, + + /** + * Sets a progressing message and switches to the working screen. + * @param {string} message the progress message. + */ + showWorking: function(message) { + $('oauth-enroll-working-message').textContent = message; + this.showStep(STEP_WORKING); + }, + + /** + * Handler for cancellations of an enforced auto-enrollment. + */ + cancelAutoEnrollment: function() { + // Check if this is forced enrollment flow for a kiosk app. + if (this.preventCancellation_) + return; + + // The dialog to confirm cancellation of auto-enrollment is only shown + // if this is an auto-enrollment, and if the user is currently in the + // 'explain' step. + if (!this.isAutoEnrollment_ || this.currentStep_ !== STEP_EXPLAIN) + return; + if (!this.confirmDialog_) { + this.confirmDialog_ = new cr.ui.dialogs.ConfirmDialog(document.body); + this.confirmDialog_.setOkLabel( + loadTimeData.getString('oauthEnrollCancelAutoEnrollmentConfirm')); + this.confirmDialog_.setCancelLabel( + loadTimeData.getString('oauthEnrollCancelAutoEnrollmentGoBack')); + this.confirmDialog_.setInitialFocusOnCancel(); + } + this.confirmDialog_.show( + loadTimeData.getString('oauthEnrollCancelAutoEnrollmentReally'), + this.onConfirmCancelAutoEnrollment_.bind(this)); + }, + + /** + * Retries the enrollment process after an error occurred in a previous + * attempt. This goes to the C++ side through |chrome| first to clean up the + * profile, so that the next attempt is performed with a clean state. + */ + doRetry_: function() { + chrome.send('oauthEnrollRetry'); + }, + + /** + * Handler for confirmation of cancellation of auto-enrollment. + */ + onConfirmCancelAutoEnrollment_: function() { + chrome.send('oauthEnrollClose', ['autocancel']); + }, + + /** + * Checks if a given HTML5 message comes from the URL loaded into the signin + * frame. + * @param {Object} m HTML5 message. + * @type {boolean} whether the message comes from the signin frame. + */ + isSigninMessage_: function(m) { + return this.signInUrl_ != null && + this.signInUrl_.indexOf(m.origin) == 0 && + m.source == $('oauth-enroll-signin-frame').contentWindow; + }, + + /** + * Event handler for HTML5 messages. + * @param {Object} m HTML5 message. + */ + onMessage_: function(m) { + if (!this.isSigninMessage_(m)) + return; + + var msg = m.data; + + // 'completeLogin' for full gaia signin flow. For SAML case, + // 'confirmPassword' is sent after authentication. Since enrollment + // does not need the actual password, this is treated the same as + // 'completeLogin'. + if (msg.method == 'completeLogin' || msg.method == 'confirmPassword') + chrome.send('oauthEnrollCompleteLogin', [msg.email]); + } + }; +}); + diff --git a/chromium/chrome/browser/resources/chromeos/login/oobe_screen_reset.css b/chromium/chrome/browser/resources/chromeos/login/oobe_screen_reset.css new file mode 100644 index 00000000000..c9fe92ea16c --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/oobe_screen_reset.css @@ -0,0 +1,28 @@ +/* Copyright 2013 The Chromium Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#reset { + min-height: 423px; + padding: 40px 17px 80px; + text-align: center; + width: 722px; +} + +#reset #reset-controls { + -webkit-box-pack: center; + bottom: 80px; +} + +#reset #reset-warning-msg { + color: #606060; + font-size: 22px; + padding: 5px 45px 30px; +} + +#reset #reset-warning-details { + color: #606060; + font-size: 16px; + padding: 35px 40px 80px; +} diff --git a/chromium/chrome/browser/resources/chromeos/login/oobe_screen_reset.html b/chromium/chrome/browser/resources/chromeos/login/oobe_screen_reset.html new file mode 100644 index 00000000000..16fba2ba539 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/oobe_screen_reset.html @@ -0,0 +1,8 @@ +<div class="step hidden no-logo" id="reset"> + <div class="step-contents"> + <div id="reset-warning-msg" i18n-content="resetWarningText"></div> + <img id="reset-warning-icon" src="chrome://theme/IDR_RESET_WARNING" alt=""> + <div id="reset-warning-details" i18n-content="resetWarningDetails"></div> + </div> + <div id="reset-controls" class="step-controls"></div> +</div> diff --git a/chromium/chrome/browser/resources/chromeos/login/oobe_screen_reset.js b/chromium/chrome/browser/resources/chromeos/login/oobe_screen_reset.js new file mode 100644 index 00000000000..e37989d3525 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/oobe_screen_reset.js @@ -0,0 +1,62 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** + * @fileoverview Oobe reset screen implementation. + */ + +login.createScreen('ResetScreen', 'reset', function() { + return { + /** + * Header text of the screen. + * @type {string} + */ + get header() { + return loadTimeData.getString('resetScreenTitle'); + }, + + /** + * Buttons in oobe wizard's button strip. + * @type {array} Array of Buttons. + */ + get buttons() { + var buttons = []; + + var resetButton = this.ownerDocument.createElement('button'); + resetButton.id = 'reset-button'; + resetButton.textContent = loadTimeData.getString('resetButton'); + resetButton.addEventListener('click', function(e) { + chrome.send('resetOnReset'); + e.stopPropagation(); + }); + buttons.push(resetButton); + + var cancelButton = this.ownerDocument.createElement('button'); + cancelButton.id = 'reset-cancel-button'; + cancelButton.textContent = loadTimeData.getString('cancelButton'); + cancelButton.addEventListener('click', function(e) { + chrome.send('resetOnCancel'); + e.stopPropagation(); + }); + buttons.push(cancelButton); + + return buttons; + }, + + /** + * Returns a control which should receive an initial focus. + */ + get defaultControl() { + return $('reset-cancel-button'); + }, + + /** + * Cancels the reset and drops the user back to the login screen. + */ + cancel: function() { + chrome.send('resetOnCancel'); + } + }; +}); + diff --git a/chromium/chrome/browser/resources/chromeos/login/oobe_screen_terms_of_service.css b/chromium/chrome/browser/resources/chromeos/login/oobe_screen_terms_of_service.css new file mode 100644 index 00000000000..fbf6a42b8b5 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/oobe_screen_terms_of_service.css @@ -0,0 +1,93 @@ +/* Copyright (c) 2013 The Chromium Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#terms-of-service { + padding: 70px 17px 21px; +} + +#tos-container { + border: 1px solid #d9d9d9; + height: 222px; +} + +#terms-of-service .step-contents { + -webkit-margin-after: 49px; + -webkit-margin-start: 32px; +} + +#terms-of-service h1 { + font-size: 100%; + font-weight: normal; + margin: 0 0 8px 0; + width: 630px; +} + +#tos-subheading { + color: rgb(100, 100, 100); + font-size: 11px; + margin: 0 0 27px 0; + width: 630px; +} + +#tos-container { + -webkit-margin-end: -2px; + overflow: auto; + width: 630px; +} + +#tos-content { + padding: 8px 13px; +} + +#terms-of-service h2 { + font-size: 100%; + margin: 0 0 13px 0; +} + +#tos-content-main { + white-space: pre-wrap; +} + +#tos-loading, +#tos-error { + -webkit-align-items: center; + -webkit-flex-direction: column; + -webkit-justify-content: center; + display: none; + height: 100%; + width: 100%; +} + +#terms-of-service p { + color: rgb(100, 100, 100); + font-size: 12px; + margin: 0; + text-align: center; +} + +#terms-of-service p + p { + margin-top: 4px; +} + +.step.tos-loading #tos-content { + display: none; +} + +.step.tos-loading #tos-loading { + display: -webkit-flex; +} + +.step.error #tos-content, +.step.error #tos-accept-button { + display: none; +} + +.step.error #tos-error { + display: -webkit-flex; +} + +#terms-of-service.error #tos-back-button { + -webkit-margin-end: 1px; +} diff --git a/chromium/chrome/browser/resources/chromeos/login/oobe_screen_terms_of_service.html b/chromium/chrome/browser/resources/chromeos/login/oobe_screen_terms_of_service.html new file mode 100644 index 00000000000..2758d13bcf0 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/oobe_screen_terms_of_service.html @@ -0,0 +1,24 @@ +<div class="step right hidden tos-loading" id="terms-of-service"> + <div class="step-contents"> + <h1 id="tos-heading"></h1> + <div id="tos-subheading"></div> + <div id="tos-container"> + <div id="tos-content"> + <h2 id="tos-content-heading"></h2> + <span id="tos-content-main"></span> + </div> + <div id="tos-loading"> + <div> + <p i18n-content="termsOfServiceLoading"></p> + </div> + </div> + <div id="tos-error"> + <div> + <p i18n-content="termsOfServiceError"></p> + <p i18n-content="termsOfServiceTryAgain"></p> + </div> + </div> + </div> + </div> + <div id="terms-of-service-controls" class="step-controls"></div> +</div> diff --git a/chromium/chrome/browser/resources/chromeos/login/oobe_screen_terms_of_service.js b/chromium/chrome/browser/resources/chromeos/login/oobe_screen_terms_of_service.js new file mode 100644 index 00000000000..840a49bb736 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/oobe_screen_terms_of_service.js @@ -0,0 +1,111 @@ +// Copyright (c) 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** + * @fileoverview Oobe Terms of Service screen implementation. + */ + +login.createScreen('TermsOfServiceScreen', 'terms-of-service', + function() { return { + EXTERNAL_API: [ + 'setDomain', + 'setTermsOfServiceLoadError', + 'setTermsOfService' + ], + + /** + * Updates headings on the screen to indicate that the Terms of Service + * being shown belong to |domain|. + * @param {string} domain The domain whose Terms of Service are being shown. + */ + setDomain: function(domain) { + $('tos-heading').textContent = + loadTimeData.getStringF('termsOfServiceScreenHeading', domain); + $('tos-subheading').textContent = + loadTimeData.getStringF('termsOfServiceScreenSubheading', domain); + $('tos-content-heading').textContent = + loadTimeData.getStringF('termsOfServiceContentHeading', domain); + }, + + /** + * Displays an error message on the Terms of Service screen. Called when the + * download of the Terms of Service has failed. + */ + setTermsOfServiceLoadError: function() { + this.classList.remove('tos-loading'); + this.classList.add('error'); + }, + + /** + * Displays the given |termsOfService|, enables the accept button and moves + * the focus to it. + * @param {string} termsOfService The terms of service, as plain text. + */ + setTermsOfService: function(termsOfService) { + this.classList.remove('tos-loading'); + $('tos-content-main').textContent = termsOfService; + $('tos-accept-button').disabled = false; + // Initially, the back button is focused and the accept button is + // disabled. + // Move the focus to the accept button now but only if the user has not + // moved the focus anywhere in the meantime. + if (!$('tos-back-button').blurred) + $('tos-accept-button').focus(); + }, + + /** + * Buttons in Oobe wizard's button strip. + * @type {array} Array of Buttons. + */ + get buttons() { + var buttons = []; + + var backButton = this.ownerDocument.createElement('button'); + backButton.id = 'tos-back-button'; + backButton.textContent = + loadTimeData.getString('termsOfServiceBackButton'); + backButton.addEventListener('click', function(event) { + $('tos-back-button').disabled = true; + $('tos-accept-button').disabled = true; + chrome.send('termsOfServiceBack'); + }); + backButton.addEventListener('blur', function(event) { + this.blurred = true; + }); + buttons.push(backButton); + + var acceptButton = this.ownerDocument.createElement('button'); + acceptButton.id = 'tos-accept-button'; + acceptButton.disabled = true; + acceptButton.classList.add('preserve-disabled-state'); + acceptButton.textContent = + loadTimeData.getString('termsOfServiceAcceptButton'); + acceptButton.addEventListener('click', function(event) { + $('tos-back-button').disabled = true; + $('tos-accept-button').disabled = true; + chrome.send('termsOfServiceAccept'); + }); + buttons.push(acceptButton); + + return buttons; + }, + + /** + * Returns the control which should receive initial focus. + */ + get defaultControl() { + return $('tos-accept-button').disabled ? $('tos-back-button') : + $('tos-accept-button'); + }, + + /** + * Event handler that is invoked just before the screen is shown. + * @param {object} data Screen init payload. + */ + onBeforeShow: function(data) { + Oobe.getInstance().headerHidden = true; + } + }; +}); + diff --git a/chromium/chrome/browser/resources/chromeos/login/oobe_screen_update.css b/chromium/chrome/browser/resources/chromeos/login/oobe_screen_update.css new file mode 100644 index 00000000000..4272f494ece --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/oobe_screen_update.css @@ -0,0 +1,76 @@ +/* Copyright 2013 The Chromium Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#update { + min-height: 423px; + padding: 70px 17px 69px; /* Screen has no controls. */ +} + +#update #update-screen-curtain { + -webkit-box-align: start; + -webkit-box-pack: center; +} + +#update #update-checking-progress { + -webkit-box-align: start; + -webkit-box-pack: center; + color: #9c9c9c; + display: -webkit-box; +} + +#update #update-screen-curtain { + margin: 45px 35px; +} + +#update-screen-main { + margin: 45px 35px; + min-height: 114px; + text-align: center; +} + +#update #update-cancel-hint { + -webkit-margin-before: 15px; + -webkit-margin-start: 45px; + color: rgb(170, 0, 0); + position: absolute; +} + +#update #update-upper-label { + -webkit-margin-after: 4px; +} + +#update #checking-updates-label { + -webkit-margin-after: 90px; +} + +#update #update-bottom-label { + -webkit-margin-after: 4px; + -webkit-margin-before: 4px; + text-align: left; +} + +#update progress { + -webkit-margin-after: 4px; + -webkit-margin-before: 34px; + border: solid 1px #bbb; + height: 15px; + padding: 1px; + width: 300px; +} + +#update progress::-webkit-progress-bar { + background: white; +} + +#update progress::-webkit-progress-value { + background: #bbb; +} + +#update .progress-message { + -webkit-margin-before: 4px; + color: #a3a3a3; + font-size: 13px; + text-align: center; +} diff --git a/chromium/chrome/browser/resources/chromeos/login/oobe_screen_update.html b/chromium/chrome/browser/resources/chromeos/login/oobe_screen_update.html new file mode 100644 index 00000000000..b212f6c76c3 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/oobe_screen_update.html @@ -0,0 +1,28 @@ +<div class="step right hidden animated" id="update"> + <div class="step-contents"> + <div id="update-cancel-hint" hidden> + <p i18n-content="cancelUpdateHint"></p> + </div> + <div id="update-screen-curtain"> + <div id="checking-updates-label" i18n-content="checkingForUpdatesMsg"> + </div> + <div id="update-checking-progress" aria-live="polite"> + <div class="throbber"></div> + <div i18n-content="checkingForUpdates"></div> + </div> + </div> + <div id="update-screen-main" hidden> + <p id="update-upper-label"></p> + <p id="update-bottom-label" i18n-content="installingUpdateDesc"></p> + <progress id="update-progress-bar" max="100" value="0"></progress> + <p id="estimated-time-left" class="progress-message" hidden></p> + <p id="progress-message" class="progress-message" hidden></p> + </div> + </div> + <div id="update-extra-controls" class="step-extra-controls"> + <div id="update-accessibility"> + <a id="update-accessibility-link" href="#" + i18n-content="accessibilityLink"></a> + </div> + </div> +</div> diff --git a/chromium/chrome/browser/resources/chromeos/login/oobe_screen_update.js b/chromium/chrome/browser/resources/chromeos/login/oobe_screen_update.js new file mode 100644 index 00000000000..34c9f036184 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/oobe_screen_update.js @@ -0,0 +1,124 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** + * @fileoverview Oobe update screen implementation. + */ + +login.createScreen('UpdateScreen', 'update', function() { + return { + EXTERNAL_API: [ + 'enableUpdateCancel', + 'setUpdateProgress', + 'showEstimatedTimeLeft', + 'setEstimatedTimeLeft', + 'showProgressMessage', + 'setProgressMessage', + 'setUpdateMessage', + 'showUpdateCurtain' + ], + + /** + * Header text of the screen. + * @type {string} + */ + get header() { + return loadTimeData.getString('updateScreenTitle'); + }, + + /** + * Cancels the screen. + */ + cancel: function() { + // It's safe to act on the accelerator even if it's disabled on official + // builds, since Chrome will just ignore the message in that case. + var updateCancelHint = $('update-cancel-hint').firstElementChild; + updateCancelHint.textContent = + loadTimeData.getString('cancelledUpdateMessage'); + chrome.send('cancelUpdate'); + }, + + /** + * Makes 'press Escape to cancel update' hint visible. + */ + enableUpdateCancel: function() { + $('update-cancel-hint').hidden = false; + }, + + /** + * Sets update's progress bar value. + * @param {number} progress Percentage of the progress bar. + */ + setUpdateProgress: function(progress) { + $('update-progress-bar').value = progress; + }, + + /** + * Shows or hides downloading ETA message. + * @param {boolean} visible Are ETA message visible? + */ + showEstimatedTimeLeft: function(visible) { + $('progress-message').hidden = visible; + $('estimated-time-left').hidden = !visible; + }, + + /** + * Sets estimated time left until download will complete. + * @param {number} seconds Time left in seconds. + */ + setEstimatedTimeLeft: function(seconds) { + var minutes = Math.ceil(seconds / 60); + var message = ''; + if (minutes > 60) { + message = loadTimeData.getString('downloadingTimeLeftLong'); + } else if (minutes > 55) { + message = loadTimeData.getString('downloadingTimeLeftStatusOneHour'); + } else if (minutes > 20) { + message = loadTimeData.getStringF('downloadingTimeLeftStatusMinutes', + Math.ceil(minutes / 5) * 5); + } else if (minutes > 1) { + message = loadTimeData.getStringF('downloadingTimeLeftStatusMinutes', + minutes); + } else { + message = loadTimeData.getString('downloadingTimeLeftSmall'); + } + $('estimated-time-left').textContent = + loadTimeData.getStringF('downloading', message); + }, + + /** + * Shows or hides info message below progress bar. + * @param {boolean} visible Are message visible? + */ + showProgressMessage: function(visible) { + $('estimated-time-left').hidden = visible; + $('progress-message').hidden = !visible; + }, + + /** + * Sets message below progress bar. + * @param {string} message Message that should be shown. + */ + setProgressMessage: function(message) { + $('progress-message').innerText = message; + }, + + /** + * Sets update message, which is shown above the progress bar. + * @param {text} message Message which is shown by the label. + */ + setUpdateMessage: function(message) { + $('update-upper-label').textContent = message; + }, + + /** + * Shows or hides update curtain. + * @param {boolean} visible Are curtains visible? + */ + showUpdateCurtain: function(visible) { + $('update-screen-curtain').hidden = !visible; + $('update-screen-main').hidden = visible; + } + }; +}); diff --git a/chromium/chrome/browser/resources/chromeos/login/oobe_screen_user_image.css b/chromium/chrome/browser/resources/chromeos/login/oobe_screen_user_image.css new file mode 100644 index 00000000000..ec497f2e6dd --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/oobe_screen_user_image.css @@ -0,0 +1,257 @@ +/* Copyright 2013 The Chromium Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#user-image { + min-height: 443px; + padding: 70px 17px 21px; + width: 702px; +} + +#user-image.loading { + min-height: 609px; /* Should be the same as #gaia-signin height. */ + width: 722px; /* Should be the same as #gaia-signin width. */ +} + +#user-image-screen-curtain { + -webkit-margin-start: 8px; +} + +#user-image-screen-description { + -webkit-margin-before: 0; +} + +#user-image-grid { + -webkit-user-drag: none; + -webkit-user-select: none; + display: inline-block; + height: 264px; + margin: 0; + outline: none; + overflow: hidden; + padding: 0; + width: 400px; +} + +#user-image-grid img { + background-color: white; + height: 50px; + vertical-align: middle; + width: 50px; +} + +#user-image-grid > li { + border: 1px solid rgba(0, 0, 0, 0.15); + border-radius: 4px; + display: inline-block; + margin: 4px; + padding: 3px; +} + +#user-image-grid [selected] { + border: 2px solid rgb(0, 102, 204); + padding: 2px; +} + +/** + * #user-image-preview can have the following classes: + * .default-image: one of the default images is selected (including the grey + * silhouette); + * .profile-image: profile image is selected; + * .profile-image-loading: profile image is being loaded; + * .online: camera is streaming video; + * .camera: camera (live or photo) is selected; + * .live: camera is in live mode (no photo taken yet/last photo removed). + */ +#user-image-preview { + float: right; + margin: 4px; + max-width: 220px; + position: relative; +} + +#profile-image { + position: relative; +} + +/* White background for spinner styled like user image */ +#profile-image .spinner-bg { + background-color: white; + height: 50px; + left: 3px; + position: absolute; + top: 3px; + visibility: hidden; + width: 50px; +} + +.profile-image-loading #profile-image .spinner-bg { + visibility: visible; +} + +#profile-image .spinner { + left: 14px; + position: absolute; + top: 14px; +} + +html[dir=rtl] #user-image-preview { + float: left; +} + +#user-image-preview-img { + display: block; + max-height: 220px; + max-width: 220px; +} + +#user-image-preview-img.animated-transform { + -webkit-transition: -webkit-transform 200ms linear; +} + +.camera.live #user-image-preview-img { + display: none; +} + +.camera.flip-x #user-image-preview-img { + -webkit-transform: rotateY(180deg); +} + +.default-image #user-image-preview-img { + background: white; + border: solid 1px #cacaca; + border-radius: 4px; + padding: 2px; +} + +.user-image-stream-area { + display: none; + padding: 0; + position: relative; +} + +.camera.live .user-image-stream-area { + display: block; +} + +#user-image-stream-crop { + -webkit-transition: -webkit-transform 200ms linear; + height: 220px; + overflow: hidden; + position: relative; + width: 220px; +} + +.flip-x #user-image-stream-crop { + -webkit-transform: rotateY(180deg); +} + +/* TODO(ivankr): specify dimensions from real capture size. */ +.user-image-stream { + border: solid 1px #cacaca; + height: 220px; + /* Center image for 4:3 aspect ratio. */ + left: -16.6%; + position: absolute; + visibility: hidden; +} + +.online .user-image-stream { + visibility: visible; +} + +#user-image-preview-caption { + color: dimGray; + font-size: smaller; + margin: 8px 4px; +} + +.camera #user-image-preview-caption { + display: none; +} + +#flip-photo { + -webkit-transition: opacity 75ms linear; + background: url('chrome://theme/IDR_MIRROR_FLIP') no-repeat; + border: none; + bottom: 44px; /* 8px + image bottom. */ + display: block; + height: 32px; + opacity: 0; + position: absolute; + right: 8px; + width: 32px; + z-index: 1; +} + +/* TODO(merkulova): remove when webkit crbug.com/126479 is fixed. */ +.flip-trick { + -webkit-transform: translateZ(1px); +} + +html[dir=rtl] #flip-photo { + left: 8px; + right: auto; +} + +/* "Flip photo" button is hidden during flip animation. */ +.camera.online:not(.animation) #flip-photo, +.camera.phototaken:not(.animation) #flip-photo { + opacity: 0.75; +} + +#discard-photo, +#take-photo { + display: none; + height: 25px; + margin: 4px 1px; + padding: 0; + width: 220px; +} + +.camera:not(.live) #discard-photo { + background: url('chrome://theme/IDR_USER_IMAGE_RECYCLE') + no-repeat center 0; + display: block; +} + +.camera.live.online #take-photo { + background: url('chrome://theme/IDR_USER_IMAGE_CAPTURE') + no-repeat center -1px; + display: block; +} + +#user-image-preview .perspective-box { + -webkit-perspective: 600px; +} + +#user-image-attribution { + /* Turned off for now. */ + display: none; +} + +#user-image .step-contents { + -webkit-margin-after: 30px; + -webkit-margin-start: 31px; +} + +.user-image-stream-area .spinner { + display: none; + height: 44px; + left: 50%; + margin-left: -22px; + margin-top: -22px; + position: absolute; + top: 50%; + width: 44px; +} + +.camera.live:not(.online) .user-image-stream-area .spinner { + display: block; +} + +#user-images-loading { + color: #9c9c9c; +} + diff --git a/chromium/chrome/browser/resources/chromeos/login/oobe_screen_user_image.html b/chromium/chrome/browser/resources/chromeos/login/oobe_screen_user_image.html new file mode 100644 index 00000000000..22ff800341e --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/oobe_screen_user_image.html @@ -0,0 +1,39 @@ +<div class="step right hidden loading" id="user-image"> + <div class="step-contents"> + <div id="user-image-screen-curtain"> + <p id="user-image-screen-description" + i18n-content="userImageScreenDescription"></p> + </div> + <div id="user-image-screen-main"> + <grid id="user-image-grid" + aria-labelledby="user-image-screen-description"> + </grid> + <div id="user-image-preview"> + <img id="user-image-preview-img" class="animated-transform" alt=""> + <div class="user-image-stream-area"> + <div class="perspective-box"> + <div id="user-image-stream-crop"> + <video class="user-image-stream" autoplay></video> + </div> + </div> + <div class="spinner"></div> + </div> + <p id="user-image-preview-caption"></p> + <button id="discard-photo" i18n-values="title:discardPhoto"></button> + <button id="take-photo" i18n-values="title:takePhoto"></button> + <button id="flip-photo" class="custom-appearance" + i18n-values="title:flipPhoto"></button> + </div> + <div id="user-image-attribution"> + <span i18n-content="authorCredit"></span> + <strong id="user-image-author-name"></strong> + <a id="user-image-author-website" target="_blank"></a> + </div> + </div> + </div> + <div id="user-image-controls" class="step-controls"></div> + <div id="user-images-loading" class="step-loading"> + <div class="throbber"></div> + <div i18n-content="syncingPreferences"></div> + </div> +</div> diff --git a/chromium/chrome/browser/resources/chromeos/login/oobe_screen_user_image.js b/chromium/chrome/browser/resources/chromeos/login/oobe_screen_user_image.js new file mode 100644 index 00000000000..0db36dc087c --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/oobe_screen_user_image.js @@ -0,0 +1,482 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** + * @fileoverview Oobe user image screen implementation. + */ + +cr.define('login', function() { + var UserImagesGrid = options.UserImagesGrid; + var ButtonImages = UserImagesGrid.ButtonImages; + + /** + * Array of button URLs used on this page. + * @type {Array.<string>} + * @const + */ + var ButtonImageUrls = [ + ButtonImages.TAKE_PHOTO + ]; + + /** + * Whether the web camera item should be preselected, if available. + * @type {boolean} + * @const + */ + var PRESELECT_CAMERA = false; + + /** + * Creates a new OOBE screen div. + * @constructor + * @extends {HTMLDivElement} + */ + var UserImageScreen = cr.ui.define(login.Screen); + + /** + * Registers with Oobe. + * @param {boolean} lazyInit If true, screen is decorated on first show. + */ + UserImageScreen.register = function(lazyInit) { + var screen = $('user-image'); + if (lazyInit) { + screen.__proto__ = UserImageScreen.prototype; + screen.deferredDecorate = function() { + UserImageScreen.decorate(screen); + }; + } else { + UserImageScreen.decorate(screen); + } + Oobe.getInstance().registerScreen(screen); + }; + + UserImageScreen.prototype = { + __proto__: login.Screen.prototype, + + /** + * Currently selected user image index (take photo button is with zero + * index). + * @type {number} + */ + selectedUserImage_: -1, + + /** + * Indicates if profile picture should be displayed on current screen. + */ + profilePictureEnabled_: false, + + /** + * URL for profile picture. + */ + profileImageUrl_: null, + + /** @override */ + decorate: function(element) { + var imageGrid = $('user-image-grid'); + UserImagesGrid.decorate(imageGrid); + + // Preview image will track the selected item's URL. + var previewElement = $('user-image-preview'); + previewElement.oncontextmenu = function(e) { e.preventDefault(); }; + + imageGrid.previewElement = previewElement; + imageGrid.selectionType = 'default'; + imageGrid.flipPhotoElement = $('flip-photo'); + + imageGrid.addEventListener('select', + this.handleSelect_.bind(this)); + imageGrid.addEventListener('activate', + this.handleImageActivated_.bind(this)); + imageGrid.addEventListener('phototaken', + this.handlePhotoTaken_.bind(this)); + imageGrid.addEventListener('photoupdated', + this.handlePhotoUpdated_.bind(this)); + + // Set the title for camera item in the grid. + imageGrid.setCameraTitles( + loadTimeData.getString('takePhoto'), + loadTimeData.getString('photoFromCamera')); + + this.setProfilePictureEnabled_(true); + + this.profileImageLoading = true; + + $('take-photo').addEventListener( + 'click', this.handleTakePhoto_.bind(this)); + $('discard-photo').addEventListener( + 'click', this.handleDiscardPhoto_.bind(this)); + + // Toggle 'animation' class for the duration of WebKit transition. + $('flip-photo').addEventListener( + 'click', function(e) { + previewElement.classList.add('animation'); + imageGrid.flipPhoto = !imageGrid.flipPhoto; + }); + $('user-image-stream-crop').addEventListener( + 'webkitTransitionEnd', function(e) { + previewElement.classList.remove('animation'); + }); + $('user-image-preview-img').addEventListener( + 'webkitTransitionEnd', function(e) { + previewElement.classList.remove('animation'); + }); + + this.updateLocalizedContent(); + + chrome.send('getImages'); + }, + + /** + * Header text of the screen. + * @type {string} + */ + get header() { + return loadTimeData.getString('userImageScreenTitle'); + }, + + /** + * Buttons in oobe wizard's button strip. + * @type {array} Array of Buttons. + */ + get buttons() { + var okButton = this.ownerDocument.createElement('button'); + okButton.id = 'ok-button'; + okButton.textContent = loadTimeData.getString('okButtonText'); + okButton.addEventListener('click', this.acceptImage_.bind(this)); + return [okButton]; + }, + + /** + * The caption to use for the Profile image preview. + * @type {string} + */ + get profileImageCaption() { + return this.profileImageCaption_; + }, + set profileImageCaption(value) { + this.profileImageCaption_ = value; + this.updateCaption_(); + }, + + /** + * True if the Profile image is being loaded. + * @type {boolean} + */ + get profileImageLoading() { + return this.profileImageLoading_; + }, + set profileImageLoading(value) { + this.profileImageLoading_ = value; + $('user-image-screen-main').classList[ + value ? 'add' : 'remove']('profile-image-loading'); + this.updateProfileImageCaption_(); + }, + + /** + * Handles image activation (by pressing Enter). + * @private + */ + handleImageActivated_: function() { + switch ($('user-image-grid').selectedItemUrl) { + case ButtonImages.TAKE_PHOTO: + this.handleTakePhoto_(); + break; + default: + this.acceptImage_(); + break; + } + }, + + /** + * Handles selection change. + * @param {Event} e Selection change event. + * @private + */ + handleSelect_: function(e) { + var imageGrid = $('user-image-grid'); + $('ok-button').disabled = false; + + // Camera selection + if (imageGrid.selectionType == 'camera') { + $('flip-photo').tabIndex = 0; + // No current image selected. + if (imageGrid.cameraLive) { + imageGrid.previewElement.classList.remove('phototaken'); + $('ok-button').disabled = true; + } else { + imageGrid.previewElement.classList.add('phototaken'); + this.notifyImageSelected_(); + } + } else { + imageGrid.previewElement.classList.remove('phototaken'); + $('flip-photo').tabIndex = -1; + this.notifyImageSelected_(); + } + // Start/stop camera on (de)selection. + if (!imageGrid.inProgramSelection && + imageGrid.selectionType != e.oldSelectionType) { + if (imageGrid.selectionType == 'camera') { + // Programmatic selection of camera item is done in + // startCamera callback where streaming is started by itself. + imageGrid.startCamera( + function() { + // Start capture if camera is still the selected item. + $('user-image-preview-img').classList.toggle( + 'animated-transform', true); + return imageGrid.selectedItem == imageGrid.cameraImage; + }); + } else { + $('user-image-preview-img').classList.toggle('animated-transform', + false); + imageGrid.stopCamera(); + } + } + this.updateCaption_(); + // Update image attribution text. + var image = imageGrid.selectedItem; + $('user-image-author-name').textContent = image.author; + $('user-image-author-website').textContent = image.website; + $('user-image-author-website').href = image.website; + $('user-image-attribution').style.visibility = + (image.author || image.website) ? 'visible' : 'hidden'; + }, + + /** + * Handle photo capture from the live camera stream. + */ + handleTakePhoto_: function(e) { + $('user-image-grid').takePhoto(); + }, + + /** + * Handle photo captured event. + * @param {Event} e Event with 'dataURL' property containing a data URL. + */ + handlePhotoTaken_: function(e) { + chrome.send('photoTaken', [e.dataURL]); + this.announceAccessibleMessage_( + loadTimeData.getString('photoCaptureAccessibleText')); + }, + + /** + * Handle photo updated event. + * @param {Event} e Event with 'dataURL' property containing a data URL. + */ + handlePhotoUpdated_: function(e) { + chrome.send('photoTaken', [e.dataURL]); + }, + + /** + * Handle discarding the captured photo. + */ + handleDiscardPhoto_: function(e) { + var imageGrid = $('user-image-grid'); + imageGrid.discardPhoto(); + this.announceAccessibleMessage_( + loadTimeData.getString('photoDiscardAccessibleText')); + }, + + /** + * Add an accessible message to the page that will be announced to + * users who have spoken feedback on, but will be invisible to all + * other users. It's removed right away so it doesn't clutter the DOM. + */ + announceAccessibleMessage_: function(msg) { + var element = document.createElement('div'); + element.setAttribute('aria-live', 'polite'); + element.style.position = 'relative'; + element.style.left = '-9999px'; + element.style.height = '0px'; + element.innerText = msg; + document.body.appendChild(element); + window.setTimeout(function() { + document.body.removeChild(element); + }, 0); + }, + + /** + * Event handler that is invoked just before the screen is shown. + * @param {object} data Screen init payload. + */ + onBeforeShow: function(data) { + Oobe.getInstance().headerHidden = true; + var imageGrid = $('user-image-grid'); + imageGrid.updateAndFocus(); + chrome.send('onUserImageScreenShown'); + }, + + /** + * Event handler that is invoked just before the screen is hidden. + */ + onBeforeHide: function() { + $('user-image-grid').stopCamera(); + }, + + /** + * Accepts currently selected image, if possible. + * @private + */ + acceptImage_: function() { + var okButton = $('ok-button'); + if (!okButton.disabled) { + // This ensures that #ok-button won't be re-enabled again. + $('user-image-grid').disabled = true; + okButton.disabled = true; + chrome.send('onUserImageAccepted'); + } + }, + + /** + * Updates user profile image. + * @param {?string} imageUrl Image encoded as data URL. If null, user has + * the default profile image, which we don't want to show. + * @private + */ + setProfileImage_: function(imageUrl) { + this.profileImageLoading = false; + this.profileImageUrl_ = imageUrl; + if (imageUrl !== null) { + this.profileImage_ = + $('user-image-grid').updateItem(this.profileImage_, imageUrl); + } + }, + + /** + * @param {boolean} present Whether camera is detected. + */ + setCameraPresent_: function(present) { + $('user-image-grid').cameraPresent = present; + }, + + /** + * Controls the profile image as one of image options. + * @param {enabled} Whether profile image option should be displayed. + * @private + */ + setProfilePictureEnabled_: function(enabled) { + if (this.profilePictureEnabled_ == enabled) + return; + this.profilePictureEnabled_ = enabled; + var imageGrid = $('user-image-grid'); + if (enabled) { + var url = ButtonImages.PROFILE_PICTURE; + if (!this.profileImageLoading && this.profileImageUrl_ !== null) { + url = this.profileImageUrl_; + } + // Profile image data (if present). + this.profileImage_ = imageGrid.addItem( + url, // Image URL. + loadTimeData.getString('profilePhoto'), // Title. + undefined, // Click handler. + 0, // Position. + this.profileImageLoading ? function(el) { + // Custom decorator for Profile image element. + var spinner = el.ownerDocument.createElement('div'); + spinner.className = 'spinner'; + var spinnerBg = el.ownerDocument.createElement('div'); + spinnerBg.className = 'spinner-bg'; + spinnerBg.appendChild(spinner); + el.appendChild(spinnerBg); + el.id = 'profile-image'; + } : undefined); + this.profileImage_.type = 'profile'; + } else { + imageGrid.removeItem(this.profileImage_); + } + }, + + /** + * Appends default images to the image grid. Should only be called once. + * @param {Array.<{url: string, author: string, website: string}>} images + * An array of default images data, including URL, author and website. + * @private + */ + setDefaultImages_: function(imagesData) { + var imageGrid = $('user-image-grid'); + for (var i = 0, data; data = imagesData[i]; i++) { + var item = imageGrid.addItem(data.url, data.title); + item.type = 'default'; + item.author = data.author || ''; + item.website = data.website || ''; + } + chrome.send('screenReady'); + }, + + /** + * Selects user image with the given URL. + * @param {string} url URL of the image to select. + * @private + */ + setSelectedImage_: function(url) { + var imageGrid = $('user-image-grid'); + imageGrid.selectedItemUrl = url; + imageGrid.focus(); + }, + + /** + * Hides curtain with spinner. + * @private + */ + hideCurtain_: function() { + this.classList.remove('loading'); + Oobe.getInstance().updateScreenSize(this); + }, + + /** + * Updates the image preview caption. + * @private + */ + updateCaption_: function() { + $('user-image-preview-caption').textContent = + $('user-image-grid').selectionType == 'profile' ? + this.profileImageCaption : ''; + }, + + /** + * Updates localized content of the screen that is not updated via template. + */ + updateLocalizedContent: function() { + this.updateProfileImageCaption_(); + }, + + /** + * Updates profile image caption. + * @private + */ + updateProfileImageCaption_: function() { + this.profileImageCaption = loadTimeData.getString( + this.profileImageLoading_ ? 'profilePhotoLoading' : 'profilePhoto'); + }, + + /** + * Notifies chrome about image selection. + * @private + */ + notifyImageSelected_: function() { + var imageGrid = $('user-image-grid'); + chrome.send('selectImage', + [imageGrid.selectedItemUrl, + imageGrid.selectionType, + !imageGrid.inProgramSelection]); + }, + }; + + // Forward public APIs to private implementations. + [ + 'setDefaultImages', + 'setCameraPresent', + 'setProfilePictureEnabled', + 'setProfileImage', + 'setSelectedImage', + 'hideCurtain' + ].forEach(function(name) { + UserImageScreen[name] = function(value) { + $('user-image')[name + '_'](value); + }; + }); + + return { + UserImageScreen: UserImageScreen + }; +}); + diff --git a/chromium/chrome/browser/resources/chromeos/login/oobe_screens.html b/chromium/chrome/browser/resources/chromeos/login/oobe_screens.html new file mode 100644 index 00000000000..4774573396e --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/oobe_screens.html @@ -0,0 +1,18 @@ +<include src="oobe_screen_eula.html"> +<include src="oobe_screen_network.html"> +<include src="oobe_screen_reset.html"> +<include src="oobe_screen_autolaunch.html"> +<include src="oobe_screen_enable_kiosk.html"> +<include src="oobe_screen_terms_of_service.html"> +<include src="oobe_screen_update.html"> +<include src="oobe_screen_user_image.html"> +<include src="screen_account_picker.html"> +<include src="screen_error_message.html"> +<include src="screen_gaia_signin.html"> +<include src="screen_locally_managed_user_creation.html"> +<include src="screen_password_changed.html"> +<include src="screen_tpm_error.html"> +<include src="screen_wrong_hwid.html"> +<include src="screen_app_launch_splash.html"> +<include src="screen_confirm_password.html"> +<include src="screen_message_box.html"> diff --git a/chromium/chrome/browser/resources/chromeos/login/resource_loader.js b/chromium/chrome/browser/resources/chromeos/login/resource_loader.js new file mode 100644 index 00000000000..db0b0a357c7 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/resource_loader.js @@ -0,0 +1,188 @@ +// Copyright 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** + * @fileoverview Deferred resource loader for OOBE/Login screens. + */ + +cr.define('cr.ui.login.ResourceLoader', function() { + 'use strict'; + + // Deferred assets. + var ASSETS = {}; + + /** + * Register assets for deferred loading. When the bundle is loaded + * assets will be added to the current page's DOM: <link> and <script> + * tags pointing to the CSS and JavaScript will be added to the + * <head>, and HTML will be appended to a specified element. + * + * @param {Object} desc Descriptor for the asset bundle + * @param {string} desc.id Unique identifier for the asset bundle. + * @param {Array=} desc.js URLs containing JavaScript sources. + * @param {Array=} desc.css URLs containing CSS rules. + * @param {Array.<Object>=} desc.html Descriptors for HTML fragments, + * each of which has a 'url' property and a 'targetID' property that + * specifies the node under which the HTML should be appended. + * + * Example: + * ResourceLoader.registerAssets({ + * id: 'bundle123', + * js: ['//foo.com/src.js', '//bar.com/lib.js'], + * css: ['//foo.com/style.css'], + * html: [{ url: '//foo.com/tmpls.html' targetID: 'tmpls'}] + * }); + * + * Note: to avoid cross-site requests, all HTML assets must be served + * from the same host as the rendered page. For example, if the + * rendered page is served as chrome://oobe, then all the HTML assets + * must be served as chrome://oobe/path/to/something.html. + */ + function registerAssets(desc) { + var html = desc.html || []; + var css = desc.css || []; + var js = desc.js || []; + ASSETS[desc.id] = { + html: html, css: css, js: js, + loaded: false, + count: html.length + css.length + js.length + }; + } + + /** + * Determines whether an asset bundle is defined for a specified id. + * @param {string} id The possible identifier. + */ + function hasDeferredAssets(id) { + return id in ASSETS; + } + + /** + * Determines whether an asset bundle has already been loaded. + * @param {string} id The identifier of the asset bundle. + */ + function alreadyLoadedAssets(id) { + return hasDeferredAssets(id) && ASSETS[id].loaded; + } + + /** + * Load a stylesheet into the current document. + * @param {string} id Identifier of the stylesheet's asset bundle. + * @param {string} url The URL resolving to a stylesheet. + */ + function loadCSS(id, url) { + var link = document.createElement('link'); + link.setAttribute('rel', 'stylesheet'); + link.setAttribute('href', url); + link.onload = resourceLoaded.bind(null, id); + document.head.appendChild(link); + } + + /** + * Load a script into the current document. + * @param {string} id Identifier of the script's asset bundle. + * @param {string} url The URL resolving to a script. + */ + function loadJS(id, url) { + var script = document.createElement('script'); + script.src = url; + script.onload = resourceLoaded.bind(null, id); + document.head.appendChild(script); + } + + /** + * Move DOM nodes from one parent element to another. + * @param {HTMLElement} from Element whose children should be moved. + * @param {HTMLElement} to Element to which nodes should be appended. + */ + function moveNodes(from, to) { + Array.prototype.forEach.call(from.children, to.appendChild, to); + } + + /** + * Tests whether an XMLHttpRequest has successfully finished loading. + * @param {string} url The requested URL. + * @param {XMLHttpRequest} xhr The XHR object. + */ + function isSuccessful(url, xhr) { + var fileURL = /^file:\/\//; + return xhr.readyState == 4 && + (xhr.status == 200 || fileURL.test(url) && xhr.status == 0); + } + + /* + * Load a chunk of HTML into the current document. + * @param {string} id Identifier of the page's asset bundle. + * @param {Object} html Descriptor of the HTML to fetch. + * @param {string} html.url The URL resolving to some HTML. + * @param {string} html.targetID The element ID to which the retrieved + * HTML nodes should be appended. + */ + function loadHTML(id, html) { + var xhr = new XMLHttpRequest(); + xhr.open('GET', html.url); + xhr.onreadystatechange = function() { + if (isSuccessful(html.url, xhr)) { + moveNodes(this.responseXML.body, $(html.targetID)); + resourceLoaded(id); + } + }; + xhr.responseType = 'document'; + xhr.send(); + } + + /** + * Record that a resource has been loaded for an asset bundle. When + * all the resources have been loaded the callback that was specified + * in the loadAssets call is invoked. + * @param {string} id Identifier of the asset bundle. + */ + function resourceLoaded(id) { + var assets = ASSETS[id]; + assets.count--; + if (assets.count == 0) + finishedLoading(id); + } + + /** + * Finishes loading an asset bundle. + * @param {string} id Identifier of the asset bundle. + */ + function finishedLoading(id) { + var assets = ASSETS[id]; + console.log('Finished loading asset bundle', id); + assets.loaded = true; + window.setTimeout(function() { + assets.callback(); + chrome.send('screenAssetsLoaded', [id]); + }, 0); + } + + /** + * Load an asset bundle, invoking the callback when finished. + * @param {string} id Identifier for the asset bundle to load. + * @param {function()=} callback Function to invoke when done loading. + */ + function loadAssets(id, callback) { + var assets = ASSETS[id]; + assets.callback = callback || function() {}; + console.log('Loading asset bundle', id); + if (alreadyLoadedAssets(id)) + console.warn('asset bundle', id, 'already loaded!'); + if (assets.count == 0) { + finishedLoading(id); + } else { + assets.css.forEach(loadCSS.bind(null, id)); + assets.js.forEach(loadJS.bind(null, id)); + assets.html.forEach(loadHTML.bind(null, id)); + } + } + + return { + alreadyLoadedAssets: alreadyLoadedAssets, + hasDeferredAssets: hasDeferredAssets, + loadAssets: loadAssets, + registerAssets: registerAssets + }; +}); diff --git a/chromium/chrome/browser/resources/chromeos/login/screen.js b/chromium/chrome/browser/resources/chromeos/login/screen.js new file mode 100644 index 00000000000..432d45b764b --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/screen.js @@ -0,0 +1,105 @@ +// Copyright (c) 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** + * @fileoverview Base class for all login WebUI screens. + */ +cr.define('login', function() { + var Screen = cr.ui.define('div'); + + function doNothing() {}; + + Screen.prototype = { + __proto__: HTMLDivElement.prototype, + + decorate: doNothing, + + /** + * Returns minimal size that screen prefers to have. Default implementation + * returns current screen size. + * @return {{width: number, height: number}} + */ + getPreferredSize: function() { + return {width: this.offsetWidth, height: this.offsetHeight}; + }, + + /** + * Called for currently active screen when screen size changed. + */ + onWindowResize: doNothing + }; + + return { + Screen: Screen + }; +}); + +cr.define('login', function() { + return { + /** + * Creates class and object for screen. + * Methods specified in EXTERNAL_API array of prototype + * will be available from C++ part. + * Example: + * login.createScreen('ScreenName', 'screen-id', { + * foo: function() { console.log('foo'); }, + * bar: function() { console.log('bar'); } + * EXTERNAL_API: ['foo']; + * }); + * login.ScreenName.register(); + * var screen = $('screen-id'); + * screen.foo(); // valid + * login.ScreenName.foo(); // valid + * screen.bar(); // valid + * login.ScreenName.bar(); // invalid + * + * @param {string} name Name of created class. + * @param {string} id Id of div representing screen. + * @param {(function()|Object)} proto Prototype of object or function that + * returns prototype. + */ + createScreen: function(name, id, proto) { + if (typeof proto == 'function') + proto = proto(); + cr.define('login', function() { + var api = proto.EXTERNAL_API || []; + for (var i = 0; i < api.length; ++i) { + var methodName = api[i]; + if (typeof proto[methodName] !== 'function') + throw Error('External method "' + methodName + '" for screen "' + + name + '" not a function or undefined.'); + } + + var constructor = cr.ui.define(login.Screen); + constructor.prototype = Object.create(login.Screen.prototype); + Object.getOwnPropertyNames(proto).forEach(function(propertyName) { + var descriptor = + Object.getOwnPropertyDescriptor(proto, propertyName); + Object.defineProperty(constructor.prototype, + propertyName, descriptor); + if (api.indexOf(propertyName) >= 0) { + constructor[propertyName] = (function(x) { + return function() { + var screen = $(id); + return screen[x].apply(screen, arguments); + }; + })(propertyName); + } + }); + constructor.prototype.name = function() { return id; }; + + constructor.register = function() { + var screen = $(id); + constructor.decorate(screen); + Oobe.getInstance().registerScreen(screen); + }; + + var result = {}; + result[name] = constructor; + return result; + }); + } + }; +}); + diff --git a/chromium/chrome/browser/resources/chromeos/login/screen_account_picker.css b/chromium/chrome/browser/resources/chromeos/login/screen_account_picker.css new file mode 100644 index 00000000000..f46e7c16d60 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/screen_account_picker.css @@ -0,0 +1,50 @@ +/* Copyright (c) 2012 The Chromium Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +.account-picker.flying-pods #account-picker { + -webkit-transition: width 180ms ease, + height 180ms ease; +} + +#signin-banner-container1 { + bottom: 100%; + margin-bottom: 10px; + position: absolute; + width: 100%; +} + +#signin-banner-container2 { + display: inline-block; + position: relative; + right: -50%; +} + +#signin-banner { + background-color: rgba(0, 0, 0, 0.75); + border-radius: 4px; + color: whitesmoke; + display: none; + font-size: 15px; + left: -50%; + padding: 20px; + position: relative; + white-space: nowrap; +} + +html[screen=user-adding] #signin-banner { + display: inline-block; +} + +html[screen=lock] #signin-banner { + display: inline-block; + opacity: 0; + visibility: hidden; +} + +html[screen=lock] #signin-banner.message-set { + -webkit-transition: opacity 1s; + opacity: 1; + visibility: visible; +} diff --git a/chromium/chrome/browser/resources/chromeos/login/screen_account_picker.html b/chromium/chrome/browser/resources/chromeos/login/screen_account_picker.html new file mode 100644 index 00000000000..c4afe0f1b37 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/screen_account_picker.html @@ -0,0 +1,9 @@ +<div id="account-picker" class="step faded hidden no-logo"> + <div id="signin-banner-container1"> + <div id="signin-banner-container2"> + <div id="signin-banner" + i18n-content="signinBannerText"></div> + </div> + </div> + <podrow id="pod-row" class="podrow images-loading"></podrow> +</div> diff --git a/chromium/chrome/browser/resources/chromeos/login/screen_account_picker.js b/chromium/chrome/browser/resources/chromeos/login/screen_account_picker.js new file mode 100644 index 00000000000..0064e46a695 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/screen_account_picker.js @@ -0,0 +1,256 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** + * @fileoverview Account picker screen implementation. + */ + +login.createScreen('AccountPickerScreen', 'account-picker', function() { + /** + * Maximum number of offline login failures before online login. + * @type {number} + * @const + */ + var MAX_LOGIN_ATTEMPTS_IN_POD = 3; + /** + * Whether to preselect the first pod automatically on login screen. + * @type {boolean} + * @const + */ + var PRESELECT_FIRST_POD = true; + + return { + EXTERNAL_API: [ + 'loadUsers', + 'updateUserImage', + 'updateUserGaiaNeeded', + 'setCapsLockState', + 'forceLockedUserPodFocus', + 'onWallpaperLoaded', + 'removeUser', + 'showBannerMessage', + 'showUserPodButton', + ], + + preferredWidth_: 0, + preferredHeight_: 0, + + // Whether this screen is shown for the first time. + firstShown_: true, + + /** @override */ + decorate: function() { + login.PodRow.decorate($('pod-row')); + }, + + /** @override */ + getPreferredSize: function() { + return {width: this.preferredWidth_, height: this.preferredHeight_}; + }, + + /** @override */ + onWindowResize: function() { + $('pod-row').onWindowResize(); + }, + + /** + * Sets preferred size for account picker screen. + */ + setPreferredSize: function(width, height) { + this.preferredWidth_ = width; + this.preferredHeight_ = height; + }, + + /** + * When the account picker is being used to lock the screen, pressing the + * exit accelerator key will sign out the active user as it would when + * they are signed in. + */ + exit: function() { + // Check and disable the sign out button so that we can never have two + // sign out requests generated in a row. + if ($('pod-row').lockedPod && !$('sign-out-user-button').disabled) { + $('sign-out-user-button').disabled = true; + chrome.send('signOutUser'); + } + }, + + /** + * Event handler that is invoked just after the frame is shown. + * @param {string} data Screen init payload. + */ + onAfterShow: function(data) { + $('pod-row').handleAfterShow(); + }, + + /** + * Event handler that is invoked just before the frame is shown. + * @param {string} data Screen init payload. + */ + onBeforeShow: function(data) { + chrome.send('loginUIStateChanged', ['account-picker', true]); + $('login-header-bar').signinUIState = SIGNIN_UI_STATE.ACCOUNT_PICKER; + chrome.send('hideCaptivePortal'); + var podRow = $('pod-row'); + podRow.handleBeforeShow(); + + // If this is showing for the lock screen display the sign out button, + // hide the add user button and activate the locked user's pod. + var lockedPod = podRow.lockedPod; + $('add-user-header-bar-item').hidden = !!lockedPod; + var signOutUserItem = $('sign-out-user-item'); + if (signOutUserItem) + signOutUserItem.hidden = !lockedPod; + // In case of the preselected pod onShow will be called once pod + // receives focus. + if (!podRow.preselectedPod) + this.onShow(); + }, + + /** + * Event handler invoked when the page is shown and ready. + */ + onShow: function() { + if (!this.firstShown_) return; + this.firstShown_ = false; + // TODO(nkostylev): Enable animation back when session start jank + // is reduced. See http://crosbug.com/11116 http://crosbug.com/18307 + // $('pod-row').startInitAnimation(); + + // Ensure that login is actually visible. + window.webkitRequestAnimationFrame(function() { + chrome.send('accountPickerReady'); + chrome.send('loginVisible', ['account-picker']); + }); + }, + + /** + * Event handler that is invoked just before the frame is hidden. + */ + onBeforeHide: function() { + chrome.send('loginUIStateChanged', ['account-picker', false]); + $('login-header-bar').signinUIState = SIGNIN_UI_STATE.HIDDEN; + $('pod-row').handleHide(); + }, + + /** + * Shows sign-in error bubble. + * @param {number} loginAttempts Number of login attemps tried. + * @param {HTMLElement} content Content to show in bubble. + */ + showErrorBubble: function(loginAttempts, error) { + var activatedPod = $('pod-row').activatedPod; + if (!activatedPod) { + $('bubble').showContentForElement($('pod-row'), + cr.ui.Bubble.Attachment.RIGHT, + error); + return; + } + // Show web authentication if this is not a locally managed user. + if (loginAttempts > MAX_LOGIN_ATTEMPTS_IN_POD && + !activatedPod.user.locallyManagedUser) { + activatedPod.showSigninUI(); + } else { + // We want bubble's arrow to point to the first letter of input. + /** @const */ var BUBBLE_OFFSET = 7; + /** @const */ var BUBBLE_PADDING = 4; + $('bubble').showContentForElement(activatedPod.mainInput, + cr.ui.Bubble.Attachment.BOTTOM, + error, + BUBBLE_OFFSET, BUBBLE_PADDING); + } + }, + + /** + * Loads given users in pod row. + * @param {array} users Array of user. + * @param {boolean} animated Whether to use init animation. + * @param {boolean} showGuest Whether to show guest session button. + */ + loadUsers: function(users, animated, showGuest) { + $('pod-row').loadPods(users, animated); + $('login-header-bar').showGuestButton = showGuest; + + // The desktop User Manager can send the index of a pod that should be + // initially focused. + var hash = window.location.hash; + if (hash) { + var podIndex = hash.substr(1); + if (podIndex) + $('pod-row').focusPodByIndex(podIndex, false); + } + }, + + /** + * Updates current image of a user. + * @param {string} username User for which to update the image. + */ + updateUserImage: function(username) { + $('pod-row').updateUserImage(username); + }, + + /** + * Updates user to use gaia login. + * @param {string} username User for which to state the state. + */ + updateUserGaiaNeeded: function(username) { + $('pod-row').resetUserOAuthTokenStatus(username); + }, + + /** + * Updates Caps Lock state (for Caps Lock hint in password input field). + * @param {boolean} enabled Whether Caps Lock is on. + */ + setCapsLockState: function(enabled) { + $('pod-row').classList.toggle('capslock-on', enabled); + }, + + /** + * Enforces focus on user pod of locked user. + */ + forceLockedUserPodFocus: function() { + var row = $('pod-row'); + if (row.lockedPod) + row.focusPod(row.lockedPod, true); + }, + + /** + * Mark wallpaper loaded + */ + onWallpaperLoaded: function(username) { + $('pod-row').onWallpaperLoaded(username); + }, + + /** + * Remove given user from pod row if it is there. + * @param {string} user name. + */ + removeUser: function(username) { + $('pod-row').removeUserPod(username); + }, + + /** + * Displays a banner containing |message|. If the banner is already present + * this function updates the message in the banner. This function is used + * by the chrome.screenlockPrivate.showMessage API. + * @param {string} message Text to be displayed + */ + showBannerMessage: function(message) { + var banner = $('signin-banner'); + banner.textContent = message; + banner.classList.toggle('message-set', true); + }, + + /** + * Shows a button with an icon on the user pod of |username|. This function + * is used by the chrome.screenlockPrivate API. + * @param {string} username Username of pod to add button + * @param {string} iconURL URL of the button icon + */ + showUserPodButton: function(username, iconURL) { + $('pod-row').showUserPodButton(username, iconURL); + } + }; +}); + diff --git a/chromium/chrome/browser/resources/chromeos/login/screen_app_launch_splash.css b/chromium/chrome/browser/resources/chromeos/login/screen_app_launch_splash.css new file mode 100644 index 00000000000..0a97b02f35a --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/screen_app_launch_splash.css @@ -0,0 +1,73 @@ +/* Copyright 2013 The Chromium Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#app-launch-splash { + -webkit-box-align: center; + -webkit-box-pack: center; + background: white; + display: -webkit-box; +} + +#splash-content { + -webkit-box-align: center; + -webkit-box-orient: vertical; + -webkit-box-pack: center; + display: -webkit-box; + position: relative; +} + +#splash-header { + -webkit-padding-start: 108px; + background: left center no-repeat; + background-size: 96px; + color: #666; + display: -webkit-box; + font-size: 48px; + height: 96px; + line-height: 96px; +} + +#splash-launch-text { + color: #666; + font-size: 18px; + padding-top: 50px; +} + +#splash-spinner { + height: 32px; + width: 32px; +} + +#splash-config-network-container { + -webkit-transition: 1s opacity; + height : 30px; + opacity: 1; + padding-bottom: 20px; +} + +#splash-config-network-container.faded { + opacity: 0; +} + +#splash-config-network { + font-size: 10px; + font-weight: bold; + margin: 0; + padding: 0; + text-decoration: none; +} + +#splash-config-network:hover { + color: rgb(202, 67, 100) +} + +#splash-shortcut-info { + bottom: 50px; + color: gray; + left: 0; + position: absolute; + right: 0; + text-align: center; +} diff --git a/chromium/chrome/browser/resources/chromeos/login/screen_app_launch_splash.html b/chromium/chrome/browser/resources/chromeos/login/screen_app_launch_splash.html new file mode 100644 index 00000000000..603ba42fb7b --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/screen_app_launch_splash.html @@ -0,0 +1,11 @@ +<div id="app-launch-splash" class="step hidden no-logo fullscreen"> + <div id="splash-content"> + <div id="splash-header" i18n-content="productName"></div> + <div id="splash-launch-text" i18n-content="appStartMessage"></div> + <div id="splash-config-network-container" class="faded"> + <a id="splash-config-network" i18n-content="configureNetwork" href="javascript:void(0)"></a> + </div> + <div id="splash-spinner" class="spinner"></div> + </div> + <p id="splash-shortcut-info" i18n-content="shortcutInfo"></p> +</div> diff --git a/chromium/chrome/browser/resources/chromeos/login/screen_app_launch_splash.js b/chromium/chrome/browser/resources/chromeos/login/screen_app_launch_splash.js new file mode 100644 index 00000000000..6d01722e43d --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/screen_app_launch_splash.js @@ -0,0 +1,96 @@ +// Copyright 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** + * @fileoverview App install/launch splash screen implementation. + */ + +login.createScreen('AppLaunchSplashScreen', 'app-launch-splash', function() { + return { + EXTERNAL_API: [ + 'toggleNetworkConfig', + 'updateApp', + 'updateMessage', + ], + + /** @override */ + decorate: function() { + $('splash-config-network').addEventListener('click', function(e) { + chrome.send('configureNetwork'); + }); + + var networkContainer = $('splash-config-network-container'); + networkContainer.addEventListener( + 'webkitTransitionEnd', + function(e) { + if (this.classList.contains('faded')) + $('splash-config-network').hidden = true; + }.bind(networkContainer) + ); + + // Ensure the webkitTransitionEnd event gets called after a wait time. + // The wait time should be inline with the transition duration time + // defined in css file. The current value in css is 1000ms. To avoid + // the emulated webkitTransitionEnd firing before real one, a 1050ms + // delay is used. + ensureTransitionEndEvent(networkContainer, 1050); + }, + + /** + * Event handler that is invoked just before the frame is shown. + * @param {string} data Screen init payload. + */ + onBeforeShow: function(data) { + $('splash-config-network').hidden = true; + this.toggleNetworkConfig(false); + this.updateApp(data['appInfo']); + + $('splash-shortcut-info').hidden = !data['shortcutEnabled']; + + Oobe.getInstance().headerHidden = true; + Oobe.getInstance().solidBackground = true; + }, + + /** + * Event handler that is invoked just before the frame is hidden. + */ + onBeforeHide: function() { + }, + + /** + * Toggles visibility of the network configuration option. + * @param {boolean} visible Whether to show the option. + */ + toggleNetworkConfig: function(visible) { + var container = $('splash-config-network-container'); + var currVisible = !container.classList.contains('faded'); + if (currVisible == visible) + return; + + if (visible) { + $('splash-config-network').hidden = false; + container.classList.remove('faded'); + } else { + container.classList.add('faded'); + } + }, + + /** + * Updates the app name and icon. + * @param {Object} app Details of app being launched. + */ + updateApp: function(app) { + $('splash-header').textContent = app.name; + $('splash-header').style.backgroundImage = 'url(' + app.iconURL + ')'; + }, + + /** + * Updates the message for the current launch state. + * @param {string} message Description for current launch state. + */ + updateMessage: function(message) { + $('splash-launch-text').textContent = message; + } + }; +}); diff --git a/chromium/chrome/browser/resources/chromeos/login/screen_confirm_password.css b/chromium/chrome/browser/resources/chromeos/login/screen_confirm_password.css new file mode 100644 index 00000000000..94ff3d72246 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/screen_confirm_password.css @@ -0,0 +1,20 @@ +/* Copyright 2013 The Chromium Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#confirm-password { + height: 150px; + padding: 16px; + width: 400px; +} + +#confirm-password-title { + font-weight: bold; + margin: 0; +} + +#confirm-password-input { + margin-top: 10px; + width: 100%; +} diff --git a/chromium/chrome/browser/resources/chromeos/login/screen_confirm_password.html b/chromium/chrome/browser/resources/chromeos/login/screen_confirm_password.html new file mode 100644 index 00000000000..d5fe83104c2 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/screen_confirm_password.html @@ -0,0 +1,10 @@ +<div id="confirm-password" class="step no-logo hidden"> + <div class="step-contents"> + <p id="confirm-password-title" i18n-content="confirmPasswordTitle"></p> + <div> + <input id="confirm-password-input" type="password" + i18n-values="placeholder:confirmPasswordHint"> + </div> + </div> + <div id="confirm-password-controls" class="step-controls"></div> +</div> diff --git a/chromium/chrome/browser/resources/chromeos/login/screen_confirm_password.js b/chromium/chrome/browser/resources/chromeos/login/screen_confirm_password.js new file mode 100644 index 00000000000..ecc134a5686 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/screen_confirm_password.js @@ -0,0 +1,76 @@ +// Copyright 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** + * @fileoverview Password confirmation screen implementation. + */ + +login.createScreen('ConfirmPasswordScreen', 'confirm-password', function() { + return { + EXTERNAL_API: [ + 'show' + ], + + /** + * Callback to run when the screen is dismissed. + * @type {function(string)} + */ + callback_: null, + + /** @override */ + decorate: function() { + $('confirm-password-input').addEventListener( + 'keydown', this.onPasswordFieldKeyDown_.bind(this)); + }, + + /** + * Screen controls in bottom strip. + * @type {Array.<HTMLButtonElement>} Buttons to be put in the bottom strip. + */ + get buttons() { + var buttons = []; + + var confirmButton = this.ownerDocument.createElement('button'); + confirmButton.textContent = + loadTimeData.getString('confirmPasswordConfirmButton'); + confirmButton.addEventListener('click', + this.onConfirmPassword_.bind(this)); + buttons.push(confirmButton); + + return buttons; + }, + + get defaultControl() { + return $('confirm-password-input'); + }, + + /** + * Handle 'keydown' event on password input field. + */ + onPasswordFieldKeyDown_: function(e) { + if (e.keyIdentifier == 'Enter') + this.onConfirmPassword_(); + }, + + /** + * Invoked when user clicks on the 'confirm' button. + */ + onConfirmPassword_: function() { + this.callback_($('confirm-password-input').value); + }, + + /** + * Shows the confirm password screen. + * @param {function(string)} callback The callback to be invoked when the + * screen is dismissed. + */ + show: function(callback) { + this.callback_ = callback; + + $('confirm-password-input').value = ''; + Oobe.showScreen({id: SCREEN_CONFIRM_PASSWORD}); + $('progress-dots').hidden = true; + } + }; +}); diff --git a/chromium/chrome/browser/resources/chromeos/login/screen_container.css b/chromium/chrome/browser/resources/chromeos/login/screen_container.css new file mode 100644 index 00000000000..e6d53944df6 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/screen_container.css @@ -0,0 +1,178 @@ +/* Copyright 2013 The Chromium Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#outer-container { + -webkit-box-align: center; + -webkit-box-pack: center; + -webkit-perspective: 600px; + bottom: 51px; /* Leave space for the header bar */ + display: -webkit-box; + left: 0; + position: absolute; + right: 0; + top: 0; +} + +#inner-container { + border-radius: 2px; + padding: 0; + position: relative; +} + +#inner-container.animation { + overflow: hidden; +} + +/* Screens that have a border and background. */ +#oobe.autolaunch #inner-container, +#oobe.connect #inner-container, +#oobe.enrollment #inner-container, +#oobe.eula #inner-container, +#oobe.gaia-signin #inner-container, +#oobe.kiosk-enable #inner-container, +#oobe.oauth-enrollment #inner-container, +#oobe.reset #inner-container, +#oobe.update #inner-container, +#oobe.user-image #inner-container, +#oobe.managed-user-creation-dialog #inner-container, +#oobe.managed-user-creation #inner-container, +#oobe.password-changed #inner-container, +#oobe.terms-of-service #inner-container, +#oobe.wrong-hwid #inner-container, +#oobe.confirm-password #inner-container, +#oobe.message-box #inner-container { + background: -webkit-linear-gradient(rgba(255,255,255,0.99), + rgba(255,255,255,0.95)); + box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.3), + 0 4px 23px 5px rgba(0, 0, 0, 0.2), + 0 2px 6px rgba(0, 0, 0, 0.15); +} + +#oobe.error-message #inner-container, +#oobe.tpm-error-message #inner-container { + box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.3), + 0 4px 23px 5px rgba(0, 0, 0, 0.2), + 0 2px 6px rgba(0, 0, 0, 0.15); + +} + +#oobe.account-picker.flying-pods #inner-container { + -webkit-transition: width 180ms ease, + height 180ms ease; +} + +/* Only play this animation when 'down' class is removed. */ +.oobe-display #inner-container:not(.down) { + -webkit-transition: -webkit-transform 200ms ease-in-out; +} + +.oobe-display #inner-container.down { + -webkit-transform: translateY(50px) rotateX(-2.5deg); +} + +#step-logo { + -webkit-margin-start: 17px; + display: -webkit-box; + position: absolute; + top: 15px; +} + +#progress-dots { + -webkit-box-pack: center; + -webkit-margin-before: 15px; + display: -webkit-box; +} + +/* Hidden for the duration of initial transition. */ +.oobe-display #progress-dots.down { + visibility: hidden; +} + +.progdot { + -webkit-margin-end: 12px; + background: white; + height: 10px; + opacity: 0.4; + width: 10px; +} + +.progdot-active { + opacity: 0.5; +} + +#account-picker-dot, +#app-launch-splash-dot, +#autolaunch-dot, +#enrollment-dot, +#kiosk-enable-dot, +#oauth-enrollment-dot, +#reset-dot, +#error-message-dot, +#tpm-error-message-dot, +#password-changed-dot, +#managed-user-creation-dot, +#managed-user-creation-dialog-dot, +#terms-of-service-dot, +#wrong-hwid-dot, +#confirm-password-dot, +#message-box-dot { + display: none; +} + +#oobe.connect #connect-dot, +#oobe.enrollment #gaia-signin-dot, +#oobe.enrollment #signin-dot, +#oobe.eula #eula-dot, +#oobe.gaia-signin #gaia-signin-dot, +#oobe.oauth-enrollment #gaia-signin-dot, +#oobe.oauth-enrollment #signin-dot, +#oobe.signin #signin-dot, +#oobe.update #update-dot, +#oobe.user-image #user-image-dot { + opacity: 1; +} + +body:not(.oobe-display) #inner-container { + height: 262px; + padding: 0; + width: 1100px; +} + +body:not(.oobe-display) #progress-dots { + display: none; +} + +#outer-container.fullscreen, +#outer-container.fullscreen #oobe, +#outer-container.fullscreen #oobe #inner-container { + height: 100%; + width: 100%; +} + +html[build=chrome] #header-sections { + -webkit-margin-start: -48px; + margin-top: -1px; +} + +html[build=chromium] #header-sections { + -webkit-margin-start: 5px; + margin-top: -1px; +} + +.header-section { + color: rgb(119, 120, 123); /* Should matching text color of the logo. */ + display: none; + font-size: 23px; + line-height: 31px; + text-transform: lowercase; + width: 23em; +} + +.header-section::before { + /* Divider in header between product name and title, + * like "[Product name] > [step header]". */ + content: '\00A0\203A\00A0\00A0'; +} + diff --git a/chromium/chrome/browser/resources/chromeos/login/screen_container.html b/chromium/chrome/browser/resources/chromeos/login/screen_container.html new file mode 100644 index 00000000000..64e48173c23 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/screen_container.html @@ -0,0 +1,18 @@ +<div id="background" class="background-initial"></div> +<include src="version.html"> +<div id="outer-container"> + <div id="oobe" class="faded"> + <div id="inner-container" class="down"> + <div id="step-logo" hidden> + <img src="chrome://theme/IDR_PRODUCT_LOGO" alt> + <div id="header-sections"> + </div> + </div> + <include src="[OOBE]_screens.html"> + </div> + <div id="progress-dots" class="down"></div> + </div> +</div> +<div id="bubble" class="bubble faded" hidden></div> +<include src="header_bar.html"> +<include src="user_pod_template.html"> diff --git a/chromium/chrome/browser/resources/chromeos/login/screen_context.js b/chromium/chrome/browser/resources/chromeos/login/screen_context.js new file mode 100644 index 00000000000..6a014a48283 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/screen_context.js @@ -0,0 +1,97 @@ +// Copyright (c) 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** + * @fileoverview Implementation of ScreenContext class: key-value storage for + * values that are shared between C++ and JS sides. + */ +cr.define('login', function() { + function require(condition, message) { + if (!condition) { + throw Error(message); + } + } + + function checkKeyIsValid(key) { + var keyType = typeof key; + require(keyType === 'string', 'Invalid type of key: "' + keyType + '".'); + } + + function checkValueIsValid(value) { + var valueType = typeof value; + require(['string', 'boolean', 'number'].indexOf(valueType) != -1, + 'Invalid type of value: "' + valueType + '".'); + } + + function ScreenContext() { + this.storage_ = {}; + this.changes_ = {}; + } + + ScreenContext.prototype = { + /** + * Returns stored value for |key| or |defaultValue| if key not found in + * storage. Throws Error if key not found and |defaultValue| omitted. + */ + get: function(key, defaultValue) { + checkKeyIsValid(key); + if (this.hasKey(key)) { + return this.storage_[key]; + } else if (typeof defaultValue !== 'undefined') { + return defaultValue; + } else { + throw Error('Key "' + key + '" not found.'); + } + }, + + /** + * Sets |value| for |key|. Returns true if call changes state of context, + * false otherwise. + */ + set: function(key, value) { + checkKeyIsValid(key); + checkValueIsValid(value); + if (this.hasKey(key) && this.storage_[key] === value) + return false; + this.changes_[key] = value; + this.storage_[key] = value; + return true; + }, + + hasKey: function(key) { + checkKeyIsValid(key); + return this.storage_.hasOwnProperty(key); + }, + + hasChanges: function() { + return Object.keys(this.changes_).length > 0; + }, + + /** + * Applies |changes| to context. Returns Array of changed keys' names. + */ + applyChanges: function(changes) { + require(!this.hasChanges(), 'Context has changes.'); + Object.keys(changes).forEach(function(key) { + checkKeyIsValid(key); + checkValueIsValid(changes[key]); + this.storage_[key] = changes[key]; + }, this); + return Object.keys(changes); + }, + + /** + * Returns changes made on context since previous call. + */ + getChangesAndReset: function() { + var result = this.changes_; + this.changes_ = {}; + return result; + } + }; + + return { + ScreenContext: ScreenContext + }; +}); diff --git a/chromium/chrome/browser/resources/chromeos/login/screen_context_test.html b/chromium/chrome/browser/resources/chromeos/login/screen_context_test.html new file mode 100644 index 00000000000..88251df28bb --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/screen_context_test.html @@ -0,0 +1,207 @@ +<!DOCTYPE html> +<title></title> +<script src="http://closure-library.googlecode.com/svn/trunk/closure/goog/base.js"></script> +<script src="../../../../../ui/webui/resources/js/cr.js"></script> +<script src="screen_context.js"></script> +<script> + +goog.require('goog.testing.jsunit'); + +</script> +<body> +<script> + +function callSuccessful(f) { + try { + f(); + } catch (e) { + return false; + } + return true; +} + +function checkThrows(f) { + assertFalse(callSuccessful(f)); +} + +function checkNotThrows(f) { + assertTrue(callSuccessful(f)); +} + +function testSimple() { + var context = new login.ScreenContext; + assertFalse(context.hasChanges()); + + assertFalse(context.hasKey('key0')); + + var rv = context.set('key0', true); + assertTrue(rv); + assertTrue(context.hasKey('key0')); + assertTrue(context.get('key0')); + assertTrue(context.get('key0', false)); + assertTrue(context.hasChanges()); + + rv = context.set('key0', true); + assertFalse(rv); + + rv = context.set('key0', false); + assertTrue(rv); + assertTrue(context.hasKey('key0')); + assertFalse(context.get('key0')); + assertFalse(context.get('key0', true)); + assertTrue(context.hasChanges()); + + assertFalse(context.hasKey('key1')); + + assertEquals(1, context.get('key1', 1)); + rv = context.set('key1', 2); + assertTrue(rv); + assertTrue(context.hasKey('key1')); + assertEquals(2, context.get('key1')); + assertEquals(2, context.get('key1', 1)); +} + +function testChanges() { + var context = new login.ScreenContext; + assertFalse(context.hasChanges()); + + var rv = context.set('key0', 2); + assertTrue(rv); + assertEquals(2, context.get('key0')); + assertTrue(context.hasChanges()); + + var changes = context.getChangesAndReset(); + assertFalse(context.hasChanges()); + + assertEquals(1, Object.keys(changes).length); + + assertEquals(2, changes['key0']); + + rv = context.set('key0', 3); + assertTrue(rv); + assertEquals(3, context.get('key0', 3)); + assertTrue(context.hasChanges()); + + rv = context.set('key0', 2); + assertTrue(rv); + assertTrue(context.hasChanges()); +} + +function testComplexChanges() { + var context = new login.ScreenContext; + assertFalse(context.hasChanges()); + + context.set('key0', 'value0'); + context.set('key1', true); + context.set('key2', 3.14159); + assertTrue(context.hasChanges()); + + // Get all changes and verify them. + var changes = context.getChangesAndReset(); + assertFalse(context.hasChanges()); + assertEquals(3, Object.keys(changes).length); + + assertEquals('value0', changes['key0']); + assertEquals(true, changes['key1']); + assertEquals(3.14159, changes['key2']); + + context.set('key0', 'value1'); + assertTrue(context.hasChanges()); + + context.set('key0', 'value0'); + assertTrue(context.hasChanges()); + + changes = context.getChangesAndReset(); + assertFalse(context.hasChanges()); + assertEquals(1, Object.keys(changes).length); + assertEquals('value0', changes['key0']); +} + +function testApplyChanges() { + var context = new login.ScreenContext; + assertFalse(context.hasChanges()); + + var changes = { + key0: 'value0', + key1: 1, + key2: true + }; + + var keys = context.applyChanges(changes); + + assertEquals(3, keys.length); + keys.sort(); + assertEquals('key0', keys[0]); + assertEquals('key1', keys[1]); + assertEquals('key2', keys[2]); + + assertFalse(context.hasChanges()); + assertEquals('value0', context.get('key0')); + assertEquals(1, context.get('key1')); + assertTrue(context.get('key2')); +} + +function testErrorHandling() { + function createContext() { + return new login.ScreenContext; + } + + /* Invalid keys. */ + checkThrows(function() { + createContext().set(true, 10); + }); + checkThrows(function() { + createContext().set(new Object, 10); + }); + checkThrows(function() { + createContext().set(10, 10); + }); + checkNotThrows(function() { + createContext().set('key0', 10); + }); + checkThrows(function() { + var c = createContext(); + c.set('10', 10); + c.get(10); + }); + checkNotThrows(function() { + var c = createContext(); + c.set('10', 10); + c.get('10'); + }); + checkThrows(function() { + createContext().hasKey(20); + }); + + /* Missing key. */ + checkThrows(function() { + createContext().get('key'); + }); + checkNotThrows(function() { + createContext().get('key', 10); + }); + + /* Invalid values. */ + checkThrows(function() { + createContext().set('key0', new Object()); + }); + checkThrows(function() { + createContext().set('key0', new Boolean(true)); + }); + + /* Applying diff to context with changes. */ + checkThrows(function() { + var c = createContext(); + c.set('key', 'value'); + c.applyChanges({'key1': 'value1'}); + }); + checkNotThrows(function() { + var c = createContext(); + c.set('key', 'value'); + c.getChangesAndReset(); + c.applyChanges({'key1': 'value1'}); + }); +} + +</script> +</body> diff --git a/chromium/chrome/browser/resources/chromeos/login/screen_error_message.css b/chromium/chrome/browser/resources/chromeos/login/screen_error_message.css new file mode 100644 index 00000000000..3160803c180 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/screen_error_message.css @@ -0,0 +1,99 @@ +/* Copyright (c) 2012 The Chromium Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#error-message { + width: 650px; +} + +.show-with-ui-state-update, +.show-with-ui-state-signin, +.show-with-ui-state-locally-managed, +.show-with-ui-state-kiosk-mode, +.show-with-ui-state-local-state-error, +.show-with-error-state-portal, +.show-with-error-state-offline, +.show-with-error-state-proxy, +.show-with-error-state-auth-ext-timeout, +.guest-signin, +.offline-login { + display: none; +} + +.ui-state-update .show-with-ui-state-update, +.ui-state-signin .show-with-ui-state-signin, +.ui-state-locally-managed .show-with-ui-state-locally-managed, +.ui-state-kiosk-mode .show-with-ui-state-kiosk-mode, +.ui-state-local-state-error .show-with-ui-state-local-state-error, +.error-state-portal .show-with-error-state-portal, +.error-state-offline .show-with-error-state-offline, +.error-state-proxy .show-with-error-state-proxy, +.error-state-auth-ext-timeout .show-with-error-state-auth-ext-timeout, +.allow-guest-signin .guest-signin, +.allow-offline-login .offline-login { + display: block; +} + +#oobe.error-message #step-logo { + z-index: 1; +} + +.error-header { + /* A hack used to prevent aliasing on High-DPI displays. */ + -webkit-transform: scale3d(1,1,1); + background-clip: padding-box; + background-image: -webkit-linear-gradient(rgba(255,255,255,0.99), + rgba(255,255,255,0.97)); + border-bottom: 1px solid rgba(238,238,238,0.97); + padding: 71px 20px 50px; + text-align: center; +} + +.error-icon { + -webkit-margin-after: 40px; +} + +.error-title { + color: #606060; + font-size: 15px; +} + +.error-body { + background-image: -webkit-linear-gradient(rgba(249,249,249,0.97), + rgba(249,249,249,0.95)); + padding: 20px 20px 20px; +} + +.error-controls { + background-image: -webkit-linear-gradient(rgba(249,249,249,0.95), + rgba(249,249,249,0.93)); + padding: 20px 20px 20px; +} + +.error-message-paragraph { + font-size: 12px; + line-height: 18px; +} + +.error-message-paragraph { + -webkit-margin-before: 20px; +} + +.error-message-paragraph a { + color: rgb(17,85,204); + text-decoration: none; +} + +#offline-network-control { + -webkit-align-items: center; + display: -webkit-flex; +} + +.offline-network-list-label { + -webkit-margin-end: 10px; +} + +.button-spacer { + -webkit-box-flex: 1; +} diff --git a/chromium/chrome/browser/resources/chromeos/login/screen_error_message.html b/chromium/chrome/browser/resources/chromeos/login/screen_error_message.html new file mode 100644 index 00000000000..71c8f485d24 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/screen_error_message.html @@ -0,0 +1,101 @@ +<div id="error-message" class="step hidden show-offline-error"> + <div class="step-contents"> + <div class="error-header"> + <img alt class="error-icon" src="chrome://theme/IDR_ERROR_NETWORK_OFFLINE"> + <div id="captive-portal-title" i18n-content="captivePortalTitle" + class="error-title + show-with-error-state-portal + show-with-error-state-offline"></div> + <div id="login-error-title" i18n-content="loginErrorTitle" + class="error-title + show-with-error-state-proxy + show-with-error-state-auth-ext-timeout + show-with-ui-state-local-state-error"> + </div> + </div> + <div class="error-body"> + <div id="offline-message-body" + class="error-message-paragraph + show-with-error-state-offline + show-with-error-state-auth-ext-timeout"> + <span id="update-offline-message-text" + i18n-content="updateOfflineMessageBody" + class="show-with-ui-state-update"></span> + <span id="signin-offline-message-text" + i18n-content="signinOfflineMessageBody" + class="show-with-ui-state-signin + show-with-ui-state-locally-managed"></span> + <span id="kiosk-offline-message-text" + i18n-content="kioskOfflineMessageBody" + class="show-with-ui-state-kiosk-mode"></span> + </div> + <div id="captive-portal-message-body" + class="error-message-paragraph + show-with-error-state-portal"> + <span id="captive-portal-message-text" + class="show-with-ui-state-update + show-with-ui-state-signin + show-with-ui-state-locally-managed + show-with-ui-state-kiosk-mode"></span> + </div> + <div id="captive-portal-proxy-message-body" + class="error-message-paragraph + show-with-error-state-portal + show-with-error-state-auth-ext-timeout"> + <span id="captive-portal-proxy-message-text" + class="show-with-ui-state-update + show-with-ui-state-signin + show-with-ui-state-locally-managed + show-with-ui-state-kiosk-mode"></span> + </div> + <div id="proxy-message-body" + class="error-message-paragraph + show-with-error-state-proxy"> + <span id="update-proxy-message-text" + class="show-with-ui-state-update"></span> + <span id="signin-proxy-message-text" + class="show-with-ui-state-signin + show-with-ui-state-locally-managed + show-with-ui-state-kiosk-mode"></span> + </div> + <div id="offline-network-control-body" + class="show-with-ui-state-update + show-with-ui-state-signin + show-with-ui-state-locally-managed + show-with-ui-state-kiosk-mode"> + <div id="offline-network-control" class="error-message-paragraph"> + <label for="offline-networks-list-dropdown" + i18n-content="selectNetwork" + class="offline-network-list-label + show-with-error-state-offline + show-with-error-state-proxy + show-with-error-state-auth-timeout"></label> + <label for="offline-networks-list-dropdown" + i18n-content="selectAnotherNetwork" + class="offline-network-list-label + show-with-error-state-portal"> + </label> + <div class="menu-area"> + <div id="offline-networks-list" class="menu-control"></div> + </div> + </div> + </div> + <div id="local-state-error-body" + class="show-with-ui-state-local-state-error"> + <div i18n-content="localStateErrorText0" + class="error-message-paragraph"> + </div> + <div i18n-content="localStateErrorText1" + class="error-message-paragraph"> + </div> + </div> + <div id="error-guest-signin" class="error-message-paragraph guest-signin"> + </div> + <div id="error-offline-login" + class="error-message-paragraph offline-login"></div> + </div> + </div> + <div class="error-controls"> + <div id="error-message-controls" class="step-controls"></div> + </div> +</div> diff --git a/chromium/chrome/browser/resources/chromeos/login/screen_error_message.js b/chromium/chrome/browser/resources/chromeos/login/screen_error_message.js new file mode 100644 index 00000000000..039208c1d85 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/screen_error_message.js @@ -0,0 +1,274 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** + * @fileoverview Offline message screen implementation. + */ + +login.createScreen('ErrorMessageScreen', 'error-message', function() { + // Link which starts guest session for captive portal fixing. + /** @const */ var FIX_CAPTIVE_PORTAL_ID = 'captive-portal-fix-link'; + + /** @const */ var FIX_PROXY_SETTINGS_ID = 'proxy-settings-fix-link'; + + // Id of the element which holds current network name. + /** @const */ var CURRENT_NETWORK_NAME_ID = 'captive-portal-network-name'; + + // Link which triggers frame reload. + /** @const */ var RELOAD_PAGE_ID = 'proxy-error-signin-retry-link'; + + // Array of the possible UI states of the screen. Must be in the + // same order as ErrorScreen::UIState enum values. + /** @const */ var UI_STATES = [ + ERROR_SCREEN_UI_STATE.UNKNOWN, + ERROR_SCREEN_UI_STATE.UPDATE, + ERROR_SCREEN_UI_STATE.SIGNIN, + ERROR_SCREEN_UI_STATE.MANAGED_USER_CREATION_FLOW, + ERROR_SCREEN_UI_STATE.KIOSK_MODE, + ERROR_SCREEN_UI_STATE.LOCAL_STATE_ERROR + ]; + + // Possible error states of the screen. + /** @const */ var ERROR_STATE = { + UNKNOWN: 'error-state-unknown', + PORTAL: 'error-state-portal', + OFFLINE: 'error-state-offline', + PROXY: 'error-state-proxy', + AUTH_EXT_TIMEOUT: 'error-state-auth-ext-timeout' + }; + + // Possible error states of the screen. Must be in the same order as + // ErrorScreen::ErrorState enum values. + /** @const */ var ERROR_STATES = [ + ERROR_STATE.UNKNOWN, + ERROR_STATE.PORTAL, + ERROR_STATE.OFFLINE, + ERROR_STATE.PROXY, + ERROR_STATE.AUTH_EXT_TIMEOUT + ]; + + return { + EXTERNAL_API: [ + 'updateLocalizedContent', + 'onBeforeShow', + 'onBeforeHide', + 'allowGuestSignin', + 'allowOfflineLogin', + 'setUIState', + 'setErrorState' + ], + + // Error screen initial UI state. + ui_state_: ERROR_SCREEN_UI_STATE.UNKNOWN, + + // Error screen initial error state. + error_state_: ERROR_STATE.UNKNOWN, + + /** @override */ + decorate: function() { + cr.ui.DropDown.decorate($('offline-networks-list')); + this.updateLocalizedContent(); + }, + + /** + * Updates localized content of the screen that is not updated via template. + */ + updateLocalizedContent: function() { + $('captive-portal-message-text').innerHTML = loadTimeData.getStringF( + 'captivePortalMessage', + '<b id="' + CURRENT_NETWORK_NAME_ID + '"></b>', + '<a id="' + FIX_CAPTIVE_PORTAL_ID + '" class="signin-link" href="#">', + '</a>'); + $(FIX_CAPTIVE_PORTAL_ID).onclick = function() { + chrome.send('showCaptivePortal'); + }; + + $('captive-portal-proxy-message-text').innerHTML = + loadTimeData.getStringF( + 'captivePortalProxyMessage', + '<a id="' + FIX_PROXY_SETTINGS_ID + '" class="signin-link" href="#">', + '</a>'); + $(FIX_PROXY_SETTINGS_ID).onclick = function() { + chrome.send('openProxySettings'); + }; + $('update-proxy-message-text').innerHTML = loadTimeData.getStringF( + 'updateProxyMessageText', + '<a id="update-proxy-error-fix-proxy" class="signin-link" href="#">', + '</a>'); + $('update-proxy-error-fix-proxy').onclick = function() { + chrome.send('openProxySettings'); + }; + $('signin-proxy-message-text').innerHTML = loadTimeData.getStringF( + 'signinProxyMessageText', + '<a id="' + RELOAD_PAGE_ID + '" class="signin-link" href="#">', + '</a>', + '<a id="signin-proxy-error-fix-proxy" class="signin-link" href="#">', + '</a>'); + $(RELOAD_PAGE_ID).onclick = function() { + var gaiaScreen = $(SCREEN_GAIA_SIGNIN); + // Schedules an immediate retry. + gaiaScreen.doReload(); + }; + $('signin-proxy-error-fix-proxy').onclick = function() { + chrome.send('openProxySettings'); + }; + + $('error-guest-signin').innerHTML = loadTimeData.getStringF( + 'guestSignin', + '<a id="error-guest-signin-link" class="signin-link" href="#">', + '</a>'); + $('error-guest-signin-link').onclick = function() { + chrome.send('launchIncognito'); + }; + + $('error-offline-login').innerHTML = loadTimeData.getStringF( + 'offlineLogin', + '<a id="error-offline-login-link" class="signin-link" href="#">', + '</a>'); + $('error-offline-login-link').onclick = function() { + chrome.send('offlineLogin'); + }; + this.onContentChange_(); + }, + + /** + * Event handler that is invoked just before the screen in shown. + * @param {Object} data Screen init payload. + */ + onBeforeShow: function(data) { + cr.ui.Oobe.clearErrors(); + cr.ui.DropDown.show('offline-networks-list', false); + if (data === undefined) + return; + if ('uiState' in data) + this.setUIState(data['uiState']); + if ('errorState' in data && 'network' in data) + this.setErrorState(data['errorState'], data['network']); + if ('guestSigninAllowed' in data) + this.allowGuestSignin(data['guestSigninAllowed']); + if ('offlineLoginAllowed' in data) + this.allowOfflineLogin(data['offlineLoginAllowed']); + }, + + /** + * Event handler that is invoked just before the screen is hidden. + */ + onBeforeHide: function() { + cr.ui.DropDown.hide('offline-networks-list'); + }, + + /** + * Buttons in oobe wizard's button strip. + * @type {array} Array of Buttons. + */ + get buttons() { + var buttons = []; + + var rebootButton = this.ownerDocument.createElement('button'); + rebootButton.textContent = loadTimeData.getString('rebootButton'); + rebootButton.classList.add('show-with-ui-state-kiosk-mode'); + rebootButton.addEventListener('click', function(e) { + chrome.send('rebootButtonClicked'); + e.stopPropagation(); + }); + buttons.push(rebootButton); + + var spacer = this.ownerDocument.createElement('div'); + spacer.classList.add('button-spacer'); + spacer.classList.add('show-with-ui-state-kiosk-mode'); + buttons.push(spacer); + + var powerwashButton = this.ownerDocument.createElement('button'); + powerwashButton.id = 'error-message-restart-and-powerwash-button'; + powerwashButton.textContent = + loadTimeData.getString('localStateErrorPowerwashButton'); + powerwashButton.classList.add('show-with-ui-state-local-state-error'); + powerwashButton.addEventListener('click', function(e) { + chrome.send('localStateErrorPowerwashButtonClicked'); + e.stopPropagation(); + }); + buttons.push(powerwashButton); + + return buttons; + }, + + /** + * Sets current UI state of the screen. + * @param {string} ui_state New UI state of the screen. + * @private + */ + setUIState_: function(ui_state) { + this.classList.remove(this.ui_state); + this.ui_state = ui_state; + this.classList.add(this.ui_state); + + if (ui_state == ERROR_SCREEN_UI_STATE.LOCAL_STATE_ERROR) { + // Hide header bar and progress dots, because there are no way + // from the error screen about broken local state. + Oobe.getInstance().headerHidden = true; + $('progress-dots').hidden = true; + } + this.onContentChange_(); + }, + + /** + * Sets current error state of the screen. + * @param {string} error_state New error state of the screen. + * @param {string} network Name of the current network + * @private + */ + setErrorState_: function(error_state, network) { + this.classList.remove(this.error_state); + $(CURRENT_NETWORK_NAME_ID).textContent = network; + this.error_state = error_state; + this.classList.add(this.error_state); + this.onContentChange_(); + }, + + /* Method called after content of the screen changed. + * @private + */ + onContentChange_: function() { + if (Oobe.getInstance().currentScreen === this) + Oobe.getInstance().updateScreenSize(this); + }, + + /** + * Prepares error screen to show guest signin link. + * @private + */ + allowGuestSignin: function(allowed) { + this.classList.toggle('allow-guest-signin', allowed); + this.onContentChange_(); + }, + + /** + * Prepares error screen to show offline login link. + * @private + */ + allowOfflineLogin: function(allowed) { + this.classList.toggle('allow-offline-login', allowed); + this.onContentChange_(); + }, + + /** + * Sets current UI state of the screen. + * @param {number} ui_state New UI state of the screen. + * @private + */ + setUIState: function(ui_state) { + this.setUIState_(UI_STATES[ui_state]); + }, + + /** + * Sets current error state of the screen. + * @param {number} error_state New error state of the screen. + * @param {string} network Name of the current network + * @private + */ + setErrorState: function(error_state, network) { + this.setErrorState_(ERROR_STATES[error_state], network); + } + }; +}); diff --git a/chromium/chrome/browser/resources/chromeos/login/screen_gaia_signin.css b/chromium/chrome/browser/resources/chromeos/login/screen_gaia_signin.css new file mode 100644 index 00000000000..46955de4532 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/screen_gaia_signin.css @@ -0,0 +1,138 @@ +/* Copyright (c) 2012 The Chromium Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#gaia-signin { + height: 609px; /* Should be the same as #user-image.loading min-heigth. */ + padding: 70px 17px 69px; /* Screen has no controls. */ + width: 722px; /* Should be the same as #user-image.loading width. */ +} + +#gaia-signin.no-right-panel { + width: 522px; +} + +#gaia-signin.saml { + padding: 70px 10px 10px; + width: 1000px; +} + +#signin-right { + -webkit-margin-before: 80px; + -webkit-margin-start: 30px; + top: 60px; + width: 200px; +} + +#signin-right, +#enterprise-info-container { + font-size: 12px; +} + +/* For touch-optimized UI, make the links bigger. */ +@media (pointer:coarse) { + #signin-right { + font-size: 14px; + } +} + +.no-right-panel #signin-right, +.saml #signin-right { + display: none; +} + +.signin-text { + color: #666; + margin-top: 20px; +} + +.signin-link { + color: rgb(37, 79, 155); + cursor: pointer; + text-decoration: none; +} + +.signin-link:focus { + -webkit-transition: outline-color 200ms; + /* Note: May use 1px solid here. */ + outline-color: rgb(77, 144, 254); +} + +#gaia-signin-form-container, +#signin-frame { + height: 100%; +} + +.saml #gaia-signin-form-container, +.saml #signin-frame { + width: 100%; +} + +#gaia-signin-divider { + background: -webkit-gradient( + linear, left top, left bottom, + color-stop(0, #e3e3e3), + color-stop(0.5, #cacaca), + color-stop(1, #e3e3e3)); + border: none; + width: 1px; +} + +.no-right-panel #gaia-signin-divider, +.saml #gaia-signin-divider { + display: none; +} + +#signin-frame { + background-color: transparent; + vertical-align: top; + width: 340px; +} + +/* Position to be aligned with the login box in iframe */ +#login-box { + height: 31px; + position: absolute; + top: 77px; + visibility: hidden; + z-index: -1; +} + +#enterprise-info-container { + bottom: 10px; + left: 0; + position: absolute; + right: 0; + text-align: center; +} + +#enterprise-info-container #enterprise-info { + display: inline-block; +} + +#gaia-signin .step-contents { + -webkit-box-pack: center; + display: -webkit-box; +} + +#createManagedUserSeparator { + background-color: rgba(128,128,128,0.3); + height: 1px; + width: 200px; +} + +#createManagedUserLogo { + font-weight: bold; + margin-top: 16px; +} + +#createManagedUserLogo img { + vertical-align: text-bottom; +} + +#createManagedUserLinkPlaceholder, +#createManagedUserNoManagerText { + margin-top: 10px; +} + diff --git a/chromium/chrome/browser/resources/chromeos/login/screen_gaia_signin.html b/chromium/chrome/browser/resources/chromeos/login/screen_gaia_signin.html new file mode 100644 index 00000000000..fdf2cee13c4 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/screen_gaia_signin.html @@ -0,0 +1,35 @@ +<div class="step right hidden" id="gaia-signin"> + <div class="step-contents"> + <div id="gaia-signin-aria-label" aria-live="polite"></div> + <div id="gaia-signin-form-container"> + <div id="login-box"><!-- Aligned with the login box in iframe --></div> + <iframe id="signin-frame" hidden + src="about:blank" + marginwidth="0" + marginheight="0" + frameborder="0" + scrolling="no"></iframe> + </div> + <div id="gaia-signin-divider" hidden></div> + <div id="signin-right" hidden> + <div id="gaia-signin-reason" class="signin-text"></div> + <div id="createAccount" class="signin-text"></div> + <div id="guestSignin" class="signin-text"></div> + <div id="createManagedUserPane" class="signin-text"> + <div id="createManagedUserSeparator"></div> + <div id="createManagedUserLogo"> + <img src="chrome://theme/IDR_MANAGED_MODE_ICON"> + <span i18n-content="createManagedUserFeatureName"></span> + </div> + <div id="createManagedUserLinkPlaceholder"></div> + <div id="createManagedUserNoManagerText" hidden></div> + </div> + </div> + </div> + <div id="gaia-loading" class="step-loading"> + <div class="throbber"></div> + </div> + <div id="enterprise-info-container" hidden> + <include src="enterprise_info.html"> + </div> +</div> diff --git a/chromium/chrome/browser/resources/chromeos/login/screen_gaia_signin.js b/chromium/chrome/browser/resources/chromeos/login/screen_gaia_signin.js new file mode 100644 index 00000000000..f0099e792b7 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/screen_gaia_signin.js @@ -0,0 +1,502 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** + * @fileoverview Oobe signin screen implementation. + */ + +<include src="../../gaia_auth_host/gaia_auth_host.js"></include> + +login.createScreen('GaiaSigninScreen', 'gaia-signin', function() { + // Gaia loading time after which error message must be displayed and + // lazy portal check should be fired. + /** @const */ var GAIA_LOADING_PORTAL_SUSSPECT_TIME_SEC = 7; + + // Maximum Gaia loading time in seconds. + /** @const */ var MAX_GAIA_LOADING_TIME_SEC = 60; + + /** @const */ var HELP_TOPIC_ENTERPRISE_REPORTING = 2535613; + + return { + EXTERNAL_API: [ + 'loadAuthExtension', + 'updateAuthExtension', + 'doReload', + 'onFrameError' + ], + + /** + * Frame loading error code (0 - no error). + * @type {number} + * @private + */ + error_: 0, + + /** + * Saved gaia auth host load params. + * @type {?string} + * @private + */ + gaiaAuthParams_: null, + + /** + * Whether local version of Gaia page is used. + * @type {boolean} + * @private + */ + isLocal_: false, + + /** + * Email of the user, which is logging in using offline mode. + * @type {string} + */ + email: '', + + /** + * Timer id of pending load. + * @type {number} + * @private + */ + loadingTimer_: undefined, + + /** + * Whether user can cancel Gaia screen. + * @type {boolean} + * @private + */ + cancelAllowed_: undefined, + + /** @override */ + decorate: function() { + this.gaiaAuthHost_ = new cr.login.GaiaAuthHost($('signin-frame')); + this.gaiaAuthHost_.addEventListener( + 'ready', this.onAuthReady_.bind(this)); + this.gaiaAuthHost_.confirmPasswordCallback = + this.onAuthConfirmPassword_.bind(this); + this.gaiaAuthHost_.noPasswordCallback = + this.onAuthNoPassword_.bind(this); + this.gaiaAuthHost_.authPageLoadedCallback = + this.onAuthPageLoaded_.bind(this); + + $('enterprise-info-hint-link').addEventListener('click', function(e) { + chrome.send('launchHelpApp', [HELP_TOPIC_ENTERPRISE_REPORTING]); + e.preventDefault(); + }); + + + this.updateLocalizedContent(); + }, + + /** + * Header text of the screen. + * @type {string} + */ + get header() { + return loadTimeData.getString('signinScreenTitle'); + }, + + /** + * Returns true if local version of Gaia is used. + * @type {boolean} + */ + get isLocal() { + return this.isLocal_; + }, + + /** + * Sets whether local version of Gaia is used. + * @param {boolean} value Whether local version of Gaia is used. + */ + set isLocal(value) { + this.isLocal_ = value; + chrome.send('updateOfflineLogin', [value]); + }, + + /** + * Shows/hides loading UI. + * @param {boolean} show True to show loading UI. + * @private + */ + showLoadingUI_: function(show) { + $('gaia-loading').hidden = !show; + this.gaiaAuthHost_.frame.hidden = show; + $('signin-right').hidden = show; + $('enterprise-info-container').hidden = show; + $('gaia-signin-divider').hidden = show; + }, + + /** + * Handler for Gaia loading suspiciously long timeout. + * @private + */ + onLoadingSuspiciouslyLong_: function() { + if (this != Oobe.getInstance().currentScreen) + return; + chrome.send('showLoadingTimeoutError'); + this.loadingTimer_ = window.setTimeout( + this.onLoadingTimeOut_.bind(this), + (MAX_GAIA_LOADING_TIME_SEC - GAIA_LOADING_PORTAL_SUSSPECT_TIME_SEC) * + 1000); + }, + + /** + * Handler for Gaia loading timeout. + * @private + */ + onLoadingTimeOut_: function() { + this.loadingTimer_ = undefined; + chrome.send('showLoadingTimeoutError'); + }, + + /** + * Clears loading timer. + * @private + */ + clearLoadingTimer_: function() { + if (this.loadingTimer_) { + window.clearTimeout(this.loadingTimer_); + this.loadingTimer_ = undefined; + } + }, + + /** + * Sets up loading timer. + * @private + */ + startLoadingTimer_: function() { + this.clearLoadingTimer_(); + this.loadingTimer_ = window.setTimeout( + this.onLoadingSuspiciouslyLong_.bind(this), + GAIA_LOADING_PORTAL_SUSSPECT_TIME_SEC * 1000); + }, + + /** + * Whether Gaia is loading. + * @type {boolean} + */ + get loading() { + return !$('gaia-loading').hidden; + }, + set loading(loading) { + if (loading == this.loading) + return; + + this.showLoadingUI_(loading); + }, + + /** + * Event handler that is invoked just before the frame is shown. + * @param {string} data Screen init payload. Url of auth extension start + * page. + */ + onBeforeShow: function(data) { + chrome.send('loginUIStateChanged', ['gaia-signin', true]); + $('login-header-bar').signinUIState = SIGNIN_UI_STATE.GAIA_SIGNIN; + + // Ensure that GAIA signin (or loading UI) is actually visible. + window.webkitRequestAnimationFrame(function() { + chrome.send('loginVisible', ['gaia-loading']); + }); + + // Announce the name of the screen, if accessibility is on. + $('gaia-signin-aria-label').setAttribute( + 'aria-label', loadTimeData.getString('signinScreenTitle')); + + // Button header is always visible when sign in is presented. + // Header is hidden once GAIA reports on successful sign in. + Oobe.getInstance().headerHidden = false; + }, + + /** + * Event handler that is invoked just before the screen is hidden. + */ + onBeforeHide: function() { + chrome.send('loginUIStateChanged', ['gaia-signin', false]); + $('login-header-bar').signinUIState = SIGNIN_UI_STATE.HIDDEN; + }, + + /** + * Loads the authentication extension into the iframe. + * @param {Object} data Extension parameters bag. + * @private + */ + loadAuthExtension: function(data) { + this.isLocal = data.isLocal; + this.email = ''; + this.classList.toggle('saml', false); + + this.updateAuthExtension(data); + + var params = {}; + for (var i in cr.login.GaiaAuthHost.SUPPORTED_PARAMS) { + var name = cr.login.GaiaAuthHost.SUPPORTED_PARAMS[i]; + if (data[name]) + params[name] = data[name]; + } + + if (data.localizedStrings) + params.localizedStrings = data.localizedStrings; + + if (data.forceReload || + JSON.stringify(this.gaiaAuthParams_) != JSON.stringify(params)) { + this.error_ = 0; + this.gaiaAuthHost_.load(data.useOffline ? + cr.login.GaiaAuthHost.AuthMode.OFFLINE : + cr.login.GaiaAuthHost.AuthMode.DEFAULT, + params, + this.onAuthCompleted_.bind(this)); + this.gaiaAuthParams_ = params; + + this.loading = true; + this.startLoadingTimer_(); + } else if (this.loading && this.error_) { + // An error has occurred, so trying to reload. + this.doReload(); + } + }, + + /** + * Updates the authentication extension with new parameters, if needed. + * @param {Object} data New extension parameters bag. + * @private + */ + updateAuthExtension: function(data) { + var reasonLabel = $('gaia-signin-reason'); + if (data.passwordChanged) { + reasonLabel.textContent = + loadTimeData.getString('signinScreenPasswordChanged'); + reasonLabel.hidden = false; + } else { + reasonLabel.hidden = true; + } + + $('createAccount').hidden = !data.createAccount; + $('guestSignin').hidden = !data.guestSignin; + $('createManagedUserPane').hidden = !data.managedUsersEnabled; + + $('createManagedUserLinkPlaceholder').hidden = + !data.managedUsersCanCreate; + $('createManagedUserNoManagerText').hidden = data.managedUsersCanCreate; + $('createManagedUserNoManagerText').textContent = + data.managedUsersRestrictionReason; + + // Allow cancellation of screen only when user pods can be displayed. + this.cancelAllowed_ = data.isShowUsers && $('pod-row').pods.length; + $('login-header-bar').allowCancel = this.cancelAllowed_; + + // Sign-in right panel is hidden if all of its items are hidden. + var noRightPanel = $('gaia-signin-reason').hidden && + $('createAccount').hidden && + $('guestSignin').hidden && + $('createManagedUserPane').hidden; + this.classList.toggle('no-right-panel', noRightPanel); + if (Oobe.getInstance().currentScreen === this) + Oobe.getInstance().updateScreenSize(this); + }, + + /** + * Invoked when the auth host notifies about an auth page is loaded. + * @param {boolean} isSAML True if the loaded auth page is SAML. + */ + onAuthPageLoaded_: function(isSAML) { + this.classList.toggle('saml', isSAML); + if (Oobe.getInstance().currentScreen === this) + Oobe.getInstance().updateScreenSize(this); + }, + + /** + * Invoked when the auth host emits 'ready' event. + * @private + */ + onAuthReady_: function() { + this.loading = false; + this.clearLoadingTimer_(); + + // Show deferred error bubble. + if (this.errorBubble_) { + this.showErrorBubble(this.errorBubble_[0], this.errorBubble_[1]); + this.errorBubble_ = undefined; + } + + chrome.send('loginWebuiReady'); + chrome.send('loginVisible', ['gaia-signin']); + + // Warm up the user images screen. + Oobe.getInstance().preloadScreen({id: SCREEN_USER_IMAGE_PICKER}); + }, + + /** + * Invoked when the auth host needs the user to confirm password. + * @private + */ + onAuthConfirmPassword_: function() { + this.loading = true; + Oobe.getInstance().headerHidden = false; + + login.ConfirmPasswordScreen.show( + this.onConfirmPasswordCollected_.bind(this)); + }, + + /** + * Invoked when the confirm password screen is dismissed. + * @private + */ + onConfirmPasswordCollected_: function(password) { + this.gaiaAuthHost_.verifyConfirmedPassword(password); + + // Shows signin UI again without changing states. + Oobe.showScreen({id: SCREEN_GAIA_SIGNIN}); + }, + + /** + * Inovked when the auth flow completes but no password is available. + * @param {string} email The authenticated user email. + */ + onAuthNoPassword_: function(email) { + login.MessageBoxScreen.show( + loadTimeData.getString('noPasswordWarningTitle'), + loadTimeData.getString('noPasswordWarningBody'), + loadTimeData.getString('noPasswordWarningOkButton'), + Oobe.showSigninUI); + }, + + /** + * Invoked when auth is completed successfully. + * @param {!Object} credentials Credentials of the completed authentication. + * @private + */ + onAuthCompleted_: function(credentials) { + if (credentials.useOffline) { + this.email = credentials.email; + chrome.send('authenticateUser', + [credentials.email, credentials.password]); + } else if (credentials.authCode) { + chrome.send('completeAuthentication', + [credentials.email, + credentials.password, + credentials.authCode]); + } else { + chrome.send('completeLogin', + [credentials.email, credentials.password]); + } + + this.loading = true; + // Now that we're in logged in state header should be hidden. + Oobe.getInstance().headerHidden = true; + // Clear any error messages that were shown before login. + Oobe.clearErrors(); + }, + + /** + * Clears input fields and switches to input mode. + * @param {boolean} takeFocus True to take focus. + * @param {boolean} forceOnline Whether online sign-in should be forced. + * If |forceOnline| is false previously used sign-in type will be used. + */ + reset: function(takeFocus, forceOnline) { + // Reload and show the sign-in UI if needed. + if (takeFocus) { + if (!forceOnline && this.isLocal) { + // Show 'Cancel' button to allow user to return to the main screen + // (e.g. this makes sense when connection is back). + Oobe.getInstance().headerHidden = false; + $('login-header-bar').signinUIState = SIGNIN_UI_STATE.GAIA_SIGNIN; + // Do nothing, since offline version is reloaded after an error comes. + } else { + Oobe.showSigninUI(); + } + } + }, + + /** + * Reloads extension frame. + */ + doReload: function() { + this.error_ = 0; + this.gaiaAuthHost_.reload(); + this.loading = true; + this.startLoadingTimer_(); + }, + + /** + * Updates localized content of the screen that is not updated via template. + */ + updateLocalizedContent: function() { + $('createAccount').innerHTML = loadTimeData.getStringF( + 'createAccount', + '<a id="createAccountLink" class="signin-link" href="#">', + '</a>'); + $('guestSignin').innerHTML = loadTimeData.getStringF( + 'guestSignin', + '<a id="guestSigninLink" class="signin-link" href="#">', + '</a>'); + $('createManagedUserLinkPlaceholder').innerHTML = loadTimeData.getStringF( + 'createLocallyManagedUser', + '<a id="createManagedUserLink" class="signin-link" href="#">', + '</a>'); + $('createAccountLink').addEventListener('click', function(e) { + chrome.send('createAccount'); + e.preventDefault(); + }); + $('guestSigninLink').addEventListener('click', function(e) { + chrome.send('launchIncognito'); + e.preventDefault(); + }); + $('createManagedUserLink').addEventListener('click', function(e) { + chrome.send('showLocallyManagedUserCreationScreen'); + e.preventDefault(); + }); + }, + + /** + * Shows sign-in error bubble. + * @param {number} loginAttempts Number of login attemps tried. + * @param {HTMLElement} content Content to show in bubble. + */ + showErrorBubble: function(loginAttempts, error) { + if (this.isLocal) { + $('add-user-button').hidden = true; + $('cancel-add-user-button').hidden = false; + // Reload offline version of the sign-in extension, which will show + // error itself. + chrome.send('offlineLogin', [this.email]); + } else if (!this.loading) { + // We want to show bubble near "Email" field, but we can't calculate + // it's position because it is located inside iframe. So we only + // can hardcode some constants. + /** @const */ var ERROR_BUBBLE_OFFSET = 84; + /** @const */ var ERROR_BUBBLE_PADDING = 0; + $('bubble').showContentForElement($('login-box'), + cr.ui.Bubble.Attachment.LEFT, + error, + ERROR_BUBBLE_OFFSET, + ERROR_BUBBLE_PADDING); + } else { + // Defer the bubble until the frame has been loaded. + this.errorBubble_ = [loginAttempts, error]; + } + }, + + /** + * Called when user canceled signin. + */ + cancel: function() { + if (!this.cancelAllowed_) + return; + $('pod-row').loadLastWallpaper(); + Oobe.showScreen({id: SCREEN_ACCOUNT_PICKER}); + Oobe.resetSigninUI(true); + }, + + /** + * Handler for iframe's error notification coming from the outside. + * For more info see C++ class 'SnifferObserver' which calls this method. + * @param {number} error Error code. + */ + onFrameError: function(error) { + this.error_ = error; + chrome.send('frameLoadingCompleted', [this.error_]); + }, + }; +}); diff --git a/chromium/chrome/browser/resources/chromeos/login/screen_locally_managed_user_creation.css b/chromium/chrome/browser/resources/chromeos/login/screen_locally_managed_user_creation.css new file mode 100644 index 00000000000..c560484d3c6 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/screen_locally_managed_user_creation.css @@ -0,0 +1,521 @@ +/* Copyright (c) 2013 The Chromium Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * This is the stylesheet used by the Locally managed user creation flow screen. + */ + +#managed-user-creation { + height: 609px; /* Same size as GAIA sign in screen.*/ + padding: 0 0; /* Some screens have elements right next to borders. */ + width: 722px; +} + +#managed-user-creation .step-contents { + height: 100%; +} + +#managed-user-creation .step-controls { + -webkit-padding-end: 20px; + bottom: 20px; +} + +#managed-user-creation .logo-padded-text { + padding: 0 17px 0; +} + +#managed-user-creation .marketing { + background-color: green; + height: 344px; +} + +#managed-user-creation .below-marketing { + font-size: 12px; + line-height: 18px; + max-height: 184px; + overflow-x: auto; +} + +#managed-user-creation .button-link { + font-size: small; + padding: 0 20px; + position: absolute; +} + +.below-marketing::-webkit-scrollbar { + width: 8px; +} + +.below-marketing::-webkit-scrollbar-track-piece { + background: #888 +} + +.below-marketing::-webkit-scrollbar-thumb { + background: #eee +} + +#managed-user-creation .page-no-marketing { + height: 470px; + padding: 70px 17px 0; +} + +#managed-user-creation .page-title { + color: #000; + font-size: 15px; + line-height: 24px; +} + +.below-marketing strong { + color: #000; + font-weight: bold; +} + +#managed-user-creation .page-title-explanation { + color: rgb(150, 150, 150); + font-size: 12px; +} + +#managed-user-creation .page-title.inline { + -webkit-margin-end: 1ex; + display: inline-block; +} + +#managed-user-creation .page-title-explanation.inline { + display: inline; +} + +#managed-user-creation .page-title.centred { + text-align: center; +} + +#managed-user-creation .page-title-explanation.centred { + text-align: center; +} + +#managed-user-creation-intro-title { + font-size: x-large; + text-align: center; +} + +#managed-user-creation-intro-placeholder { + background-color: gray; + font-size: x-large; + height: 150px; + text-align: center; +} + +#managed-user-creation-intro .below-marketing { + margin: 20px 40px 0; +} + +#managed-user-creation-intro-alternate-text { + margin-bottom: 12px; + margin-top: 12px; +} + +#managed-user-creation-intro-text-3 { + margin-top: 12px; +} + +#managed-user-creation-created .below-marketing { + margin: 20px 40px 0; +} + +#managed-user-creation-created-text-1 { + max-width: 600px; + word-wrap: break-word; +} + +#managed-user-creation-created-text-2 { + margin-top: 20px; + max-width: 600px; + word-wrap: break-word; +} + +#managed-user-creation-created-text-3 { + margin-top: 20px; +} + +#managed-user-creation-password-block, +#managed-user-creation-password-title { + margin-top: 10px; +} + +#managed-user-creation-name-block { + margin-bottom: 20px; + margin-top: 10px; +} + +input.managed-user-creation-manager-password, +#managed-user-creation-name, +#managed-user-creation-password { + padding: 4px 6px; +} +#managed-user-creation-password-confirm { + margin-top: 12px; + padding: 4px 6px; +} + +#managed-user-creation-name-error { + visibility: hidden; +} + +#managed-user-creation-name-error.error { + color: rgb(207, 93, 70); + padding-left: 28px; + visibility: visible; +} + +#managed-user-creation-managers-block { + -webkit-flex-direction: column; + display: -webkit-flex; + height: 100%; +} + +#managed-user-creation-managers-pane { + border: 1px solid #c8c8c8; + height: 100%; + margin-top: 20px; + overflow-y: auto; +} + +/* This class will be set for elements with hide-on-import class by JS when + * page is used in 'import' mode + */ +#managed-user-creation .hidden-on-import { + display: none; +} + +#managed-user-creation-error { + padding: 175px 120px 0; + text-align: center; +} + +#managed-user-creation-error .error-icon { + -webkit-margin-after: 50px; +} + +#managed-user-creation-error .error-message-paragraph { + -webkit-margin-after: 40px; + -webkit-margin-before: 30px; +} + +.screen-control-button { + margin-left: 10px !important; +} + +.import-pod { + height: 32px; + opacity: 0.8; + padding: 6px; + width: 626px; +} + +.import-pod .import-pod-name { + color: #000; + display: inline; + max-height: 30px; + vertical-align: top; +} + +.import-pod.imported .import-pod-name { + color: rgb(141, 141, 141); +} + +.import-pod .import-pod-image { + border: 1px solid gray; + display: inline; + height: 30px; + width: 30px; +} + +.manager-pod { + height: 32px; + opacity: 0.8; + padding: 20px; + width: 646px; +} + +.manager-pod .managed-user-creation-manager-info-block { + float: left; + min-height: 32px; +} + +.manager-pod .managed-user-creation-manager-image { + border: 1px solid gray; + display: inline-block; + height: 30px; + width: 30px; +} + +.manager-pod .managed-user-creation-manager-info { + display: inline-block; + margin: 0 8px; + min-height: 32px; +} + +.manager-pod .managed-user-creation-manager-info-text { + display: inline-block; + min-height: 32px; + vertical-align: top; +} + +.manager-pod .password-block { + float: right; +} + +.manager-pod .managed-user-creation-manager-email { + color: #666; + font-size: small; + max-height: 16px; +} + +.manager-pod .managed-user-creation-manager-name { + color: #000; + font-size: small; + max-height: 16px; +} + +#managed-user-creation-status { + margin: 4px 10px; +} + +#managed-user-creation-status .error { + color: rgb(207, 93, 70); +} + +#managed-user-creation-status .spinner-wrapper { + -webkit-margin-start: 3px; + display: -webkit-inline-box; + margin-top: 3px; + vertical-align: top; +} + +#managed-user-creation-status .id-text { + display: -webkit-inline-box; + margin-top: 1px; + max-width: 480px; + vertical-align: baseline; +} + +.manager-pod.focused { + background-color: rgb(66, 129, 244); + opacity: 1; +} + +.import-pod.imported.focused { + background-color: rgb(238, 238, 238); + opacity: 1; +} + +.import-pod.focused { + background-color: rgb(66, 129, 244); + opacity: 1; +} + +.manager-pod.focused .managed-user-creation-manager-email { + color: #fff; +} + +.manager-pod.focused .managed-user-creation-manager-name { + color: #fff; +} + +#managed-user-creation-import-pane { + border: 1px solid #c8c8c8; + height: 400px; + overflow-x: hidden; + overflow-y: auto; +} + +.manager-pod .password-error, +#managed-user-creation .password-error, +#managed-user-creation .duplicate-name { + border: 1px solid red !important; +} + +#managed-user-creation-image-picker { + margin-top: 16px; +} + +#managed-user-creation-image-grid { + -webkit-user-drag: none; + -webkit-user-select: none; + display: inline-block; + height: 264px; + margin: 0; + outline: none; + overflow: hidden; + padding: 0; + width: 400px; +} + +#managed-user-creation-image-grid img { + background-color: white; + height: 50px; + vertical-align: middle; + width: 50px; +} + +#managed-user-creation-image-grid > li { + border: 1px solid rgba(0, 0, 0, 0.15); + border-radius: 4px; + display: inline-block; + margin: 4px; + padding: 3px; +} + +#managed-user-creation-image-grid [selected] { + border: 2px solid rgb(0, 102, 204); + padding: 2px; +} + +#managed-user-creation-image-preview { + float: right; + margin: 4px; + max-width: 220px; + position: relative; +} + +html[dir=rtl] #managed-user-creation-image-preview { + float: left; +} + +#managed-user-creation-image-preview-img { + display: block; + max-height: 220px; + max-width: 220px; +} + +#managed-user-creation-image-preview-img.animated-transform { + -webkit-transition: -webkit-transform 200ms linear; +} + +.camera.live #managed-user-creation-image-preview-img { + display: none; +} + +.camera.flip-x #managed-user-creation-image-preview-img { + -webkit-transform: rotateY(180deg); +} + +.default-image #managed-user-creation-image-preview-img { + background: white; + border: solid 1px #cacaca; + border-radius: 4px; + padding: 2px; +} + +.managed-user-creation-image-stream-area { + display: none; + padding: 0; + position: relative; +} + +.camera.live .managed-user-creation-image-stream-area { + display: block; +} + +#managed-user-creation-image-stream-crop { + -webkit-transition: -webkit-transform 200ms linear; + height: 220px; + overflow: hidden; + position: relative; + width: 220px; +} + +.flip-x #managed-user-creation-image-stream-crop { + -webkit-transform: rotateY(180deg); +} + +.managed-user-creation-image-stream { + border: solid 1px #cacaca; + height: 220px; + /* Center image for 4:3 aspect ratio. */ + left: -16.6%; + position: absolute; + visibility: hidden; +} + +.online .managed-user-creation-image-stream { + visibility: visible; +} + +#managed-user-creation-image-preview-caption { + color: dimGray; + font-size: smaller; + margin: 8px 4px; +} + +.camera #managed-user-creation-image-preview-caption { + display: none; +} + +#managed-user-creation-flip-photo { + -webkit-transition: opacity 75ms linear; + background: url('chrome://theme/IDR_MIRROR_FLIP') no-repeat; + border: none; + bottom: 44px; /* 8px + image bottom. */ + display: block; + height: 32px; + opacity: 0; + position: absolute; + right: 8px; + width: 32px; +} + +/* TODO(merkulova): remove when webkit crbug.com/126479 is fixed. */ +.flip-trick { + -webkit-transform: translateZ(1px); +} + +html[dir=rtl] #managed-user-creation-flip-photo { + left: 8px; + right: auto; +} + +/* "Flip photo" button is hidden during flip animation. */ +.camera.online:not(.animation) #managed-user-creation-flip-photo, +.camera.phototaken:not(.animation) #managed-user-creation-flip-photo { + opacity: 0.75; +} + +#managed-user-creation-discard-photo, +#managed-user-creation-take-photo { + display: none; + height: 25px; + margin: 4px 1px; + padding: 0; + width: 220px; +} + +.camera:not(.live) #managed-user-creation-discard-photo { + background: url('chrome://theme/IDR_USER_IMAGE_RECYCLE') + no-repeat center 0; + display: block; +} + +.camera.live.online #managed-user-creation-take-photo { + background: url('chrome://theme/IDR_USER_IMAGE_CAPTURE') + no-repeat center -1px; + display: block; +} + +#managed-user-creation-image-preview .perspective-box { + -webkit-perspective: 600px; +} + +.managed-user-creation-image-stream-area .spinner { + display: none; + height: 44px; + left: 50%; + margin-left: -22px; + margin-top: -22px; + position: absolute; + top: 50%; + width: 44px; +} + +.camera.live:not(.online) .managed-user-creation-image-stream-area .spinner { + display: block; +} diff --git a/chromium/chrome/browser/resources/chromeos/login/screen_locally_managed_user_creation.html b/chromium/chrome/browser/resources/chromeos/login/screen_locally_managed_user_creation.html new file mode 100644 index 00000000000..6c1676a7d1f --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/screen_locally_managed_user_creation.html @@ -0,0 +1,157 @@ +<div class="step hidden" id="managed-user-creation"> + <div class="step-contents"> + <div id="managed-user-creation-intro" class="step-no-logo"> + <div id="managed-user-creation-marketing-intro" + class="marketing"> + <img src="chrome://theme/IDR_SUPERVISED_ILLUSTRATION_START"> + </div> + <div class="below-marketing"> + <div class="page-title" i18n-content="createManagedUserIntroTextTitle"> + </div> + <div id="managed-user-creation-intro-alternate-text"></div> + <div i18n-content="createManagedUserIntroText2"></div> + <div id="managed-user-creation-intro-text-3" + i18n-content="createManagedUserIntroText3"></div> + </div> + </div> + <div id="managed-user-creation-manager" class="page-no-marketing" hidden> + <div id="managed-user-creation-managers-block" hidden> + <div class="logo-padded-text"> + <div class="page-title" + i18n-content="createManagedUserPickManagerTitle"></div> + <div class="page-title-explanation" + i18n-content="createManagedUserPickManagerTitleExplanation"></div> + </div> + <div id="managed-user-creation-managers-pane"></div> + </div> + </div> + <div id="managed-user-creation-username" class="page-no-marketing" hidden> + <div class="logo-padded-text"> + <div class="hide-on-import"> + <div class="page-title inline" + i18n-content="createManagedUserNameTitle"></div> + <div id="managed-user-creation-name-explanation" + class="page-title-explanation inline"></div> + </div> + <div id="managed-user-creation-name-block" class="hide-on-import"> + <input id="managed-user-creation-name" type="text" maxlength="50" /> + <span id="managed-user-creation-name-error" class="no-error"> + </span> + </div> + <div> + <div class="page-title inline" + i18n-content="createManagedUserPasswordTitle"></div> + <div class="page-title-explanation inline" + i18n-content="createManagedUserPasswordExplanation"></div> + </div> + <div id="managed-user-creation-password-block"> + <div> + <input id="managed-user-creation-password" type="password" + i18n-values="placeholder:createManagedUserPasswordHint" /> + </div> + <div> + <input id="managed-user-creation-password-confirm" + type="password" + i18n-values=" + placeholder:createManagedUserPasswordConfirmHint" /> + </div> + </div> + </div> + <div id="managed-user-creation-image-picker" class="logo-padded-text"> + <grid id="managed-user-creation-image-grid"> + </grid> + <div id="managed-user-creation-image-preview"> + <img id="managed-user-creation-image-preview-img" alt=""> + <div class="managed-user-creation-image-stream-area"> + <div class="perspective-box"> + <div id="managed-user-creation-image-stream-crop"> + <video class="managed-user-creation-image-stream" autoplay> + </video> + </div> + </div> + <div class="spinner"></div> + </div> + <p id="managed-user-creation-image-preview-caption"></p> + <button id="managed-user-creation-flip-photo" + class="custom-appearance" + i18n-values="title:flipPhoto"></button> + <button id="managed-user-creation-discard-photo" + i18n-values="title:discardPhoto"></button> + <button id="managed-user-creation-take-photo" + i18n-values="title:takePhoto"></button> + </div> + </div> + </div> + + <div id="managed-user-creation-import" class="page-no-marketing" hidden> + <div class="logo-padded-text"> + <div> + <div class="page-title" + i18n-content="importExistingSupervisedUserTitle"></div> + <div class="page-title-explanation" + i18n-content="importExistingSupervisedUserText"></div> + </div> + </div> + <div class="logo-padded-text"> + <div id="managed-user-creation-import-pane"></div> + </div> + </div> + + <div id="managed-user-creation-created" class="step-no-logo" hidden> + <div class="marketing"> + <img src="chrome://theme/IDR_SUPERVISED_ILLUSTRATION_DONE"> + </div> + <div class="below-marketing"> + <div> + <div id="managed-user-creation-created-text-1" + class="page-title"></div> + <div id="managed-user-creation-created-text-2"></div> + <div id="managed-user-creation-created-text-3"></div> + </div> + </div> + </div> + <div id="managed-user-creation-error" hidden> + <img alt class="error-icon" src="chrome://theme/IDR_TECHNICAL_ERROR"> + <div id="managed-user-creation-error-title" class="error-title"></div> + <div id="managed-user-creation-error-text" + class="error-message-paragraph"></div> + <div> + <button id="managed-user-creation-error-button" + class="custom-appearance button-fancy button-blue"> + </button> + </div> + </div> + </div> + <div id="managed-user-creation-controls" class="step-controls"> + </div> + <div class="template-status-container status-container" hidden> + <span class="id-text"></span> + <div class="spinner-wrapper"> + <div class="id-spinner inline-spinner"></div> + </div> + </div> + <div class="template-import-supervised-user-link button-link" hidden> + <a href="#" class="signin-link" i18n-content="importSupervisedUserLink"></a> + </div> + <div class="template-create-supervised-user-link button-link" hidden> + <a href="#" class="signin-link" i18n-content="createSupervisedUserLink"></a> + </div> + <div id="managed-user-creation-manager-template" hidden + class="manager-pod"> + <div class="managed-user-creation-manager-info-block"> + <img class="managed-user-creation-manager-image"> + <div class="managed-user-creation-manager-info-text"> + <div class="managed-user-creation-manager-name"></div> + <div class="managed-user-creation-manager-email"></div> + </div> + </div> + <div class="password-block" hidden> + <input class="managed-user-creation-manager-password" type="password" + i18n-values="placeholder:createManagedUserManagerPasswordHint" /> + </div> + </div> + <div id="managed-user-creation-import-template" hidden class="import-pod"> + <img class="import-pod-image"></img> + <div class="import-pod-name"></div> + </div> +</div>
\ No newline at end of file diff --git a/chromium/chrome/browser/resources/chromeos/login/screen_locally_managed_user_creation.js b/chromium/chrome/browser/resources/chromeos/login/screen_locally_managed_user_creation.js new file mode 100644 index 00000000000..372b744a0f2 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/screen_locally_managed_user_creation.js @@ -0,0 +1,1502 @@ +// Copyright (c) 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** + * @fileoverview Locally managed user creation flow screen. + */ + +login.createScreen('LocallyManagedUserCreationScreen', + 'managed-user-creation', function() { + var MAX_NAME_LENGTH = 50; + var UserImagesGrid = options.UserImagesGrid; + var ButtonImages = UserImagesGrid.ButtonImages; + + var ManagerPod = cr.ui.define(function() { + var node = $('managed-user-creation-manager-template').cloneNode(true); + node.removeAttribute('id'); + node.removeAttribute('hidden'); + return node; + }); + + ManagerPod.userImageSalt_ = {}; + + /** + * UI element for displaying single account in list of possible managers for + * new locally managed user. + * @type {Object} + */ + ManagerPod.prototype = { + __proto__: HTMLDivElement.prototype, + + /** @override */ + decorate: function() { + // Mousedown has to be used instead of click to be able to prevent 'focus' + // event later. + this.addEventListener('mousedown', + this.handleMouseDown_.bind(this)); + var screen = $('managed-user-creation'); + var managerPod = this; + var managerPodList = screen.managerList_; + var hideManagerPasswordError = function(element) { + managerPod.passwordElement.classList.remove('password-error'); + $('bubble').hide(); + }; + + screen.configureTextInput( + this.passwordElement, + screen.updateNextButtonForManager_.bind(screen), + screen.validIfNotEmpty_.bind(screen), + function(element) { + screen.getScreenButton('next').focus(); + }, + hideManagerPasswordError); + + this.passwordElement.addEventListener('keydown', function(e) { + switch (e.keyIdentifier) { + case 'Up': + managerPodList.selectNextPod(-1); + e.stopPropagation(); + break; + case 'Down': + managerPodList.selectNextPod(+1); + e.stopPropagation(); + break; + } + }); + }, + + /** + * Updates UI elements from user data. + */ + update: function() { + this.imageElement.src = 'chrome://userimage/' + this.user.username + + '?id=' + ManagerPod.userImageSalt_[this.user.username]; + + this.nameElement.textContent = this.user.displayName; + this.emailElement.textContent = this.user.emailAddress; + }, + + showPasswordError: function() { + this.passwordElement.classList.add('password-error'); + $('bubble').showTextForElement( + this.passwordElement, + loadTimeData.getString('createManagedUserWrongManagerPasswordText'), + cr.ui.Bubble.Attachment.BOTTOM, + 24, 4); + }, + + /** + * Brings focus to password field. + */ + focusInput: function() { + this.passwordElement.focus(); + }, + + /** + * Gets image element. + * @type {!HTMLImageElement} + */ + get imageElement() { + return this.querySelector('.managed-user-creation-manager-image'); + }, + + /** + * Gets name element. + * @type {!HTMLDivElement} + */ + get nameElement() { + return this.querySelector('.managed-user-creation-manager-name'); + }, + + /** + * Gets e-mail element. + * @type {!HTMLDivElement} + */ + get emailElement() { + return this.querySelector('.managed-user-creation-manager-email'); + }, + + /** + * Gets password element. + * @type {!HTMLDivElement} + */ + get passwordElement() { + return this.querySelector('.managed-user-creation-manager-password'); + }, + + /** + * Gets password enclosing block. + * @type {!HTMLDivElement} + */ + get passwordBlock() { + return this.querySelector('.password-block'); + }, + + /** @override */ + handleMouseDown_: function(e) { + this.parentNode.selectPod(this); + // Prevent default so that we don't trigger 'focus' event. + e.preventDefault(); + }, + + /** + * The user that this pod represents. + * @type {!Object} + */ + user_: undefined, + get user() { + return this.user_; + }, + set user(userDict) { + this.user_ = userDict; + this.update(); + }, + }; + + var ManagerPodList = cr.ui.define('div'); + + /** + * UI element for selecting manager account for new managed user. + * @type {Object} + */ + ManagerPodList.prototype = { + __proto__: HTMLDivElement.prototype, + + selectedPod_: null, + + /** @override */ + decorate: function() { + }, + + /** + * Returns all the pods in this pod list. + * @type {NodeList} + */ + get pods() { + return this.children; + }, + + addPod: function(manager) { + var managerPod = new ManagerPod({user: manager}); + this.appendChild(managerPod); + managerPod.update(); + }, + + clearPods: function() { + this.innerHTML = ''; + this.selectedPod_ = null; + }, + + selectPod: function(podToSelect) { + if ((this.selectedPod_ == podToSelect) && !!podToSelect) { + podToSelect.focusInput(); + return; + } + this.selectedPod_ = podToSelect; + for (var i = 0, pod; pod = this.pods[i]; ++i) { + if (pod != podToSelect) { + pod.classList.remove('focused'); + pod.passwordElement.value = ''; + pod.passwordBlock.hidden = true; + } + } + if (!podToSelect) + return; + podToSelect.classList.add('focused'); + podToSelect.passwordBlock.hidden = false; + podToSelect.passwordElement.value = ''; + podToSelect.focusInput(); + chrome.send('managerSelectedOnLocallyManagedUserCreationFlow', + [podToSelect.user.username]); + }, + + /** + * Select pod next to currently selected one in given |direction|. + * @param {integer} direction - +1 for selecting pod below current, -1 for + * selecting pod above current. + * @type {boolean} returns if selected pod has changed. + */ + selectNextPod: function(direction) { + if (!this.selectedPod_) + return false; + var index = -1; + for (var i = 0, pod; pod = this.pods[i]; ++i) { + if (pod == this.selectedPod_) { + index = i; + break; + } + } + if (-1 == index) + return false; + index = index + direction; + if (index < 0 || index >= this.pods.length) + return false; + this.selectPod(this.pods[index]); + return true; + } + }; + + var ImportPod = cr.ui.define(function() { + var node = $('managed-user-creation-import-template').cloneNode(true); + node.removeAttribute('id'); + node.removeAttribute('hidden'); + return node; + }); + + /** + * UI element for displaying single supervised user in list of possible users + * for importing existing users. + * @type {Object} + */ + ImportPod.prototype = { + __proto__: HTMLDivElement.prototype, + + /** @override */ + decorate: function() { + // Mousedown has to be used instead of click to be able to prevent 'focus' + // event later. + this.addEventListener('mousedown', + this.handleMouseDown_.bind(this)); + }, + + /** + * Updates UI elements from user data. + */ + update: function() { + this.imageElement.src = this.user.avatarurl; + this.nameElement.textContent = this.user.name; + if (this.user.exists) { + if (this.user.conflict == 'imported') { + this.nameElement.textContent = + loadTimeData.getStringF('importUserExists', this.user.name); + } else { + this.nameElement.textContent = + loadTimeData.getStringF('importUsernameExists', this.user.name); + } + } + this.classList.toggle('imported', this.user.exists); + }, + + /** + * Gets image element. + * @type {!HTMLImageElement} + */ + get imageElement() { + return this.querySelector('.import-pod-image'); + }, + + /** + * Gets name element. + * @type {!HTMLDivElement} + */ + get nameElement() { + return this.querySelector('.import-pod-name'); + }, + + /** @override */ + handleMouseDown_: function(e) { + this.parentNode.selectPod(this); + // Prevent default so that we don't trigger 'focus' event. + e.preventDefault(); + }, + + /** + * The user that this pod represents. + * @type {Object} + */ + user_: undefined, + + get user() { + return this.user_; + }, + + set user(userDict) { + this.user_ = userDict; + this.update(); + }, + }; + + var ImportPodList = cr.ui.define('div'); + + /** + * UI element for selecting existing supervised user for import. + * @type {Object} + */ + ImportPodList.prototype = { + __proto__: HTMLDivElement.prototype, + + selectedPod_: null, + + /** @override */ + decorate: function() { + }, + + /** + * Returns all the pods in this pod list. + * @type {NodeList} + */ + get pods() { + return this.children; + }, + + addPod: function(user) { + var importPod = new ImportPod({user: user}); + this.appendChild(importPod); + importPod.update(); + }, + + clearPods: function() { + this.innerHTML = ''; + this.selectedPod_ = null; + }, + + scrollIntoView: function(pod) { + scroller = this.parentNode; + var itemHeight = pod.getBoundingClientRect().height; + var scrollTop = scroller.scrollTop; + var top = pod.offsetTop - scroller.offsetTop; + var clientHeight = scroller.clientHeight; + + var self = scroller; + + // Function to adjust the tops of viewport and row. + function scrollToAdjustTop() { + self.scrollTop = top; + return true; + }; + // Function to adjust the bottoms of viewport and row. + function scrollToAdjustBottom() { + var cs = getComputedStyle(self); + var paddingY = parseInt(cs.paddingTop, 10) + + parseInt(cs.paddingBottom, 10); + + if (top + itemHeight > scrollTop + clientHeight - paddingY) { + self.scrollTop = top + itemHeight - clientHeight + paddingY; + return true; + } + return false; + }; + + // Check if the entire of given indexed row can be shown in the viewport. + if (itemHeight <= clientHeight) { + if (top < scrollTop) + return scrollToAdjustTop(); + if (scrollTop + clientHeight < top + itemHeight) + return scrollToAdjustBottom(); + } else { + if (scrollTop < top) + return scrollToAdjustTop(); + if (top + itemHeight < scrollTop + clientHeight) + return scrollToAdjustBottom(); + } + return false; + }, + + /** + * @param {Element} podToSelect - pod to select, can be null. + */ + selectPod: function(podToSelect) { + if ((this.selectedPod_ == podToSelect) && !!podToSelect) { + return; + } + this.selectedPod_ = podToSelect; + for (var i = 0; i < this.pods.length; i++) { + var pod = this.pods[i]; + if (pod != podToSelect) + pod.classList.remove('focused'); + } + if (!podToSelect) + return; + podToSelect.classList.add('focused'); + var screen = $('managed-user-creation'); + if (!this.selectedPod_) { + screen.getScreenButton('import').disabled = true; + } else { + screen.getScreenButton('import').disabled = + this.selectedPod_.user.exists; + if (!this.selectedPod_.user.exists) { + chrome.send('userSelectedForImportInManagedUserCreationFlow', + [podToSelect.user.id]); + } + } + }, + + selectUser: function(user_id) { + for (var i = 0, pod; pod = this.pods[i]; ++i) { + if (pod.user.id == user_id) { + this.selectPod(pod); + this.scrollIntoView(pod); + break; + } + } + }, + }; + + return { + EXTERNAL_API: [ + 'loadManagers', + 'managedUserSuggestImport', + 'managedUserNameError', + 'managedUserNameOk', + 'showErrorPage', + 'showIntroPage', + 'showManagerPage', + 'showManagerPasswordError', + 'showPasswordError', + 'showProgress', + 'showStatusError', + 'showTutorialPage', + 'showUsernamePage', + 'showPage', + 'setDefaultImages', + 'setCameraPresent', + 'setExistingManagedUsers', + ], + + lastVerifiedName_: null, + lastIncorrectUserName_: null, + managerList_: null, + importList_: null, + + currentPage_: null, + imagesRequested_: false, + + // Contains data that can be auto-shared with handler. + context_: {}, + + /** @override */ + decorate: function() { + this.managerList_ = new ManagerPodList(); + $('managed-user-creation-managers-pane').appendChild(this.managerList_); + + this.importList_ = new ImportPodList(); + $('managed-user-creation-import-pane').appendChild(this.importList_); + + var userNameField = $('managed-user-creation-name'); + var passwordField = $('managed-user-creation-password'); + var password2Field = $('managed-user-creation-password-confirm'); + + var creationScreen = this; + + var hideUserPasswordError = function(element) { + $('bubble').hide(); + $('managed-user-creation-password').classList.remove('password-error'); + }; + + this.configureTextInput(userNameField, + this.checkUserName_.bind(this), + this.validIfNotEmpty_.bind(this), + function(element) { + passwordField.focus(); + }, + this.clearUserNameError_.bind(this)); + this.configureTextInput(passwordField, + this.updateNextButtonForUser_.bind(this), + this.validIfNotEmpty_.bind(this), + function(element) { + password2Field.focus(); + }, + hideUserPasswordError); + this.configureTextInput(password2Field, + this.updateNextButtonForUser_.bind(this), + this.validIfNotEmpty_.bind(this), + function(element) { + creationScreen.getScreenButton('next').focus(); + }, + hideUserPasswordError); + + this.getScreenButton('error').addEventListener('click', function(e) { + creationScreen.handleErrorButtonPressed_(); + e.stopPropagation(); + }); + + /* + TODO(antrim) : this is an explicit code duplications with UserImageScreen. + It should be removed by issue 251179. + */ + var imageGrid = this.getScreenElement('image-grid'); + UserImagesGrid.decorate(imageGrid); + + // Preview image will track the selected item's URL. + var previewElement = this.getScreenElement('image-preview'); + previewElement.oncontextmenu = function(e) { e.preventDefault(); }; + + imageGrid.previewElement = previewElement; + imageGrid.selectionType = 'default'; + imageGrid.flipPhotoElement = this.getScreenElement('flip-photo'); + + imageGrid.addEventListener('activate', + this.handleActivate_.bind(this)); + imageGrid.addEventListener('select', + this.handleSelect_.bind(this)); + imageGrid.addEventListener('phototaken', + this.handlePhotoTaken_.bind(this)); + imageGrid.addEventListener('photoupdated', + this.handlePhotoUpdated_.bind(this)); + // Set the title for camera item in the grid. + imageGrid.setCameraTitles( + loadTimeData.getString('takePhoto'), + loadTimeData.getString('photoFromCamera')); + + this.getScreenElement('take-photo').addEventListener( + 'click', this.handleTakePhoto_.bind(this)); + this.getScreenElement('discard-photo').addEventListener( + 'click', this.handleDiscardPhoto_.bind(this)); + + // Toggle 'animation' class for the duration of WebKit transition. + this.getScreenElement('flip-photo').addEventListener( + 'click', function(e) { + previewElement.classList.add('animation'); + imageGrid.flipPhoto = !imageGrid.flipPhoto; + }); + this.getScreenElement('image-stream-crop').addEventListener( + 'webkitTransitionEnd', function(e) { + previewElement.classList.remove('animation'); + }); + this.getScreenElement('image-preview-img').addEventListener( + 'webkitTransitionEnd', function(e) { + previewElement.classList.remove('animation'); + }); + }, + + buttonIds: [], + + /** + * Creates button for adding to controls. + * @param {string} buttonId -- id for button, have to be unique within + * screen. Actual id will be prefixed with screen name and appended with + * '-button'. Use getScreenButton(buttonId) to find it later. + * @param {string} i18nPrefix -- screen prefix for i18n values. + * @param {function} callback -- will be called on button press with + * buttonId parameter. + * @param {array} pages -- list of pages where this button should be + * displayed. + * @param {array} classes -- list of additional CSS classes for button. + */ + makeButton: function(buttonId, i18nPrefix, callback, pages, classes) { + var capitalizedId = buttonId.charAt(0).toUpperCase() + buttonId.slice(1); + this.buttonIds.push(buttonId); + var result = this.ownerDocument.createElement('button'); + result.id = this.name() + '-' + buttonId + '-button'; + result.classList.add('screen-control-button'); + for (var i = 0; i < classes.length; i++) { + result.classList.add(classes[i]); + } + result.textContent = loadTimeData. + getString(i18nPrefix + capitalizedId + 'ButtonTitle'); + result.addEventListener('click', function(e) { + callback(buttonId); + e.stopPropagation(); + }); + result.pages = pages; + return result; + }, + + /** + * Simple validator for |configureTextInput|. + * Element is considered valid if it has any text. + * @param {Element} element - element to be validated. + * @return {boolean} - true, if element has any text. + */ + validIfNotEmpty_: function(element) { + return (element.value.length > 0); + }, + + /** + * Configure text-input |element|. + * @param {Element} element - element to be configured. + * @param {function(element)} inputChangeListener - function that will be + * called upon any button press/release. + * @param {function(element)} validator - function that will be called when + * Enter is pressed. If it returns |true| then advance to next element. + * @param {function(element)} moveFocus - function that will determine next + * element and move focus to it. + * @param {function(element)} errorHider - function that is called upon + * every button press, so that any associated error can be hidden. + */ + configureTextInput: function(element, + inputChangeListener, + validator, + moveFocus, + errorHider) { + element.addEventListener('keydown', function(e) { + if (e.keyIdentifier == 'Enter') { + var dataValid = true; + if (validator) + dataValid = validator(element); + if (!dataValid) { + element.focus(); + } else { + if (moveFocus) + moveFocus(element); + } + e.stopPropagation(); + return; + } + if (errorHider) + errorHider(element); + if (inputChangeListener) + inputChangeListener(element); + }); + element.addEventListener('keyup', function(e) { + if (inputChangeListener) + inputChangeListener(element); + }); + }, + + /** + * Makes element from template. + * @param {string} templateId -- template will be looked up within screen + * by class with name "template-<templateId>". + * @param {string} elementId -- id for result, uinque within screen. Actual + * id will be prefixed with screen name. Use getScreenElement(id) to find + * it later. + */ + makeFromTemplate: function(templateId, elementId) { + var templateClassName = 'template-' + templateId; + var templateNode = this.querySelector('.' + templateClassName); + var screenPrefix = this.name() + '-'; + var result = templateNode.cloneNode(true); + result.classList.remove(templateClassName); + result.id = screenPrefix + elementId; + return result; + }, + + /** + * @param {string} buttonId -- id of button to be found, + * @return {Element} button created by makeButton with given buttonId. + */ + getScreenButton: function(buttonId) { + var fullId = this.name() + '-' + buttonId + '-button'; + return this.getScreenElement(buttonId + '-button'); + }, + + /** + * @param {string} elementId -- id of element to be found, + * @return {Element} button created by makeFromTemplate with elementId. + */ + getScreenElement: function(elementId) { + var fullId = this.name() + '-' + elementId; + return $(fullId); + }, + + /** + * Screen controls. + * @type {!Array} Array of Buttons. + */ + get buttons() { + var buttons = []; + + var status = this.makeFromTemplate('status-container', 'status'); + buttons.push(status); + + var importLink = this.makeFromTemplate('import-supervised-user-link', + 'import-link'); + importLink.hidden = true; + buttons.push(importLink); + var linkElement = importLink.querySelector('.signin-link'); + linkElement.addEventListener('click', + this.importLinkPressed_.bind(this)); + + var createLink = this.makeFromTemplate('create-supervised-user-link', + 'create-link'); + createLink.hidden = true; + buttons.push(createLink); + + linkElement = createLink.querySelector('.signin-link'); + linkElement.addEventListener('click', + this.createLinkPressed_.bind(this)); + + buttons.push(this.makeButton( + 'start', + 'managedUserCreationFlow', + this.startButtonPressed_.bind(this), + ['intro'], + ['custom-appearance', 'button-fancy', 'button-blue'])); + + buttons.push(this.makeButton( + 'prev', + 'managedUserCreationFlow', + this.prevButtonPressed_.bind(this), + ['manager'], + [])); + + buttons.push(this.makeButton( + 'next', + 'managedUserCreationFlow', + this.nextButtonPressed_.bind(this), + ['manager', 'username'], + [])); + + buttons.push(this.makeButton( + 'import', + 'managedUserCreationFlow', + this.importButtonPressed_.bind(this), + ['import', 'import-password'], + [])); + + buttons.push(this.makeButton( + 'gotit', + 'managedUserCreationFlow', + this.gotItButtonPressed_.bind(this), + ['created'], + ['custom-appearance', 'button-fancy', 'button-blue'])); + return buttons; + }, + + /** + * Does sanity check and calls backend with current user name/password pair + * to authenticate manager. May result in showManagerPasswordError. + * @private + */ + validateAndLogInAsManager_: function() { + var selectedPod = this.managerList_.selectedPod_; + if (null == selectedPod) + return; + + var managerId = selectedPod.user.username; + var managerDisplayId = selectedPod.user.emailAddress; + var managerPassword = selectedPod.passwordElement.value; + if (managerPassword.length == 0) + return; + if (this.disabled) + return; + this.disabled = true; + this.context_.managerId = managerId; + this.context_.managerDisplayId = managerDisplayId; + this.context_.managerName = selectedPod.user.displayName; + chrome.send('authenticateManagerInLocallyManagedUserCreationFlow', + [managerId, managerPassword]); + }, + + /** + * Does sanity check and calls backend with user display name/password pair + * to create a user. + * @private + */ + validateAndCreateLocallyManagedUser_: function() { + var firstPassword = $('managed-user-creation-password').value; + var secondPassword = + $('managed-user-creation-password-confirm').value; + var userName = $('managed-user-creation-name').value; + if (firstPassword != secondPassword) { + this.showPasswordError( + loadTimeData.getString('createManagedUserPasswordMismatchError')); + return; + } + if (this.disabled) + return; + this.disabled = true; + this.context_.managedName = userName; + chrome.send('specifyLocallyManagedUserCreationFlowUserData', + [userName, firstPassword]); + }, + + /** + * Does sanity check and calls backend with selected existing supervised + * user id to import user. + * @private + */ + importSupervisedUser_: function() { + if (this.disabled) + return; + if (this.currentPage_ == 'import-password') { + var firstPassword = this.getScreenElement('password').value; + var secondPassword = this.getScreenElement('password-confirm').value; + if (firstPassword != secondPassword) { + this.showPasswordError( + loadTimeData.getString('createManagedUserPasswordMismatchError')); + return; + } + var userId = this.context_.importUserId; + this.disabled = true; + chrome.send('importSupervisedUserWithPassword', + [userId, firstPassword]); + return; + } else { + var selectedPod = this.importList_.selectedPod_; + if (!selectedPod) + return; + var user = selectedPod.user; + var userId = user.id; + + this.context_.importUserId = userId; + this.context_.managedName = user.name; + this.context_.selectedImageUrl = user.avatarurl; + if (!user.needPassword) { + this.disabled = true; + chrome.send('importSupervisedUser', [userId]); + } else { + this.setVisiblePage_('import-password'); + } + } + }, + + /** + * Calls backend part to check if current user name is valid/not taken. + * Results in call to either managedUserNameOk or managedUserNameError. + * @private + */ + checkUserName_: function() { + var userName = this.getScreenElement('name').value; + + // Avoid flickering + if (userName == this.lastIncorrectUserName_ || + userName == this.lastVerifiedName_) { + return; + } + if (userName.length > 0) { + chrome.send('checkLocallyManagedUserName', [userName]); + } else { + this.nameErrorVisible = false; + this.lastVerifiedName_ = null; + this.lastIncorrectUserName_ = null; + this.updateNextButtonForUser_(); + } + }, + + /** + * Called by backend part in case of successful name validation. + * @param {string} name - name that was validated. + */ + managedUserNameOk: function(name) { + this.lastVerifiedName_ = name; + this.lastIncorrectUserName_ = null; + if ($('managed-user-creation-name').value == name) + this.clearUserNameError_(); + this.updateNextButtonForUser_(); + }, + + /** + * Called by backend part in case of name validation failure. + * @param {string} name - name that was validated. + * @param {string} errorText - reason why this name is invalid. + */ + managedUserNameError: function(name, errorText) { + this.disabled = false; + this.lastIncorrectUserName_ = name; + this.lastVerifiedName_ = null; + + var userNameField = $('managed-user-creation-name'); + if (userNameField.value == this.lastIncorrectUserName_) { + this.nameErrorVisible = true; + $('bubble').showTextForElement( + $('managed-user-creation-name'), + errorText, + cr.ui.Bubble.Attachment.RIGHT, + 12, 4); + this.setButtonDisabledStatus('next', true); + } + }, + + managedUserSuggestImport: function(name, user_id) { + this.disabled = false; + this.lastIncorrectUserName_ = name; + this.lastVerifiedName_ = null; + + var userNameField = $('managed-user-creation-name'); + var creationScreen = this; + + if (userNameField.value == this.lastIncorrectUserName_) { + this.nameErrorVisible = true; + var link = this.ownerDocument.createElement('div'); + link.innerHTML = loadTimeData.getStringF( + 'importBubbleText', + '<a class="signin-link" href="#">', + name, + '</a>'); + link.querySelector('.signin-link').addEventListener('click', + function(e) { + creationScreen.handleSuggestImport_(user_id); + e.stopPropagation(); + }); + $('bubble').showContentForElement( + $('managed-user-creation-name'), + cr.ui.Bubble.Attachment.RIGHT, + link, + 12, 4); + this.setButtonDisabledStatus('next', true); + } + }, + + /** + * Clears user name error, if name is no more guaranteed to be invalid. + * @private + */ + clearUserNameError_: function() { + // Avoid flickering + if ($('managed-user-creation-name').value == + this.lastIncorrectUserName_) { + return; + } + this.nameErrorVisible = false; + }, + + /** + * Called by backend part in case of password validation failure. + * @param {string} errorText - reason why this password is invalid. + */ + showPasswordError: function(errorText) { + $('bubble').showTextForElement( + $('managed-user-creation-password'), + errorText, + cr.ui.Bubble.Attachment.RIGHT, + 12, 4); + $('managed-user-creation-password').classList.add('password-error'); + $('managed-user-creation-password').focus(); + this.disabled = false; + this.setButtonDisabledStatus('next', true); + }, + + /** + * True if user name error should be displayed. + * @type {boolean} + */ + set nameErrorVisible(value) { + $('managed-user-creation-name'). + classList.toggle('duplicate-name', value); + if (!value) + $('bubble').hide(); + }, + + /** + * Updates state of Continue button after minimal checks. + * @return {boolean} true, if form seems to be valid. + * @private + */ + updateNextButtonForManager_: function() { + var selectedPod = this.managerList_.selectedPod_; + canProceed = null != selectedPod && + selectedPod.passwordElement.value.length > 0; + + this.setButtonDisabledStatus('next', !canProceed); + return canProceed; + }, + + /** + * Updates state of Continue button after minimal checks. + * @return {boolean} true, if form seems to be valid. + * @private + */ + updateNextButtonForUser_: function() { + var firstPassword = this.getScreenElement('password').value; + var secondPassword = this.getScreenElement('password-confirm').value; + var userName = this.getScreenElement('name').value; + + var passwordOk = (firstPassword.length > 0) && + (firstPassword.length == secondPassword.length); + + if (this.currentPage_ == 'import-password') { + this.setButtonDisabledStatus('import', !passwordOk); + return passwordOk; + } + var imageGrid = this.getScreenElement('image-grid'); + var imageChosen = !(imageGrid.selectionType == 'camera' && + imageGrid.cameraLive); + var canProceed = + passwordOk && + (userName.length > 0) && + this.lastVerifiedName_ && + (userName == this.lastVerifiedName_) && + imageChosen; + + this.setButtonDisabledStatus('next', !canProceed); + return canProceed; + }, + + showSelectedManagerPasswordError_: function() { + var selectedPod = this.managerList_.selectedPod_; + selectedPod.showPasswordError(); + selectedPod.passwordElement.value = ''; + selectedPod.focusInput(); + this.updateNextButtonForManager_(); + }, + + /** + * Enables one particular subpage and hides the rest. + * @param {string} visiblePage - name of subpage. + * @private + */ + setVisiblePage_: function(visiblePage) { + this.disabled = false; + this.updateText_(); + $('bubble').hide(); + if (!this.imagesRequested_) { + chrome.send('supervisedUserGetImages'); + this.imagesRequested_ = true; + } + var pageNames = ['intro', + 'manager', + 'username', + 'import', + 'error', + 'created']; + var pageButtons = {'intro' : 'start', + 'error' : 'error', + 'import' : 'import', + 'import-password' : 'import', + 'created' : 'gotit'}; + this.hideStatus_(); + var pageToDisplay = visiblePage; + if (visiblePage == 'import-password') + pageToDisplay = 'username'; + + for (i in pageNames) { + var pageName = pageNames[i]; + var page = $('managed-user-creation-' + pageName); + page.hidden = (pageName != pageToDisplay); + if (pageName == pageToDisplay) + $('step-logo').hidden = page.classList.contains('step-no-logo'); + } + + for (i in this.buttonIds) { + var button = this.getScreenButton(this.buttonIds[i]); + button.hidden = button.pages.indexOf(visiblePage) < 0; + button.disabled = false; + } + + var pagesWithCancel = ['intro', 'manager', 'username', 'import-password', + 'error', 'import']; + var cancelButton = $('cancel-add-user-button'); + cancelButton.hidden = pagesWithCancel.indexOf(visiblePage) < 0; + cancelButton.disabled = false; + + this.getScreenElement('import-link').hidden = true; + this.getScreenElement('create-link').hidden = true; + + if (pageButtons[visiblePage]) + this.getScreenButton(pageButtons[visiblePage]).focus(); + + this.currentPage_ = visiblePage; + + if (visiblePage == 'manager' || visiblePage == 'intro') { + $('managed-user-creation-password').classList.remove('password-error'); + if (this.managerList_.pods.length > 0) + this.managerList_.selectPod(this.managerList_.pods[0]); + } + + if (visiblePage == 'username' || visiblePage == 'import-password') { + var elements = this.getScreenElement(pageToDisplay). + querySelectorAll('.hide-on-import'); + for (var i = 0; i < elements.length; i++) { + elements[i].classList.toggle('hidden-on-import', + visiblePage == 'import-password'); + } + } + if (visiblePage == 'username') { + var imageGrid = this.getScreenElement('image-grid'); + // select some image. + var selected = this.imagesData_[ + Math.floor(Math.random() * this.imagesData_.length)]; + this.context_.selectedImageUrl = selected.url; + imageGrid.selectedItemUrl = selected.url; + chrome.send('supervisedUserSelectImage', + [selected.url, 'default']); + this.getScreenElement('image-grid').redraw(); + this.checkUserName_(); + this.updateNextButtonForUser_(); + this.getScreenElement('name').focus(); + this.getScreenElement('import-link').hidden = + this.importList_.pods.length == 0; + } else if (visiblePage == 'import-password') { + var imageGrid = this.getScreenElement('image-grid'); + var selected; + if ('selectedImageUrl' in this.context_) { + selected = this.context_.selectedImageUrl; + } else { + // select some image. + selected = this.imagesData_[ + Math.floor(Math.random() * this.imagesData_.length)].url; + chrome.send('supervisedUserSelectImage', + [selected, 'default']); + } + imageGrid.selectedItemUrl = selected; + this.getScreenElement('image-grid').redraw(); + + this.updateNextButtonForUser_(); + + this.getScreenElement('password').focus(); + this.getScreenElement('import-link').hidden = true; + } else { + this.getScreenElement('image-grid').stopCamera(); + } + if (visiblePage == 'import') { + this.getScreenElement('create-link').hidden = false; + this.getScreenButton('import').disabled = + !this.importList_.selectedPod_ || + this.importList_.selectedPod_.user.exists; + } + chrome.send('currentSupervisedUserPage', [this.currentPage_]); + }, + + setButtonDisabledStatus: function(buttonName, status) { + var button = $('managed-user-creation-' + buttonName + '-button'); + button.disabled = status; + }, + + gotItButtonPressed_: function() { + chrome.send('finishLocalManagedUserCreation'); + }, + + handleErrorButtonPressed_: function() { + chrome.send('abortLocalManagedUserCreation'); + }, + + startButtonPressed_: function() { + this.setVisiblePage_('manager'); + this.setButtonDisabledStatus('next', true); + }, + + nextButtonPressed_: function() { + if (this.currentPage_ == 'manager') { + this.validateAndLogInAsManager_(); + return; + } + if (this.currentPage_ == 'username') { + this.validateAndCreateLocallyManagedUser_(); + } + }, + + importButtonPressed_: function() { + this.importSupervisedUser_(); + }, + + importLinkPressed_: function() { + this.setVisiblePage_('import'); + }, + + handleSuggestImport_: function(user_id) { + this.setVisiblePage_('import'); + this.importList_.selectUser(user_id); + }, + + createLinkPressed_: function() { + this.setVisiblePage_('username'); + this.lastIncorrectUserName_ = null; + this.lastVerifiedName_ = null; + this.checkUserName_(); + }, + + prevButtonPressed_: function() { + this.setVisiblePage_('intro'); + }, + + showProgress: function(text) { + var status = this.getScreenElement('status'); + var statusText = status.querySelector('.id-text'); + statusText.textContent = text; + statusText.classList.remove('error'); + status.querySelector('.id-spinner').hidden = false; + status.hidden = false; + this.getScreenElement('import-link').hidden = true; + this.getScreenElement('create-link').hidden = true; + }, + + showStatusError: function(text) { + var status = this.getScreenElement('status'); + var statusText = status.querySelector('.id-text'); + statusText.textContent = text; + statusText.classList.add('error'); + status.querySelector('.id-spinner').hidden = true; + status.hidden = false; + this.getScreenElement('import-link').hidden = true; + this.getScreenElement('create-link').hidden = true; + }, + + hideStatus_: function() { + var status = this.getScreenElement('status'); + status.hidden = true; + }, + + /** + * Updates state of login header so that necessary buttons are displayed. + **/ + onBeforeShow: function(data) { + $('login-header-bar').signinUIState = + SIGNIN_UI_STATE.MANAGED_USER_CREATION_FLOW; + if (data['managers']) { + this.loadManagers(data['managers']); + } + var imageGrid = this.getScreenElement('image-grid'); + imageGrid.updateAndFocus(); + }, + + /** + * Update state of login header so that necessary buttons are displayed. + */ + onBeforeHide: function() { + $('login-header-bar').signinUIState = SIGNIN_UI_STATE.HIDDEN; + this.getScreenElement('image-grid').stopCamera(); + }, + + /** + * Returns a control which should receive an initial focus. + */ + get defaultControl() { + return $('managed-user-creation-name'); + }, + + /** + * True if the the screen is disabled (handles no user interaction). + * @type {boolean} + */ + disabled_: false, + + get disabled() { + return this.disabled_; + }, + + set disabled(value) { + this.disabled_ = value; + var controls = this.querySelectorAll('button,input'); + for (var i = 0, control; control = controls[i]; ++i) { + control.disabled = value; + } + $('login-header-bar').disabled = value; + }, + + /** + * Called by backend part to propagate list of possible managers. + * @param {Array} userList - list of users that can be managers. + */ + loadManagers: function(userList) { + $('managed-user-creation-managers-block').hidden = false; + this.managerList_.clearPods(); + for (var i = 0; i < userList.length; ++i) + this.managerList_.addPod(userList[i]); + if (userList.length > 0) + this.managerList_.selectPod(this.managerList_.pods[0]); + }, + + /** + * Cancels user creation and drops to user screen (either sign). + */ + cancel: function() { + var notSignedInPages = ['intro', 'manager']; + var postCreationPages = ['created']; + if (notSignedInPages.indexOf(this.currentPage_) >= 0) { + // Make sure no manager password is kept: + this.managerList_.clearPods(); + + $('pod-row').loadLastWallpaper(); + + Oobe.showScreen({id: SCREEN_ACCOUNT_PICKER}); + Oobe.resetSigninUI(true); + return; + } + if (postCreationPages.indexOf(this.currentPage_) >= 0) { + chrome.send('finishLocalManagedUserCreation'); + return; + } + chrome.send('abortLocalManagedUserCreation'); + }, + + updateText_: function() { + var managerDisplayId = this.context_.managerDisplayId; + this.updateElementText_('intro-alternate-text', + 'createManagedUserIntroAlternateText'); + this.updateElementText_('created-text-1', + 'createManagedUserCreatedText1', + this.context_.managedName); + // TODO(antrim): Move wrapping with strong in grd file, and eliminate this + //call. + this.updateElementText_('created-text-2', + 'createManagedUserCreatedText2', + this.wrapStrong( + loadTimeData.getString('managementURL')), + this.context_.managedName); + this.updateElementText_('created-text-3', + 'createManagedUserCreatedText3', + managerDisplayId); + this.updateElementText_('name-explanation', + 'createManagedUserNameExplanation', + managerDisplayId); + }, + + wrapStrong: function(original) { + if (original == undefined) + return original; + return '<strong>' + original + '</strong>'; + }, + + updateElementText_: function(localId, templateName) { + var args = Array.prototype.slice.call(arguments); + args.shift(); + this.getScreenElement(localId).innerHTML = + loadTimeData.getStringF.apply(loadTimeData, args); + }, + + showIntroPage: function() { + $('managed-user-creation-password').value = ''; + $('managed-user-creation-password-confirm').value = ''; + $('managed-user-creation-name').value = ''; + + this.lastVerifiedName_ = null; + this.lastIncorrectUserName_ = null; + this.passwordErrorVisible = false; + $('managed-user-creation-password').classList.remove('password-error'); + this.nameErrorVisible = false; + + this.setVisiblePage_('intro'); + }, + + showManagerPage: function() { + this.setVisiblePage_('manager'); + }, + + showUsernamePage: function() { + this.setVisiblePage_('username'); + }, + + showTutorialPage: function() { + this.setVisiblePage_('created'); + }, + + showPage: function(page) { + this.setVisiblePage_(page); + }, + + showErrorPage: function(errorTitle, errorText, errorButtonText) { + this.disabled = false; + $('managed-user-creation-error-title').innerHTML = errorTitle; + $('managed-user-creation-error-text').innerHTML = errorText; + $('managed-user-creation-error-button').textContent = errorButtonText; + this.setVisiblePage_('error'); + }, + + showManagerPasswordError: function() { + this.disabled = false; + this.showSelectedManagerPasswordError_(); + }, + + /* + TODO(antrim) : this is an explicit code duplications with UserImageScreen. + It should be removed by issue 251179. + */ + /** + * Currently selected user image index (take photo button is with zero + * index). + * @type {number} + */ + selectedUserImage_: -1, + imagesData: [], + + setDefaultImages: function(imagesData) { + var imageGrid = this.getScreenElement('image-grid'); + for (var i = 0, data; data = imagesData[i]; i++) { + var item = imageGrid.addItem(data.url, data.title); + item.type = 'default'; + item.author = data.author || ''; + item.website = data.website || ''; + } + this.imagesData_ = imagesData; + }, + + + handleActivate_: function() { + var imageGrid = this.getScreenElement('image-grid'); + if (imageGrid.selectedItemUrl == ButtonImages.TAKE_PHOTO) { + this.handleTakePhoto_(); + return; + } + this.nextButtonPressed_(); + }, + + /** + * Handles selection change. + * @param {Event} e Selection change event. + * @private + */ + handleSelect_: function(e) { + var imageGrid = this.getScreenElement('image-grid'); + this.updateNextButtonForUser_(); + + $('managed-user-creation-flip-photo').tabIndex = + (imageGrid.selectionType == 'camera') ? 0 : -1; + if (imageGrid.cameraLive || imageGrid.selectionType != 'camera') + imageGrid.previewElement.classList.remove('phototaken'); + else + imageGrid.previewElement.classList.add('phototaken'); + + if (!imageGrid.cameraLive || imageGrid.selectionType != 'camera') { + this.context_.selectedImageUrl = imageGrid.selectedItemUrl; + chrome.send('supervisedUserSelectImage', + [imageGrid.selectedItemUrl, imageGrid.selectionType]); + } + // Start/stop camera on (de)selection. + if (!imageGrid.inProgramSelection && + imageGrid.selectionType != e.oldSelectionType) { + if (imageGrid.selectionType == 'camera') { + // Programmatic selection of camera item is done in + // startCamera callback where streaming is started by itself. + imageGrid.startCamera( + function() { + // Start capture if camera is still the selected item. + $('managed-user-creation-image-preview-img').classList.toggle( + 'animated-transform', true); + return imageGrid.selectedItem == imageGrid.cameraImage; + }); + } else { + $('managed-user-creation-image-preview-img').classList.toggle( + 'animated-transform', false); + imageGrid.stopCamera(); + } + } + }, + + /** + * Handle photo capture from the live camera stream. + */ + handleTakePhoto_: function(e) { + this.getScreenElement('image-grid').takePhoto(); + }, + + handlePhotoTaken_: function(e) { + chrome.send('supervisedUserPhotoTaken', [e.dataURL]); + }, + + /** + * Handle photo updated event. + * @param {Event} e Event with 'dataURL' property containing a data URL. + */ + handlePhotoUpdated_: function(e) { + chrome.send('supervisedUserPhotoTaken', [e.dataURL]); + }, + + /** + * Handle discarding the captured photo. + */ + handleDiscardPhoto_: function(e) { + var imageGrid = this.getScreenElement('image-grid'); + imageGrid.discardPhoto(); + }, + + setCameraPresent: function(present) { + this.getScreenElement('image-grid').cameraPresent = present; + }, + + setExistingManagedUsers: function(users) { + var userList = users; + + userList.sort(function(a, b) { + // Put existing users last. + if (a.exists != b.exists) + return a.exists ? 1 : -1; + // Sort rest by name. + return a.name.localeCompare(b.name, [], {sensitivity: 'base'}); + }); + + this.importList_.clearPods(); + for (var i = 0; i < userList.length; ++i) + this.importList_.addPod(userList[i]); + + if (userList.length == 1) + this.importList_.selectPod(this.managerList_.pods[0]); + + if (userList.length > 0 && this.currentPage_ == 'username') + this.getScreenElement('import-link').hidden = false; + }, + }; +}); + diff --git a/chromium/chrome/browser/resources/chromeos/login/screen_message_box.css b/chromium/chrome/browser/resources/chromeos/login/screen_message_box.css new file mode 100644 index 00000000000..2fe64ddb74e --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/screen_message_box.css @@ -0,0 +1,15 @@ +/* Copyright 2013 The Chromium Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#message-box { + height: 180px; + padding: 16px; + width: 400px; +} + +#message-box-title { + font-weight: bold; + margin: 0; +} diff --git a/chromium/chrome/browser/resources/chromeos/login/screen_message_box.html b/chromium/chrome/browser/resources/chromeos/login/screen_message_box.html new file mode 100644 index 00000000000..2be5c828edb --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/screen_message_box.html @@ -0,0 +1,8 @@ +<div id="message-box" class="step no-logo hidden"> + <div class="step-contents"> + <p id="message-box-title"></p> + <p id="message-box-body"></p> + </div> + <div id="message-box-controls" class="step-controls"></div> +</div> + diff --git a/chromium/chrome/browser/resources/chromeos/login/screen_message_box.js b/chromium/chrome/browser/resources/chromeos/login/screen_message_box.js new file mode 100644 index 00000000000..b7bd21b4230 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/screen_message_box.js @@ -0,0 +1,78 @@ +// Copyright 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** + * @fileoverview A simple message box screen implementation. + */ + +login.createScreen('MessageBoxScreen', 'message-box', function() { return { + EXTERNAL_API: [ + 'show' + ], + + /** + * Callback to run when the screen is dismissed. + * @type {function()} + */ + callback_: null, + + /** + * Ok button of the message box. + * @type {HTMLButtonElement} + */ + okButton_: null, + + /** + * Saved hidden status of 'progress-dots'. + * @type {boolean} + */ + savedProgressDotsHidden_: null, + + /** + * Screen controls in bottom strip. + * @type {Array.<HTMLButtonElement>} Buttons to be put in the bottom strip. + */ + get buttons() { + var buttons = []; + + this.okButton_ = this.ownerDocument.createElement('button'); + this.okButton_.addEventListener('click', this.onDismiss_.bind(this)); + buttons.push(this.okButton_); + + return buttons; + }, + + get defaultControl() { + return this.okButton_; + }, + + /** + * Invoked when user clicks on the ok button. + */ + onDismiss_: function() { + this.callback_(); + $('progress-dots').hidden = this.savedProgressDotsHidden_; + }, + + /** + * Shows the no password warning screen. + * @param {string} title Title string of the message box. + * @param {string} message Body text of the message box. + * @param {string} okLabel Label text for the okay button. + * @param {function()} callback The callback to be invoked when the + * screen is dismissed. + */ + show: function(title, message, okLabel, callback) { + $('message-box-title').textContent = title; + $('message-box-body').textContent = message; + this.okButton_.textContent = okLabel; + this.callback_ = callback; + + Oobe.showScreen({id: SCREEN_MESSAGE_BOX}); + + this.savedProgressDotsHidden_ = $('progress-dots').hidden; + $('progress-dots').hidden = true; + } + }; +}); diff --git a/chromium/chrome/browser/resources/chromeos/login/screen_password_changed.css b/chromium/chrome/browser/resources/chromeos/login/screen_password_changed.css new file mode 100644 index 00000000000..685b77616ce --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/screen_password_changed.css @@ -0,0 +1,90 @@ +/* Copyright (c) 2012 The Chromium Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#password-changed { + height: 570px; + /* Screen has no controls but has padding at the last text message */ + padding: 70px 17px 50px; + width: 485px; +} + +#password-changed-contents { + color: #606060; + margin: 20px 60px; +} + +#oobe.password-changed .step-controls { + -webkit-box-pack: start; + -webkit-margin-start: 60px; +} + +#password-changed-title { + font-weight: bold; +} + +#password-changed-description, +#password-changed-more-info { + margin-top: 25px; +} + +#old-password-block { + margin-top: 45px; +} + +#old-password { + padding: 4px 6px; +} + +#password-changed-link-block { + margin-top: 10px; +} + +#password-changed-contents a { + color: rgb(49, 106, 197); + font-size: 12px; + text-decoration: none; +} + +#password-changed-contents a.disabled { + color: gray; +} + +#password-changed-contents a:focus { + -webkit-transition: outline-color 200ms; + /* Note: May use 1px solid here. */ + outline-color: rgb(77, 144, 254); +} + +#password-changed input[type='password']:disabled { + outline-color: rgb(77, 144, 254); +} + +#password-changed-proceed-anyway-warning { + -webkit-padding-start: 30px; + background: url('chrome://theme/IDR_WARNING') left top /24px no-repeat; + margin-top: 50px; +} + +#password-changed.migrate #password-changed-proceed-anyway-warning, +#password-changed.migrate #password-changed-proceed-button { + display: none; +} + +#password-changed.resync #old-password-block, +#password-changed.resync #password-changed-link-block, +#password-changed.resync #password-changed-ok-button { + display: none; +} + +#old-password-error { + color: red; + display: none; + font-size: 12px; + margin-top: 10px; +} + +#password-changed.migrate.password-error #old-password-error { + display: block; +} diff --git a/chromium/chrome/browser/resources/chromeos/login/screen_password_changed.html b/chromium/chrome/browser/resources/chromeos/login/screen_password_changed.html new file mode 100644 index 00000000000..a3e722819ca --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/screen_password_changed.html @@ -0,0 +1,22 @@ +<div id="password-changed" class="step faded hidden migrate"> + <div id="password-changed-contents" class="step-contents"> + <div id="password-changed-title" i18n-content="passwordChangedTitle"> + </div> + <div id="password-changed-description" i18n-content="passwordChangedDesc"> + </div> + <div id="password-changed-more-info" + i18n-content="passwordChangedMoreInfo"></div> + <div id="old-password-block"> + <input id="old-password" type="password" class="password" + i18n-values="placeholder:oldPasswordHint"> + </div> + <div id="old-password-error" i18n-content="oldPasswordIncorrect"></div> + <div id="password-changed-link-block"> + <a id="password-changed-cant-remember-link" href="#" + i18n-content="passwordChangedCantRemember"></a> + </div> + <div id="password-changed-proceed-anyway-warning" + i18n-content="passwordChangedProceedAnyway"></div> + </div> + <div id="password-changed-controls" class="step-controls"></div> +</div> diff --git a/chromium/chrome/browser/resources/chromeos/login/screen_password_changed.js b/chromium/chrome/browser/resources/chromeos/login/screen_password_changed.js new file mode 100644 index 00000000000..4c8f1d18de7 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/screen_password_changed.js @@ -0,0 +1,170 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** + * @fileoverview Password changed screen implementation. + */ + +login.createScreen('PasswordChangedScreen', 'password-changed', function() { + return { + EXTERNAL_API: [ + 'show' + ], + + /** @override */ + decorate: function() { + $('old-password').addEventListener( + 'keydown', function(e) { + $('password-changed').classList.remove('password-error'); + if (e.keyIdentifier == 'Enter') { + $('password-changed').migrate(); + e.stopPropagation(); + } + }); + $('old-password').addEventListener( + 'keyup', function(e) { + if ($('password-changed').disabled) + return; + $('password-changed-ok-button').disabled = this.value.length == 0; + }); + $('password-changed-cant-remember-link').addEventListener( + 'click', function(e) { + if (this.classList.contains('disabled')) + return; + var screen = $('password-changed'); + if (screen.classList.contains('migrate')) { + screen.classList.remove('migrate'); + screen.classList.add('resync'); + $('password-changed-proceed-button').focus(); + $('password-changed').classList.remove('password-error'); + $('old-password').value = ''; + $('password-changed-ok-button').disabled = true; + } + }); + }, + + /** + * Screen controls. + * @type {array} Array of Buttons. + */ + get buttons() { + var buttons = []; + + var backButton = this.ownerDocument.createElement('button'); + backButton.id = 'password-changed-back-button'; + backButton.textContent = + loadTimeData.getString('passwordChangedBackButton'); + backButton.addEventListener('click', function(e) { + var screen = $('password-changed'); + if (screen.classList.contains('migrate')) { + screen.cancel(); + } else { + // Resync all data UI step. + screen.classList.remove('resync'); + screen.classList.add('migrate'); + $('old-password').focus(); + } + e.stopPropagation(); + }); + buttons.push(backButton); + + var okButton = this.ownerDocument.createElement('button'); + okButton.id = 'password-changed-ok-button'; + okButton.textContent = loadTimeData.getString('passwordChangedsOkButton'); + okButton.addEventListener('click', function(e) { + $('password-changed').migrate(); + e.stopPropagation(); + }); + buttons.push(okButton); + + var proceedAnywayButton = this.ownerDocument.createElement('button'); + proceedAnywayButton.id = 'password-changed-proceed-button'; + proceedAnywayButton.textContent = + loadTimeData.getString('proceedAnywayButton'); + proceedAnywayButton.addEventListener('click', function(e) { + var screen = $('password-changed'); + if (screen.classList.contains('resync')) + $('password-changed').resync(); + e.stopPropagation(); + }); + buttons.push(proceedAnywayButton); + + return buttons; + }, + + /** + * Returns a control which should receive an initial focus. + */ + get defaultControl() { + return $('old-password'); + }, + + /** + * True if the the screen is disabled (handles no user interaction). + * @type {boolean} + */ + disabled_: false, + get disabled() { + return this.disabled_; + }, + set disabled(value) { + this.disabled_ = value; + var controls = this.querySelectorAll('button,input'); + for (var i = 0, control; control = controls[i]; ++i) { + control.disabled = value; + } + $('login-header-bar').disabled = value; + $('password-changed-cant-remember-link').classList[ + value ? 'add' : 'remove']('disabled'); + }, + + /** + * Cancels password migration and drops the user back to the login screen. + */ + cancel: function() { + this.disabled = true; + chrome.send('cancelPasswordChangedFlow'); + }, + + /** + * Starts migration process using old password that user provided. + */ + migrate: function() { + if (!$('old-password').value) { + $('old-password').focus(); + return; + } + this.disabled = true; + chrome.send('migrateUserData', [$('old-password').value]); + }, + + /** + * Starts migration process by removing old cryptohome and re-syncing data. + */ + resync: function() { + this.disabled = true; + chrome.send('resyncUserData'); + }, + + /** + * Show password changed screen. + * @param {boolean} showError Whether to show the incorrect password error. + */ + show: function(showError) { + // We'll get here after the successful online authentication. + // It assumes session is about to start so hides login screen controls. + Oobe.getInstance().headerHidden = false; + var screen = $('password-changed'); + screen.classList.toggle('password-error', showError); + screen.classList.add('migrate'); + screen.classList.remove('resync'); + $('old-password').value = ''; + $('password-changed').disabled = false; + + Oobe.showScreen({id: SCREEN_PASSWORD_CHANGED}); + $('password-changed-ok-button').disabled = true; + } + }; +}); + diff --git a/chromium/chrome/browser/resources/chromeos/login/screen_tpm_error.css b/chromium/chrome/browser/resources/chromeos/login/screen_tpm_error.css new file mode 100644 index 00000000000..62340abd9cd --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/screen_tpm_error.css @@ -0,0 +1,17 @@ +/* Copyright (c) 2012 The Chromium Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#tpm-error-message { + min-width: 650px; +} + +#oobe.tpm-error-message #step-logo { + z-index: 1; +} + +#tpm-error-message-controls { + text-align: end; +} + diff --git a/chromium/chrome/browser/resources/chromeos/login/screen_tpm_error.html b/chromium/chrome/browser/resources/chromeos/login/screen_tpm_error.html new file mode 100644 index 00000000000..639889a4024 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/screen_tpm_error.html @@ -0,0 +1,15 @@ +<div id="tpm-error-message" class="step faded hidden"> + <div class="step-contents"> + <div class="error-header"> + <img alt class="error-icon" src="chrome://theme/IDR_FATAL_ERROR"> + <div id="tpm-error-title" class="error-title" + i18n-content="errorTpmFailureTitle"></div> + </div> + <div class="error-body"> + <div id="tmp-error-reboot-text" class="error-message-paragraph" + i18n-content="errorTpmFailureReboot"></div> + <div id="tpm-error-message-controls" + class="error-message-paragraph"></div> + </div> + </div> +</div> diff --git a/chromium/chrome/browser/resources/chromeos/login/screen_tpm_error.js b/chromium/chrome/browser/resources/chromeos/login/screen_tpm_error.js new file mode 100644 index 00000000000..ff5359a6a2c --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/screen_tpm_error.js @@ -0,0 +1,38 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** + * @fileoverview Offline message screen implementation. + */ + +login.createScreen('TPMErrorMessageScreen', 'tpm-error-message', function() { + return { + EXTERNAL_API: [ + 'show' + ], + + /** + * Buttons in oobe wizard's button strip. + * @type {array} Array of Buttons. + */ + get buttons() { + var rebootButton = this.ownerDocument.createElement('button'); + rebootButton.id = 'reboot-button'; + rebootButton.textContent = + loadTimeData.getString('errorTpmFailureRebootButton'); + rebootButton.addEventListener('click', function() { + chrome.send('rebootSystem'); + }); + return [rebootButton]; + }, + + /** + * Show TPM screen. + */ + show: function() { + Oobe.showScreen({id: SCREEN_TPM_ERROR}); + } + }; +}); + diff --git a/chromium/chrome/browser/resources/chromeos/login/screen_wrong_hwid.css b/chromium/chrome/browser/resources/chromeos/login/screen_wrong_hwid.css new file mode 100644 index 00000000000..df76223b600 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/screen_wrong_hwid.css @@ -0,0 +1,35 @@ +/* Copyright (c) 2013 The Chromium Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * This is the stylesheet used by the wrong HWID screen. + */ + +#wrong-hwid { + padding: 40px 17px 30px; + text-align: center; + width: 722px; +} + +#wrong-hwid #wrong-hwid-message-header { + color: #606060; + font-size: 22px; + padding: 5px 40px 30px; +} + +#wrong-hwid #wrong-hwid-message-content { + color: #606060; + font-size: 16px; + padding: 20px 40px 40px; +} + +#skip-hwid-warning { + -webkit-box-pack: center; +} + +#skip-hwid-warning-link { + color: #8c8c8c; + font-size: 18px; + text-decoration: none; +} + diff --git a/chromium/chrome/browser/resources/chromeos/login/screen_wrong_hwid.html b/chromium/chrome/browser/resources/chromeos/login/screen_wrong_hwid.html new file mode 100644 index 00000000000..bd1ae3da4f1 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/screen_wrong_hwid.html @@ -0,0 +1,15 @@ +<div class="step hidden no-logo" id="wrong-hwid"> + <div class="step-contents"> + <div id="wrong-hwid-message"> + <div id="wrong-hwid-message-header" i18n-content="wrongHWIDScreenHeader"> + </div> + <img id="wrong-hwid-icon" src="chrome://theme/IDR_RESET_WARNING"/> + <div id="wrong-hwid-message-content"></div> + </div> + <div id="skip-hwid-warning" class="step-controls"> + <a id="skip-hwid-warning-link" href="#" + i18n-content="wrongHWIDScreenSkipLink"></a> + </div> + </div> +</div> + diff --git a/chromium/chrome/browser/resources/chromeos/login/screen_wrong_hwid.js b/chromium/chrome/browser/resources/chromeos/login/screen_wrong_hwid.js new file mode 100644 index 00000000000..202c494275b --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/screen_wrong_hwid.js @@ -0,0 +1,40 @@ +// Copyright (c) 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** + * @fileoverview wrong HWID screen implementation. + */ + +login.createScreen('WrongHWIDScreen', 'wrong-hwid', function() { + return { + /** @override */ + decorate: function() { + $('skip-hwid-warning-link').addEventListener('click', function(event) { + chrome.send('wrongHWIDOnSkip'); + }); + this.updateLocalizedContent(); + }, + + /** + * Updates state of login header so that necessary buttons are displayed. + **/ + onBeforeShow: function(data) { + $('login-header-bar').signinUIState = SIGNIN_UI_STATE.WRONG_HWID_WARNING; + }, + + /** + * Updates localized content of the screen that is not updated via template. + */ + updateLocalizedContent: function() { + $('wrong-hwid-message-content').innerHTML = + '<p>' + + loadTimeData.getStringF('wrongHWIDMessageFirstPart', + '<strong>', '</strong>') + + '</p><p>' + + loadTimeData.getString('wrongHWIDMessageSecondPart') + + '</p>'; + } + }; +}); + diff --git a/chromium/chrome/browser/resources/chromeos/login/user_pod_row.css b/chromium/chrome/browser/resources/chromeos/login/user_pod_row.css new file mode 100644 index 00000000000..1f5fbf1819a --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/user_pod_row.css @@ -0,0 +1,502 @@ +/* Copyright (c) 2012 The Chromium Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * This is the stylesheet used by user pods row of account picker UI. + */ + +podrow { + /* Temporarily disabled because animation interferes with updating screen's + size. */ + height: 100%; + overflow: visible; + position: absolute; + width: 100%; +} + +/* Hide the pod row while images are loading. */ +podrow.images-loading { + visibility: hidden; +} + +.pod { + -webkit-tap-highlight-color: transparent; + -webkit-transform: scale3d(0.9, 0.9, 0.9); + -webkit-transition: -webkit-transform 180ms ease, + opacity 180ms ease; + background-color: white; + border-radius: 2px; + box-shadow: 0 4px 23px 5px rgba(0, 0, 0, 0.2), + 0 2px 6px rgba(0, 0, 0, 0.15), + 0 3px 0 rgba(0, 0, 0, 0.08); + cursor: pointer; + display: inline-block; + padding: 10px 10px 3px; + position: absolute; + vertical-align: middle; + width: 160px; + z-index: 0; +} + +.account-picker.flying-pods .pod { + -webkit-transition: all 180ms ease; +} + +.pod .main-pane { + position: relative; + text-align: center; + width: 160px; +} + +podrow[ncolumns='6'] .pod { + -webkit-transform: scale3d(0.8, 0.8, 0.8); +} + +.pod.focused { + /* Focused pod has the same size no matter how many pods. */ + -webkit-transform: scale3d(1, 1, 1) !important; + cursor: default; + z-index: 1; +} + +.pod .user-image { + height: 160px; + opacity: 0.7; + width: 160px; +} + +.pod.faded { + opacity: .75; +} + +.pod.focused .user-image { + opacity: 1; +} + +.pod.init { + -webkit-transform: scale3d(2.4, 2.4, 2.4); + opacity: 0; +} + +.pod.left { + -webkit-transform: translateX(-25px); + opacity: 0; +} + +.pod.right { + -webkit-transform: translateX(25px); + opacity: 0; +} + +.pod.zoom { + -webkit-transform: scale3d(2.2, 2.2, 2.2); + opacity: 0; +} + +.name { + -webkit-transition: all 170ms ease; + color: #565656; + /* Matching font-size 14px but since name is visible + when pod is not focused increase that a bit. */ + font-size: 16px; + height: 26px; + line-height: 26px; /* This vertically centers text */ + margin: 10px 0 4px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.name.init { + opacity: 0; +} + +.pod.need-password.focused .name { + display: none; +} + +.password-area { + display: none; +} + +.password-input-container { + -webkit-box-flex: 1; + /* This relative position is so the capslock hint is positioned correctly. */ + position: relative; +} + +.custom-button { + -webkit-box-align: center; + background-color: rgba(0, 0, 0, 0); + background-image: none; + cursor: pointer; + display: -webkit-box; + height: 40px; + margin: 0; + max-width: 40px; + min-height: 0; + min-width: 0; + padding: 0; +} + +button.custom-button:focus:active, +button.custom-button:focus:hover { + border: 1px solid transparent !important; +} + +.custom-button img { + max-height: 100%; + max-width: 100%; +} + +.pod input[type='password'] { + -webkit-transition: opacity linear 150ms; + background: white; + border: none; + box-sizing: border-box; + display: inline-block; + height: 40px; + outline: none; + padding: 4px 6px; + width: 100%; +} + +.pod.need-password.focused .password-area { + display: -webkit-box; +} + +.pod .signin-button { + box-sizing: border-box; + display: inline-block; + height: 26px; + margin: 6px 0; + max-width: 100%; + min-width: 72px !important; + padding: 4px 8px; +} + +.pod:not(.focused) .signin-button { + display: none; +} + +.pod .capslock-hint { + bottom: 13px; + cursor: text; + position: absolute; + right: 6px; + visibility: hidden; + z-index: 1; +} + +html[dir=rtl] .pod .capslock-hint { + left: 10px; + right: auto; +} + +.capslock-on .pod.focused input[type='password']:not([hidden]) ~ .capslock-hint { + visibility: visible; +} + +.action-box-area { + -webkit-transition: opacity 100ms ease-in-out; + background-color: white; + border-radius: 2px; + box-shadow: none; + height: 23px; + margin: 0; + opacity: 0; + outline: none; + padding: 0; + position: absolute; + right: 0; + top: 0; + width: 23px; + z-index: 1; +} + +.action-box-area:focus, +.action-box-area.hovered, +.action-box-area.active { + opacity: 1; +} + +.action-box-button { + background-color: transparent; + background-image: url('chrome://theme/IDR_OOBE_ACTION_BOX_BUTTON_NORMAL'); + border: 0 !important; + height: 13px; + margin: 5px; + padding: 0; + width: 13px; +} + +.user-type-icon-area { + background-color: white; + border-radius: 2px; + box-shadow: none; + height: 26px; + left: 0; + margin: 0; + outline: none; + padding: 0; + position: absolute; + top: 0; + width: 26px; + z-index: 1; +} + +.user-type-icon-image { + background-color: transparent; + background-image: url('chrome://theme/IDR_MANAGED_MODE_ICON'); + border: 0 !important; + height: 16px; + margin: 5px; + padding: 0; + width: 16px; +} + +html[dir=rtl] .action-box-area { + left: 0; + right: auto; +} + +.action-box-button:hover { + background-image: url('chrome://theme/IDR_OOBE_ACTION_BOX_BUTTON_HOVER'); +} + +.action-box-area.active .action-box-button { + background-image: url('chrome://theme/IDR_OOBE_ACTION_BOX_BUTTON_PRESSED'); +} + +.action-box-menu { + -webkit-transition: opacity 100ms ease-in-out; + background-color: white; + border: 1px solid lightgray; + border-radius: 2px; + box-shadow: none; + font-size: 13px; + line-height: 19px; + margin: 0; + opacity: 0; + padding: 0; + position: absolute; + right: 5px; + top: 18px; + /* TODO(glotov): the menu should fade out with transition */ + visibility: hidden; + width: 220px; + z-index: 1; +} + +.action-box-area.active ~ .action-box-menu { + opacity: 1; + visibility: visible; +} + +.action-box-menu-title { + -webkit-box-orient: vertical; + -webkit-box-pack: center; + color: #b4b4b4; + display: -webkit-box; + padding: 7px 20px; +} + +.action-box-menu-title-name { + display: -webkit-box; + height: 23px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + width: 180px; +} + +.action-box-menu-title-email { + display: block; + min-height: 23px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.action-box-menu-remove { + -webkit-box-align: center; + border-top: 1px solid lightgray; + display: -webkit-box; + min-height: 29px; + padding: 7px 20px; +} + +.action-box-menu-remove:hover, +.action-box-menu-remove:focus { + background-color: #f3f3f3; + outline: none; +} + +.action-box-remove-user-warning { + border-top: 1px solid lightgray; + color: #000; + font-size: 12px; + line-height: 18px; + padding: 20px; +} + +.action-box-remove-user-warning-text { + padding-bottom: 20px; +} + +.action-box-remove-user-warning .remove-warning-button { + width: 100%; +} + +html[oobe=old] .pod.focused .action-box-area { + /* Track shifting of .user-image on pod focus. */ + -webkit-transform: translateY(-1px); + -webkit-transition: -webkit-transform 140ms ease; + opacity: 1; +} + +.signed-in-indicator { + -webkit-transition: all 140ms ease; + background: rgba(0, 0, 0, 0.5); + color: white; + font-size: small; + padding: 3px 0; + position: absolute; + /* Width of .user-image. */ + width: 160px; + z-index: 1; +} + +/**** Public account user pod rules *******************************************/ + +.pod.public-account .name, +.side-pane-name { + -webkit-padding-end: 16px; + max-height: 42px; + outline: none; + overflow: hidden; + text-overflow: ellipsis; +} + +.learn-more, +.side-pane-learn-more { + background-image: url('chrome://theme/IDR_CONTROLLED_SETTING_MANDATORY'); + height: 16px; + position: absolute; + width: 16px; +} + +.learn-more:hover, +.side-pane-learn-more:hover { + background-image: url('chrome://theme/IDR_CONTROLLED_SETTING_MANDATORY'); +} + +.learn-more { + right: 10px; + top: 189px; +} + +html[dir=rtl] .learn-more { + left: 10px; + right: auto; +} + +.side-pane-divider, +.side-pane-container { + bottom: 5px; + top: 5px; + visibility: hidden; +} + +.side-pane-divider { + border-left: 1px solid lightgray; + left: 180px; + position: absolute; + right: auto; + width: 1px; +} + +html[dir=rtl] .side-pane-divider { + left: auto; + right: 180px; +} + +.side-pane-container { + left: 185px; + overflow: hidden; + padding: 5px; + position: absolute; + right: auto; +} + +html[dir=rtl] .side-pane-container { + left: auto; + right: 185px; +} + +.side-pane-contents { + -webkit-transform: translateX(-240px); + -webkit-transition: -webkit-transform 180ms ease; + height: 100%; + width: 225px; +} + +html[dir=rtl] .side-pane-contents { + -webkit-transform: translateX(240px); +} + +.pod.public-account.expanded .side-pane-contents { + -webkit-transform: translateX(0); +} + +.side-pane-learn-more { + right: 0; + top: 2px; +} + +html[dir=rtl] .side-pane-learn-more { + left: 2px; + right: auto; +} + +.side-pane-container .info, +.side-pane-container .reminder { + font-size: 12px; +} + +.side-pane-container .info { + -webkit-margin-before: 25px; +} + +.side-pane-container .reminder { + font-weight: bold; +} + +.side-pane-container .enter-button { + bottom: 5px; + display: block; + left: auto; + position: absolute; + right: 5px; +} + +html[dir=rtl] .side-pane-container .enter-button { + left: 5px; + right: auto; +} + +.pod.public-account.expanded { + padding: 10px; + width: 400px; +} + +.pod.public-account.expanded .name, +.pod.public-account.expanded .learn-more { + display: none; +} + +.pod.public-account.expanded .side-pane-divider, +.pod.public-account.expanded .side-pane-container, +.pod.public-account.animating .side-pane-container { + visibility: inherit; +} diff --git a/chromium/chrome/browser/resources/chromeos/login/user_pod_row.js b/chromium/chrome/browser/resources/chromeos/login/user_pod_row.js new file mode 100644 index 00000000000..251aa654892 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/user_pod_row.js @@ -0,0 +1,1755 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +<include src="wallpaper_loader.js"></include> + +/** + * @fileoverview User pod row implementation. + */ + +cr.define('login', function() { + /** + * Number of displayed columns depending on user pod count. + * @type {Array.<number>} + * @const + */ + var COLUMNS = [0, 1, 2, 3, 4, 5, 4, 4, 4, 5, 5, 6, 6, 5, 5, 6, 6, 6, 6]; + + /** + * Mapping between number of columns in pod-row and margin between user pods + * for such layout. + * @type {Array.<number>} + * @const + */ + var MARGIN_BY_COLUMNS = [undefined, 40, 40, 40, 40, 40, 12]; + + /** + * Maximal number of columns currently supported by pod-row. + * @type {number} + * @const + */ + var MAX_NUMBER_OF_COLUMNS = 6; + + /** + * Variables used for pod placement processing. + * Width and height should be synced with computed CSS sizes of pods. + */ + var POD_WIDTH = 180; + var POD_HEIGHT = 217; + var POD_ROW_PADDING = 10; + + /** + * Whether to preselect the first pod automatically on login screen. + * @type {boolean} + * @const + */ + var PRESELECT_FIRST_POD = true; + + /** + * Maximum time for which the pod row remains hidden until all user images + * have been loaded. + * @type {number} + * @const + */ + var POD_ROW_IMAGES_LOAD_TIMEOUT_MS = 3000; + + /** + * Public session help topic identifier. + * @type {number} + * @const + */ + var HELP_TOPIC_PUBLIC_SESSION = 3041033; + + /** + * Oauth token status. These must match UserManager::OAuthTokenStatus. + * @enum {number} + * @const + */ + var OAuthTokenStatus = { + UNKNOWN: 0, + INVALID_OLD: 1, + VALID_OLD: 2, + INVALID_NEW: 3, + VALID_NEW: 4 + }; + + /** + * Tab order for user pods. Update these when adding new controls. + * @enum {number} + * @const + */ + var UserPodTabOrder = { + POD_INPUT: 1, // Password input fields (and whole pods themselves). + HEADER_BAR: 2, // Buttons on the header bar (Shutdown, Add User). + ACTION_BOX: 3, // Action box buttons. + PAD_MENU_ITEM: 4 // User pad menu items (Remove this user). + }; + + // Focus and tab order are organized as follows: + // + // (1) all user pods have tab index 1 so they are traversed first; + // (2) when a user pod is activated, its tab index is set to -1 and its + // main input field gets focus and tab index 1; + // (3) buttons on the header bar have tab index 2 so they follow user pods; + // (4) Action box buttons have tab index 3 and follow header bar buttons; + // (5) lastly, focus jumps to the Status Area and back to user pods. + // + // 'Focus' event is handled by a capture handler for the whole document + // and in some cases 'mousedown' event handlers are used instead of 'click' + // handlers where it's necessary to prevent 'focus' event from being fired. + + /** + * Helper function to remove a class from given element. + * @param {!HTMLElement} el Element whose class list to change. + * @param {string} cl Class to remove. + */ + function removeClass(el, cl) { + el.classList.remove(cl); + } + + /** + * Creates a user pod. + * @constructor + * @extends {HTMLDivElement} + */ + var UserPod = cr.ui.define(function() { + var node = $('user-pod-template').cloneNode(true); + node.removeAttribute('id'); + return node; + }); + + /** + * Stops event propagation from the any user pod child element. + * @param {Event} e Event to handle. + */ + function stopEventPropagation(e) { + // Prevent default so that we don't trigger a 'focus' event. + e.preventDefault(); + e.stopPropagation(); + } + + /** + * Unique salt added to user image URLs to prevent caching. Dictionary with + * user names as keys. + * @type {Object} + */ + UserPod.userImageSalt_ = {}; + + UserPod.prototype = { + __proto__: HTMLDivElement.prototype, + + /** @override */ + decorate: function() { + this.tabIndex = UserPodTabOrder.POD_INPUT; + this.customButton.tabIndex = UserPodTabOrder.POD_INPUT; + this.actionBoxAreaElement.tabIndex = UserPodTabOrder.ACTION_BOX; + + // Mousedown has to be used instead of click to be able to prevent 'focus' + // event later. + this.addEventListener('mousedown', + this.handleMouseDown_.bind(this)); + + this.signinButtonElement.addEventListener('click', + this.activate.bind(this)); + + this.actionBoxAreaElement.addEventListener('mousedown', + stopEventPropagation); + this.actionBoxAreaElement.addEventListener('click', + this.handleActionAreaButtonClick_.bind(this)); + this.actionBoxAreaElement.addEventListener('keydown', + this.handleActionAreaButtonKeyDown_.bind(this)); + + this.actionBoxMenuRemoveElement.addEventListener('click', + this.handleRemoveCommandClick_.bind(this)); + this.actionBoxMenuRemoveElement.addEventListener('keydown', + this.handleRemoveCommandKeyDown_.bind(this)); + this.actionBoxMenuRemoveElement.addEventListener('blur', + this.handleRemoveCommandBlur_.bind(this)); + + if (this.actionBoxRemoveUserWarningButtonElement) { + this.actionBoxRemoveUserWarningButtonElement.addEventListener( + 'click', + this.handleRemoveUserConfirmationClick_.bind(this)); + } + + this.customButton.addEventListener('click', + this.handleCustomButtonClick_.bind(this)); + }, + + /** + * Initializes the pod after its properties set and added to a pod row. + */ + initialize: function() { + this.passwordElement.addEventListener('keydown', + this.parentNode.handleKeyDown.bind(this.parentNode)); + this.passwordElement.addEventListener('keypress', + this.handlePasswordKeyPress_.bind(this)); + + this.imageElement.addEventListener('load', + this.parentNode.handlePodImageLoad.bind(this.parentNode, this)); + }, + + /** + * Resets tab order for pod elements to its initial state. + */ + resetTabOrder: function() { + this.tabIndex = UserPodTabOrder.POD_INPUT; + this.mainInput.tabIndex = -1; + }, + + /** + * Handles keypress event (i.e. any textual input) on password input. + * @param {Event} e Keypress Event object. + * @private + */ + handlePasswordKeyPress_: function(e) { + // When tabbing from the system tray a tab key press is received. Suppress + // this so as not to type a tab character into the password field. + if (e.keyCode == 9) { + e.preventDefault(); + return; + } + }, + + /** + * Top edge margin number of pixels. + * @type {?number} + */ + set top(top) { + this.style.top = cr.ui.toCssPx(top); + }, + /** + * Left edge margin number of pixels. + * @type {?number} + */ + set left(left) { + this.style.left = cr.ui.toCssPx(left); + }, + + /** + * Gets signed in indicator element. + * @type {!HTMLDivElement} + */ + get signedInIndicatorElement() { + return this.querySelector('.signed-in-indicator'); + }, + + /** + * Gets image element. + * @type {!HTMLImageElement} + */ + get imageElement() { + return this.querySelector('.user-image'); + }, + + /** + * Gets name element. + * @type {!HTMLDivElement} + */ + get nameElement() { + return this.querySelector('.name'); + }, + + /** + * Gets password field. + * @type {!HTMLInputElement} + */ + get passwordElement() { + return this.querySelector('.password'); + }, + + /** + * Gets Caps Lock hint image. + * @type {!HTMLImageElement} + */ + get capslockHintElement() { + return this.querySelector('.capslock-hint'); + }, + + /** + * Gets user signin button. + * @type {!HTMLInputElement} + */ + get signinButtonElement() { + return this.querySelector('.signin-button'); + }, + + /** + * Gets action box area. + * @type {!HTMLInputElement} + */ + get actionBoxAreaElement() { + return this.querySelector('.action-box-area'); + }, + + /** + * Gets user type icon area. + * @type {!HTMLInputElement} + */ + get userTypeIconAreaElement() { + return this.querySelector('.user-type-icon-area'); + }, + + /** + * Gets action box menu. + * @type {!HTMLInputElement} + */ + get actionBoxMenuElement() { + return this.querySelector('.action-box-menu'); + }, + + /** + * Gets action box menu title. + * @type {!HTMLInputElement} + */ + get actionBoxMenuTitleElement() { + return this.querySelector('.action-box-menu-title'); + }, + + /** + * Gets action box menu title, user name item. + * @type {!HTMLInputElement} + */ + get actionBoxMenuTitleNameElement() { + return this.querySelector('.action-box-menu-title-name'); + }, + + /** + * Gets action box menu title, user email item. + * @type {!HTMLInputElement} + */ + get actionBoxMenuTitleEmailElement() { + return this.querySelector('.action-box-menu-title-email'); + }, + + /** + * Gets action box menu, remove user command item. + * @type {!HTMLInputElement} + */ + get actionBoxMenuCommandElement() { + return this.querySelector('.action-box-menu-remove-command'); + }, + + /** + * Gets action box menu, remove user command item div. + * @type {!HTMLInputElement} + */ + get actionBoxMenuRemoveElement() { + return this.querySelector('.action-box-menu-remove'); + }, + + /** + * Gets action box menu, remove user command item div. + * @type {!HTMLInputElement} + */ + get actionBoxRemoveUserWarningElement() { + return this.querySelector('.action-box-remove-user-warning'); + }, + + /** + * Gets action box menu, remove user command item div. + * @type {!HTMLInputElement} + */ + get actionBoxRemoveUserWarningButtonElement() { + return this.querySelector( + '.remove-warning-button'); + }, + + /** + * Gets the locked user indicator box. + * @type {!HTMLInputElement} + */ + get lockedIndicatorElement() { + return this.querySelector('.locked-indicator'); + }, + + /** + * Gets the custom button. This button is normally hidden, but can be + * shown using the chrome.screenlockPrivate API. + * @type {!HTMLInputElement} + */ + get customButton() { + return this.querySelector('.custom-button'); + }, + + /** + * Updates the user pod element. + */ + update: function() { + this.imageElement.src = 'chrome://userimage/' + this.user.username + + '?id=' + UserPod.userImageSalt_[this.user.username]; + + this.nameElement.textContent = this.user_.displayName; + this.signedInIndicatorElement.hidden = !this.user_.signedIn; + + var needSignin = this.needSignin; + this.passwordElement.hidden = needSignin; + this.signinButtonElement.hidden = !needSignin; + + this.updateActionBoxArea(); + }, + + updateActionBoxArea: function() { + this.actionBoxAreaElement.hidden = this.user_.publicAccount; + this.actionBoxMenuRemoveElement.hidden = !this.user_.canRemove; + + this.actionBoxAreaElement.setAttribute( + 'aria-label', loadTimeData.getStringF( + 'podMenuButtonAccessibleName', this.user_.emailAddress)); + this.actionBoxMenuRemoveElement.setAttribute( + 'aria-label', loadTimeData.getString( + 'podMenuRemoveItemAccessibleName')); + this.actionBoxMenuTitleNameElement.textContent = this.user_.isOwner ? + loadTimeData.getStringF('ownerUserPattern', this.user_.displayName) : + this.user_.displayName; + this.actionBoxMenuTitleEmailElement.textContent = this.user_.emailAddress; + this.actionBoxMenuTitleEmailElement.hidden = + this.user_.locallyManagedUser; + + this.actionBoxMenuCommandElement.textContent = + loadTimeData.getString('removeUser'); + this.passwordElement.setAttribute('aria-label', loadTimeData.getStringF( + 'passwordFieldAccessibleName', this.user_.emailAddress)); + this.userTypeIconAreaElement.hidden = !this.user_.locallyManagedUser; + }, + + /** + * The user that this pod represents. + * @type {!Object} + */ + user_: undefined, + get user() { + return this.user_; + }, + set user(userDict) { + this.user_ = userDict; + this.update(); + }, + + /** + * Whether signin is required for this user. + */ + get needSignin() { + // Signin is performed if the user has an invalid oauth token and is + // not currently signed in (i.e. not the lock screen). + return this.user.oauthTokenStatus != OAuthTokenStatus.VALID_OLD && + this.user.oauthTokenStatus != OAuthTokenStatus.VALID_NEW && + !this.user.signedIn; + }, + + /** + * Gets main input element. + * @type {(HTMLButtonElement|HTMLInputElement)} + */ + get mainInput() { + if (!this.signinButtonElement.hidden) + return this.signinButtonElement; + else + return this.passwordElement; + }, + + /** + * Whether action box button is in active state. + * @type {boolean} + */ + get isActionBoxMenuActive() { + return this.actionBoxAreaElement.classList.contains('active'); + }, + set isActionBoxMenuActive(active) { + if (active == this.isActionBoxMenuActive) + return; + + if (active) { + this.actionBoxMenuRemoveElement.hidden = !this.user_.canRemove; + if (this.actionBoxRemoveUserWarningElement) + this.actionBoxRemoveUserWarningElement.hidden = true; + + // Clear focus first if another pod is focused. + if (!this.parentNode.isFocused(this)) { + this.parentNode.focusPod(undefined, true); + this.actionBoxAreaElement.focus(); + } + this.actionBoxAreaElement.classList.add('active'); + } else { + this.actionBoxAreaElement.classList.remove('active'); + } + }, + + /** + * Whether action box button is in hovered state. + * @type {boolean} + */ + get isActionBoxMenuHovered() { + return this.actionBoxAreaElement.classList.contains('hovered'); + }, + set isActionBoxMenuHovered(hovered) { + if (hovered == this.isActionBoxMenuHovered) + return; + + if (hovered) { + this.actionBoxAreaElement.classList.add('hovered'); + this.classList.add('hovered'); + } else { + this.actionBoxAreaElement.classList.remove('hovered'); + this.classList.remove('hovered'); + } + }, + + /** + * Updates the image element of the user. + */ + updateUserImage: function() { + UserPod.userImageSalt_[this.user.username] = new Date().getTime(); + this.update(); + }, + + /** + * Focuses on input element. + */ + focusInput: function() { + var needSignin = this.needSignin; + this.signinButtonElement.hidden = !needSignin; + this.passwordElement.hidden = needSignin; + + // Move tabIndex from the whole pod to the main input. + this.tabIndex = -1; + this.mainInput.tabIndex = UserPodTabOrder.POD_INPUT; + this.mainInput.focus(); + }, + + /** + * Activates the pod. + * @return {boolean} True if activated successfully. + */ + activate: function() { + if (!this.signinButtonElement.hidden) { + this.showSigninUI(); + } else if (!this.passwordElement.value) { + return false; + } else { + Oobe.disableSigninUI(); + chrome.send('authenticateUser', + [this.user.username, this.passwordElement.value]); + } + + return true; + }, + + showSupervisedUserSigninWarning: function() { + // Locally managed user token has been invalidated. + // Make sure that pod is focused i.e. "Sign in" button is seen. + this.parentNode.focusPod(this); + + var error = document.createElement('div'); + var messageDiv = document.createElement('div'); + messageDiv.className = 'error-message-bubble'; + messageDiv.textContent = + loadTimeData.getString('supervisedUserExpiredTokenWarning'); + error.appendChild(messageDiv); + + $('bubble').showContentForElement( + this.signinButtonElement, + cr.ui.Bubble.Attachment.TOP, + error, + this.signinButtonElement.offsetWidth / 2, + 4); + }, + + /** + * Shows signin UI for this user. + */ + showSigninUI: function() { + if (this.user.locallyManagedUser) { + this.showSupervisedUserSigninWarning(); + } else { + this.parentNode.showSigninUI(this.user.emailAddress); + } + }, + + /** + * Resets the input field and updates the tab order of pod controls. + * @param {boolean} takeFocus If true, input field takes focus. + */ + reset: function(takeFocus) { + this.passwordElement.value = ''; + if (takeFocus) + this.focusInput(); // This will set a custom tab order. + else + this.resetTabOrder(); + }, + + /** + * Handles a click event on action area button. + * @param {Event} e Click event. + */ + handleActionAreaButtonClick_: function(e) { + if (this.parentNode.disabled) + return; + this.isActionBoxMenuActive = !this.isActionBoxMenuActive; + }, + + /** + * Handles a keydown event on action area button. + * @param {Event} e KeyDown event. + */ + handleActionAreaButtonKeyDown_: function(e) { + if (this.disabled) + return; + switch (e.keyIdentifier) { + case 'Enter': + case 'U+0020': // Space + if (this.parentNode.focusedPod_ && !this.isActionBoxMenuActive) + this.isActionBoxMenuActive = true; + e.stopPropagation(); + break; + case 'Up': + case 'Down': + if (this.isActionBoxMenuActive) { + this.actionBoxMenuRemoveElement.tabIndex = + UserPodTabOrder.PAD_MENU_ITEM; + this.actionBoxMenuRemoveElement.focus(); + } + e.stopPropagation(); + break; + case 'U+001B': // Esc + this.isActionBoxMenuActive = false; + e.stopPropagation(); + break; + case 'U+0009': // Tab + this.parentNode.focusPod(); + default: + this.isActionBoxMenuActive = false; + break; + } + }, + + /** + * Handles a click event on remove user command. + * @param {Event} e Click event. + */ + handleRemoveCommandClick_: function(e) { + if (this.user.locallyManagedUser || this.user.isDesktopUser) { + this.showRemoveWarning_(); + return; + } + if (this.isActionBoxMenuActive) + chrome.send('removeUser', [this.user.username]); + }, + + /** + * Shows remove warning for managed users. + */ + showRemoveWarning_: function() { + this.actionBoxMenuRemoveElement.hidden = true; + this.actionBoxRemoveUserWarningElement.hidden = false; + }, + + /** + * Handles a click event on remove user confirmation button. + * @param {Event} e Click event. + */ + handleRemoveUserConfirmationClick_: function(e) { + if (this.isActionBoxMenuActive) + chrome.send('removeUser', [this.user.username]); + }, + + /** + * Handles a keydown event on remove command. + * @param {Event} e KeyDown event. + */ + handleRemoveCommandKeyDown_: function(e) { + if (this.disabled) + return; + switch (e.keyIdentifier) { + case 'Enter': + chrome.send('removeUser', [this.user.username]); + e.stopPropagation(); + break; + case 'Up': + case 'Down': + e.stopPropagation(); + break; + case 'U+001B': // Esc + this.actionBoxAreaElement.focus(); + this.isActionBoxMenuActive = false; + e.stopPropagation(); + break; + default: + this.actionBoxAreaElement.focus(); + this.isActionBoxMenuActive = false; + break; + } + }, + + /** + * Handles a blur event on remove command. + * @param {Event} e Blur event. + */ + handleRemoveCommandBlur_: function(e) { + if (this.disabled) + return; + this.actionBoxMenuRemoveElement.tabIndex = -1; + }, + + /** + * Handles mousedown event on a user pod. + * @param {Event} e Mousedown event. + */ + handleMouseDown_: function(e) { + if (this.parentNode.disabled) + return; + + if (!this.signinButtonElement.hidden && !this.isActionBoxMenuActive) { + this.showSigninUI(); + // Prevent default so that we don't trigger 'focus' event. + e.preventDefault(); + } + }, + + /** + * Called when the custom button is clicked. + */ + handleCustomButtonClick_: function() { + chrome.send('customButtonClicked', [this.user.username]); + } + }; + + /** + * Creates a public account user pod. + * @constructor + * @extends {UserPod} + */ + var PublicAccountUserPod = cr.ui.define(function() { + var node = UserPod(); + + var extras = $('public-account-user-pod-extras-template').children; + for (var i = 0; i < extras.length; ++i) { + var el = extras[i].cloneNode(true); + node.appendChild(el); + } + + return node; + }); + + PublicAccountUserPod.prototype = { + __proto__: UserPod.prototype, + + /** + * "Enter" button in expanded side pane. + * @type {!HTMLButtonElement} + */ + get enterButtonElement() { + return this.querySelector('.enter-button'); + }, + + /** + * Boolean flag of whether the pod is showing the side pane. The flag + * controls whether 'expanded' class is added to the pod's class list and + * resets tab order because main input element changes when the 'expanded' + * state changes. + * @type {boolean} + */ + get expanded() { + return this.classList.contains('expanded'); + }, + set expanded(expanded) { + if (this.expanded == expanded) + return; + + this.resetTabOrder(); + this.classList.toggle('expanded', expanded); + + var self = this; + this.classList.add('animating'); + this.addEventListener('webkitTransitionEnd', function f(e) { + self.removeEventListener('webkitTransitionEnd', f); + self.classList.remove('animating'); + + // Accessibility focus indicator does not move with the focused + // element. Sends a 'focus' event on the currently focused element + // so that accessibility focus indicator updates its location. + if (document.activeElement) + document.activeElement.dispatchEvent(new Event('focus')); + }); + }, + + /** @override */ + get needSignin() { + return false; + }, + + /** @override */ + get mainInput() { + if (this.expanded) + return this.enterButtonElement; + else + return this.nameElement; + }, + + /** @override */ + decorate: function() { + UserPod.prototype.decorate.call(this); + + this.classList.remove('need-password'); + this.classList.add('public-account'); + + this.nameElement.addEventListener('keydown', (function(e) { + if (e.keyIdentifier == 'Enter') { + this.parentNode.activatedPod = this; + // Stop this keydown event from bubbling up to PodRow handler. + e.stopPropagation(); + // Prevent default so that we don't trigger a 'click' event on the + // newly focused "Enter" button. + e.preventDefault(); + } + }).bind(this)); + + var learnMore = this.querySelector('.learn-more'); + learnMore.addEventListener('mousedown', stopEventPropagation); + learnMore.addEventListener('click', this.handleLearnMoreEvent); + learnMore.addEventListener('keydown', this.handleLearnMoreEvent); + + learnMore = this.querySelector('.side-pane-learn-more'); + learnMore.addEventListener('click', this.handleLearnMoreEvent); + learnMore.addEventListener('keydown', this.handleLearnMoreEvent); + + this.enterButtonElement.addEventListener('click', (function(e) { + this.enterButtonElement.disabled = true; + chrome.send('launchPublicAccount', [this.user.username]); + }).bind(this)); + }, + + /** + * Updates the user pod element. + */ + update: function() { + UserPod.prototype.update.call(this); + this.querySelector('.side-pane-name').textContent = + this.user_.displayName; + this.querySelector('.info').textContent = + loadTimeData.getStringF('publicAccountInfoFormat', + this.user_.enterpriseDomain); + }, + + /** @override */ + focusInput: function() { + // Move tabIndex from the whole pod to the main input. + this.tabIndex = -1; + this.mainInput.tabIndex = UserPodTabOrder.POD_INPUT; + this.mainInput.focus(); + }, + + /** @override */ + reset: function(takeFocus) { + if (!takeFocus) + this.expanded = false; + this.enterButtonElement.disabled = false; + UserPod.prototype.reset.call(this, takeFocus); + }, + + /** @override */ + activate: function() { + this.expanded = true; + this.focusInput(); + return true; + }, + + /** @override */ + handleMouseDown_: function(e) { + if (this.parentNode.disabled) + return; + + this.parentNode.focusPod(this); + this.parentNode.activatedPod = this; + // Prevent default so that we don't trigger 'focus' event. + e.preventDefault(); + }, + + /** + * Handle mouse and keyboard events for the learn more button. + * Triggering the button causes information about public sessions to be + * shown. + * @param {Event} event Mouse or keyboard event. + */ + handleLearnMoreEvent: function(event) { + switch (event.type) { + // Show informaton on left click. Let any other clicks propagate. + case 'click': + if (event.button != 0) + return; + break; + // Show informaton when <Return> or <Space> is pressed. Let any other + // key presses propagate. + case 'keydown': + switch (event.keyCode) { + case 13: // Return. + case 32: // Space. + break; + default: + return; + } + break; + } + chrome.send('launchHelpApp', [HELP_TOPIC_PUBLIC_SESSION]); + stopEventPropagation(event); + }, + }; + + /** + * Creates a user pod to be used only in desktop chrome. + * @constructor + * @extends {UserPod} + */ + var DesktopUserPod = cr.ui.define(function() { + // Don't just instantiate a UserPod(), as this will call decorate() on the + // parent object, and add duplicate event listeners. + var node = $('user-pod-template').cloneNode(true); + node.removeAttribute('id'); + return node; + }); + + DesktopUserPod.prototype = { + __proto__: UserPod.prototype, + + /** @override */ + get mainInput() { + if (!this.passwordElement.hidden) + return this.passwordElement; + else + return this.nameElement; + }, + + /** @override */ + decorate: function() { + UserPod.prototype.decorate.call(this); + }, + + /** @override */ + update: function() { + // TODO(noms): Use the actual profile avatar for local profiles once the + // new, non-pixellated avatars are available. + this.imageElement.src = this.user.emailAddress == '' ? + 'chrome://theme/IDR_USER_MANAGER_DEFAULT_AVATAR' : + this.user.userImage; + this.nameElement.textContent = this.user.displayName; + + var isLockedUser = this.user.needsSignin; + this.signinButtonElement.hidden = true; + this.lockedIndicatorElement.hidden = !isLockedUser; + this.passwordElement.hidden = !isLockedUser; + this.nameElement.hidden = isLockedUser; + + UserPod.prototype.updateActionBoxArea.call(this); + }, + + /** @override */ + focusInput: function() { + // For focused pods, display the name unless the pod is locked. + var isLockedUser = this.user.needsSignin; + this.signinButtonElement.hidden = true; + this.lockedIndicatorElement.hidden = !isLockedUser; + this.passwordElement.hidden = !isLockedUser; + this.nameElement.hidden = isLockedUser; + + // Move tabIndex from the whole pod to the main input. + this.tabIndex = -1; + this.mainInput.tabIndex = UserPodTabOrder.POD_INPUT; + this.mainInput.focus(); + }, + + /** @override */ + reset: function(takeFocus) { + // Always display the user's name for unfocused pods. + if (!takeFocus) + this.nameElement.hidden = false; + UserPod.prototype.reset.call(this, takeFocus); + }, + + /** @override */ + activate: function() { + if (this.passwordElement.hidden) { + Oobe.launchUser(this.user.emailAddress, this.user.displayName); + } else if (!this.passwordElement.value) { + return false; + } else { + chrome.send('authenticatedLaunchUser', + [this.user.emailAddress, + this.user.displayName, + this.passwordElement.value]); + } + this.passwordElement.value = ''; + return true; + }, + + /** @override */ + handleMouseDown_: function(e) { + if (this.parentNode.disabled) + return; + + Oobe.clearErrors(); + this.parentNode.lastFocusedPod_ = this; + + // If this is an unlocked pod, then open a browser window. Otherwise + // just activate the pod and show the password field. + if (!this.user.needsSignin && !this.isActionBoxMenuActive) + this.activate(); + }, + + /** @override */ + handleRemoveUserConfirmationClick_: function(e) { + chrome.send('removeUser', [this.user.profilePath]); + }, + }; + + /** + * Creates a new pod row element. + * @constructor + * @extends {HTMLDivElement} + */ + var PodRow = cr.ui.define('podrow'); + + PodRow.prototype = { + __proto__: HTMLDivElement.prototype, + + // Whether this user pod row is shown for the first time. + firstShown_: true, + + // True if inside focusPod(). + insideFocusPod_: false, + + // Focused pod. + focusedPod_: undefined, + + // Activated pod, i.e. the pod of current login attempt. + activatedPod_: undefined, + + // Pod that was most recently focused, if any. + lastFocusedPod_: undefined, + + // Note: created only in decorate() ! + wallpaperLoader_: undefined, + + // Pods whose initial images haven't been loaded yet. + podsWithPendingImages_: [], + + /** @override */ + decorate: function() { + // Event listeners that are installed for the time period during which + // the element is visible. + this.listeners_ = { + focus: [this.handleFocus_.bind(this), true /* useCapture */], + click: [this.handleClick_.bind(this), true], + mousemove: [this.handleMouseMove_.bind(this), false], + keydown: [this.handleKeyDown.bind(this), false] + }; + this.wallpaperLoader_ = new login.WallpaperLoader(); + }, + + /** + * Returns all the pods in this pod row. + * @type {NodeList} + */ + get pods() { + return Array.prototype.slice.call(this.children); + }, + + /** + * Return true if user pod row has only single user pod in it. + * @type {boolean} + */ + get isSinglePod() { + return this.children.length == 1; + }, + + /** + * Returns pod with the given username (null if there is no such pod). + * @param {string} username Username to be matched. + * @return {Object} Pod with the given username. null if pod hasn't been + * found. + */ + getPodWithUsername_: function(username) { + for (var i = 0, pod; pod = this.pods[i]; ++i) { + if (pod.user.username == username) + return pod; + } + return null; + }, + + /** + * True if the the pod row is disabled (handles no user interaction). + * @type {boolean} + */ + disabled_: false, + get disabled() { + return this.disabled_; + }, + set disabled(value) { + this.disabled_ = value; + var controls = this.querySelectorAll('button,input'); + for (var i = 0, control; control = controls[i]; ++i) { + control.disabled = value; + } + }, + + /** + * Creates a user pod from given email. + * @param {string} email User's email. + */ + createUserPod: function(user) { + var userPod; + if (user.isDesktopUser) + userPod = new DesktopUserPod({user: user}); + else if (user.publicAccount) + userPod = new PublicAccountUserPod({user: user}); + else + userPod = new UserPod({user: user}); + + userPod.hidden = false; + return userPod; + }, + + /** + * Add an existing user pod to this pod row. + * @param {!Object} user User info dictionary. + * @param {boolean} animated Whether to use init animation. + */ + addUserPod: function(user, animated) { + var userPod = this.createUserPod(user); + if (animated) { + userPod.classList.add('init'); + userPod.nameElement.classList.add('init'); + } + + this.appendChild(userPod); + userPod.initialize(); + }, + + /** + * Removes user pod from pod row. + * @param {string} email User's email. + */ + removeUserPod: function(username) { + var podToRemove = this.getPodWithUsername_(username); + if (podToRemove == null) { + console.warn('Attempt to remove not existing pod for ' + username + + '.'); + return; + } + this.removeChild(podToRemove); + this.placePods_(); + }, + + /** + * Returns index of given pod or -1 if not found. + * @param {UserPod} pod Pod to look up. + * @private + */ + indexOf_: function(pod) { + for (var i = 0; i < this.pods.length; ++i) { + if (pod == this.pods[i]) + return i; + } + return -1; + }, + + /** + * Start first time show animation. + */ + startInitAnimation: function() { + // Schedule init animation. + for (var i = 0, pod; pod = this.pods[i]; ++i) { + window.setTimeout(removeClass, 500 + i * 70, pod, 'init'); + window.setTimeout(removeClass, 700 + i * 70, pod.nameElement, 'init'); + } + }, + + /** + * Start login success animation. + */ + startAuthenticatedAnimation: function() { + var activated = this.indexOf_(this.activatedPod_); + if (activated == -1) + return; + + for (var i = 0, pod; pod = this.pods[i]; ++i) { + if (i < activated) + pod.classList.add('left'); + else if (i > activated) + pod.classList.add('right'); + else + pod.classList.add('zoom'); + } + }, + + /** + * Populates pod row with given existing users and start init animation. + * @param {array} users Array of existing user emails. + * @param {boolean} animated Whether to use init animation. + */ + loadPods: function(users, animated) { + // Clear existing pods. + this.innerHTML = ''; + this.focusedPod_ = undefined; + this.activatedPod_ = undefined; + this.lastFocusedPod_ = undefined; + + // Switch off animation + Oobe.getInstance().toggleClass('flying-pods', false); + + // Populate the pod row. + for (var i = 0; i < users.length; ++i) { + this.addUserPod(users[i], animated); + } + for (var i = 0, pod; pod = this.pods[i]; ++i) { + this.podsWithPendingImages_.push(pod); + } + // Make sure we eventually show the pod row, even if some image is stuck. + setTimeout(function() { + $('pod-row').classList.remove('images-loading'); + }, POD_ROW_IMAGES_LOAD_TIMEOUT_MS); + + this.placePods_(); + + // Without timeout changes in pods positions will be animated even though + // it happened when 'flying-pods' class was disabled. + setTimeout(function() { + Oobe.getInstance().toggleClass('flying-pods', true); + }, 0); + + this.focusPod(this.preselectedPod); + }, + + /** + * Shows a button on a user pod with an icon. Clicking on this button + * triggers an event used by the chrome.screenlockPrivate API. + * @param {string} username Username of pod to add button + * @param {string} iconURL URL of the button icon + */ + showUserPodButton: function(username, iconURL) { + var pod = this.getPodWithUsername_(username); + if (pod == null) { + console.error('Unable to show user pod button for ' + username + + ': user pod not found.'); + return; + } + + pod.customButton.hidden = false; + var icon = + pod.customButton.querySelector('.custom-button-icon'); + icon.src = iconURL; + }, + + /** + * Called when window was resized. + */ + onWindowResize: function() { + var layout = this.calculateLayout_(); + if (layout.columns != this.columns || layout.rows != this.rows) + this.placePods_(); + }, + + /** + * Returns width of podrow having |columns| number of columns. + * @private + */ + columnsToWidth_: function(columns) { + var margin = MARGIN_BY_COLUMNS[columns]; + return 2 * POD_ROW_PADDING + columns * POD_WIDTH + (columns - 1) * margin; + }, + + /** + * Returns height of podrow having |rows| number of rows. + * @private + */ + rowsToHeight_: function(rows) { + return 2 * POD_ROW_PADDING + rows * POD_HEIGHT; + }, + + /** + * Calculates number of columns and rows that podrow should have in order to + * hold as much its pods as possible for current screen size. Also it tries + * to choose layout that looks good. + * @return {{columns: number, rows: number}} + */ + calculateLayout_: function() { + var preferredColumns = this.pods.length < COLUMNS.length ? + COLUMNS[this.pods.length] : COLUMNS[COLUMNS.length - 1]; + var maxWidth = Oobe.getInstance().clientAreaSize.width; + var columns = preferredColumns; + while (maxWidth < this.columnsToWidth_(columns) && columns > 1) + --columns; + var rows = Math.floor((this.pods.length - 1) / columns) + 1; + var maxHeigth = Oobe.getInstance().clientAreaSize.height; + while (maxHeigth < this.rowsToHeight_(rows) && rows > 1) + --rows; + // One more iteration if it's not enough cells to place all pods. + while (maxWidth >= this.columnsToWidth_(columns + 1) && + columns * rows < this.pods.length && + columns < MAX_NUMBER_OF_COLUMNS) { + ++columns; + } + return {columns: columns, rows: rows}; + }, + + /** + * Places pods onto their positions onto pod grid. + * @private + */ + placePods_: function() { + var layout = this.calculateLayout_(); + var columns = this.columns = layout.columns; + var rows = this.rows = layout.rows; + var maxPodsNumber = columns * rows; + var margin = MARGIN_BY_COLUMNS[columns]; + this.parentNode.setPreferredSize( + this.columnsToWidth_(columns), this.rowsToHeight_(rows)); + this.pods.forEach(function(pod, index) { + if (pod.offsetHeight != POD_HEIGHT) + console.error('Pod offsetHeight and POD_HEIGHT are not equal.'); + if (pod.offsetWidth != POD_WIDTH) + console.error('Pod offsetWidht and POD_WIDTH are not equal.'); + if (index >= maxPodsNumber) { + pod.hidden = true; + return; + } + pod.hidden = false; + var column = index % columns; + var row = Math.floor(index / columns); + pod.left = POD_ROW_PADDING + column * (POD_WIDTH + margin); + pod.top = POD_ROW_PADDING + row * POD_HEIGHT; + }); + Oobe.getInstance().updateScreenSize(this.parentNode); + }, + + /** + * Number of columns. + * @type {?number} + */ + set columns(columns) { + // Cannot use 'columns' here. + this.setAttribute('ncolumns', columns); + }, + get columns() { + return this.getAttribute('ncolumns'); + }, + + /** + * Number of rows. + * @type {?number} + */ + set rows(rows) { + // Cannot use 'rows' here. + this.setAttribute('nrows', rows); + }, + get rows() { + return this.getAttribute('nrows'); + }, + + /** + * Whether the pod is currently focused. + * @param {UserPod} pod Pod to check for focus. + * @return {boolean} Pod focus status. + */ + isFocused: function(pod) { + return this.focusedPod_ == pod; + }, + + /** + * Focuses a given user pod or clear focus when given null. + * @param {UserPod=} podToFocus User pod to focus (undefined clears focus). + * @param {boolean=} opt_force If true, forces focus update even when + * podToFocus is already focused. + */ + focusPod: function(podToFocus, opt_force) { + if (this.isFocused(podToFocus) && !opt_force) { + this.keyboardActivated_ = false; + return; + } + + // Make sure there's only one focusPod operation happening at a time. + if (this.insideFocusPod_) { + this.keyboardActivated_ = false; + return; + } + this.insideFocusPod_ = true; + + this.wallpaperLoader_.reset(); + for (var i = 0, pod; pod = this.pods[i]; ++i) { + if (!this.isSinglePod) { + pod.isActionBoxMenuActive = false; + } + if (pod != podToFocus) { + pod.isActionBoxMenuHovered = false; + pod.classList.remove('focused'); + pod.classList.remove('faded'); + pod.reset(false); + } + } + + // Clear any error messages for previous pod. + if (!this.isFocused(podToFocus)) + Oobe.clearErrors(); + + var hadFocus = !!this.focusedPod_; + this.focusedPod_ = podToFocus; + if (podToFocus) { + podToFocus.classList.remove('faded'); + podToFocus.classList.add('focused'); + podToFocus.reset(true); // Reset and give focus. + chrome.send('focusPod', [podToFocus.user.username]); + + this.wallpaperLoader_.scheduleLoad(podToFocus.user.username, opt_force); + this.firstShown_ = false; + this.lastFocusedPod_ = podToFocus; + } + this.insideFocusPod_ = false; + this.keyboardActivated_ = false; + }, + + /** + * Focuses a given user pod by index or clear focus when given null. + * @param {int=} podToFocus index of User pod to focus. + * @param {boolean=} opt_force If true, forces focus update even when + * podToFocus is already focused. + */ + focusPodByIndex: function(podToFocus, opt_force) { + if (podToFocus < this.pods.length) + this.focusPod(this.pods[podToFocus], opt_force); + }, + + /** + * Resets wallpaper to the last active user's wallpaper, if any. + */ + loadLastWallpaper: function() { + if (this.lastFocusedPod_) + this.wallpaperLoader_.scheduleLoad(this.lastFocusedPod_.user.username, + true /* force */); + }, + + /** + * Handles 'onWallpaperLoaded' event. Recalculates statistics and + * [re]schedules next wallpaper load. + */ + onWallpaperLoaded: function(username) { + this.wallpaperLoader_.onWallpaperLoaded(username); + }, + + /** + * Returns the currently activated pod. + * @type {UserPod} + */ + get activatedPod() { + return this.activatedPod_; + }, + set activatedPod(pod) { + if (pod && pod.activate()) + this.activatedPod_ = pod; + }, + + /** + * The pod of the signed-in user, if any; null otherwise. + * @type {?UserPod} + */ + get lockedPod() { + for (var i = 0, pod; pod = this.pods[i]; ++i) { + if (pod.user.signedIn) + return pod; + } + return null; + }, + + /** + * The pod that is preselected on user pod row show. + * @type {?UserPod} + */ + get preselectedPod() { + var lockedPod = this.lockedPod; + var preselectedPod = PRESELECT_FIRST_POD ? + lockedPod || this.pods[0] : lockedPod; + return preselectedPod; + }, + + /** + * Resets input UI. + * @param {boolean} takeFocus True to take focus. + */ + reset: function(takeFocus) { + this.disabled = false; + if (this.activatedPod_) + this.activatedPod_.reset(takeFocus); + }, + + /** + * Restores input focus to current selected pod, if there is any. + */ + refocusCurrentPod: function() { + if (this.focusedPod_) { + this.focusedPod_.focusInput(); + } + }, + + /** + * Clears focused pod password field. + */ + clearFocusedPod: function() { + if (!this.disabled && this.focusedPod_) + this.focusedPod_.reset(true); + }, + + /** + * Shows signin UI. + * @param {string} email Email for signin UI. + */ + showSigninUI: function(email) { + // Clear any error messages that might still be around. + Oobe.clearErrors(); + this.disabled = true; + this.lastFocusedPod_ = this.getPodWithUsername_(email); + Oobe.showSigninUI(email); + }, + + /** + * Updates current image of a user. + * @param {string} username User for which to update the image. + */ + updateUserImage: function(username) { + var pod = this.getPodWithUsername_(username); + if (pod) + pod.updateUserImage(); + }, + + /** + * Resets OAuth token status (invalidates it). + * @param {string} username User for which to reset the status. + */ + resetUserOAuthTokenStatus: function(username) { + var pod = this.getPodWithUsername_(username); + if (pod) { + pod.user.oauthTokenStatus = OAuthTokenStatus.INVALID_OLD; + pod.update(); + } else { + console.log('Failed to update Gaia state for: ' + username); + } + }, + + /** + * Handler of click event. + * @param {Event} e Click Event object. + * @private + */ + handleClick_: function(e) { + if (this.disabled) + return; + + // Clear all menus if the click is outside pod menu and its + // button area. + if (!findAncestorByClass(e.target, 'action-box-menu') && + !findAncestorByClass(e.target, 'action-box-area')) { + for (var i = 0, pod; pod = this.pods[i]; ++i) + pod.isActionBoxMenuActive = false; + } + + // Clears focus if not clicked on a pod and if there's more than one pod. + var pod = findAncestorByClass(e.target, 'pod'); + if ((!pod || pod.parentNode != this) && !this.isSinglePod) { + this.focusPod(); + } + + if (pod) + pod.isActionBoxMenuHovered = true; + + // Return focus back to single pod. + if (this.isSinglePod) { + this.focusPod(this.focusedPod_, true /* force */); + if (!pod) + this.focusedPod_.isActionBoxMenuHovered = false; + } + + // Also stop event propagation. + if (pod && e.target == pod.imageElement) + e.stopPropagation(); + }, + + /** + * Handler of mouse move event. + * @param {Event} e Click Event object. + * @private + */ + handleMouseMove_: function(e) { + if (this.disabled) + return; + if (e.webkitMovementX == 0 && e.webkitMovementY == 0) + return; + + // Defocus (thus hide) action box, if it is focused on a user pod + // and the pointer is not hovering over it. + var pod = findAncestorByClass(e.target, 'pod'); + if (document.activeElement && + document.activeElement.parentNode != pod && + document.activeElement.classList.contains('action-box-area')) { + document.activeElement.parentNode.focus(); + } + + if (pod) + pod.isActionBoxMenuHovered = true; + + // Hide action boxes on other user pods. + for (var i = 0, p; p = this.pods[i]; ++i) + if (p != pod && !p.isActionBoxMenuActive) + p.isActionBoxMenuHovered = false; + }, + + /** + * Handles focus event. + * @param {Event} e Focus Event object. + * @private + */ + handleFocus_: function(e) { + if (this.disabled) + return; + if (e.target.parentNode == this) { + // Focus on a pod + if (e.target.classList.contains('focused')) + e.target.focusInput(); + else + this.focusPod(e.target); + return; + } + + var pod = findAncestorByClass(e.target, 'pod'); + if (pod && pod.parentNode == this) { + // Focus on a control of a pod but not on the action area button. + if (!pod.classList.contains('focused') && + !e.target.classList.contains('action-box-button')) { + this.focusPod(pod); + e.target.focus(); + } + return; + } + + // Clears pod focus when we reach here. It means new focus is neither + // on a pod nor on a button/input for a pod. + // Do not "defocus" user pod when it is a single pod. + // That means that 'focused' class will not be removed and + // input field/button will always be visible. + if (!this.isSinglePod) + this.focusPod(); + }, + + /** + * Handler of keydown event. + * @param {Event} e KeyDown Event object. + */ + handleKeyDown: function(e) { + if (this.disabled) + return; + var editing = e.target.tagName == 'INPUT' && e.target.value; + switch (e.keyIdentifier) { + case 'Left': + if (!editing) { + this.keyboardActivated_ = true; + if (this.focusedPod_ && this.focusedPod_.previousElementSibling) + this.focusPod(this.focusedPod_.previousElementSibling); + else + this.focusPod(this.lastElementChild); + + e.stopPropagation(); + } + break; + case 'Right': + if (!editing) { + this.keyboardActivated_ = true; + if (this.focusedPod_ && this.focusedPod_.nextElementSibling) + this.focusPod(this.focusedPod_.nextElementSibling); + else + this.focusPod(this.firstElementChild); + + e.stopPropagation(); + } + break; + case 'Enter': + if (this.focusedPod_) { + this.activatedPod = this.focusedPod_; + e.stopPropagation(); + } + break; + case 'U+001B': // Esc + if (!this.isSinglePod) + this.focusPod(); + break; + } + }, + + /** + * Called right after the pod row is shown. + */ + handleAfterShow: function() { + // Without timeout changes in pods positions will be animated even though + // it happened when 'flying-pods' class was disabled. + setTimeout(function() { + Oobe.getInstance().toggleClass('flying-pods', true); + }, 0); + // Force input focus for user pod on show and once transition ends. + if (this.focusedPod_) { + var focusedPod = this.focusedPod_; + var screen = this.parentNode; + var self = this; + focusedPod.addEventListener('webkitTransitionEnd', function f(e) { + if (e.target == focusedPod) { + focusedPod.removeEventListener('webkitTransitionEnd', f); + focusedPod.reset(true); + // Notify screen that it is ready. + screen.onShow(); + self.wallpaperLoader_.scheduleLoad(focusedPod.user.username, + true /* force */); + } + }); + // Guard timer for 1 second -- it would conver all possible animations. + ensureTransitionEndEvent(focusedPod, 1000); + } + }, + + /** + * Called right before the pod row is shown. + */ + handleBeforeShow: function() { + Oobe.getInstance().toggleClass('flying-pods', false); + for (var event in this.listeners_) { + this.ownerDocument.addEventListener( + event, this.listeners_[event][0], this.listeners_[event][1]); + } + $('login-header-bar').buttonsTabIndex = UserPodTabOrder.HEADER_BAR; + }, + + /** + * Called when the element is hidden. + */ + handleHide: function() { + for (var event in this.listeners_) { + this.ownerDocument.removeEventListener( + event, this.listeners_[event][0], this.listeners_[event][1]); + } + $('login-header-bar').buttonsTabIndex = 0; + }, + + /** + * Called when a pod's user image finishes loading. + */ + handlePodImageLoad: function(pod) { + var index = this.podsWithPendingImages_.indexOf(pod); + if (index == -1) { + return; + } + + this.podsWithPendingImages_.splice(index, 1); + if (this.podsWithPendingImages_.length == 0) { + this.classList.remove('images-loading'); + } + } + }; + + return { + PodRow: PodRow + }; +}); diff --git a/chromium/chrome/browser/resources/chromeos/login/user_pod_template.html b/chromium/chrome/browser/resources/chromeos/login/user_pod_template.html new file mode 100644 index 00000000000..d9ff7554aaa --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/user_pod_template.html @@ -0,0 +1,64 @@ +<div id="user-pod-template" class="pod need-password" hidden> + <div class="main-pane"> + <div class="signed-in-indicator" i18n-content="signedIn" hidden></div> + <img class="user-image" alt=""> + <div class="name"></div> + <div class="password-area"> + <div class="password-input-container"> + <input type="password" class="password" + i18n-values="placeholder:passwordHint"> + <img class="capslock-hint" + src="chrome://theme/IDR_LOGIN_PASSWORD_CAPS_LOCK" alt=""> + </div> + <button class="custom-button custom-appearance" hidden> + <img class="custom-button-icon"></img> + </button> + </div> + <button class="signin-button" i18n-content="signinButton"></button> + <div class="locked-indicator" hidden></div> + </div> + <div class="action-box-area"> + <div class="custom-appearance action-box-button"></div> + </div> + <div class="user-type-icon-area" hidden> + <div class="custom-appearance user-type-icon-image"></div> + </div> + <div class="action-box-menu"> + <div class="action-box-menu-title"> + <span class="action-box-menu-title-name"></span> + <span class="action-box-menu-title-email"></span> + </div> + <div class="action-box-menu-remove"> + <span class="action-box-menu-remove-command"/> + </div> + <div class="action-box-remove-user-warning" hidden> + <div class="action-box-remove-user-warning-text" + i18n-content="removeUserWarningText"></div> + <button class="remove-warning-button + custom-appearance button-fancy button-red" + i18n-content="removeUserWarningButtonTitle"></button> + </div> + </div> +</div> + +<!-- Extra elements that are appended to above "user-pod-template" for public + account user pod. Note that only the children of the template div are + appended. --> +<div id="public-account-user-pod-extras-template" hidden> + <div class="learn-more"></div> + <div class="side-pane-divider"></div> + <div class="side-pane-container"> + <div class="side-pane-contents"> + <div class="side-pane-name-plus-learn"> + <div class="side-pane-name"></div> + <div class="side-pane-learn-more"></div> + </div> + <p class="info"></p> + <p class="reminder" i18n-content="publicAccountReminder"></p> + <button class="enter-button" + i18n-content="publicAccountEnter" + i18n-values="aria-label:publicAccountEnterAccessibleName"> + </button> + </div> + </div> +</div> diff --git a/chromium/chrome/browser/resources/chromeos/login/version.html b/chromium/chrome/browser/resources/chromeos/login/version.html new file mode 100644 index 00000000000..0f01a5dcfdf --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/version.html @@ -0,0 +1,3 @@ +<div id="version-labels" hidden> + <div id="version"></div> +</div> diff --git a/chromium/chrome/browser/resources/chromeos/login/wallpaper_loader.js b/chromium/chrome/browser/resources/chromeos/login/wallpaper_loader.js new file mode 100644 index 00000000000..4903bf5b0e3 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/login/wallpaper_loader.js @@ -0,0 +1,223 @@ +// Copyright 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +cr.define('login', function() { + + /** + * Minimum wallpaper load delay in milliseconds. + * @type {number} + * @const + */ + var WALLPAPER_LOAD_MIN_DELAY_MS = 100; + + /** + * If last walpaper load time cannot be calculated, assume this value. + * @type {number} + * @const + */ + var WALLPAPER_DEFAULT_LOAD_TIME_MS = 200; + + /** + * Min and Max average wallpaper load time. + * Delay to next wallpaper load is 2 * <average load time>. + * @type {number} + * @const + */ + var WALLPAPER_MIN_LOAD_TIME_MS = 50; + var WALLPAPER_MAX_LOAD_TIME_MS = 2000; + + /** + * Number last wallpaper load times to remember. + * @type {number} + * @const + */ + var WALLPAPER_LOAD_STATS_MAX_LENGTH = 4; + + + /** + * Creates a new pod row element. + * @constructor + * @extends {HTMLDivElement} + */ + var WallpaperLoader = function() { + this.wallpaperLoadInProgress_ = { + name: '', + date: undefined + }; + this.loadStats_ = []; + }; + + WallpaperLoader.prototype = { + // When moving through users quickly at login screen, set a timeout to + // prevent loading intermediate wallpapers. + beforeLoadTimeout_: null, + + // If we do not receive notification on WallpaperLoaded within timeout, + // probably an error happened and the wallpaper is just bad. Skip it + // and unblock loader. + loadTimeout_: null, + + // When waiting for wallpaper load, remember load start time. + // wallpaperLoadInProgress_: { name: '', date: undefined } + wallpaperLoadInProgress_: undefined, + + // Wait a delay and then load this wallpaper. Value = username. + wallpaperLoadPending_: undefined, + + // Wait untill this Date before loading next wallpaper. + wallpaperLoadTryNextAfter_: undefined, + + // Username, owner of current wallpaper. + currentWallpaper_: '', + + // Array of times (in milliseconds) of last wallpaper load attempts. + // Length is limited by WALLPAPER_LOAD_STATS_MAX_LENGTH. + loadStats_: undefined, + + // Force next load request even if requested wallpaper is already loaded. + forceLoad_: false, + + /** + * Stop load timer. Clear pending record. + */ + reset: function() { + delete this.wallpaperLoadPending_; + + if (this.beforeLoadTimeout_ != null) + window.clearTimeout(this.beforeLoadTimeout_); + this.beforeLoadTimeout_ = null; + + if (this.loadTimeout_ != null) + window.clearTimeout(this.loadTimeout_); + this.loadTimeout_ = null; + + this.wallpaperLoadInProgress_.name = ''; + }, + + /** + * Schedules wallpaper load. + */ + scheduleLoad: function(email, force) { + if (force || this.forceLoad_) { + this.forceLoad_ = true; + } else { + if (this.wallpaperLoadPending_ && this.wallpaperLoadPending_ == email) + return; + if ((this.wallpaperLoadInProgress_.name == '') && + (this.currentWallpaper_ == email)) + return; + } + this.reset(); + + this.wallpaperLoadPending_ = email; + var now = new Date(); + var timeout = WALLPAPER_LOAD_MIN_DELAY_MS; + if (this.wallpaperLoadTryNextAfter_) + timeout = Math.max(timeout, this.wallpaperLoadTryNextAfter_ - now); + + this.beforeLoadTimeout_ = window.setTimeout( + this.loadWallpaper_.bind(this), timeout); + }, + + + /** + * Loads pending wallpaper, if any. + * @private + */ + loadWallpaper_: function() { + this.beforeLoadTimeout_ = null; + if (!this.wallpaperLoadPending_) + return; + if (!this.forceLoad_ && this.wallpaperLoadInProgress_.name != '') + return; + var email = this.wallpaperLoadPending_; + delete this.wallpaperLoadPending_; + if (!this.forceLoad_ && email == this.currentWallpaper_) + return; + this.wallpaperLoadInProgress_.name = email; + this.wallpaperLoadInProgress_.date = new Date(); + this.forceLoad_ = false; + chrome.send('loadWallpaper', [email]); + + var timeout = 3 * this.getWallpaperLoadTime_(); + this.loadTimeout_ = window.setTimeout( + this.loadTimeoutFired_.bind(this), timeout); + }, + + /** + * Calculates average wallpaper load time. + */ + calcLoadStatsAvg: function() { + return this.loadStats_.reduce( + function(previousValue, currentValue) { + return previousValue + currentValue; + }) / this.loadStats_.length; + }, + + /** + * Calculates average next wallpaper load delay time. + */ + getWallpaperLoadTime_: function() { + var avg = WALLPAPER_DEFAULT_LOAD_TIME_MS; + + if (this.loadStats_.length == 0) + return avg; + + avg = this.calcLoadStatsAvg(); + if (avg < WALLPAPER_MIN_LOAD_TIME_MS) + avg = WALLPAPER_MIN_LOAD_TIME_MS; + + if (avg > WALLPAPER_MAX_LOAD_TIME_MS) + avg = WALLPAPER_MAX_LOAD_TIME_MS; + + return avg; + }, + + /** + * Handles 'onWallpaperLoaded' event. Recalculates statistics and + * [re]schedules next wallpaper load. + */ + onWallpaperLoaded: function(email) { + this.currentWallpaper_ = email; + if (email != this.wallpaperLoadInProgress_.name) + return; + + window.clearTimeout(this.loadTimeout_); + this.loadTimeout_ = null; + + this.wallpaperLoadInProgress_.name = ''; + var started = this.wallpaperLoadInProgress_.date; + var finished = new Date(); + var elapsed = started ? finished - started : + WALLPAPER_DEFAULT_LOAD_TIME_MS; + this.loadStats_.push(elapsed); + if (this.loadStats_.length > WALLPAPER_LOAD_STATS_MAX_LENGTH) + this.loadStats_.shift(); + + this.wallpaperLoadTryNextAfter_ = new Date(Date.now() + 2 * + this.getWallpaperLoadTime_()); + if (this.wallpaperLoadPending_) { + var newWallpaperEmail = this.wallpaperLoadPending_; + this.reset(); + this.scheduleLoad(newWallpaperEmail, this.forceLoad_); + } + }, + + /** + * Handles timeout of wallpaper load. Pretends load is completed to unblock + * loader. + */ + loadTimeoutFired_: function() { + var email = this.wallpaperLoadInProgress_.name; + this.loadTimeout_ = null; + if (email == '') + return; + this.onWallpaperLoaded(email); + } + }; + + return { + WallpaperLoader: WallpaperLoader + }; +}); diff --git a/chromium/chrome/browser/resources/chromeos/menu.css b/chromium/chrome/browser/resources/chromeos/menu.css new file mode 100644 index 00000000000..1eea908cb11 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/menu.css @@ -0,0 +1,97 @@ +/* Copyright (c) 2012 The Chromium Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +body { + -webkit-user-select: none; + background: -webkit-linear-gradient(white, #EEE); + cursor: default; + margin: 0; + overflow: hidden; +} + +.menu-item { + -webkit-box-orient: horizontal; + -webkit-padding-end: 19px; + background-repeat: no-repeat; + display: -webkit-box; + margin: 0; + overflow: hidden; + padding-bottom: 1px; + padding-top: 1px; + white-space: nowrap; +} + +.disabled { + color: #b7b7b7; +} + +.no-icon { + -webkit-padding-start: 19px; +} + +.menu-label { + -webkit-box-flex: 1; + vertical-align: middle; +} + +.accelerator { + -webkit-margin-start: 15px; + opacity: 0.3; +} + +.left-icon { + background-position: 4px center; +} + +.right-icon { + background-position: right center; +} + +.separator { + background: -webkit-linear-gradient(left, + rgba(0, 0, 0, .10), + rgba(0, 0, 0, .02) 96%); + border: 0; + height: 1px; + margin: 4px 0; +} + +.mnemonic-enabled .mnemonic { + text-decoration: underline; +} + +.selected { + background-color: rgb(220, 229, 250); +} + +#viewport { + overflow: hidden; +} + +.scroll-button { + background-position: center center; + background-repeat: no-repeat; + height: 20px; + line-height: 20px; + text-align: center; + width: 100%; +} + +#scroll-up { + /* TODO(oshima): get right icons from UX designer */ + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAADCAYAAACwAX77AAAAI0lEQVQImWNgQIA4BgaGuQxoII6BgeEvAwPDf2RJZEEYngsA2N8I6FqZBpwAAAAASUVORK5CYII=); +} + +#scroll-down { + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAADCAYAAACwAX77AAAAIklEQVQImWNgYGCIY2Bg+MfAwPAfCc9jgAJkSbggsiRcEACghQjtUFgYGwAAAABJRU5ErkJggg==); +} + +.scroll-button:hover { + background-color: rgb(220, 229, 250); +} + +.hidden { + display: none; +} diff --git a/chromium/chrome/browser/resources/chromeos/menu.html b/chromium/chrome/browser/resources/chromeos/menu.html new file mode 100644 index 00000000000..49a869e2fd8 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/menu.html @@ -0,0 +1,20 @@ +<!doctype html> +<html> + <head> + <meta charset="utf-8"> + <link rel="stylesheet" href="menu.css"> + <script src="chrome://resources/js/cr.js"></script> + <script src="chrome://resources/js/cr/ui.js"></script> + <script src="chrome://resources/js/local_strings.js"></script> + <script src="chrome://resources/js/util.js"></script> + <script src="menu.js"></script> + <style i18n-content="menu_css"></style> + <script i18n-content="menu_source"></script> + </head> + <body> + <div id="scroll-up" class="scroll-button"></div> + <div id="viewport"></div> + <div id="scroll-down" class="scroll-button"></div> + </body> + <script i18n-content="init_script"></script> +</html> diff --git a/chromium/chrome/browser/resources/chromeos/menu.js b/chromium/chrome/browser/resources/chromeos/menu.js new file mode 100644 index 00000000000..598e58bfdc3 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/menu.js @@ -0,0 +1,670 @@ +// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// How long to wait to open submenu when mouse hovers. +var SUBMENU_OPEN_DELAY_MS = 200; +// How long to wait to close submenu when mouse left. +var SUBMENU_CLOSE_DELAY_MS = 500; +// Scroll repeat interval. +var SCROLL_INTERVAL_MS = 20; +// Scrolling amount in pixel. +var SCROLL_TICK_PX = 4; +// Regular expression to match/find mnemonic key. +var MNEMONIC_REGEXP = /([^&]*)&(.)(.*)/; + +var localStrings = new LocalStrings(); + +/** + * Sends 'activate' WebUI message. + * @param {number} index The index of menu item to activate in menu model. + * @param {string} mode The activation mode, one of 'close_and_activate', or + * 'activate_no_close'. + * TODO(oshima): change these string to enum numbers once it becomes possible + * to pass number to C++. + */ +function sendActivate(index, mode) { + chrome.send('activate', [String(index), mode]); +} + +/** + * MenuItem class. + */ +var MenuItem = cr.ui.define('div'); + +MenuItem.prototype = { + __proto__: HTMLDivElement.prototype, + + /** + * Decorates the menu item element. + */ + decorate: function() { + this.className = 'menu-item'; + }, + + /** + * Initialize the MenuItem. + * @param {Menu} menu A {@code Menu} object to which this menu item + * will be added to. + * @param {Object} attrs JSON object that represents this menu items + * properties. This is created from menu model in C code. See + * chromeos/views/native_menu_webui.cc. + * @param {Object} model The model object. + */ + init: function(menu, attrs, model) { + // The left icon's width. 0 if no icon. + var leftIconWidth = model.maxIconWidth; + this.menu_ = menu; + this.attrs = attrs; + var attrs = this.attrs; + if (attrs.type == 'separator') { + this.className = 'separator'; + } else if (attrs.type == 'command' || + attrs.type == 'submenu' || + attrs.type == 'check' || + attrs.type == 'radio') { + this.initMenuItem_(); + this.initPadding_(leftIconWidth); + } else { + // This should not happend. + this.classList.add('disabled'); + this.textContent = 'unknown'; + } + + menu.appendChild(this); + if (!attrs.visible) { + this.classList.add('hidden'); + } + }, + + /** + * Changes the selection state of the menu item. + * @param {boolean} selected True to set the selection, or false + * otherwise. + */ + set selected(selected) { + if (selected) { + this.classList.add('selected'); + this.menu_.selectedItem = this; + } else { + this.classList.remove('selected'); + } + }, + + /** + * Activate the menu item. + */ + activate: function() { + if (this.attrs.type == 'submenu') { + this.menu_.openSubmenu(this); + } else if (this.attrs.type != 'separator' && + this.className.indexOf('selected') >= 0) { + sendActivate(this.menu_.getMenuItemIndexOf(this), + 'close_and_activate'); + } + }, + + /** + * Sends open_submenu WebUI message. + */ + sendOpenSubmenuCommand: function() { + chrome.send('open_submenu', + [String(this.menu_.getMenuItemIndexOf(this)), + String(this.getBoundingClientRect().top)]); + }, + + /** + * Internal method to initiailze the MenuItem. + * @private + */ + initMenuItem_: function() { + var attrs = this.attrs; + this.className = 'menu-item ' + attrs.type; + this.menu_.addHandlers(this, this); + var label = document.createElement('div'); + + label.className = 'menu-label'; + this.menu_.addLabelTo(this, attrs.label, label, + true /* enable mnemonic */); + + if (attrs.font) { + label.style.font = attrs.font; + } + this.appendChild(label); + + + if (attrs.accel) { + var accel = document.createElement('div'); + accel.className = 'accelerator'; + accel.textContent = attrs.accel; + accel.style.font = attrs.font; + this.appendChild(accel); + } + + if (attrs.type == 'submenu') { + // This overrides left-icon's position, but it's OK as submenu + // shoudln't have left-icon. + this.classList.add('right-icon'); + this.style.backgroundImage = 'url(' + this.menu_.config_.arrowUrl + ')'; + } + }, + + initPadding_: function(leftIconWidth) { + if (leftIconWidth <= 0) { + this.classList.add('no-icon'); + return; + } + this.classList.add('left-icon'); + + var url; + var attrs = this.attrs; + if (attrs.type == 'radio') { + url = attrs.checked ? + this.menu_.config_.radioOnUrl : + this.menu_.config_.radioOffUrl; + } else if (attrs.icon) { + url = attrs.icon; + } else if (attrs.type == 'check' && attrs.checked) { + url = this.menu_.config_.checkUrl; + } + if (url) { + this.style.backgroundImage = 'url(' + url + ')'; + } + // TODO(oshima): figure out how to update left padding in rule. + // 4 is the padding on left side of icon. + var padding = + 4 + leftIconWidth + this.menu_.config_.icon_to_label_padding; + this.style.WebkitPaddingStart = padding + 'px'; + }, +}; + +/** + * Menu class. + */ +var Menu = cr.ui.define('div'); + +Menu.prototype = { + __proto__: HTMLDivElement.prototype, + + /** + * Configuration object. + * @type {Object} + */ + config_: null, + + /** + * Currently selected menu item. + * @type {MenuItem} + */ + current_: null, + + /** + * Timers for opening/closing submenu. + * @type {number} + */ + openSubmenuTimer_: 0, + closeSubmenuTimer_: 0, + + /** + * Auto scroll timer. + * @type {number} + */ + scrollTimer_: 0, + + /** + * Pointer to a submenu currently shown, if any. + * @type {MenuItem} + */ + submenuShown_: null, + + /** + * True if this menu is root. + * @type {boolean} + */ + isRoot_: false, + + /** + * Total hight of scroll buttons. Used to adjust the height of + * viewport in order to show scroll bottons without scrollbar. + * @type {number} + */ + buttonHeight_: 0, + + /** + * True to enable scroll button. + * @type {boolean} + */ + scrollEnabled: false, + + /** + * Decorates the menu element. + */ + decorate: function() { + this.id = 'viewport'; + }, + + /** + * Initialize the menu. + * @param {Object} config Configuration parameters in JSON format. + * See chromeos/views/native_menu_webui.cc for details. + */ + init: function(config) { + // List of menu items + this.items_ = []; + // Map from mnemonic character to item to activate + this.mnemonics_ = {}; + + this.config_ = config; + this.addEventListener('mouseout', this.onMouseout_.bind(this)); + + document.addEventListener('keydown', this.onKeydown_.bind(this)); + document.addEventListener('keypress', this.onKeypress_.bind(this)); + document.addEventListener('mousewheel', this.onMouseWheel_.bind(this)); + window.addEventListener('resize', this.onResize_.bind(this)); + + // Setup scroll events. + var up = $('scroll-up'); + var down = $('scroll-down'); + up.addEventListener('mouseout', this.stopScroll_.bind(this)); + down.addEventListener('mouseout', this.stopScroll_.bind(this)); + var menu = this; + up.addEventListener('mouseover', + function() { + menu.autoScroll_(-SCROLL_TICK_PX); + }); + down.addEventListener('mouseover', + function() { + menu.autoScroll_(SCROLL_TICK_PX); + }); + + this.buttonHeight_ = + up.getBoundingClientRect().height + + down.getBoundingClientRect().height; + }, + + /** + * Adds a label to {@code targetDiv}. A label may contain + * mnemonic key, preceded by '&'. + * @param {MenuItem} item The menu item to be activated by mnemonic + * key. + * @param {string} label The label string to be added to + * {@code targetDiv}. + * @param {HTMLElement} div The div element the label is added to. + * @param {boolean} enableMnemonic True to enable mnemonic, or false + * to not to interprete mnemonic key. The function removes '&' + * from the label in both cases. + */ + addLabelTo: function(item, label, targetDiv, enableMnemonic) { + var mnemonic = MNEMONIC_REGEXP.exec(label); + if (mnemonic && enableMnemonic) { + var c = mnemonic[2].toLowerCase(); + this.mnemonics_[c] = item; + } + if (!mnemonic) { + targetDiv.textContent = label; + } else if (enableMnemonic) { + targetDiv.appendChild(document.createTextNode(mnemonic[1])); + targetDiv.appendChild(document.createElement('span')); + targetDiv.appendChild(document.createTextNode(mnemonic[3])); + targetDiv.childNodes[1].className = 'mnemonic'; + targetDiv.childNodes[1].textContent = mnemonic[2]; + } else { + targetDiv.textContent = mnemonic.splice(1, 3).join(''); + } + }, + + /** + * @return {number} The index of the {@code item}. + */ + getMenuItemIndexOf: function(item) { + return this.items_.indexOf(item); + }, + + /** + * A template method to create an item object. It can be a subclass + * of MenuItem, or any HTMLElement that implements {@code init}, + * {@code activate} methods as well as {@code selected} attribute. + * @param {Object} attrs The menu item's properties passed from C++. + * @return {MenuItem} The created menu item. + */ + createMenuItem: function(attrs) { + return new MenuItem(); + }, + + /** + * Update and display the new model. + */ + updateModel: function(model) { + this.isRoot = model.isRoot; + this.current_ = null; + this.items_ = []; + this.mnemonics_ = {}; + this.innerHTML = ''; // remove menu items + + for (var i = 0; i < model.items.length; i++) { + var attrs = model.items[i]; + var item = this.createMenuItem(attrs); + item.init(this, attrs, model); + this.items_.push(item); + } + this.onResize_(); + }, + + /** + * Highlights the currently selected item, or + * select the 1st selectable item if none is selected. + */ + showSelection: function() { + if (this.current_) { + this.current_.selected = true; + } else { + this.findNextEnabled_(1).selected = true; + } + }, + + /** + * Add event handlers for the item. + */ + addHandlers: function(item, target) { + var menu = this; + target.addEventListener('mouseover', function(event) { + menu.onMouseover_(event, item); + }); + if (item.attrs.enabled) { + target.addEventListener('mouseup', function(event) { + menu.onClick_(event, item); + }); + } else { + target.classList.add('disabled'); + } + }, + + /** + * Set the selected item. This controls timers to open/close submenus. + * 1) If the selected menu is submenu, and that submenu is not yet opeend, + * start timer to open. This will not cancel close timer, so + * if there is a submenu opened, it will be closed before new submenu is + * open. + * 2) If the selected menu is submenu, and that submenu is already opened, + * cancel both open/close timer. + * 3) If the selected menu is not submenu, cancel all timers and start + * timer to close submenu. + * This prevents from opening/closing menus while you're actively + * navigating menus. To open submenu, you need to wait a bit, or click + * submenu. + * + * @param {MenuItem} item The selected item. + */ + set selectedItem(item) { + if (this.current_ != item) { + if (this.current_ != null) + this.current_.selected = false; + this.current_ = item; + this.makeSelectedItemVisible_(); + } + + var menu = this; + if (item.attrs.type == 'submenu') { + if (this.submenuShown_ != item) { + this.openSubmenuTimer_ = + setTimeout( + function() { + menu.openSubmenu(item); + }, + SUBMENU_OPEN_DELAY_MS); + } else { + this.cancelSubmenuTimer_(); + } + } else if (this.submenuShown_) { + this.cancelSubmenuTimer_(); + this.closeSubmenuTimer_ = + setTimeout( + function() { + menu.closeSubmenu_(item); + }, + SUBMENU_CLOSE_DELAY_MS); + } + }, + + /** + * Open submenu {@code item}. It does nothing if the submenu is + * already opened. + * @param {MenuItem} item The submenu item to open. + */ + openSubmenu: function(item) { + this.cancelSubmenuTimer_(); + if (this.submenuShown_ != item) { + this.submenuShown_ = item; + item.sendOpenSubmenuCommand(); + } + }, + + /** + * Handle keyboard navigation and activation. + * @private + */ + onKeydown_: function(event) { + switch (event.keyIdentifier) { + case 'Left': + this.moveToParent_(); + break; + case 'Right': + this.moveToSubmenu_(); + break; + case 'Up': + this.classList.add('mnemonic-enabled'); + this.findNextEnabled_(-1).selected = true; + break; + case 'Down': + this.classList.add('mnemonic-enabled'); + this.findNextEnabled_(1).selected = true; + break; + case 'U+0009': // tab + break; + case 'U+001B': // escape + chrome.send('close_all'); + break; + case 'Enter': + case 'U+0020': // space + if (this.current_) { + this.current_.activate(); + } + break; + } + }, + + /** + * Handle mnemonic keys. + * @private + */ + onKeypress_: function(event) { + // Handles mnemonic. + var c = String.fromCharCode(event.keyCode); + var item = this.mnemonics_[c.toLowerCase()]; + if (item) { + item.selected = true; + item.activate(); + } + }, + + // Mouse Event handlers + onClick_: function(event, item) { + item.activate(); + }, + + onMouseover_: function(event, item) { + this.cancelSubmenuTimer_(); + // Ignore false mouseover event at (0,0) which is + // emitted when opening submenu. + if (item.attrs.enabled && event.clientX != 0 && event.clientY != 0) { + item.selected = true; + } + }, + + onMouseout_: function(event) { + if (this.current_) { + this.current_.selected = false; + } + }, + + onResize_: function() { + var up = $('scroll-up'); + var down = $('scroll-down'); + // this needs to be < 2 as empty page has height of 1. + if (window.innerHeight < 2) { + // menu window is not visible yet. just hide buttons. + up.classList.add('hidden'); + down.classList.add('hidden'); + return; + } + // Do not use screen width to determin if we need scroll buttons + // as the max renderer hight can be shorter than actual screen size. + // TODO(oshima): Fix this when we implement transparent renderer. + if (this.scrollHeight > window.innerHeight && this.scrollEnabled) { + this.style.height = (window.innerHeight - this.buttonHeight_) + 'px'; + up.classList.remove('hidden'); + down.classList.remove('hidden'); + } else { + this.style.height = ''; + up.classList.add('hidden'); + down.classList.add('hidden'); + } + }, + + onMouseWheel_: function(event) { + var delta = event.wheelDelta / 5; + this.scrollTop -= delta; + }, + + /** + * Closes the submenu. + * a submenu. + * @private + */ + closeSubmenu_: function(item) { + this.submenuShown_ = null; + this.cancelSubmenuTimer_(); + chrome.send('close_submenu'); + }, + + /** + * Move the selection to parent menu if the current menu is + * a submenu. + * @private + */ + moveToParent_: function() { + if (!this.isRoot) { + if (this.current_) { + this.current_.selected = false; + } + chrome.send('move_to_parent'); + } + }, + + /** + * Move the selection to submenu if the currently selected + * menu is a submenu. + * @private + */ + moveToSubmenu_: function() { + var current = this.current_; + if (current && current.attrs.type == 'submenu') { + this.openSubmenu(current); + chrome.send('move_to_submenu'); + } + }, + + /** + * Finds the next selectable item. If nothing is selected, the first + * selectable item will be chosen. Returns null if nothing is selectable. + * @param {number} incr Specifies the direction to search, 1 to + * downwards and -1 for upwards. + * @private + * @return {MenuItem} The next selectable item. + */ + findNextEnabled_: function(incr) { + var len = this.items_.length; + var index; + if (this.current_) { + index = this.getMenuItemIndexOf(this.current_); + } else { + index = incr > 0 ? -1 : len; + } + for (var i = 0; i < len; i++) { + index = (index + incr + len) % len; + var item = this.items_[index]; + if (item.attrs.enabled && item.attrs.type != 'separator' && + !item.classList.contains('hidden')) + return item; + } + return null; + }, + + /** + * Cancels timers to open/close submenus. + * @private + */ + cancelSubmenuTimer_: function() { + clearTimeout(this.openSubmenuTimer_); + this.openSubmenuTimer_ = 0; + clearTimeout(this.closeSubmenuTimer_); + this.closeSubmenuTimer_ = 0; + }, + + /** + * Starts auto scroll. + * @param {number} tick The number of pixels to scroll. + * @private + */ + autoScroll_: function(tick) { + var previous = this.scrollTop; + this.scrollTop += tick; + var menu = this; + this.scrollTimer_ = setTimeout( + function() { + menu.autoScroll_(tick); + }, + SCROLL_INTERVAL_MS); + }, + + /** + * Stops auto scroll. + * @private + */ + stopScroll_: function() { + clearTimeout(this.scrollTimer_); + this.scrollTimer_ = 0; + }, + + /** + * Scrolls the viewport to make the selected item visible. + * @private + */ + makeSelectedItemVisible_: function() { + this.current_.scrollIntoViewIfNeeded(false); + }, +}; + +/** + * functions to be called from C++. + * @param {Object} config The viewport configuration. + */ +function init(config) { + $('viewport').init(config); +} + +function selectItem() { + $('viewport').showSelection(); +} + +function updateModel(model) { + $('viewport').updateModel(model); +} + +function modelUpdated() { + chrome.send('model_updated'); +} + +function enableScroll(enabled) { + $('viewport').scrollEnabled = enabled; +} diff --git a/chromium/chrome/browser/resources/chromeos/merge_session_load.html b/chromium/chrome/browser/resources/chromeos/merge_session_load.html new file mode 100644 index 00000000000..8880b129163 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/merge_session_load.html @@ -0,0 +1,61 @@ +<!DOCTYPE html> +<html i18n-values="dir:textdirection"> +<head> +<title i18n-content="title"> +</title> +<style> +html { + height: 100%; +} +body { + -webkit-user-select: none; + background: white; + color: #000; + display: -webkit-box; + font-family: arial, sans-serif; + height: 100%; + margin: 0; + padding: 0; + visibility: hidden; + width: 100%; +} + +.header { + font-family: Sans-serif; + padding: 3px; + width: 80%; +} +</style> +<script src="../../../../ui/webui/resources/js/local_strings.js"></script> + +<script> +var localStrings = new LocalStrings(); + +function sendCommand(cmd) { + window.domAutomationController.setAutomationId(1); + window.domAutomationController.send(cmd); +} + +// Show the interstitial page. +function showPage() { + document.body.style.visibility = 'visible'; +} + +// Show the interstitial page. +function forceLoad() { + sendCommand('proceed'); +} + +document.addEventListener('DOMContentLoaded', function() { + var showDelayTime = localStrings.getString('show_delay_time'); + var totalWaitTime = localStrings.getString('total_wait_time'); + window.setTimeout(showPage, showDelayTime); + window.setTimeout(forceLoad, totalWaitTime); +}); +</script> + +<body oncontextmenu="return false;"> + <div class="header" i18n-content="heading"> + </div> +</body> +</html> diff --git a/chromium/chrome/browser/resources/chromeos/mobile_app/manifest.json b/chromium/chrome/browser/resources/chromeos/mobile_app/manifest.json new file mode 100644 index 00000000000..22caa8afb40 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/mobile_app/manifest.json @@ -0,0 +1,9 @@ +{ + "key": "MIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQDITTAJ8zmgRjcmCRIAUbzlrSSzoWPBRY/kaBP3mxZ8nlCMljhQLDDKClnyGK6+krYq8/LayF4r0PR7g0Q27lwvw+asg1BFN+AL+suJqe4jJzxBK3GaMBRsBCCcwpAQw4F82zI9Hk0e6EqfrDq4ePNgv+PsI2MDbOuk3b1vS5oBjQIBIw==", + "name": "Mobile Activation", + "version": "1.0", + "description": "Chrome OS Mobile Activation Resources", + "default_locale": "en", + "incognito": "split", + "permissions": [] +} diff --git a/chromium/chrome/browser/resources/chromeos/mobile_dialogs.css b/chromium/chrome/browser/resources/chromeos/mobile_dialogs.css new file mode 100644 index 00000000000..9c96e68feff --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/mobile_dialogs.css @@ -0,0 +1,71 @@ +/* Copyright (c) 2012 The Chromium Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +body { + cursor: default; + font-size: 13px; +} + +.container { + -webkit-box-align: center; + -webkit-box-pack: center; + bottom: 0; + display: -webkit-box; + left: 0; + position: fixed; + right: 0; + top: 0; +} + +.dialog { + background: white; + min-height: 225px; + min-width: 350px; + padding: 0; + position: relative; +} + +.dialog h1 { + background: -webkit-linear-gradient(white, #F8F8F8); + border-bottom: 1px solid rgba(188, 193, 208, .5); + color: rgb(83, 99, 125); + font-size: 105%; + font-weight: bold; + margin: 0; + padding: 10px 15px 8px 15px; + text-shadow: white 0 1px 2px; + width: 320px; +} + +.content-area { + padding: 10px 15px 5px 15px; + width: 320px; +} + +.action-area { + -webkit-box-align: center; + -webkit-box-orient: horizontal; + -webkit-box-pack: end; + display: -webkit-box; + padding: 12px; +} + +html[dir='rtl'] .action-area { + left: 0; +} + +.action-area-right { + display: -webkit-box; +} + +.button-strip { + -webkit-box-orient: horizontal; + display: -webkit-box; +} + +.button-strip > button { + -webkit-margin-start: 10px; + display: block; +} diff --git a/chromium/chrome/browser/resources/chromeos/mobile_setup.css b/chromium/chrome/browser/resources/chromeos/mobile_setup.css new file mode 100644 index 00000000000..8c840090b8a --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/mobile_setup.css @@ -0,0 +1,130 @@ +/* Copyright 2013 The Chromium Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +html, +body { + -webkit-user-select: none; + height: 100%; + margin: 0; + overflow: hidden; + padding: 0; + width: 100%; +} + +iframe { + overflow-x: scroll; + overflow-y: scroll; +} + +.dialog-body { + border: 1px #aaa solid; + height: 100%; + margin-top: 0; + overflow: hidden; + width: 100%; +} + +.overlay { + bottom: 0; + left: 0; + padding: 100px; + position: absolute; + right: 0; + top: 0; + z-index: 10; +} + +.opaque-overlay { + background: white; +} + +.translucent-black-overlay { + background: rgba(0, 0, 0, 0.1); +} + +.overlay > div { + -webkit-box-shadow: 1px 1px 12px rgba(0, 0, 0, 0.15); + background: white; + border: 1px solid #bdbdbd; + border-radius: 5px; + padding: 15px; +} + +.startup { + left: 50%; + margin-left: -266px; + margin-top: -250px; + position: absolute; + top: 50%; + width: 500px; +} + +.logo { + background: + url('chrome-extension://iadeocfgjdjdmpenejdbfeaocpbikmab/carrier_logo.png') + no-repeat; + background-position: 85% 50%; + height: 58px; + margin-bottom: 20px; + margin-top: 20px; +} + +.splitter { + border-bottom: 1px solid #EEE; + height: 1px; + margin-top: 10px; +} + +.hidden { + display: none; +} + +.header-cell { + -webkit-padding-start: 10px; +} + +.canvas-cell { + line-height: 0; + vertical-align: middle; +} + +#paymentForm, +#portalFrame { + height: 100%; + width: 100%; +} + +#carrierPage { + height: 380px; + overflow: hidden; + padding-top: 10px; + width: 500px; +} + +#banner { + -webkit-box-shadow: 1px 1px 6px rgba(0, 0, 0, 0.2); + -webkit-padding-end: 5px; + -webkit-padding-start: 70px; + background-color: rgb(252, 246, 224); + border: 1px solid #ccc; + display: -webkit-box; + margin-left: -22px; + padding-bottom: 5px; + padding-top: 5px; + width: 467px; +} + +#statusHeader { + font-size: 16px; + font-weight: bold; +} + +#auxHeader { + font-size: 16px; +} + +#finalMessage { + padding-bottom: 50px; +} diff --git a/chromium/chrome/browser/resources/chromeos/mobile_setup.html b/chromium/chrome/browser/resources/chromeos/mobile_setup.html new file mode 100644 index 00000000000..8aaa8623a54 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/mobile_setup.html @@ -0,0 +1,48 @@ +<!DOCTYPE HTML> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> +<title i18n-content="title"></title> +<link rel="stylesheet" href="chrome://resources/css/dialogs.css"></link> +<link rel="stylesheet" href="mobile_setup.css"></link> +<script src="chrome://resources/js/cr.js"></script> +<script src="chrome://resources/js/local_strings.js"></script> +<script src="chrome://resources/js/util.js"></script> +<script src="chrome://resources/js/cr/ui/dialogs.js"></script> +<script src="mobile_setup.js"></script> +</head> +<body i18n-values=".style.fontFamily:fontfamily;.style.fontSize:fontsize"> + <div id="mainDiv" class="dialog-body"> + <iframe class="hidden" id="paymentForm" frameborder="0"></iframe> + <div id="systemStatus" class="overlay opaque-overlay hidden"> + <div class="startup"> + <div id="banner"> + <table border="0"> + <tbody><tr> + <td class="canvas-cell"><canvas id="canvas" width="56" + height="56"></canvas></td> + <td class="header-cell"> + <div id="statusHeader"></div> + <div id="auxHeader"></div> + </td> + </tr> + </tbody></table> + </div> + <iframe id="carrierPage" frameborder="0"></iframe> + </div> + </div> + <div id="finalStatus" class="overlay translucent-black-overlay hidden"> + <div class="startup"> + <div class="header"><h3 id="finalHeader"></h3></div> + <div id="finalMessage"></div> + <div class="splitter"></div> + <div class="logo"></div> + <div class="button-strip"> + <button id="closeButton" + i18n-content="close_button" class="hidden"></button> + </div> + </div> + </div> + </div> +</body> +</html> diff --git a/chromium/chrome/browser/resources/chromeos/mobile_setup.js b/chromium/chrome/browser/resources/chromeos/mobile_setup.js new file mode 100644 index 00000000000..afd59fa93ab --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/mobile_setup.js @@ -0,0 +1,369 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + + +cr.define('mobile', function() { + + function MobileSetup() { + } + + cr.addSingletonGetter(MobileSetup); + + MobileSetup.PLAN_ACTIVATION_UNKNOWN = -2; + MobileSetup.PLAN_ACTIVATION_PAGE_LOADING = -1; + MobileSetup.PLAN_ACTIVATION_START = 0; + MobileSetup.PLAN_ACTIVATION_TRYING_OTASP = 1; + MobileSetup.PLAN_ACTIVATION_INITIATING_ACTIVATION = 3; + MobileSetup.PLAN_ACTIVATION_RECONNECTING = 4; + MobileSetup.PLAN_ACTIVATION_WAITING_FOR_CONNECTION = 5; + MobileSetup.PLAN_ACTIVATION_PAYMENT_PORTAL_LOADING = 6; + MobileSetup.PLAN_ACTIVATION_SHOWING_PAYMENT = 7; + MobileSetup.PLAN_ACTIVATION_RECONNECTING_PAYMENT = 8; + MobileSetup.PLAN_ACTIVATION_DELAY_OTASP = 9; + MobileSetup.PLAN_ACTIVATION_START_OTASP = 10; + MobileSetup.PLAN_ACTIVATION_OTASP = 11; + MobileSetup.PLAN_ACTIVATION_DONE = 12; + MobileSetup.PLAN_ACTIVATION_ERROR = 0xFF; + + MobileSetup.EXTENSION_PAGE_URL = + 'chrome-extension://iadeocfgjdjdmpenejdbfeaocpbikmab'; + MobileSetup.ACTIVATION_PAGE_URL = MobileSetup.EXTENSION_PAGE_URL + + '/activation.html'; + MobileSetup.PORTAL_OFFLINE_PAGE_URL = MobileSetup.EXTENSION_PAGE_URL + + '/portal_offline.html'; + MobileSetup.REDIRECT_POST_PAGE_URL = MobileSetup.EXTENSION_PAGE_URL + + '/redirect.html'; + + MobileSetup.localStrings_ = new LocalStrings(); + + MobileSetup.prototype = { + // Mobile device information. + deviceInfo_: null, + frameName_: '', + initialized_: false, + fakedTransaction_: false, + paymentShown_: false, + frameLoadError_: 0, + frameLoadIgnored_: true, + carrierPageUrl_: null, + spinnerInt_: -1, + // UI states. + state_: MobileSetup.PLAN_ACTIVATION_UNKNOWN, + STATE_UNKNOWN_: 'unknown', + STATE_CONNECTING_: 'connecting', + STATE_ERROR_: 'error', + STATE_PAYMENT_: 'payment', + STATE_ACTIVATING_: 'activating', + STATE_CONNECTED_: 'connected', + + initialize: function(frame_name, carrierPage) { + if (this.initialized_) { + console.log('calling initialize() again?'); + return; + } + this.initialized_ = true; + self = this; + this.frameName_ = frame_name; + + cr.ui.dialogs.BaseDialog.OK_LABEL = + MobileSetup.localStrings_.getString('ok_button'); + cr.ui.dialogs.BaseDialog.CANCEL_LABEL = + MobileSetup.localStrings_.getString('cancel_button'); + this.confirm_ = new cr.ui.dialogs.ConfirmDialog(document.body); + + window.addEventListener('message', function(e) { + self.onMessageReceived_(e); + }); + + $('closeButton').addEventListener('click', function(e) { + $('finalStatus').classList.add('hidden'); + }); + + // Kick off activation process. + chrome.send('startActivation'); + }, + + startSpinner_: function() { + this.stopSpinner_(); + this.spinnerInt_ = setInterval(mobile.MobileSetup.drawProgress, 100); + }, + + stopSpinner_: function() { + if (this.spinnerInt_ != -1) { + clearInterval(this.spinnerInt_); + this.spinnerInt_ = -1; + } + }, + + onFrameLoaded_: function(success) { + chrome.send('paymentPortalLoad', [success ? 'ok' : 'failed']); + }, + + loadPaymentFrame_: function(deviceInfo) { + if (deviceInfo) { + this.frameLoadError_ = 0; + this.deviceInfo_ = deviceInfo; + if (deviceInfo.post_data && deviceInfo.post_data.length) { + this.frameLoadIgnored_ = true; + $(this.frameName_).contentWindow.location.href = + MobileSetup.REDIRECT_POST_PAGE_URL + + '?post_data=' + escape(deviceInfo.post_data) + + '&formUrl=' + escape(deviceInfo.payment_url); + } else { + this.frameLoadIgnored_ = false; + $(this.frameName_).contentWindow.location.href = + deviceInfo.payment_url; + } + } + }, + + onMessageReceived_: function(e) { + if (e.origin != + this.deviceInfo_.payment_url.substring(0, e.origin.length) && + e.origin != MobileSetup.EXTENSION_PAGE_URL) + return; + + if (e.data.type == 'requestDeviceInfoMsg') { + this.sendDeviceInfo_(); + } else if (e.data.type == 'framePostReady') { + this.frameLoadIgnored_ = false; + this.sendPostFrame_(e.origin); + } else if (e.data.type == 'reportTransactionStatusMsg') { + console.log('calling setTransactionStatus from onMessageReceived_'); + chrome.send('setTransactionStatus', [e.data.status]); + } + }, + + changeState_: function(deviceInfo) { + var newState = deviceInfo.state; + if (this.state_ == newState) + return; + + // The mobile setup is already in its final state. + if (this.state_ == MobileSetup.PLAN_ACTIVATION_DONE || + this.state_ == MobileSetup.PLAN_ACTIVATION_ERROR) { + return; + } + + // Map handler state to UX. + switch (newState) { + case MobileSetup.PLAN_ACTIVATION_PAGE_LOADING: + case MobileSetup.PLAN_ACTIVATION_START: + case MobileSetup.PLAN_ACTIVATION_DELAY_OTASP: + case MobileSetup.PLAN_ACTIVATION_START_OTASP: + case MobileSetup.PLAN_ACTIVATION_RECONNECTING: + case MobileSetup.PLAN_ACTIVATION_RECONNECTING_PAYMENT: + // Activation page should not be shown for devices that are activated + // over non cellular network. + if (deviceInfo.activate_over_non_cellular_network) + break; + + $('statusHeader').textContent = + MobileSetup.localStrings_.getString('connecting_header'); + $('auxHeader').textContent = + MobileSetup.localStrings_.getString('please_wait'); + $('paymentForm').classList.add('hidden'); + $('finalStatus').classList.add('hidden'); + this.setCarrierPage_(MobileSetup.ACTIVATION_PAGE_URL); + $('systemStatus').classList.remove('hidden'); + $('canvas').classList.remove('hidden'); + this.startSpinner_(); + break; + case MobileSetup.PLAN_ACTIVATION_TRYING_OTASP: + case MobileSetup.PLAN_ACTIVATION_INITIATING_ACTIVATION: + case MobileSetup.PLAN_ACTIVATION_OTASP: + // Activation page should not be shown for devices that are activated + // over non cellular network. + if (deviceInfo.activate_over_non_cellular_network) + break; + + $('statusHeader').textContent = + MobileSetup.localStrings_.getString('activating_header'); + $('auxHeader').textContent = + MobileSetup.localStrings_.getString('please_wait'); + $('paymentForm').classList.add('hidden'); + $('finalStatus').classList.add('hidden'); + this.setCarrierPage_(MobileSetup.ACTIVATION_PAGE_URL); + $('systemStatus').classList.remove('hidden'); + $('canvas').classList.remove('hidden'); + this.startSpinner_(); + break; + case MobileSetup.PLAN_ACTIVATION_PAYMENT_PORTAL_LOADING: + // Activation page should not be shown for devices that are activated + // over non cellular network. + if (!deviceInfo.activate_over_non_cellular_network) { + $('statusHeader').textContent = + MobileSetup.localStrings_.getString('connecting_header'); + $('auxHeader').textContent = ''; + $('paymentForm').classList.add('hidden'); + $('finalStatus').classList.add('hidden'); + this.setCarrierPage_(MobileSetup.ACTIVATION_PAGE_URL); + $('systemStatus').classList.remove('hidden'); + $('canvas').classList.remove('hidden'); + } + this.loadPaymentFrame_(deviceInfo); + break; + case MobileSetup.PLAN_ACTIVATION_WAITING_FOR_CONNECTION: + $('statusHeader').textContent = + MobileSetup.localStrings_.getString('portal_unreachable_header'); + $('auxHeader').textContent = ''; + $('auxHeader').classList.add('hidden'); + $('paymentForm').classList.add('hidden'); + $('finalStatus').classList.add('hidden'); + $('systemStatus').classList.remove('hidden'); + this.setCarrierPage_(MobileSetup.PORTAL_OFFLINE_PAGE_URL); + $('canvas').classList.remove('hidden'); + this.startSpinner_(); + break; + case MobileSetup.PLAN_ACTIVATION_SHOWING_PAYMENT: + $('statusHeader').textContent = ''; + $('auxHeader').textContent = ''; + $('finalStatus').classList.add('hidden'); + $('systemStatus').classList.add('hidden'); + $('paymentForm').classList.remove('hidden'); + $('canvas').classList.add('hidden'); + this.stopSpinner_(); + this.paymentShown_ = true; + break; + case MobileSetup.PLAN_ACTIVATION_DONE: + $('statusHeader').textContent = ''; + $('auxHeader').textContent = ''; + $('finalHeader').textContent = + MobileSetup.localStrings_.getString('completed_header'); + $('finalMessage').textContent = + MobileSetup.localStrings_.getString('completed_text'); + $('systemStatus').classList.add('hidden'); + $('closeButton').classList.remove('hidden'); + $('finalStatus').classList.remove('hidden'); + $('canvas').classList.add('hidden'); + $('closeButton').classList.toggle('hidden', !this.paymentShown_); + $('paymentForm').classList.toggle('hidden', !this.paymentShown_); + this.stopSpinner_(); + break; + case MobileSetup.PLAN_ACTIVATION_ERROR: + $('statusHeader').textContent = ''; + $('auxHeader').textContent = ''; + $('finalHeader').textContent = + MobileSetup.localStrings_.getString('error_header'); + $('finalMessage').textContent = deviceInfo.error; + $('systemStatus').classList.add('hidden'); + $('canvas').classList.add('hidden'); + $('closeButton').classList.toggle('hidden', !this.paymentShown_); + $('paymentForm').classList.toggle('hidden', !this.paymentShown_); + $('finalStatus').classList.remove('hidden'); + this.stopSpinner_(); + break; + } + this.state_ = newState; + }, + + setCarrierPage_: function(url) { + if (this.carrierPageUrl_ == url) + return; + this.carrierPageUrl_ = url; + $('carrierPage').contentWindow.location.href = url; + }, + + updateDeviceStatus_: function(deviceInfo) { + this.changeState_(deviceInfo); + }, + + portalFrameLoadError_: function(errorCode) { + if (this.frameLoadIgnored_) + return; + console.log('Portal frame load error detected: ', errorCode); + this.frameLoadError_ = errorCode; + }, + + portalFrameLoadCompleted_: function() { + if (this.frameLoadIgnored_) + return; + console.log('Portal frame load completed!'); + this.onFrameLoaded_(this.frameLoadError_ == 0); + }, + + sendPostFrame_: function(frameUrl) { + var msg = { type: 'postFrame' }; + $(this.frameName_).contentWindow.postMessage(msg, frameUrl); + }, + + sendDeviceInfo_: function() { + var msg = { + type: 'deviceInfoMsg', + domain: document.location, + payload: { + 'carrier': this.deviceInfo_.carrier, + 'MEID': this.deviceInfo_.MEID, + 'IMEI': this.deviceInfo_.IMEI, + 'MDN': this.deviceInfo_.MDN + } + }; + $(this.frameName_).contentWindow.postMessage(msg, + this.deviceInfo_.payment_url); + } + + }; + + MobileSetup.drawProgress = function() { + var ctx = canvas.getContext('2d'); + ctx.clearRect(0, 0, canvas.width, canvas.height); + + var segmentCount = Math.min(12, canvas.width / 1.6); // Number of segments + var rotation = 0.75; // Counterclockwise rotation + + // Rotate canvas over time + ctx.translate(canvas.width / 2, canvas.height / 2); + ctx.rotate(Math.PI * 2 / (segmentCount + rotation)); + ctx.translate(-canvas.width / 2, -canvas.height / 2); + + var gap = canvas.width / 24; // Gap between segments + var oRadius = canvas.width / 2; // Outer radius + var iRadius = oRadius * 0.618; // Inner radius + var oCircumference = Math.PI * 2 * oRadius; // Outer circumference + var iCircumference = Math.PI * 2 * iRadius; // Inner circumference + var oGap = gap / oCircumference; // Gap size as fraction of outer ring + var iGap = gap / iCircumference; // Gap size as fraction of inner ring + var oArc = Math.PI * 2 * (1 / segmentCount - oGap); // Angle of outer arcs + var iArc = Math.PI * 2 * (1 / segmentCount - iGap); // Angle of inner arcs + + for (i = 0; i < segmentCount; i++) { // Draw each segment + var opacity = Math.pow(1.0 - i / segmentCount, 3.0); + opacity = (0.15 + opacity * 0.8); // Vary from 0.15 to 0.95 + var angle = - Math.PI * 2 * i / segmentCount; + + ctx.beginPath(); + ctx.arc(canvas.width / 2, canvas.height / 2, oRadius, + angle - oArc / 2, angle + oArc / 2, false); + ctx.arc(canvas.width / 2, canvas.height / 2, iRadius, + angle + iArc / 2, angle - iArc / 2, true); + ctx.closePath(); + ctx.fillStyle = 'rgba(240, 30, 29, ' + opacity + ')'; + ctx.fill(); + } + }; + + MobileSetup.deviceStateChanged = function(deviceInfo) { + MobileSetup.getInstance().updateDeviceStatus_(deviceInfo); + }; + + MobileSetup.portalFrameLoadError = function(errorCode) { + MobileSetup.getInstance().portalFrameLoadError_(errorCode); + }; + + MobileSetup.portalFrameLoadCompleted = function() { + MobileSetup.getInstance().portalFrameLoadCompleted_(); + }; + + MobileSetup.loadPage = function() { + mobile.MobileSetup.getInstance().initialize('paymentForm', + mobile.MobileSetup.ACTIVATION_PAGE_URL); + }; + + // Export + return { + MobileSetup: MobileSetup + }; +}); + +document.addEventListener('DOMContentLoaded', mobile.MobileSetup.loadPage); diff --git a/chromium/chrome/browser/resources/chromeos/mobile_setup_portal.html b/chromium/chrome/browser/resources/chromeos/mobile_setup_portal.html new file mode 100644 index 00000000000..b0f4d92a208 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/mobile_setup_portal.html @@ -0,0 +1,36 @@ +<!DOCTYPE HTML> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> +<title i18n-content="title"></title> +<link rel="stylesheet" href="mobile_setup.css"></link> +<script src="chrome://resources/js/cr.js"></script> +<script src="chrome://resources/js/local_strings.js"></script> +<script src="chrome://resources/js/util.js"></script> +<script src="mobile_setup_portal.js"></script> +</head> +<body i18n-values=".style.fontFamily:fontfamily;.style.fontSize:fontsize"> + <div id="mainDiv" class="dialog-body"> + <iframe id="portalFrame" frameborder="0" hidden></iframe> + <div id="systemStatus" class="overlay opaque-overlay" hidden> + <div class="startup"> + <div id="banner"> + <table border="0"> + <tbody> + <tr> + <td class="canvas-cell"> + <canvas id="canvas" width="56" height="56"></canvas></td> + <td class="header-cell"> + <div id="statusHeader"></div> + <div id="auxHeader"></div> + </td> + </tr> + </tbody> + </table> + </div> + <iframe id="carrierPage" frameborder="0"></iframe> + </div> + </div> + </div> +</body> +</html> diff --git a/chromium/chrome/browser/resources/chromeos/mobile_setup_portal.js b/chromium/chrome/browser/resources/chromeos/mobile_setup_portal.js new file mode 100644 index 00000000000..854b507e7c9 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/mobile_setup_portal.js @@ -0,0 +1,221 @@ +// Copyright 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +cr.define('mobile', function() { + + // TODO(tbarzic): Share code with mobile_setup.js. + var EXTENSION_BASE_URL = + 'chrome-extension://iadeocfgjdjdmpenejdbfeaocpbikmab/'; + var REDIRECT_POST_PAGE_URL = EXTENSION_BASE_URL + 'redirect.html?autoPost=1'; + var PORTAL_OFFLINE_PAGE_URL = EXTENSION_BASE_URL + 'portal_offline.html'; + var INVALID_DEVICE_INFO_PAGE_URL = + EXTENSION_BASE_URL + 'invalid_device_info.html'; + + var NetworkState = { + UNKNOWN: 0, + PORTAL_REACHABLE: 1, + PORTAL_UNREACHABLE: 2 + }; + + var CarrierPageType = { + NOT_SET: 0, + PORTAL_OFFLINE: 1, + INVALID_DEVICE_INFO: 2 + }; + + var localStrings = new LocalStrings(); + + function PortalImpl() { + // Mobile device information. + this.deviceInfo_ = null; + this.spinnerInt_ = -1; + this.networkState_ = NetworkState.UNKNOWN; + this.portalFrameSet_ = false; + this.carrierPageType_ = CarrierPageType.NOT_SET; + } + + cr.addSingletonGetter(PortalImpl); + + PortalImpl.prototype = { + initialize: function() { + // Get network device info for which portal should be opened. + // For LTE networks, this will also start observing network connection + // state and raise |updatePortalReachability| messages when the portal + // reachability changes. + chrome.send('getDeviceInfo'); + }, + + updateDeviceInfo: function(deviceInfo) { + this.deviceInfo_ = deviceInfo; + this.updateState_(); + }, + + updateNetworkState: function(networkState) { + if (this.networkState_ == networkState) + return; + this.networkState_ = networkState; + + // If the device info is not yet set, the state will be updated on the + // device info update. + if (this.deviceInfo_) + this.updateState_(); + }, + + updateState_: function() { + if (!this.deviceInfo_ || this.networkState_ == NetworkState.UNKNOWN) + return; + + if (!this.isDeviceInfoValid_()) { + // If the device info is not valid, hide portalFrame and show system + // status displaying 'invalid device info' page. + this.setCarrierPage_(CarrierPageType.INVALID_DEVICE_INFO); + $('portalFrame').hidden = true; + $('systemStatus').hidden = false; + } else if (this.networkState_ != NetworkState.PORTAL_REACHABLE) { + // If the portal is not reachable, hide portalFrame and show system + // status displaying 'offline portal' page. + this.setCarrierPage_(CarrierPageType.PORTAL_OFFLINE); + $('portalFrame').hidden = true; + $('systemStatus').hidden = false; + } else { + // If the portal is reachable and device info is valid, set and show + // portalFrame; and hide system status displaying 'offline portal' page. + this.setPortalFrameIfNeeded_(this.deviceInfo_); + $('portalFrame').hidden = false; + $('systemStatus').hidden = true; + this.stopSpinner_(); + } + }, + + setCarrierPage_: function(type) { + // The page is already set, nothing to do. + if (type == this.carrierPageType_) + return; + + switch (type) { + case CarrierPageType.PORTAL_OFFLINE: + $('carrierPage').contentWindow.location.href = + PORTAL_OFFLINE_PAGE_URL; + $('statusHeader').textContent = + localStrings.getString('portal_unreachable_header'); + this.startSpinner_(); + break; + case CarrierPageType.INVALID_DEVICE_INFO: + $('carrierPage').contentWindow.location.href = + INVALID_DEVICE_INFO_PAGE_URL; + $('statusHeader').textContent = + localStrings.getString('invalid_device_info_header'); + this.stopSpinner_(); + break; + case CarrierPageType.NOT_SET: + $('carrierPage').contentWindow.location.href = 'about:blank'; + $('statusHeader').textContent = ''; + this.stopSpinner_(); + break; + default: + break; + } + + this.carrierPageType_ = type; + }, + + setPortalFrameIfNeeded_: function(deviceInfo) { + // The portal should be set only once. + if (this.portalFrameSet_) + return; + + var postData = ''; + if (deviceInfo.post_data && deviceInfo.post_data.length) + postData = '&post_data=' + encodeURIComponent(deviceInfo.post_data); + + $('portalFrame').contentWindow.location.href = REDIRECT_POST_PAGE_URL + + postData + '&formUrl=' + encodeURIComponent(deviceInfo.payment_url); + + this.portalFrameSet_ = true; + }, + + isDeviceInfoValid_: function() { + // Device info is valid if it has mdn which doesn't contain only '0's. + return this.deviceInfo_ && this.deviceInfo_.MDN && + this.deviceInfo_.MDN.match('[^0]'); + }, + + startSpinner_: function() { + this.stopSpinner_(); + this.spinnerInt_ = setInterval(this.drawProgress_.bind(this), 100); + }, + + stopSpinner_: function() { + if (this.spinnerInt_ != -1) { + clearInterval(this.spinnerInt_); + this.spinnerInt_ = -1; + } + // Clear the spinner canvas. + var ctx = canvas.getContext('2d'); + ctx.clearRect(0, 0, canvas.width, canvas.height); + }, + + drawProgress_: function() { + var ctx = canvas.getContext('2d'); + ctx.clearRect(0, 0, canvas.width, canvas.height); + + var segmentCount = Math.min(12, canvas.width / 1.6); // Number of segments + var rotation = 0.75; // Counterclockwise rotation + + // Rotate canvas over time + ctx.translate(canvas.width / 2, canvas.height / 2); + ctx.rotate(Math.PI * 2 / (segmentCount + rotation)); + ctx.translate(-canvas.width / 2, -canvas.height / 2); + + var gap = canvas.width / 24; // Gap between segments + var oRadius = canvas.width / 2; // Outer radius + var iRadius = oRadius * 0.618; // Inner radius + var oCircumference = Math.PI * 2 * oRadius; // Outer circumference + var iCircumference = Math.PI * 2 * iRadius; // Inner circumference + var oGap = gap / oCircumference; // Gap size as fraction of outer ring + var iGap = gap / iCircumference; // Gap size as fraction of inner ring + var oArc = Math.PI * 2 * (1 / segmentCount - oGap); // Angle of outer arcs + var iArc = Math.PI * 2 * (1 / segmentCount - iGap); // Angle of inner arcs + + for (i = 0; i < segmentCount; i++) { // Draw each segment + var opacity = Math.pow(1.0 - i / segmentCount, 3.0); + opacity = (0.15 + opacity * 0.8); // Vary from 0.15 to 0.95 + var angle = - Math.PI * 2 * i / segmentCount; + + ctx.beginPath(); + ctx.arc(canvas.width / 2, canvas.height / 2, oRadius, + angle - oArc / 2, angle + oArc / 2, false); + ctx.arc(canvas.width / 2, canvas.height / 2, iRadius, + angle + iArc / 2, angle - iArc / 2, true); + ctx.closePath(); + ctx.fillStyle = 'rgba(240, 30, 29, ' + opacity + ')'; + ctx.fill(); + } + } + }; + + function MobileSetupPortal() {} + + MobileSetupPortal.loadPage = function() { + PortalImpl.getInstance().initialize(); + }; + + MobileSetupPortal.onGotDeviceInfo = function(deviceInfo) { + PortalImpl.getInstance().updateDeviceInfo(deviceInfo); + }; + + MobileSetupPortal.onConnectivityChanged = function(portalReachable) { + PortalImpl.getInstance().updateNetworkState( + portalReachable ? NetworkState.PORTAL_REACHABLE : + NetworkState.PORTAL_UNREACHABLE); + }; + + // Export + return { + MobileSetupPortal: MobileSetupPortal + }; +}); + +document.addEventListener('DOMContentLoaded', + mobile.MobileSetupPortal.loadPage); diff --git a/chromium/chrome/browser/resources/chromeos/neterror.css b/chromium/chrome/browser/resources/chromeos/neterror.css new file mode 100644 index 00000000000..4c6557e0259 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/neterror.css @@ -0,0 +1,258 @@ +/* Copyright 2013 The Chromium Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. */ + +body { + background-color: #E6E6E6; + font-family: Helvetica, Arial, sans-serif; + font-size: 10pt; + margin: 50px 40px 20px 40px; + text-align: center; +} + +#main-frame-error { + margin: auto; + max-width: 540px; + min-width: 200px; +} + +/* Don't use the main frame div when the error is in a subframe. */ +html[subframe] #main-frame-error { + display: none; +} + +/* Don't use the subframe error div when the error is in a main frame. */ +html:not([subframe]) #sub-frame-error { + display: none; +} + +#box { + background-color: #fbfbfb; + border: 1px solid #AAA; + border-bottom: 1px solid #888; + border-radius: 3px; + box-shadow: 0 2px 2px #AAA; + color: black; +} + +#diagnose-button { + -webkit-margin-start: 0; + margin-bottom: 10px; + margin-top: 20px; +} + +h1 { + color: #666; + font-size: 1.5em; + font-weight: normal; + margin: 10px 0 25px 0; +} + +a { + color: rgb(17, 85, 204); + text-decoration: none; +} + +.icon { + -webkit-user-select: none; +} + +.icon-generic { + /** + * Can't access chrome://theme/IDR_ERROR_NETWORK_GENERIC from an untrusted + * renderer process, so embed the resource manually. + */ + content: -webkit-image-set( + url('../../../app/theme/default_100_percent/common/error_network_generic.png') 1x, + url('../../../app/theme/default_200_percent/common/error_network_generic.png') 2x); +} + +.icon-offline { + content: -webkit-image-set( + url('../../../app/theme/default_100_percent/common/error_network_offline.png') 1x, + url('../../../app/theme/default_200_percent/common/error_network_offline.png') 2x); +} + +#content-top { + margin: 20px 20px 20px 25px; +} + +#help-box-outer { + -webkit-transition: height ease-in 218ms; + overflow: hidden; +} + +#help-box-inner { + background-color: #f9f9f9; + border-top: 1px solid #EEE; + color: #444; + padding: 25px 20px; + text-align: start; +} + +#suggestions { + margin-top: 15px; +} + +#sub-frame-error-details { + color: #8F8F8F; + text-shadow: 0 1px 0 rgba(255,255,255,0.3); +} + +[jscontent=failedUrl] { + overflow-wrap: break-word; +} + +button { + -webkit-user-select: none; + background-image: -webkit-linear-gradient(#ededed, #ededed 38%, #dedede); + border: 1px solid rgba(0, 0, 0, 0.25); + border-radius: 2px; + box-shadow: 0 1px 0 rgba(0, 0, 0, 0.08), + inset 0 1px 2px rgba(255, 255, 255, 0.75); + color: #444; + margin: 0 5px; + min-height: 29px; + min-width: 65px; + padding: 8px 13px; + text-shadow: 0 1px 0 rgb(240, 240, 240); +} + +button:hover { + background-image: -webkit-linear-gradient(#f0f0f0, #f0f0f0 38%, #e0e0e0); + border: 1px solid rgba(0, 0, 0, 0.3); + box-shadow: 0 1px 0 rgba(0, 0, 0, 0.12), + inset 0 1px 2px rgba(255, 255, 255, 0.95); + color: #000; +} + +button:active { + background-image: -webkit-linear-gradient(#e7e7e7, #e7e7e7 38%, #d7d7d7); + border: 1px solid rgba(0, 0, 0, 0.3); + box-shadow: none; + color: #444; +} + +#reload-button { + background-image: -webkit-linear-gradient(rgb(93, 154, 255), + rgb(93, 154, 255), + rgb(88, 145, 240)); + border: 1px solid rgba(45, 102, 195, 1); + box-shadow: 0 1px 0 rgba(0, 0, 0, 0.15), + inset 0 1px 2px rgba(255, 255, 255, 0.2); + color: #fff; + text-shadow: 0 1px 0 rgba(0,0,0,0.5); +} + +#reload-button:hover { + background-image: -webkit-linear-gradient(rgb(101, 158, 253), + rgb(101, 158, 253), + rgb(96, 151, 241)); + border: 1px solid rgba(45, 102, 195, 1); + box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25), + inset 0 1px 2px rgba(255, 255, 255, 0.2); +} + +#reload-button:active { + background-image: -webkit-linear-gradient(rgb(96, 149, 237), + rgb(96, 149, 237), + rgb(96, 149, 237)); + border: 1px solid rgb(38, 84, 160); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.1); +} + +.hidden { + display: none; +} + +.suggestions { + margin-top: 18px; +} + +.suggestion-header { + font-weight: bold; + margin-bottom: 4px; +} + +.suggestion-body { + color: #777; +} + +.error-code { + color: #A0A0A0; + margin-top: 15px; +} + +/* Increase line height at higher resolutions. */ +@media (min-width: 641px) and (min-height: 641px) { + #help-box-inner { + line-height: 18px; + } +} + +/* Decrease padding at low sizes. */ +@media (max-width: 640px), + (max-height: 640px) { + body { + margin: 15px; + } + h1 { + margin: 10px 0 15px 0; + } + #content-top { + margin: 15px; + } + #help-box-inner { + padding: 20px; + } + .suggestions { + margin-top: 10px; + } + .suggestion-header { + margin-bottom: 0; + } + .error-code { + margin-top: 10px; + } +} + +/* Don't allow overflow when in a subframe. */ +html[subframe] body { + overflow: hidden; +} + +#sub-frame-error { + -webkit-align-items: center; + -webkit-flex-flow: column; + -webkit-justify-content: center; + background-color: #DDD; + display: -webkit-flex; + height: 100%; + left: 0; + position: absolute; + top: 0; + width: 100%; +} + +#sub-frame-error:hover { + background-color: #EEE; +} + +#sub-frame-error-details { + margin: 0 10px; + visibility: hidden; +} + +/* Show details only when hovering. */ +#sub-frame-error:hover #sub-frame-error-details { + visibility: visible; +} + +/* If the iframe is too small, always hide the error code. */ +/* TODO(mmenke): See if overflow: no-display works better, once supported. */ +@media (max-width: 200px), + (max-height: 95px) { + #sub-frame-error-details { + display: none; + } +} diff --git a/chromium/chrome/browser/resources/chromeos/neterror.js b/chromium/chrome/browser/resources/chromeos/neterror.js new file mode 100644 index 00000000000..ec69eb3d44c --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/neterror.js @@ -0,0 +1,51 @@ +// Copyright 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +function toggleHelpBox() { + var helpBoxOuter = $('help-box-outer'); + helpBoxOuter.classList.toggle('hidden'); + var moreLessButton = $('more-less-button'); + if (helpBoxOuter.classList.contains('hidden')) { + moreLessButton.innerText = moreLessButton.moreText; + } else { + moreLessButton.innerText = moreLessButton.lessText; + } +} + +function diagnoseErrors() { + window.domAutomationController.setAutomationId(1); + window.domAutomationController.send('open_connectivity_diagnostics'); +} + +// Subframes use a different layout but the same html file. This is to make it +// easier to support platforms that load the error page via different +// mechanisms (Currently just iOS). +if (window.top.location != window.location) + document.documentElement.setAttribute('subframe', ''); + +// Re-renders the error page using |strings| as the dictionary of values. +// Used by NetErrorTabHelper to update DNS error pages with probe results. +function updateForDnsProbe(strings) { + i18nTemplate.process(document, strings); + var context = new JsEvalContext(strings); + jstProcess(context, $('t')); +} + +// Given the classList property of an element, adds an icon class to the list +// and removes the previously- +function updateIconClass(classList, newClass) { + var oldClass; + + if (classList.hasOwnProperty('last_icon_class')) { + oldClass = classList['last_icon_class']; + if (oldClass == newClass) + return; + } + + classList.add(newClass); + if (oldClass !== undefined) + classList.remove(oldClass); + + classList['last_icon_class'] = newClass; +} diff --git a/chromium/chrome/browser/resources/chromeos/network.css b/chromium/chrome/browser/resources/chromeos/network.css new file mode 100644 index 00000000000..0d68184b28c --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/network.css @@ -0,0 +1,65 @@ +/* + * Copyright 2013 The Chromium Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#log-level-container { + margin: 5px; +} + +#log-level-container label { + vertical-align: middle; +} + +#log-level-container input { + margin-bottom: 1px; + vertical-align: middle; +} + +#network-log-container { + border: 1px solid rgb(220, 220, 220); + font-size: 12px; + height: 350px; + overflow: scroll; + padding: 10px; + width: 100%; +} + +#network-log-container p { + font-family: monospace; + line-height: 20px; + margin: 2px; +} + +#network-status-table { + border-collapse: collapse; +} + +#network-status-table tr td { + border: 1px solid rgb(220, 220, 220); + font-size: 13px; +} + +.network-status-table-header { + font-weight: bold; +} + +.network-level-tag { + -webkit-margin-end: 5px; + border: 1px solid; + border-radius: 2px; + padding: 0 4px; +} + +.network-log-level-event { + color: orange; +} + +.network-log-level-error { + color: red; +} + +.network-log-level-debug { + color: blue; +} diff --git a/chromium/chrome/browser/resources/chromeos/network.html b/chromium/chrome/browser/resources/chromeos/network.html new file mode 100644 index 00000000000..1e9b11bf8d3 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/network.html @@ -0,0 +1,53 @@ +<!DOCTYPE HTML> +<html i18n-values="dir:textdirection;"> +<head> + <meta charset="utf-8"> + <title id="network" i18n-content="titleText"></title> + <link rel="stylesheet" href="chrome://network/network.css"> + <script src="chrome://resources/js/load_time_data.js"></script> + <script src="chrome://resources/js/util.js"></script> + <script src="chrome://network/strings.js"></script> + <script src="chrome://network/network.js"></script> +</head> +<body i18n-values=".style.fontFamily:fontfamily;.style.fontSize:fontsize"> + <p i18n-content="autoRefreshText"></p> + <h3>Event Log (Newest first):</h3> + <div id="log-level-container"> + <button id="log-refresh" i18n-content="logRefreshText"></button> + <label i18n-content="logLevelShowText"></label> + <input id="log-error" type="checkbox"> + <label for="log-error" i18n-content="logLevelErrorText"></label> + <input id="log-user" type="checkbox"> + <label for="log-user" i18n-content="logLevelUserText"></label> + <input id="log-event" type="checkbox"> + <label for="log-event" i18n-content="logLevelEventText"></label> + <input id="log-debug" type="checkbox"> + <label for="log-debug" i18n-content="logLevelDebugText"></label> + <input id="log-fileinfo" type="checkbox"> + <label for="log-fileinfo" i18n-content="logLevelFileinfoText"></label> + </div> + <div id="network-log-container"> + </div> + <h3>Networks: </h3> + <table id="network-status-table"> + <tr class="network-status-table-header"> + <td>Path</td> + <td>GUID</td> + <td>Name</td> + <td>Type</td> + <td>Status</td> + <td>Profile</td> + <td>Connect</td> + <td>Error</td> + <td>IP Addr</td> + <td>Security</td> + <td>Technology</td> + <td>Activation</td> + <td>Roaming</td> + <td>OOC</td> + <td>Strength</td> + </tr> + </table> + <script src="chrome://resources/js/i18n_template2.js"></script> +</body> +</html> diff --git a/chromium/chrome/browser/resources/chromeos/network.js b/chromium/chrome/browser/resources/chromeos/network.js new file mode 100644 index 00000000000..49abd050c8e --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/network.js @@ -0,0 +1,180 @@ +// Copyright 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +var NetworkUI = function() { + // Properties to display in the network state table + var NETWORK_STATE_FIELDS = [ + 'Name', 'Type', 'State', 'Profile', 'Connectable', + 'Error', 'Address', 'Security', 'Cellular.NetworkTechnology', + 'Cellular.ActivationState', 'Cellular.RoamingState', + 'Cellular.OutOfCredits', 'Strength' + ]; + + var LOG_LEVEL_CLASSNAME = { + 'Error': 'network-log-level-error', + 'User': 'network-log-level-user', + 'Event': 'network-log-level-event', + 'Debug': 'network-log-level-debug' + }; + + var LOG_LEVEL_CHECKBOX = { + 'Error': 'log-error', + 'User': 'log-user', + 'Event': 'log-event', + 'Debug': 'log-debug' + }; + + /** + * Create a tag of log level. + * + * @param {string} level A string that represents log level. + * @return {DOMElement} The created span element. + */ + var createLevelTag = function(level) { + var tag = document.createElement('span'); + tag.className = 'network-level-tag'; + tag.textContent = level; + tag.classList.add(LOG_LEVEL_CLASSNAME[level]); + return tag; + }; + + /** + * Creates an element that contains the time, the event, the level and + * the description of the given log entry. + * + * @param {Object} logEntry An object that represents a single line of log. + * @return {DOMElement} The created p element that represents the log entry. + */ + var createLogEntryText = function(logEntry) { + var level = logEntry['level']; + if (!$(LOG_LEVEL_CHECKBOX[level]).checked) + return null; + var res = document.createElement('p'); + var textWrapper = document.createElement('span'); + var fileinfo = ''; + if ($('log-fileinfo').checked) + fileinfo = logEntry['file']; + textWrapper.textContent = loadTimeData.getStringF( + 'logEntryFormat', + logEntry['timestamp'], + fileinfo, + logEntry['event'], + logEntry['description']); + res.appendChild(createLevelTag(level)); + res.appendChild(textWrapper); + return res; + }; + + /** + * Create event log entries. + * + * @param {Array.<string>} logEntries A array of strings that each string + * represents a log event in JSON format. + */ + var createEventLog = function(logEntries) { + var container = $('network-log-container'); + container.textContent = ''; + for (var i = 0; i < logEntries.length; ++i) { + var entry = createLogEntryText(JSON.parse(logEntries[i])); + if (entry) + container.appendChild(entry); + } + }; + + /** + * Create a cell in network state table. + * + * @param {string} value Content in the cell. + * @return {DOMElement} The created td element that displays the given value. + */ + var createStatusTableCell = function(value) { + var col = document.createElement('td'); + col.textContent = value || ''; + return col; + }; + + /** + * Create a row in the network state table. + * + * @param {string} path The network path. + * @param {dictionary} status Properties of the network. + * @return {DOMElement} The created tr element that contains the network + * state information. + */ + var createStatusTableRow = function(path, status) { + var row = document.createElement('tr'); + row.className = 'network-status-table-row'; + row.appendChild(createStatusTableCell(path)); + row.appendChild(createStatusTableCell(status['GUID'].slice(1, 9))); + for (var i = 0; i < NETWORK_STATE_FIELDS.length; ++i) { + row.appendChild(createStatusTableCell(status[NETWORK_STATE_FIELDS[i]])); + } + return row; + }; + + /** + * Create network state table. + * + * @param {Array.<Object>} networkStatuses An array of network states. + */ + var createNetworkTable = function(networkStatuses) { + var table = $('network-status-table'); + var oldRows = table.querySelectorAll('.network-status-table-row'); + for (var i = 0; i < oldRows.length; ++i) + table.removeChild(oldRows[i]); + for (var path in networkStatuses) + table.appendChild( + createStatusTableRow(path, networkStatuses[path])); + }; + + /** + * This callback function is triggered when the data is received. + * + * @param {dictionary} data A dictionary that contains network state + * information. + */ + var onNetworkInfoReceived = function(data) { + createEventLog(JSON.parse(data.networkEventLog)); + createNetworkTable(data.networkState); + }; + + /** + * Sends a refresh request. + */ + var sendRefresh = function() { + chrome.send('requestNetworkInfo'); + } + + /** + * Sets refresh rate if the interval is found in the url. + */ + var setRefresh = function() { + var interval = parseQueryParams(window.location)['refresh']; + if (interval && interval != '') + setInterval(sendRefresh, parseInt(interval) * 1000); + }; + + /** + * Get network information from WebUI. + */ + document.addEventListener('DOMContentLoaded', function() { + $('log-refresh').onclick = sendRefresh; + $('log-error').checked = true; + $('log-error').onclick = sendRefresh; + $('log-user').checked = true; + $('log-user').onclick = sendRefresh; + $('log-event').checked = true; + $('log-event').onclick = sendRefresh; + $('log-debug').checked = false; + $('log-debug').onclick = sendRefresh; + $('log-fileinfo').checked = false; + $('log-fileinfo').onclick = sendRefresh; + setRefresh(); + sendRefresh(); + }); + + return { + onNetworkInfoReceived: onNetworkInfoReceived + }; +}(); diff --git a/chromium/chrome/browser/resources/chromeos/network_configuration/OWNERS b/chromium/chrome/browser/resources/chromeos/network_configuration/OWNERS new file mode 100644 index 00000000000..713045b673f --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/network_configuration/OWNERS @@ -0,0 +1 @@ +pneubeck@chromium.org diff --git a/chromium/chrome/browser/resources/chromeos/network_configuration/config.html b/chromium/chrome/browser/resources/chromeos/network_configuration/config.html new file mode 100644 index 00000000000..07a3dc05d9d --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/network_configuration/config.html @@ -0,0 +1,42 @@ +<!doctype html> +<html> +<head> +<meta charset="utf-8"> +<title>Network Configuration</title> +<script src="chrome://resources/js/util.js"></script> +<script src="chrome://resources/js/cr.js"></script> +<script src="chrome://resources/js/cr/event_target.js"></script> +<script src="chrome://resources/js/cr/ui.js"></script> +<script src="chrome://resources/js/cr/ui/array_data_model.js"></script> +<script src="chrome://resources/js/cr/ui/list_selection_model.js"></script> +<script src="chrome://resources/js/cr/ui/list_selection_controller.js"></script> +<script src="chrome://resources/js/cr/ui/list_single_selection_model.js"> +</script> +<script src="chrome://resources/js/cr/ui/list_item.js"></script> +<script src="chrome://resources/js/cr/ui/list.js"></script> +<script src="js/network_config.js"></script> +<script src="js/main_config.js"></script> +<link rel="stylesheet" href="chrome://resources/css/chrome_shared.css"> +<link rel="stylesheet" href="css/config.css"></link> +</head> +<body> + <div id="network-config"> + <h3>Configuration</h3> + <div id="network-properties"> + </div> + </div> + <div class="button-strip"> + <button id="save"> + Save + </button> + <button id="connect"> + Connect + </button> + <button id="disconnect"> + Disconnect + </button> + </div> + <div id="message-area"> + </div> +</body> +</html> diff --git a/chromium/chrome/browser/resources/chromeos/network_configuration/css/config.css b/chromium/chrome/browser/resources/chromeos/network_configuration/css/config.css new file mode 100644 index 00000000000..144ae7bc09d --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/network_configuration/css/config.css @@ -0,0 +1,9 @@ +/* Copyright (c) 2013 The Chromium Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +textarea { + height: 300px; + width: 500px; +}
\ No newline at end of file diff --git a/chromium/chrome/browser/resources/chromeos/network_configuration/css/status.css b/chromium/chrome/browser/resources/chromeos/network_configuration/css/status.css new file mode 100644 index 00000000000..feeb43e806a --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/network_configuration/css/status.css @@ -0,0 +1,13 @@ +/* Copyright (c) 2013 The Chromium Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +.network-dropdown { + padding-left: 30px; +} + +iframe[name=network-config-frame] { + height: 600px; + width: 600px; +}
\ No newline at end of file diff --git a/chromium/chrome/browser/resources/chromeos/network_configuration/js/main_config.js b/chromium/chrome/browser/resources/chromeos/network_configuration/js/main_config.js new file mode 100644 index 00000000000..d8be3f5faa8 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/network_configuration/js/main_config.js @@ -0,0 +1,52 @@ +// Copyright (c) 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +function showMessage(msg) { + var area = $('message-area'); + var entry = document.createElement('div'); + entry.textContent = msg; + area.appendChild(entry); + window.setTimeout(function() { + area.removeChild(entry); + }, 3000); +} + +function getShowMessageCallback(message) { + return function() { + var error = chrome.runtime.lastError; + if (error) { + showMessage(message + ': ' + error.message); + } else { + showMessage(message + ': Success!'); + } + }; +} + +function onPageLoad() { + var networkConfig = $('network-config'); + network.config.NetworkConfig.decorate(networkConfig); + + $('save').onclick = function() { + chrome.networkingPrivate.setProperties( + networkConfig.networkId, + networkConfig.userSettings, + getShowMessageCallback('Set properties of ' + networkConfig.networkId)); + }; + + $('connect').onclick = function() { + chrome.networkingPrivate.startConnect( + networkConfig.networkId, + getShowMessageCallback( + 'Requested connect to ' + networkConfig.networkId)); + }; + + $('disconnect').onclick = function() { + chrome.networkingPrivate.startDisconnect( + networkConfig.networkId, + getShowMessageCallback( + 'Requested disconnect from ' + networkConfig.networkId)); + }; +} + +document.addEventListener('DOMContentLoaded', onPageLoad); diff --git a/chromium/chrome/browser/resources/chromeos/network_configuration/js/main_status.js b/chromium/chrome/browser/resources/chromeos/network_configuration/js/main_status.js new file mode 100644 index 00000000000..0bd60d71081 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/network_configuration/js/main_status.js @@ -0,0 +1,18 @@ +// Copyright (c) 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +function onPageLoad() { + var networkStatus = $('network-status'); + network.status.NetworkStatusList.decorate(networkStatus); + + networkStatus.setUserActionHandler(function(action) { + if (action.command == 'openConfiguration') { + var configUrl = + chrome.extension.getURL('config.html?network=' + action.networkId); + window.open(configUrl, 'network-config-frame'); + } + }); +} + +document.addEventListener('DOMContentLoaded', onPageLoad); diff --git a/chromium/chrome/browser/resources/chromeos/network_configuration/js/network_config.js b/chromium/chrome/browser/resources/chromeos/network_configuration/js/network_config.js new file mode 100644 index 00000000000..815886a3f87 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/network_configuration/js/network_config.js @@ -0,0 +1,133 @@ +// Copyright (c) 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +cr.define('network.config', function() { + var NetworkConfig = cr.ui.define('div'); + + NetworkConfig.prototype = { + __proto__: HTMLDivElement.prototype, + decorate: function() { + var params = parseQueryParams(window.location); + this.networkId_ = params.network; + this.activeArea_ = null; + this.userArea_ = null; + this.managedArea_ = null; + this.stateArea_ = null; + this.updateDom_(); + this.fetchProperties_(); + }, + + fetchProperties_: function() { + chrome.networkingPrivate.getProperties( + this.networkId_, + this.updateActiveSettings_.bind(this)); + chrome.networkingPrivate.getManagedProperties( + this.networkId_, + this.updateManagedSettings_.bind(this)); + chrome.networkingPrivate.getState( + this.networkId_, + this.updateState_.bind(this)); + }, + + stringifyJSON_: function(properties) { + return JSON.stringify(properties, undefined, 2); + }, + + updateActiveSettings_: function(properties) { + this.activeArea_.value = this.stringifyJSON_(properties); + }, + + updateManagedSettings_: function(properties) { + var error = chrome.runtime.lastError; + if (error) { + this.managedArea_.value = error.message; + this.userArea_.value = 'undefined'; + } else { + this.managedArea_.value = this.stringifyJSON_(properties); + this.userArea_.value = this.stringifyJSON_( + this.extractUserSettings_(properties)); + } + }, + + updateState_: function(properties) { + this.stateArea_.value = this.stringifyJSON_(properties); + }, + + extractUserSettings_: function(properties) { + if ('UserSetting' in properties) + return properties['UserSetting']; + + if ('SharedSetting' in properties) + return properties['SharedSetting']; + + var result = {}; + for (var fieldName in properties) { + var entry = properties[fieldName]; + if (typeof entry === 'object') { + var nestedResult = this.extractUserSettings_(entry); + if (nestedResult) + result[fieldName] = nestedResult; + } + } + if (Object.keys(result).length) + return result; + else + return undefined; + }, + + updateDom_: function() { + var div = document.createElement('div'); + + this.activeArea_ = function() { + var label = document.createElement('h4'); + label.textContent = 'Active Settings (getProperties)'; + div.appendChild(label); + var area = document.createElement('textarea'); + div.appendChild(area); + return area; + }(); + + this.userArea_ = function() { + var label = document.createElement('h4'); + label.textContent = 'User Settings'; + div.appendChild(label); + var area = document.createElement('textarea'); + div.appendChild(area); + return area; + }(); + + this.managedArea_ = function() { + var label = document.createElement('h4'); + label.textContent = 'Managed Settings (getManagedProperties)'; + div.appendChild(label); + var area = document.createElement('textarea'); + div.appendChild(area); + return area; + }(); + + this.stateArea_ = function() { + var label = document.createElement('h4'); + label.textContent = 'State (getState)'; + div.appendChild(label); + var area = document.createElement('textarea'); + div.appendChild(area); + return area; + }(); + + this.appendChild(div); + }, + + get userSettings() { + return JSON.parse(this.userArea_.value); + }, + + get networkId() { + return this.networkId_; + } + }; + + return { + NetworkConfig: NetworkConfig + }; +}); diff --git a/chromium/chrome/browser/resources/chromeos/network_configuration/js/network_status.js b/chromium/chrome/browser/resources/chromeos/network_configuration/js/network_status.js new file mode 100644 index 00000000000..a6bec2f7404 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/network_configuration/js/network_status.js @@ -0,0 +1,697 @@ +// Copyright (c) 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +cr.define('network.status', function() { + var ArrayDataModel = cr.ui.ArrayDataModel; + var List = cr.ui.List; + var ListItem = cr.ui.ListItem; + var ListSingleSelectionModel = cr.ui.ListSingleSelectionModel; + + /** + * Returns the entries of |dataModel| as an array. + * @param {ArrayDataModel} dataModel . + * @return {Array} . + */ + function dataModelToArray(dataModel) { + var array = []; + for (var i = 0; i < dataModel.length; i++) { + array.push(dataModel.item(i)); + } + return array; + } + + /** + * Calculates both set difference of |a| and |b| and returns them in an array: + * [ a - b, b - a ]. + * @param {Array.<T>} a . + * @param {Array.<T>} b . + * @param {function(T): K} toKey . + * @return {Array.<Array.<T>>} . + */ + function differenceBy(a, b, toKey) { + var inA = {}; + a.forEach(function(elA) { + inA[toKey(elA)] = elA; + }); + var bMinusA = []; + b.forEach(function(elB) { + var keyB = toKey(elB); + if (inA[keyB]) + delete inA[keyB]; + else + bMinusA.push(elB); + }); + var aMinusB = []; + for (var keyA in inA) { + aMinusB.push(inA[keyA]); + } + return [aMinusB, bMinusA]; + } + + /** + * Updates the data model of |uiList| to |newList|. Ensures that unchanged + * entries are not touched. Doesn't preserve the order of |newList|. + * @param {List} uiList . + * @param {Array} newList . + */ + function updateDataModel(uiList, newList) { + uiList.startBatchUpdates(); + var dataModel = uiList.dataModel; + var diff = differenceBy(dataModelToArray(dataModel), newList, + function(e) { return e[0]; }); + var toRemove = diff[0]; + var toAdd = diff[1]; + toRemove.forEach(function(element) { + dataModel.splice(dataModel.indexOf(element), 1); + }); + dataModel.splice.apply(dataModel, [dataModel.length, 0].concat(toAdd)); + uiList.endBatchUpdates(); + } + + /** + * Creates a map of the entries of |array|. Each entry is associated to the + * key getKey(entry). + * @param {Array.<T>} array . + * @param {function(T): K} getKey . + * @return {Object.<K, T>} . + */ + function createMapFromList(array, getKey) { + var result = {}; + array.forEach(function(entry) { + result[getKey(entry)] = entry; + }); + return result; + } + + /** + * Wraps each entry in |array| into an array. The result contains rows with + * one entry each. + * @param {Array.<T>} array . + * @return {Array.<Array.<T>>} . + */ + function arrayToTable(array) { + return array.map(function(e) { + return [e]; + }); + } + + /** + * The NetworkStatusList contains various button types according to the + * following hierarchy. Note: this graph doesn't depict inheritance but + * ownership of instances of these types. + * + * NetworkStatusList + * +-- TechnologyButton + * +-- NestedStatusButton + * + * Inheritance hierarchy: + * ListItem + * +-- Button + * +-- UnfoldingButton + * | +-- TechnologyButton + * +-- NestedStatusButton + */ + + /** + * Base class for all buttons in the NetworkStatusList. |key| is used to + * identify this button. + * After construction, update() has to be called! + * @param {NetworkStatusList} networkStatus . + * @param {string} key . + * @constructor + */ + function Button(networkStatus, key) { + var el = cr.doc.createElement('li'); + el.__proto__ = Button.prototype; + el.decorate(networkStatus, key); + return el; + } + + Button.prototype = { + __proto__: ListItem.prototype, + + /** + * @override + */ + decorate: function(networkStatus, key) { + ListItem.prototype.decorate.call(this); + this.networkStatus_ = networkStatus; + this.key_ = key; + this.className = 'network-status-button'; + + var textContent = this.ownerDocument.createElement('div'); + textContent.className = 'network-status-button-labels'; + + var title = this.ownerDocument.createElement('div'); + title.className = 'nested-status-button-title'; + textContent.appendChild(title); + this.title_ = title; + + var subTitle = this.ownerDocument.createElement('div'); + subTitle.className = 'nested-status-button-subtitle'; + textContent.appendChild(subTitle); + this.subTitle_ = subTitle; + + this.appendChild(textContent); + }, + + /** + * @type {string} + */ + get key() { + return this.key_; + }, + + /** + * Should be called if the data presented by this button + * changed. E.g. updates the button's title, icon and nested buttons. + * To be overriden by subclasses. + */ + update: function() { + this.title_.textContent = this.key; + } + }; + + /** + * A button that shows the status of one particular network. + * @param {NetworkStatusList} networkStatus . + * @param {string} networkID . + * @extends {Button} + * @constructor + */ + function NestedStatusButton(networkStatus, networkID) { + var el = new Button(networkStatus, networkID); + el.__proto__ = NestedStatusButton.prototype; + return el; + } + + NestedStatusButton.prototype = { + __proto__: Button.prototype, + + /** + * @override + */ + update: function() { + var network = this.networkStatus_.getNetworkByID(this.networkID); + this.title_.textContent = network.Name; + this.subTitle_.textContent = network.ConnectionState; + }, + + get networkID() { + return this.key; + } + }; + + /** + * A button (toplevel in the NetworkStatusList) that unfolds a list of nested + * buttons when clicked. Only one button will be unfolded at a time. + * @param {NetworkStatusList} networkStatus . + * @param {string} key . + * @extends {Button} + * @constructor + */ + function UnfoldingButton(networkStatus, key) { + var el = new Button(networkStatus, key); + el.__proto__ = UnfoldingButton.prototype; + el.decorate(); + return el; + } + + UnfoldingButton.prototype = { + __proto__: Button.prototype, + + /** + * @override + */ + decorate: function() { + this.dropdown_ = null; + this.addEventListener('click', this.toggleDropdown_.bind(this)); + }, + + /** + * Returns the list of identifiers for which nested buttons will be created. + * To be overridden by subclasses. + * @return {Array.<string>} . + */ + getEntries: function() { + return []; + }, + + /** + * Creates a nested button for |entry| of the current |getEntries|. + * To be overridden by subclasses. + * @param {string} entry . + * @return {ListItem} . + */ + createNestedButton: function(entry) { + return new ListItem(entry); + }, + + /** + * Creates the dropdown list containing the nested buttons. + * To be overridden by subclasses. + * @return {List} . + */ + createDropdown: function() { + var list = new List(); + var self = this; + list.createItem = function(row) { + return self.createNestedButton(row[0]); + }; + list.autoExpands = true; + list.dataModel = new ArrayDataModel(arrayToTable(this.getEntries())); + list.selectionModel = new ListSingleSelectionModel(); + return list; + }, + + /** + * @override + */ + update: function() { + Button.prototype.update.call(this); + if (!this.dropdown_) + return; + updateDataModel(this.dropdown_, arrayToTable(this.getEntries())); + }, + + openDropdown_: function() { + var dropdown = this.createDropdown(); + dropdown.className = 'network-dropdown'; + this.appendChild(dropdown); + this.dropdown_ = dropdown; + this.networkStatus_.openDropdown = this; + }, + + closeDropdown_: function() { + this.removeChild(this.dropdown_); + this.dropdown_ = null; + }, + + toggleDropdown_: function() { + // TODO(pneubeck): request rescan + if (this.networkStatus_.openDropdown === this) { + this.closeDropdown_(); + this.networkStatus_.openDropdown = null; + } else if (this.networkStatus_.openDropdown) { + this.networkStatus_.openDropdown.closeDropdown_(); + this.openDropdown_(); + } else { + this.openDropdown_(); + } + } + }; + + /** + * A button (toplevel in the NetworkStatusList) that represents one network + * technology (like WiFi or Ethernet) and unfolds a list of nested buttons + * when clicked. + * @param {NetworkStatusList} networkStatus . + * @param {string} technology . + * @extends {UnfoldingButton} + * @constructor + */ + function TechnologyButton(networkStatus, technology) { + var el = new UnfoldingButton(networkStatus, technology); + el.__proto__ = TechnologyButton.prototype; + el.decorate(technology); + return el; + } + + TechnologyButton.prototype = { + __proto__: UnfoldingButton.prototype, + + /** + * @param {string} technology . + * @override + */ + decorate: function(technology) { + this.technology_ = technology; + }, + + /** + * @override + */ + getEntries: function() { + return this.networkStatus_.getNetworkIDsOfType(this.technology_); + }, + + /** + * @override + */ + createNestedButton: function(id) { + var self = this; + var button = new NestedStatusButton(this.networkStatus_, id); + button.onclick = function(e) { + e.stopPropagation(); + self.networkStatus_.handleUserAction({ + command: 'openConfiguration', + networkId: id + }); + }; + button.update(); + return button; + }, + + /** + * @override + */ + createDropdown: function() { + var list = UnfoldingButton.prototype.createDropdown.call(this); + var getIndex = this.networkStatus_.getIndexOfNetworkID.bind( + this.networkStatus_); + list.dataModel.setCompareFunction(0, function(a, b) { + return ArrayDataModel.prototype.defaultValuesCompareFunction( + getIndex(a), + getIndex(b)); + }); + list.dataModel.sort(0, 'asc'); + return list; + }, + + /** + * @type {string} + */ + get technology() { + return this.technology_; + }, + + /** + * @override + */ + update: function() { + UnfoldingButton.prototype.update.call(this); + if (!this.dropdown_) + return; + this.dropdown_.items.forEach(function(button) { + button.update(); + }); + } + }; + + /** + * The order of the toplevel buttons. + */ + var BUTTON_ORDER = [ + 'Ethernet', + 'WiFi', + 'Cellular', + 'VPN', + 'addConnection' + ]; + + /** + * A map from button key to index according to |BUTTON_ORDER|. + */ + var BUTTON_POSITION = {}; + BUTTON_ORDER.forEach(function(entry, index) { + BUTTON_POSITION[entry] = index; + }); + + /** + * Groups networks by type. + * @param {Object.<string, Object>} networkByID A map from network ID to + * network properties. + * @return {Object.<string, Array.<string>>} A map from network type to the + * list of IDs of networks of that type. + */ + function createNetworkIDsByType(networkByID) { + var byType = {}; + for (var id in networkByID) { + var network = networkByID[id]; + var group = byType[network.Type]; + if (group === undefined) { + group = []; + byType[network.Type] = group; + } + group.push(network.GUID); + } + return byType; + } + + /** + * A list-like control showing the available networks and controls to + * dis-/connect to networks and to open dialogs to create, modify and remove + * network configurations. + * @constructor + */ + var NetworkStatusList = cr.ui.define('list'); + + NetworkStatusList.prototype = { + __proto__: List.prototype, + + /** + * @override + */ + decorate: function() { + List.prototype.decorate.call(this); + + /** + * The currently open unfolding button. + * @type {UnfoldingButton} + */ + this.openDropdown = null; + + /** + * The set of technologies shown to the user. + * @type {Object.<string, boolean>} + */ + this.technologies_ = {}; + + /** + * A map from network type to the array of IDs of network of that type. + * @type {Object.<string, Array.<string>>} + */ + this.networkIDsByType_ = {}; + + /** + * A map from network ID to the network's properties. + * @type {Object.<string, Object>} + */ + this.networkByID_ = {}; + + /** + * A map from network ID to the network's position in the last received + * network list. + * @type {Object.<string, number>} + */ + this.networkIndexByID_ = {}; + + /** + * A function that handles the various user actions. + * See |setUserActionHandler|. + * @type {function({command: string, networkID: string})} + */ + this.userActionHandler_ = function() {}; + + this.autoExpands = true; + this.dataModel = new ArrayDataModel([]); + this.dataModel.setCompareFunction(0, function(a, b) { + return ArrayDataModel.prototype.defaultValuesCompareFunction( + BUTTON_POSITION[a], BUTTON_POSITION[b]); + }); + this.dataModel.sort(0, 'asc'); + this.selectionModel = new ListSingleSelectionModel(); + + this.updateDataStructuresAndButtons_(); + this.registerStatusListener_(); + }, + + /** + * @override + */ + createItem: function(row) { + var key = row[0]; + if (key in this.technologies_) { + var button = new TechnologyButton( + this, + key); + button.update(); + return button; + } else { + return new Button(this, key); + } + }, + + /** + * See |setUserActionHandler| for the possible commands. + * @param {{command: string, networkID: string}} action . + */ + handleUserAction: function(action) { + this.userActionHandler_(action); + }, + + /** + * A function that handles the various user actions. + * |command| will be one of + * - openConfiguration + * @param {function({command: string, networkID: string})} handler . + */ + setUserActionHandler: function(handler) { + this.userActionHandler_ = handler; + }, + + /** + * @param {string} technology . + * @return {Array.<string>} Array of network IDs. + */ + getNetworkIDsOfType: function(technology) { + var networkIDs = this.networkIDsByType_[technology]; + if (!networkIDs) + return []; + return networkIDs; + }, + + /** + * @param {string} networkID . + * @return {number} The index of network with |networkID| in the last + * received network list. + */ + getIndexOfNetworkID: function(networkID) { + return this.networkIndexByID_[networkID]; + }, + + /** + * @param {string} networkID . + * @return {Object} The last received properties of network with + * |networkID|. + */ + getNetworkByID: function(networkID) { + return this.networkByID_[networkID]; + }, + + /** + * @param {string} networkType . + * @return {?TechnologyButton} . + */ + getTechnologyButtonForType_: function(networkType) { + var buttons = this.items; + for (var i = 0; i < buttons.length; i++) { + var button = buttons[i]; + if (button instanceof TechnologyButton && + button.technology === networkType) { + return button; + } + } + console.log('TechnologyButton for type ' + networkType + + ' requested but not found.'); + return null; + }, + + updateTechnologiesFromNetworks_: function() { + var newTechnologies = {}; + Object.keys(this.networkIDsByType_).forEach(function(technology) { + newTechnologies[technology] = true; + }); + this.technologies_ = newTechnologies; + }, + + updateDataStructuresAndButtons_: function() { + this.networkIDsByType_ = createNetworkIDsByType(this.networkByID_); + this.updateTechnologiesFromNetworks_(); + var keys = Object.keys(this.technologies_); + // Add keys of always visible toplevel buttons. + keys.push('addConnection'); + updateDataModel(this, arrayToTable(keys)); + this.items.forEach(function(button) { + button.update(); + }); + }, + + /** + * @param {Array.<string>} networkIDs . + */ + updateIndexes_: function(networkIDs) { + var newNetworkIndexByID = {}; + networkIDs.forEach(function(id, index) { + newNetworkIndexByID[id] = index; + }); + this.networkIndexByID_ = newNetworkIndexByID; + }, + + /** + * @param {Array.<string>} networkIDs . + */ + onNetworkListChanged_: function(networkIDs) { + var diff = differenceBy(Object.keys(this.networkByID_), + networkIDs, + function(e) { return e; }); + var toRemove = diff[0]; + var toAdd = diff[1]; + + var addCallback = this.addNetworkCallback_.bind(this); + toAdd.forEach(function(id) { + console.log('NetworkStatus: Network ' + id + ' added.'); + chrome.networkingPrivate.getProperties(id, addCallback); + }); + + toRemove.forEach(function(id) { + console.log('NetworkStatus: Network ' + id + ' removed.'); + delete this.networkByID_[id]; + }, this); + + this.updateIndexes_(networkIDs); + this.updateDataStructuresAndButtons_(); + }, + + /** + * @param {Array.<string>} networkIDs . + */ + onNetworksChanged_: function(networkIDs) { + var updateCallback = this.updateNetworkCallback_.bind(this); + networkIDs.forEach(function(id) { + console.log('NetworkStatus: Network ' + id + ' changed.'); + chrome.networkingPrivate.getProperties(id, updateCallback); + }); + }, + + /** + * @param {Object} network . + */ + updateNetworkCallback_: function(network) { + this.networkByID_[network.GUID] = network; + this.getTechnologyButtonForType_(network.Type).update(); + }, + + /** + * @param {Object} network . + */ + addNetworkCallback_: function(network) { + this.networkByID_[network.GUID] = network; + this.updateDataStructuresAndButtons_(); + }, + + /** + * @param {Array.<Object>} networks . + */ + setVisibleNetworks: function(networks) { + this.networkByID_ = createMapFromList( + networks, + function(network) { + return network.GUID; + }); + this.updateIndexes_(networks.map(function(network) { + return network.GUID; + })); + this.updateDataStructuresAndButtons_(); + }, + + /** + * Registers |this| at the networkingPrivate extension API and requests an + * initial list of all networks. + */ + registerStatusListener_: function() { + chrome.networkingPrivate.onNetworkListChanged.addListener( + this.onNetworkListChanged_.bind(this)); + chrome.networkingPrivate.onNetworksChanged.addListener( + this.onNetworksChanged_.bind(this)); + chrome.networkingPrivate.getVisibleNetworks( + 'All', + this.setVisibleNetworks.bind(this)); + } + }; + + return { + NetworkStatusList: NetworkStatusList + }; +}); diff --git a/chromium/chrome/browser/resources/chromeos/network_configuration/manifest.json b/chromium/chrome/browser/resources/chromeos/network_configuration/manifest.json new file mode 100644 index 00000000000..11a6e5d9170 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/network_configuration/manifest.json @@ -0,0 +1,14 @@ +{ + // chrome-extension://hiahncppkeponhognffoakpacfndjdhm/ + "key": "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC86jLUFDssLF0qkY1S5HzsFQkDe2gZVVOnvMtJvNMTk7y0U5RGEq2HT17L51FmpWViYBcB5Vh/0S9UETyMDDQyZ9zmyg7QX1BO2BZFVV70grcDYQVgQMzUxOIuSx4MgiwKWwzFerO35V3UEnesJGCr050buYlVkynvPIwmj4XLqQIDAQAB", + + "manifest_version": 2, + "name": "Networks", + "description": "Network Configuration", + "version": "1.0", + "permissions": [ + "networkingPrivate", + "chrome://resources/*" + ], + "content_security_policy": "default-src 'none'; script-src 'self' chrome://resources ; style-src 'self' chrome://resources;" +} diff --git a/chromium/chrome/browser/resources/chromeos/network_configuration/status.html b/chromium/chrome/browser/resources/chromeos/network_configuration/status.html new file mode 100644 index 00000000000..fa87793791e --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/network_configuration/status.html @@ -0,0 +1,28 @@ +<!doctype html> +<html> +<head> +<meta charset="utf-8"> +<title>Network Status</title> +<script src="chrome://resources/js/util.js"></script> +<script src="chrome://resources/js/cr.js"></script> +<script src="chrome://resources/js/cr/event_target.js"></script> +<script src="chrome://resources/js/cr/ui.js"></script> +<script src="chrome://resources/js/cr/ui/array_data_model.js"></script> +<script src="chrome://resources/js/cr/ui/list_selection_model.js"></script> +<script src="chrome://resources/js/cr/ui/list_selection_controller.js"></script> +<script src="chrome://resources/js/cr/ui/list_single_selection_model.js"> +</script> +<script src="chrome://resources/js/cr/ui/list_item.js"></script> +<script src="chrome://resources/js/cr/ui/list.js"></script> +<script src="js/network_status.js"></script> +<script src="js/main_status.js"></script> +<link rel="stylesheet" href="chrome://resources/css/chrome_shared.css"> +<link rel="stylesheet" href="chrome://resources/css/list.css"> +<link rel="stylesheet" href="css/status.css"></link> +</head> +<body> + <h3>Networks</h3> + <list id="network-status"></list> + <iframe name="network-config-frame"></iframe> +</body> +</html> diff --git a/chromium/chrome/browser/resources/chromeos/network_menu.css b/chromium/chrome/browser/resources/chromeos/network_menu.css new file mode 100644 index 00000000000..ced8e74084a --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/network_menu.css @@ -0,0 +1,54 @@ +/* Copyright (c) 2012 The Chromium Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +input:invalid { + background-color: rgb(255, 102, 102); +} + +.left-icon { + background-position: 4px top !important; +} + +.network-menu-item { + width: 100%; +} + +.network-label-icon { + -webkit-box-align: center; + display: -webkit-box; + min-height: 24px; +} + +.network-label { + -webkit-box-flex: 1; +} + +.network-icon { + background-position: 50% 50%; + background-repeat: no-repeat; + height: 24px; + width: 24px; +} + +.network-status { + color: grey; +} + +.spinner { + -webkit-animation-duration: 2s; + -webkit-animation-iteration-count: infinite; + -webkit-animation-name: spin; + -webkit-animation-timing-function: linear; + background-image: -webkit-canvas(spinner-circle); +} + +@-webkit-keyframes spin { + from { + -webkit-transform: rotate(0); + } + to { + -webkit-transform: rotate(360deg); + } +} diff --git a/chromium/chrome/browser/resources/chromeos/network_menu.js b/chromium/chrome/browser/resources/chromeos/network_menu.js new file mode 100644 index 00000000000..5f63eba8139 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/network_menu.js @@ -0,0 +1,361 @@ +// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + + +// Network status constants. +const StatusConnected = 'connected'; +const StatusDisconnected = 'disconnected'; +const StatusConnecting = 'connecting'; +const StatusError = 'error'; + +const NetworkOther = 'other'; + +// Setup css canvas 'spinner-circle' +(function() { + var lineWidth = 3; + var r = 8; + var ctx = document.getCSSCanvasContext('2d', 'spinner-circle', 2 * r, 2 * r); + + ctx.lineWidth = lineWidth; + ctx.lineCap = 'round'; + ctx.lineJoin = 'round'; + + ctx.strokeStyle = '#4e73c7'; + ctx.beginPath(); + ctx.moveTo(lineWidth / 2, r - lineWidth / 2); + ctx.arc(r, r, r - lineWidth / 2, Math.PI, Math.PI * 3 / 2); + ctx.stroke(); +})(); + +/** + * Sends "connect" using the 'action' WebUI message. + */ +function sendConnect(index, passphrase, identity, auto_connect) { + chrome.send('action', + ['connect', + String(index), + passphrase, + identity, + auto_connect ? '1' : '0']); +} + +var networkMenuItemProto = (function() { + var networkMenuItem = cr.doc.createElement('div'); + networkMenuItem.innerHTML = '<div class="network-menu-item">' + + '<div class="network-label-icon">' + + '<div class="network-label"></div>' + + '<div class="network-icon hidden"></div>' + + '</div>' + + '<div class="network-status hidden"></div>' + + '<div class="hidden"></div>' + + '</div>'; + return networkMenuItem; + })(); + +var NetworkMenuItem = cr.ui.define(function() { + return networkMenuItemProto.cloneNode(true); + }); + +NetworkMenuItem.prototype = { + __proto__: MenuItem.prototype, + + ssidEdit: null, + passwordEdit: null, + autoConnectCheckbox: null, + + /** + * The label element. + * @private + */ + get label_() { + return this.firstElementChild.firstElementChild.firstElementChild; + }, + + /** + * The icon element. + * @private + */ + get icon_() { + return this.label_.nextElementSibling; + }, + + /** + * The status area element. + * @private + */ + get status_() { + return this.firstElementChild.firstElementChild.nextElementSibling; + }, + + /** + * The action area container element. + * @private + */ + get action_() { + return this.status_.nextElementSibling; + }, + + /** + * Set status message. + * @param {string} message The message to display in status area. + * @private + */ + setStatus_: function(message) { + if (message) { + this.status_.textContent = message; + this.status_.classList.remove('hidden'); + } else { + this.status_.classList.add('hidden'); + } + }, + + /** + * Set status icon. + * @param {string} icon Source url for the icon image. + * @private + */ + setIcon_: function(icon) { + if (icon) { + this.icon_.style.backgroundImage = 'url(' + icon + ')'; + this.icon_.classList.remove('hidden'); + } else { + this.icon_.classList.add('hidden'); + } + }, + + /** + * Handle reconnect. + * @private + */ + handleConnect_ : function(e) { + var index = this.menu_.getMenuItemIndexOf(this); + if (this.ssidEdit && this.passwordEdit) { + if (this.ssidEdit.value) { + sendConnect(index, + this.passwordEdit.value, + this.ssidEdit.value, + this.autoConnectCheckbox.checked); + } + } else if (this.passwordEdit) { + if (this.passwordEdit.value) { + sendConnect(index, + this.passwordEdit.value, '', this.autoConnectCheckbox.checked); + } + } else { + if (this.attrs.remembered) { + sendConnect(index, this.attrs.passphrase, '', this.attrs.auto_connect); + } else { + sendConnect(index, '', '', this.autoConnectCheckbox.checked); + } + } + }, + + /** + * Handle keydown event in ssid edit. + * @private + */ + handleSsidEditKeydown_: function(e) { + if (e.target == this.ssidEdit && + e.keyIdentifier == 'Enter') { + this.passwordEdit.focus(); + } + }, + + /** + * Handle keydown event in password edit. + * @private + */ + handlePassEditKeydown_: function(e) { + if (e.target == this.passwordEdit && + e.keyIdentifier == 'Enter') { + this.handleConnect_(); + } + }, + + /** + * Returns whether action area is visible. + * @private + */ + isActionVisible_: function() { + return !this.action_.classList.contains('hidden'); + }, + + /** + * Show/hide action area. + * @private + */ + showAction_: function(show) { + var visible = this.isActionVisible_(); + if (show && !visible) { + this.action_.classList.remove('hidden'); + } else if (!show && visible) { + this.action_.classList.add('hidden'); + } + }, + + /** + * Add network name edit to action area. + * @private + */ + addSsidEdit_: function() { + this.ssidEdit = this.ownerDocument.createElement('input'); + this.ssidEdit.type = 'text'; + this.ssidEdit.placeholder = localStrings.getString('ssid_prompt'); + this.ssidEdit.pattern = '^\\S+$'; + this.ssidEdit.addEventListener('keydown', + this.handleSsidEditKeydown_.bind(this)); + + var box = this.ownerDocument.createElement('div'); + box.appendChild(this.ssidEdit); + this.action_.appendChild(box); + }, + + /** + * Add password edit to action area. + * @private + */ + addPasswordEdit_: function() { + this.passwordEdit = this.ownerDocument.createElement('input'); + this.passwordEdit.type = 'password'; + this.passwordEdit.placeholder = localStrings.getString('pass_prompt'); + this.passwordEdit.pattern = '^\\S+$'; + this.passwordEdit.addEventListener('keydown', + this.handlePassEditKeydown_.bind(this)); + + var box = this.ownerDocument.createElement('div'); + box.appendChild(this.passwordEdit); + this.action_.appendChild(box); + }, + + /** + * Add auto-connect this network check box to action area. + * @private + */ + addAutoConnectCheckbox_: function() { + this.autoConnectCheckbox = this.ownerDocument.createElement('input'); + this.autoConnectCheckbox.type = 'checkbox'; + this.autoConnectCheckbox.checked = this.attrs.auto_connect; + + var autoConnectSpan = this.ownerDocument.createElement('span'); + autoConnectSpan.textContent = + localStrings.getString('auto_connect_this_network'); + + var autoConnectLabel = this.ownerDocument.createElement('label'); + autoConnectLabel.appendChild(this.autoConnectCheckbox); + autoConnectLabel.appendChild(autoConnectSpan); + + this.action_.appendChild(autoConnectLabel); + }, + + /** + * Internal method to initiailze the MenuItem. + * @private + */ + initMenuItem_: function() { + // *TODO: eliminate code duplication with menu.js + // MenuItem.prototype.initMenuItem_(); + var attrs = this.attrs; + this.classList.add(attrs.type); + this.menu_.addHandlers(this, this); + + //////// NetworkMenuItem specific code: + // TODO: Handle specific types of network, connecting icon. + this.label_.textContent = attrs.label; + + if (attrs.network_type == NetworkOther) { + this.addSsidEdit_(); + this.addPasswordEdit_(); + this.addAutoConnectCheckbox_(); + } else if (attrs.status && attrs.status != 'unknown') { + if (attrs.status == StatusConnected) { + this.setStatus_(attrs.ip_address); + } else if (attrs.status == StatusConnecting) { + this.setStatus_(attrs.message); + + this.icon_.classList.add('spinner'); + this.icon_.classList.remove('hidden'); + } else if (attrs.status == StatusError) { + this.setStatus_(attrs.message); + this.setIcon_('chrome://theme/IDR_WARNING'); + + var button = this.ownerDocument.createElement('button'); + button.textContent = localStrings.getString('reconnect'); + button.addEventListener('click', this.handleConnect_.bind(this)); + var box = this.ownerDocument.createElement('div'); + box.appendChild(button); + this.action_.appendChild(box); + + this.showAction_(true); + } + + if (attrs.need_passphrase) { + this.addPasswordEdit_(); + } + + this.addAutoConnectCheckbox_(); + } + //////// End NetworkMenuItem specifi code + + if (attrs.font) { + this.label_.style.font = attrs.font; + + var baseFont = attrs.font.replace(/bold/, '').replace(/italic/, ''); + this.status_.style.font = baseFont; + this.action_.style.font = baseFont; + } + }, + + /** @override */ + activate: function() { + // Close action area and connect if it is visible. + if (this.isActionVisible_()) { + this.showAction_(false); + this.handleConnect_(); + return; + } + + // Show action area for encrypted network and 'other' network. + if ((this.attrs.network_type == NetworkOther || + this.attrs.status == StatusDisconnected) && + this.attrs.need_passphrase && + !this.isActionVisible_()) { + this.showAction_(true); + return; + } + + MenuItem.prototype.activate.call(this); + } +}; + + +var NetworkMenu = cr.ui.define('div'); + +NetworkMenu.prototype = { + __proto__: Menu.prototype, + + /** @override */ + createMenuItem: function(attrs) { + if (attrs.type == 'command') { + return new NetworkMenuItem(); + } else { + return new MenuItem(); + } + }, + + /** @override */ + onClick_: function(event, item) { + // If item is a NetworkMenuItem, it must have at least one of the following. + if (item.autoConnectCheckbox || item.ssidEdit || item.passwordEdit) { + // Ignore clicks other than on the NetworkMenuItem itself. + if (event.target == item.autoConnectCheckbox || + event.target == item.autoConnectCheckbox.nextElementSibling || + event.target == item.ssidEdit || + event.target == item.passwordEdit) { + return; + } + } + + Menu.prototype.onClick_.call(this, event, item); + }, +}; diff --git a/chromium/chrome/browser/resources/chromeos/notification_icon_link.html b/chromium/chrome/browser/resources/chromeos/notification_icon_link.html new file mode 100644 index 00000000000..81e1c972626 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/notification_icon_link.html @@ -0,0 +1,39 @@ +<!DOCTYPE html> +<html> +<head> + <meta charset="utf-8"> + <title>$2</title> + <style> + body { + direction: $5; + } + #icon { + height: 32px; + width: 32px; + float: $4; + } + #title { + margin-$4: 38px; + font-weight: bold; + font-size: 13px; + font-family: helvetica, arial, sans-serif; + } + #description { + margin-$4: 38px; + font-family: helvetica, arial, sans-serif; + font-size: 13px; + } + #link { + margin-$4: 38px; + font-family: helvetica, arial, sans-serif; + font-size: 13px; + } + </style> +</head> +<body> + <div id="icon"><img src="$1" width="32" height="32"></div> + <div id="title">$2</div> + <div id="description">$3</div> + <div id="link"><a href="" onclick="chrome.send('link')">$6</a></div> +</body> +</html> diff --git a/chromium/chrome/browser/resources/chromeos/offline_app_load.html b/chromium/chrome/browser/resources/chromeos/offline_app_load.html new file mode 100644 index 00000000000..dd02891a35e --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/offline_app_load.html @@ -0,0 +1,52 @@ +<!DOCTYPE html> +<html i18n-values="dir:textdirection"> +<head> +<meta charset="utf-8"> +<title i18n-content="title"> +</title> +<style> +html { + height: 100%; +} +body { + color: #000; + font-family: Helvetica, Arial, sans-serif; + background-image: -webkit-linear-gradient(rgb(255, 255, 255) 50%, + rgb(236, 244, 255)); + height: 100%; + padding: 0px; + margin: 0px; +} +#error { + position: absolute; + left: 180px; + top: 150px; + font-size: 24px; +} +#error img { + margin-right: 10px; + vertical-align: middle; +} +#name { + font-weight: bold; +} +#msg { +} +</style> +</head> + +<body id="t"> + +<div id="error" jsvalues=".title:url"> +<img jsvalues=".src:icon" width="96" height="96"> +<div style="display:inline-block; vertical-align: middle;"> +<div id="name" jsvalues=".innerText:name"></div> +<div id="msg" jsvalues=".innerText:msg"></div> +<div id="suggestions" jsselect="suggestionsLearnMore"> + <span jsvalues=".innerHTML:msg"></span> +</div> +</div> +</div> + +</body> +</html> diff --git a/chromium/chrome/browser/resources/chromeos/offline_net_load.html b/chromium/chrome/browser/resources/chromeos/offline_net_load.html new file mode 100644 index 00000000000..804cc8da24f --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/offline_net_load.html @@ -0,0 +1,55 @@ +<!DOCTYPE html> +<html i18n-values="dir:textdirection"> +<head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0, + maximum-scale=1.0, user-scalable=no"> + <title i18n-content="title"></title> + <link rel="stylesheet" href="neterror.css"> + <script src="../../../../ui/webui/resources/js/util.js"></script> + <script src="neterror.js"></script> +</head> +<body id="t"> + <div id="main-frame-error"> + <div id="box"> + <div id="content-top"> + <h1> + <div> + <img class="icon" + jseval="updateIconClass(this.classList, iconClass)"> + </div> + <span i18n-content="heading"></span> + </h1> + <button id="reload-button" onclick="location = this.url" + jsselect="reload" jsvalues=".url:reloadUrl" + jscontent="msg"></button> + <button id="more-less-button" onclick="toggleHelpBox()" jsdisplay="more" + jsvalues=".moreText:more; .lessText:less;" + jscontent="more"></button> + </div> + <!-- Outer and inner divs are needed both for margins and sizing. --> + <div id="help-box-outer" class="hidden"> + <div id="help-box-inner"> + <div jsselect="summary"> + <span jsvalues=".innerHTML:msg"></span> + </div> + <div class="suggestions" jsselect="suggestions"> + <div class="suggestion-header" jsvalues=".innerHTML:header"></div> + <div class="suggestion-body" jsvalues=".innerHTML:body"></div> + </div> + <button id="diagnose-button" onclick="diagnoseErrors()" + jscontent="diagnose" jsdisplay="diagnose"></button> + <div class="error-code" jscontent="errorCode"></div> + </div> + </div> + </div> + </div> + <div id="sub-frame-error"> + <!-- Show details when hovering over the icon, in case the details are + hidden because they're too large. --> + <img class="icon" jseval="updateIconClass(this.classList, iconClass)" + jsvalues=".title:errorDetails"> + <div id="sub-frame-error-details" jsvalues=".innerHTML:errorDetails"></div> + </div> +</body> +</html> diff --git a/chromium/chrome/browser/resources/chromeos/proxy_settings.css b/chromium/chrome/browser/resources/chromeos/proxy_settings.css new file mode 100644 index 00000000000..d08633155fa --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/proxy_settings.css @@ -0,0 +1,47 @@ +/* Copyright (c) 2012 The Chromium Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. */ + +/* These additional styles constrain the size of the proxy page to the height of + the dialog containing them. */ +html { + height: 100%; +} + +body { + -webkit-box-sizing: border-box; + height: 100%; + margin: 0; + padding: 8px; +} + +#proxyPage { + height: 100%; +} + +#proxy-page-title { + /* We have a title on the window, so the title in domui should be hidden. */ + display: none; +} + +#internet-details-content-area > .subpages-tab-contents { + height: 100% !important; +} + +#advanced-config { + padding-top: 10px; +} + +html[highlight=strong] input[type='button']:focus, +html[highlight=strong] input[type='checkbox']:focus, +html[highlight=strong] input[type='radio']:focus, +html[highlight=strong] input[type='text']:focus, +html[highlight=strong] input[type='url']:focus, +html[highlight=strong] button:focus, +html[highlight=strong] list:focus { + box-shadow: 0 0 23px rgb(77, 144, 254) !important; +} + +html[highlight=strong] #network-proxy-tab { + padding: 10px; +} diff --git a/chromium/chrome/browser/resources/chromeos/proxy_settings.html b/chromium/chrome/browser/resources/chromeos/proxy_settings.html new file mode 100644 index 00000000000..1e66e9c2d05 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/proxy_settings.html @@ -0,0 +1,40 @@ +<!DOCTYPE HTML> +<html i18n-values="dir:textdirection;highlight:highlightStrength"> +<head> +<meta charset="utf-8"> +<link rel="stylesheet" href="chrome://resources/css/chrome_shared.css"> +<link rel="stylesheet" href="chrome://resources/css/list.css"> +<link rel="stylesheet" href="chrome://resources/css/widgets.css"> + +<link rel="stylesheet" href="../options/options_page.css"> +<link rel="stylesheet" href="../options/chromeos/internet_detail.css"> +<link rel="stylesheet" href="proxy_settings.css"> +<script src="chrome://resources/js/cr.js"></script> +<script src="chrome://resources/js/event_tracker.js"></script> +<script src="chrome://resources/js/cr/event_target.js"></script> +<script src="chrome://resources/js/cr/ui.js"></script> +<script src="chrome://resources/js/cr/ui/touch_handler.js"></script> +<script src="chrome://resources/js/cr/ui/array_data_model.js"></script> +<script src="chrome://resources/js/cr/ui/list_selection_model.js"></script> +<script src="chrome://resources/js/cr/ui/list_selection_controller.js"></script> +<script src="chrome://resources/js/cr/ui/list_single_selection_model.js"></script> +<script src="chrome://resources/js/cr/ui/list_item.js"></script> +<script src="chrome://resources/js/cr/ui/list.js"></script> +<script src="chrome://resources/js/load_time_data.js"></script> +<script src="chrome://resources/js/local_strings.js"></script> +<script src="chrome://resources/js/util.js"></script> + +<script src="../options/preferences.js"></script> +<script src="../options/pref_ui.js"></script> +<script src="../options/options_page.js"></script> +<script src="../options/chromeos/internet_detail.js"></script> +<script src="../options/chromeos/proxy_rules_list.js"></script> +<script src="keyboard/keyboard_utils.js"></script> + +<script src="proxy_settings.js"></script> +</head> + +<body i18n-values=".style.fontFamily:fontfamily;.style.fontSize:fontsize"> +<include src="../options/chromeos/internet_detail.html"> +</body> +</html> diff --git a/chromium/chrome/browser/resources/chromeos/proxy_settings.js b/chromium/chrome/browser/resources/chromeos/proxy_settings.js new file mode 100644 index 00000000000..8392ac6fb31 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/proxy_settings.js @@ -0,0 +1,56 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +var OptionsPage = options.OptionsPage; +var Preferences = options.Preferences; +var DetailsInternetPage = options.internet.DetailsInternetPage; + +/** + * DOMContentLoaded handler, sets up the page. + */ +function load() { + if (cr.isChromeOS) + document.documentElement.setAttribute('os', 'chromeos'); + + // Decorate the existing elements in the document. + cr.ui.decorate('input[pref][type=checkbox]', options.PrefCheckbox); + cr.ui.decorate('input[pref][type=number]', options.PrefNumber); + cr.ui.decorate('input[pref][type=radio]', options.PrefRadio); + cr.ui.decorate('input[pref][type=range]', options.PrefRange); + cr.ui.decorate('select[pref]', options.PrefSelect); + cr.ui.decorate('input[pref][type=text]', options.PrefTextField); + cr.ui.decorate('input[pref][type=url]', options.PrefTextField); + + DetailsInternetPage.initializeProxySettings(); + + // TODO(ivankr): remove when http://crosbug.com/20660 is resolved. + var inputs = document.querySelectorAll('input[pref]'); + for (var i = 0, el; el = inputs[i]; i++) { + el.addEventListener('keyup', function(e) { + cr.dispatchSimpleEvent(this, 'change'); + }); + } + + Preferences.getInstance().initialize(); + chrome.send('coreOptionsInitialize'); + + var params = parseQueryParams(window.location); + var network = params.network; + if (!network) { + console.error('Error: No network argument provided!'); + network = ''; + } + chrome.send('selectNetwork', [network]); + + DetailsInternetPage.showProxySettings(); +} + +disableTextSelectAndDrag(function(e) { + var src = e.target; + return src instanceof HTMLTextAreaElement || + src instanceof HTMLInputElement && + /text|url/.test(src.type); +}); + +document.addEventListener('DOMContentLoaded', load); diff --git a/chromium/chrome/browser/resources/chromeos/salsa.css b/chromium/chrome/browser/resources/chromeos/salsa.css new file mode 100644 index 00000000000..f2c348526e6 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/salsa.css @@ -0,0 +1,60 @@ +/* Copyright 2013 The Chromium Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. */ + +#entry-list { + list-style-type: none; + width: 900px; +} + +.entry { + width: 100%; +} + +.entry-key { + font-size: small; +} + +.entry-value { + font-size: small; +} + +.bold { + font-weight: bold; +} + +#treatment-header { + display: table-cell; + padding-right: 20px; + vertical-align: middle; +} + +.treatment { + display: table-cell; + height: 40px; + text-align: center; + vertical-align: middle; + width: 40px; +} + +.selected { + border: 2px solid black; + border-radius: 20px; +} + +#bounding-box { + border: 1px solid black; + border-radius: 10px; + margin: 50px; + padding: 15px; + text-align: center; + width: 600px; +} + +#instructions { + text-align: left; +} + +#treatment-list { + display: inline-block; +} diff --git a/chromium/chrome/browser/resources/chromeos/salsa.html b/chromium/chrome/browser/resources/chromeos/salsa.html new file mode 100644 index 00000000000..22cbfb10e81 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/salsa.html @@ -0,0 +1,47 @@ +<!DOCTYPE HTML> +<html> +<head> + <meta charset="utf-8"> + <title>Salsa</title> + <link rel="stylesheet" href="salsa.css"> + <script src="salsa.js"></script> +</head> + +<body> +<div id="bounding-box"> + <h1 class="title">Salsa</h1> + + <div id="invalid_treatment_info" hidden> + I'm afraid there has been some problem determining which treatments to use + for your experiment. Please try to copy/paste the URL again and refresh + this page. If the problem persists please contact the person running the + experiment. + </div> + + <div id="valid_treatment_info"> + <div id="treatment-list"> + <div id="treatment-header">Available Treatments:</div> + <div id="treatment-template" class="treatment" hidden></div> + </div> + + <p class='bold'>Instructions</p> + + <ul id="instructions"> + <li> <span class='bold'>Click</span> or use your <span class='bold'>arrow + keys</span> to change the selected treatment. + + <li> Treatments are ordered randomly, so there is no special significance + to their labels. + + <li> When you navigate away from this page your settings will be returned + to normal. If the browser crashes, and/or you experience unusual behavior + after this experiment, you can manually reset your settings to their + default values at <a href="chrome://gesture">http://gesture</a>. + </ul> + + <p class='bold'>Thank you for your participation!</p> + </div> +</div> + +</body> +</html> diff --git a/chromium/chrome/browser/resources/chromeos/salsa.js b/chromium/chrome/browser/resources/chromeos/salsa.js new file mode 100644 index 00000000000..4525b1c8402 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/salsa.js @@ -0,0 +1,147 @@ +// Copyright 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Redefine '$' here rather than including 'cr.js', since this is +// the only function needed. This allows this file to be loaded +// in a browser directly for layout and some testing purposes. +var $ = function(id) { return document.getElementById(id); }; + +var currentTreatment = 0; +var treatments = []; + +/** + * Take a string of hex like '74657374' and return the ascii version 'test'. + * @param {string} str The string of hex characters to convert to ascii + * @return {string} The ASCII values of those hex encoded characters + */ +function hexToChars(str) { + var decoded = ''; + if (str.length % 2 == 0) { + for (var pos = str.length; pos > 0; pos = pos - 2) { + var c = String.fromCharCode(parseInt(str.substring(pos - 2, pos), 16)); + decoded = c + decoded; + } + } + return decoded; +} + +/** + * Extract the experiment information out of the encoded URL string. + * The format is as follows: + * chrome://salsa/#HEX_ENCODED_EXPERIMENT + * Experiments are encoded as: + * treatment1+treatment2+...+treatmentn + * Each treatment is of the form: + * preference1,preference2,...,preferencen + * Each preference is of the form: + * name:value + * This function returns an object storing all the parsed data. + * @param {string} url The URL to parse the experiment from + * @return {list} a list of objects, each representing a single treatment + * and consisting of a set of preference name -> value pairs + */ +function parseURL(url) { + var match = url.match('#([0-9ABCDEFabcdef]*)'); + var experimentString = match ? match[1] : ''; + experimentString = hexToChars(experimentString); + + var treatmentsFound = []; + if (experimentString == '') + return treatmentsFound; + + var treatmentStrings = experimentString.split('+'); + for (var i = 0; i < treatmentStrings.length; i++) { + var prefStrings = treatmentStrings[i].split(','); + treatment = []; + for (var j = 0; j < prefStrings.length; j++) { + var key = prefStrings[j].split(':')[0]; + var value = prefStrings[j].split(':')[1]; + treatment.push({'key': key, 'value': value}); + } + treatmentsFound.push(treatment); + } + + return treatmentsFound; +} + +function setPreferenceValue(key, value) { + chrome.send('salsaSetPreferenceValue', [key, parseFloat(value)]); +} + +function backupPreferenceValue(key) { + chrome.send('salsaBackupPreferenceValue', [key]); +} + +function handleKeyPress(e) { + e = e || window.event; + var selectedTreatment = currentTreatment; + + if (e.keyCode == '37' || e.keyCode == '38') { + selectedTreatment = currentTreatment - 1; + if (selectedTreatment < 0) + selectedTreatment = 0; + } else if (e.keyCode == '39' || e.keyCode == '40') { + selectedTreatment = currentTreatment + 1; + if (selectedTreatment >= treatments.length) + selectedTreatment = treatments.length - 1; + } + + if (selectedTreatment != currentTreatment) + applyTreatment(selectedTreatment); +} + +function applyTreatment(treatment_number) { + if (treatment_number < 0) + treatment_number = 0; + if (treatment_number >= treatments.length) + treatment_number = treatments.length; + + $('treatment' + currentTreatment).className = 'treatment'; + currentTreatment = treatment_number; + $('treatment' + currentTreatment).className = 'selected treatment'; + + for (var i = 0; i < treatments[treatment_number].length; i++) { + var key = treatments[treatment_number][i].key; + var value = treatments[treatment_number][i].value; + setPreferenceValue(key, value); + } +} + +function initialize() { + // Parse the experiment string in the URL. + treatments = parseURL(document.URL); + + // Update the available treatments list. + for (var i = 0; i < treatments.length; i++) { + var newTreatment = $('treatment-template').cloneNode(true); + newTreatment.id = 'treatment' + i.toString(); + newTreatment.removeAttribute('hidden'); + newTreatment.onclick = function() { + applyTreatment(parseInt(this.textContent)); + }; + newTreatment.textContent = i.toString(); + $('treatment-list').appendChild(newTreatment); + } + + if (treatments.length > 0) { + // Store a copy of the settings right now so you can reset them afterwards. + for (var i = 0; i < treatments[0].length; i++) + backupPreferenceValue(treatments[0][i].key); + + // Select Treatment 0 to start + applyTreatment(0); + } else { + // Make the error message visible and hide everything else + $('invalid_treatment_info').removeAttribute('hidden'); + var div = $('valid_treatment_info'); + div.parentNode.removeChild(div); + } +} + +/** + * A key handler so the user can use the arrow keys to select their treatments. + * This should fire any time they press a key + */ +document.onkeydown = handleKeyPress; +document.addEventListener('DOMContentLoaded', initialize); diff --git a/chromium/chrome/browser/resources/chromeos/sim_unlock.css b/chromium/chrome/browser/resources/chromeos/sim_unlock.css new file mode 100644 index 00000000000..d552febe98b --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/sim_unlock.css @@ -0,0 +1,100 @@ +/* Copyright (c) 2012 The Chromium Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +.error { + color: red; +} + +#pin-error-msg { + height: 25px; + margin: 5px auto 5px auto; +} + +.content-area { + max-height: 125px; + overflow: auto; +} + +.change-pin-content-area { + height: 156px; + overflow: auto; + padding: 10px 15px 5px 15px; + width: 320px; +} + +.choose-pin-content-area { + max-height: 125px; + min-height: 120px; + overflow: auto; + padding: 10px 15px 5px 15px; + width: 320px; +} + +.input-area { + margin: 10px auto 25px auto; + width: 125px; +} + +#pin-input-area { + margin-top: 30px; +} + +#puk-input-area { + margin-bottom: 0; +} + +#puk-content-area { + max-height: 163px; +} + +.code-input { + -webkit-border-radius: 2px; + border: 1px solid #aaa; + font-size: inherit; + padding: 3px; +} + +#locked-puk-action-area { + -webkit-box-pack: center; +} + +#disabled-sim-action-area { + -webkit-box-pack: center; +} + +#puk-warning-msg { + padding-bottom: 6px; +} + +#puk-enter-msg { + padding-top: 6px; +} + +#choose-pin-msg { + padding-bottom: 6px; +} + +#choose-pin-error { + padding-top: 6px; +} + +.label { + margin: 5px 5px 5px 0; + padding: 5px 5px 5px 0; + width: 150px; +} + +.input-with-label { + display: -webkit-box; +} + +.choose-pin-input-area { + margin: 5px 5px 5px 5px; + width: 125px; +} + +#choose-pin-action-area { + padding: 6px; +} diff --git a/chromium/chrome/browser/resources/chromeos/sim_unlock.html b/chromium/chrome/browser/resources/chromeos/sim_unlock.html new file mode 100644 index 00000000000..f2a969b47dc --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/sim_unlock.html @@ -0,0 +1,143 @@ +<!DOCTYPE HTML> +<html i18n-values="dir:textdirection"> +<head> +<meta charset="utf-8"> +<title i18n-content="title"></title> +<link rel="stylesheet" href="chrome://resources/css/widgets.css"> +<link rel="stylesheet" href="mobile_dialogs.css"> +<link rel="stylesheet" href="sim_unlock.css"> +<script src="chrome://resources/js/cr.js"></script> +<script src="chrome://resources/js/cr/event_target.js"></script> +<script src="chrome://resources/js/local_strings.js"></script> +<script src="chrome://resources/js/util.js"></script> +<script src="sim_unlock.js"></script> +<script> +var SimUnlock = mobile.SimUnlock; + +function load() { + SimUnlock.initialize(); +} + +document.addEventListener('DOMContentLoaded', load); +</script> +</head> +<body i18n-values=".style.fontFamily:fontfamily;"> + <div id="container" class="container"> + <div id="locked-pin-overlay" class="dialog" hidden> + <h1 i18n-content="enterPinTitle"></h1> + <div id="pin-content-area" class="content-area"> + <div id="pin-error-msg"></div> + <div id="pin-input-area" class="input-area"> + <input id="pin-input" class="code-input" type="password" + maxlength="8" size="14"> + </div> + </div> + <div class="action-area"> + <div class="action-area-right"> + <div class="button-strip"> + <button id="enter-pin-confirm" i18n-content="ok"></button> + <button id="enter-pin-dismiss" i18n-content="cancel"></button> + </div> + </div> + </div> + </div> + <div id="locked-pin-no-tries-overlay" class="dialog" hidden> + <h1 i18n-content="incorrectPinTitle"></h1> + <div id="pin-no-tries-content-area" class="content-area"> + <!-- TODO(nkostylev): Add warning icon. --> + <div id="pin-no-tries-error-msg" i18n-content="noPinTriesLeft"></div> + </div> + <div class="action-area"> + <div class="action-area-right"> + <div class="button-strip"> + <button id="pin-no-tries-proceed" i18n-content="enterPukButton"> + </button> + <button id="pin-no-tries-dismiss" i18n-content="cancel"></button> + </div> + </div> + </div> + </div> + <div id="locked-puk-overlay" class="dialog" hidden> + <h1 i18n-content="enterPukTitle"></h1> + <div id="puk-content-area" class="content-area"> + <div id="puk-warning-msg" i18n-content="enterPukWarning" class="error"> + </div> + <div id="puk-enter-msg" i18n-content="enterPukMessage"></div> + <div id="puk-input-area" class="input-area"> + <input id="puk-input" class="code-input" type="password" + maxlength="8" size="14"> + </div> + </div> + <div class="action-area"> + <div class="action-area-right"> + <div class="button-strip"> + <button id="enter-puk-confirm" i18n-content="ok"></button> + <button id="enter-puk-dismiss" i18n-content="cancel"></button> + </div> + </div> + </div> + </div> + <div id="choose-pin-overlay" class="dialog" hidden> + <h1 id="choose-pin-title" i18n-content="choosePinTitle"></h1> + <div id="choose-pin-content-area" class="choose-pin-content-area"> + <div id="choose-pin-msg" i18n-content="choosePinMessage"></div> + <div class="input-with-label"> + <div id="old-pin-label" i18n-content="oldPin" class="label" hidden> + </div> + <div id="old-pin-input-area" class="choose-pin-input-area" hidden> + <input id="old-pin-input" class="code-input" type="password" + maxlength="8" size="14"> + </div> + </div> + <div class="input-with-label"> + <div id="new-pin-label" i18n-content="newPin" class="label"></div> + <div id="new-pin-input-area" class="choose-pin-input-area"> + <input id="new-pin-input" class="code-input" type="password" + maxlength="8" size="14"> + </div> + </div> + <div class="input-with-label"> + <div id="retype-new-pin-label" i18n-content="retypeNewPin" + class="label"></div> + <div id="retype-new-pin-input-area" class="choose-pin-input-area"> + <input id="retype-new-pin-input" class="code-input" type="password" + maxlength="8" size="14"> + </div> + </div> + <div id="choose-pin-error" class="error" + i18n-content="pinsDontMatchMessage" hidden></div> + </div> + <div id="choose-pin-action-area" class="action-area"> + <div class="action-area-right"> + <div class="button-strip"> + <button id="choose-pin-confirm" i18n-content="ok"></button> + <button id="choose-pin-dismiss" i18n-content="cancel"></button> + </div> + </div> + </div> + </div> + <div id="locked-puk-no-tries-overlay" class="dialog" hidden> + <h1 i18n-content="enterPukTitle"></h1> + <div id="puk-no-tries-content-area" class="content-area"> + <div id="puk-no-tries-msg" i18n-content="noPukTriesLeft"></div> + </div> + <div id="locked-puk-action-area" class="action-area"> + <div class="button-strip"> + <button id="puk-no-tries-confirm" i18n-content="ok"></button> + </div> + </div> + </div> + <div id="sim-disabled-overlay" class="dialog" hidden> + <h1 i18n-content="simDisabledTitle"></h1> + <div id="sim-disabled-content-area" class="content-area"> + <div id="sim-disabled-msg" i18n-content="simDisabledMessage"></div> + </div> + <div id="disabled-sim-action-area" class="action-area"> + <div class="button-strip"> + <button id="sim-disabled-confirm" i18n-content="ok"></button> + </div> + </div> + </div> + </div> +</body> +</html> diff --git a/chromium/chrome/browser/resources/chromeos/sim_unlock.js b/chromium/chrome/browser/resources/chromeos/sim_unlock.js new file mode 100644 index 00000000000..c77ccbd911f --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/sim_unlock.js @@ -0,0 +1,434 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +cr.define('mobile', function() { + + function SimUnlock() { + } + + cr.addSingletonGetter(SimUnlock); + + // State of the dialog. + SimUnlock.SIM_UNLOCK_LOADING = -1; + SimUnlock.SIM_ABSENT_NOT_LOCKED = 0, + SimUnlock.SIM_NOT_LOCKED_ASK_PIN = 1; + SimUnlock.SIM_NOT_LOCKED_CHANGE_PIN = 2; + SimUnlock.SIM_LOCKED_PIN = 3; + SimUnlock.SIM_LOCKED_NO_PIN_TRIES_LEFT = 4; + SimUnlock.SIM_LOCKED_PUK = 5; + SimUnlock.SIM_LOCKED_NO_PUK_TRIES_LEFT = 6; + SimUnlock.SIM_DISABLED = 7; + + // Mode of the dialog. + SimUnlock.SIM_DIALOG_UNLOCK = 0; + SimUnlock.SIM_DIALOG_CHANGE_PIN = 1; + SimUnlock.SIM_DIALOG_SET_LOCK_ON = 2; + SimUnlock.SIM_DIALOG_SET_LOCK_OFF = 3; + + // Error codes. + SimUnlock.ERROR_PIN = 'incorrectPin'; + SimUnlock.ERROR_PUK = 'incorrectPuk'; + SimUnlock.ERROR_OK = 'ok'; + + // Misc constants. + SimUnlock.PIN_MIN_LENGTH = 4; + SimUnlock.PUK_LENGTH = 8; + + SimUnlock.localStrings_ = new LocalStrings(); + + SimUnlock.prototype = { + initialized_: false, + mode_: SimUnlock.SIM_DIALOG_UNLOCK, + pukValue_: '', + defaultDialogSize_: { + 'width': window.innerWidth, + 'height': window.innerHeight + }, + state_: SimUnlock.SIM_UNLOCK_LOADING, + + changeState_: function(simInfo) { + var newState = simInfo.state; + var error = simInfo.error; + var tries = simInfo.tries; + var pinMessage; + this.hideAll_(); + switch (newState) { + case SimUnlock.SIM_UNLOCK_LOADING: + break; + case SimUnlock.SIM_ABSENT_NOT_LOCKED: + SimUnlock.close(); + break; + case SimUnlock.SIM_LOCKED_PIN: + if (error == SimUnlock.ERROR_OK) { + pinMessage = SimUnlock.localStrings_.getStringF( + 'enterPinTriesMessage', tries); + $('pin-error-msg').classList.remove('error'); + } else if (error == SimUnlock.ERROR_PIN) { + pinMessage = SimUnlock.localStrings_.getStringF( + 'incorrectPinTriesMessage', tries); + $('pin-error-msg').classList.add('error'); + } + $('pin-error-msg').textContent = pinMessage; + $('pin-input').value = ''; + SimUnlock.enablePinDialog(true); + $('locked-pin-overlay').hidden = false; + $('pin-input').focus(); + break; + case SimUnlock.SIM_NOT_LOCKED_ASK_PIN: + if (error == SimUnlock.ERROR_OK) { + pinMessage = SimUnlock.localStrings_.getString('enterPinMessage'); + $('pin-error-msg').classList.remove('error'); + } else if (error == SimUnlock.ERROR_PIN) { + pinMessage = SimUnlock.localStrings_.getStringF( + 'incorrectPinTriesMessage', tries); + $('pin-error-msg').classList.add('error'); + } + $('pin-error-msg').textContent = pinMessage; + $('pin-input').value = ''; + SimUnlock.enablePinDialog(true); + $('locked-pin-overlay').hidden = false; + $('pin-input').focus(); + break; + case SimUnlock.SIM_NOT_LOCKED_CHANGE_PIN: + SimUnlock.prepareChoosePinDialog(true); + if (error == SimUnlock.ERROR_OK) { + pinMessage = SimUnlock.localStrings_.getString('changePinMessage'); + $('choose-pin-msg').classList.remove('error'); + } else if (error == SimUnlock.ERROR_PIN) { + pinMessage = SimUnlock.localStrings_.getStringF( + 'incorrectPinTriesMessage', tries); + $('choose-pin-msg').classList.add('error'); + } + $('choose-pin-msg').textContent = pinMessage; + $('old-pin-input').value = ''; + $('new-pin-input').value = ''; + $('retype-new-pin-input').value = ''; + $('choose-pin-overlay').hidden = false; + SimUnlock.enableChoosePinDialog(true); + $('old-pin-input').focus(); + break; + case SimUnlock.SIM_LOCKED_NO_PIN_TRIES_LEFT: + $('locked-pin-no-tries-overlay').hidden = false; + break; + case SimUnlock.SIM_LOCKED_PUK: + $('puk-input').value = ''; + if (tries && tries >= 0) { + var pukMessage = SimUnlock.localStrings_.getStringF( + 'enterPukWarning', tries); + $('puk-warning-msg').textContent = pukMessage; + } + $('enter-puk-confirm').disabled = true; + $('locked-puk-overlay').hidden = false; + $('puk-input').focus(); + + // Resize the dialog to accomodate the PUK contents. + this.updateDialogSize_(0, 45); + break; + case SimUnlock.SIM_LOCKED_NO_PUK_TRIES_LEFT: + $('locked-puk-no-tries-overlay').hidden = false; + break; + case SimUnlock.SIM_DISABLED: + $('sim-disabled-overlay').hidden = false; + break; + } + this.state_ = newState; + }, + + /** + * Returns current state of the dialog. + * @type {number} value of the state. + */ + get state() { + return this.state_; + }, + + updateDialogSize_: function(deltaX, deltaY) { + window.resizeTo(this.defaultDialogSize_.width + deltaX, + this.defaultDialogSize_.height + deltaY); + }, + + hideAll_: function() { + $('locked-pin-overlay').hidden = true; + $('locked-pin-no-tries-overlay').hidden = true; + $('locked-puk-overlay').hidden = true; + $('choose-pin-overlay').hidden = true; + $('locked-puk-no-tries-overlay').hidden = true; + $('sim-disabled-overlay').hidden = true; + }, + + newPinEntered_: function(newPin, newPin2) { + var changePinMode = this.state_ == SimUnlock.SIM_NOT_LOCKED_CHANGE_PIN; + if (newPin.length < SimUnlock.PIN_MIN_LENGTH || + newPin2.length < SimUnlock.PIN_MIN_LENGTH || + (changePinMode && + $('old-pin-input').value.length < SimUnlock.PIN_MIN_LENGTH)) { + return; + } + if (newPin != newPin2) { + $('choose-pin-error').hidden = false; + $('old-pin-input').value = ''; + $('new-pin-input').value = ''; + $('retype-new-pin-input').value = ''; + if (changePinMode) + $('old-pin-input').focus(); + else + $('new-pin-input').focus(); + } else { + $('choose-pin-error').hidden = true; + SimUnlock.enableChoosePinDialog(false); + if (changePinMode) { + var oldPin = $('old-pin-input').value; + chrome.send('changePinCode', [oldPin, newPin]); + } else { + chrome.send('enterPukCode', [this.pukValue_, newPin]); + this.pukValue_ = ''; + } + } + }, + + pukEntered_: function(pukValue) { + if (pukValue.length < SimUnlock.PUK_LENGTH) + return; + this.pukValue_ = pukValue; + this.hideAll_(); + SimUnlock.prepareChoosePinDialog(false); + SimUnlock.enableChoosePinDialog(true); + $('new-pin-input').value = ''; + $('retype-new-pin-input').value = ''; + $('choose-pin-overlay').hidden = false; + $('new-pin-input').focus(); + this.updateDialogSize_(0, 18); + }, + + updateSimStatus_: function(simInfo) { + this.changeState_(simInfo); + }, + }; + + SimUnlock.cancel = function() { + chrome.send('cancel'); + SimUnlock.close(); + }; + + SimUnlock.close = function() { + window.close(); + }; + + SimUnlock.initialize = function() { + this.initialized_ = true; + + var modePattern = /(^\?|&)mode=([^&#]*)/; + var results = modePattern.exec(window.location.search); + if (results == null) { + this.mode_ = SimUnlock.SIM_DIALOG_UNLOCK; + } else { + var mode = results[2]; + if (mode == 'change-pin') + this.mode_ = SimUnlock.SIM_DIALOG_CHANGE_PIN; + else if (mode == 'set-lock-on') + this.mode_ = SimUnlock.SIM_DIALOG_SET_LOCK_ON; + else if (mode == 'set-lock-off') + this.mode_ = SimUnlock.SIM_DIALOG_SET_LOCK_OFF; + } + + // PIN input screen. + $('pin-input').addEventListener('keydown', function(event) { + if (event.keyIdentifier == 'Enter') { + SimUnlock.submitPin(); + return; + } + }); + $('pin-input').addEventListener('keyup', function(event) { + $('enter-pin-confirm').disabled = + $('enter-pin-dismiss').disabled || + this.value.length < SimUnlock.PIN_MIN_LENGTH; + }); + $('pin-input').addEventListener('textInput', + SimUnlock.processInput.bind(this)); + $('enter-pin-confirm').addEventListener('click', function(event) { + SimUnlock.submitPin(); + }); + $('enter-pin-dismiss').addEventListener('click', function(event) { + SimUnlock.cancel(); + }); + + // No PIN retries left screen. + $('pin-no-tries-proceed').addEventListener('click', function(event) { + chrome.send('proceedToPukInput'); + }); + $('pin-no-tries-dismiss').addEventListener('click', function(event) { + SimUnlock.cancel(); + }); + + // PUK input screen. + $('puk-input').addEventListener('keydown', function(event) { + if (event.keyIdentifier == 'Enter') { + SimUnlock.pukEntered($('puk-input').value); + return; + } + }); + $('puk-input').addEventListener('keyup', function(event) { + $('enter-puk-confirm').disabled = + $('enter-puk-dismiss').disabled || + this.value.length < SimUnlock.PUK_LENGTH; + }); + $('puk-input').addEventListener('textInput', + SimUnlock.processInput.bind(this)); + $('enter-puk-confirm').addEventListener('click', function(event) { + SimUnlock.pukEntered($('puk-input').value); + }); + $('enter-puk-dismiss').addEventListener('click', function(event) { + SimUnlock.cancel(); + }); + + // Change PIN / new PIN screen. + $('old-pin-input').addEventListener('keydown', function(event) { + if (event.keyIdentifier == 'Enter') { + if (this.value.length >= SimUnlock.PIN_MIN_LENGTH) + $('new-pin-input').focus(); + return; + } + }); + $('old-pin-input').addEventListener('keyup', function(event) { + $('choose-pin-confirm').disabled = + $('choose-pin-dismiss').disabled || + this.value.length < SimUnlock.PIN_MIN_LENGTH || + $('new-pin-input').value.length < SimUnlock.PIN_MIN_LENGTH || + $('retype-new-pin-input').value.length < SimUnlock.PIN_MIN_LENGTH; + }); + $('old-pin-input').addEventListener('textInput', + SimUnlock.processInput.bind(this)); + $('new-pin-input').addEventListener('keydown', function(event) { + if (event.keyIdentifier == 'Enter') { + if (this.value.length >= SimUnlock.PIN_MIN_LENGTH) + $('retype-new-pin-input').focus(); + return; + } + }); + $('new-pin-input').addEventListener('keyup', function(event) { + var changePinMode = + SimUnlock.getInstance().state == SimUnlock.SIM_NOT_LOCKED_CHANGE_PIN; + var oldPinLengthOk = + $('old-pin-input').value.length >= SimUnlock.PIN_MIN_LENGTH; + var oldPinOk = !changePinMode || oldPinLengthOk; + $('choose-pin-confirm').disabled = + $('choose-pin-dismiss').disabled || + this.value.length < SimUnlock.PIN_MIN_LENGTH || + $('retype-new-pin-input').value.length < SimUnlock.PIN_MIN_LENGTH || + !oldPinOk; + }); + $('new-pin-input').addEventListener('textInput', + SimUnlock.processInput.bind(this)); + $('retype-new-pin-input').addEventListener('keyup', function(event) { + var changePinMode = + SimUnlock.getInstance().state == SimUnlock.SIM_NOT_LOCKED_CHANGE_PIN; + var oldPinLengthOk = + $('old-pin-input').value.length >= SimUnlock.PIN_MIN_LENGTH; + var oldPinOk = !changePinMode || oldPinLengthOk; + $('choose-pin-confirm').disabled = + $('choose-pin-dismiss').disabled || + this.value.length < SimUnlock.PIN_MIN_LENGTH || + $('new-pin-input').value.length < SimUnlock.PIN_MIN_LENGTH || + !oldPinOk; + }); + $('retype-new-pin-input').addEventListener('keydown', function(event) { + if (event.keyIdentifier == 'Enter') { + SimUnlock.newPinEntered($('new-pin-input').value, + $('retype-new-pin-input').value); + return; + } + }); + $('retype-new-pin-input').addEventListener('textInput', + SimUnlock.processInput.bind(this)); + $('choose-pin-confirm').addEventListener('click', function(event) { + SimUnlock.newPinEntered($('new-pin-input').value, + $('retype-new-pin-input').value); + }); + $('choose-pin-dismiss').addEventListener('click', function(event) { + SimUnlock.cancel(); + }); + + // SIM blocked screens. + $('puk-no-tries-confirm').addEventListener('click', function(event) { + SimUnlock.close(); + }); + $('sim-disabled-confirm').addEventListener('click', function(event) { + SimUnlock.close(); + }); + chrome.send('simStatusInitialize', [this.mode_]); + }; + + SimUnlock.enablePinDialog = function(enabled) { + $('pin-input').disabled = !enabled; + // Ok button is initially disabled. + $('enter-pin-confirm').disabled = true; + $('enter-pin-dismiss').disabled = !enabled; + }; + + SimUnlock.enableChoosePinDialog = function(enabled) { + $('old-pin-input').disabled = !enabled; + $('new-pin-input').disabled = !enabled; + $('retype-new-pin-input').disabled = !enabled; + // Ok button is initially disabled. + $('choose-pin-confirm').disabled = true; + $('choose-pin-dismiss').disabled = !enabled; + }; + + SimUnlock.submitPin = function() { + var pin = $('pin-input').value; + if (pin.length < SimUnlock.PIN_MIN_LENGTH) + return; + SimUnlock.enablePinDialog(false); + chrome.send('enterPinCode', [pin]); + }; + + SimUnlock.prepareChoosePinDialog = function(changePin) { + // Our dialog has different height than choose-pin step of the + // unlock process which we're reusing. + if (changePin) { + $('choose-pin-content-area').classList.remove('choose-pin-content-area'); + $('choose-pin-content-area').classList.add('change-pin-content-area'); + var title = SimUnlock.localStrings_.getString('changePinTitle'); + $('choose-pin-title').textContent = title; + } else { + $('choose-pin-content-area').classList.remove('change-pin-content-area'); + $('choose-pin-content-area').classList.add('choose-pin-content-area'); + var pinMessage = SimUnlock.localStrings_.getString('choosePinMessage'); + $('choose-pin-msg').classList.remove('error'); + $('choose-pin-msg').textContent = pinMessage; + var title = SimUnlock.localStrings_.getString('choosePinTitle'); + $('choose-pin-title').textContent = title; + } + $('old-pin-label').hidden = !changePin; + $('old-pin-input-area').hidden = !changePin; + }; + + SimUnlock.newPinEntered = function(newPin, newPin2) { + SimUnlock.getInstance().newPinEntered_(newPin, newPin2); + }; + + SimUnlock.pukEntered = function(pukValue) { + SimUnlock.getInstance().pukEntered_(pukValue); + }; + + /** + * Processes PIN/PUK fields input, restricting it to 0..9. + */ + SimUnlock.processInput = function(event) { + if (/[^0-9]+/gi.test(event.data)) + event.preventDefault(); + }; + + SimUnlock.simStateChanged = function(simInfo) { + SimUnlock.getInstance().updateSimStatus_(simInfo); + }; + + // Export + return { + SimUnlock: SimUnlock + }; + +}); + +disableTextSelectAndDrag(); diff --git a/chromium/chrome/browser/resources/chromeos/slow.css b/chromium/chrome/browser/resources/chromeos/slow.css new file mode 100644 index 00000000000..fec23696afe --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/slow.css @@ -0,0 +1,48 @@ +/* Copyright 2013 The Chromium Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +body { + background-color: #E6E6E6; + font-family: Helvetica, Arial, sans-serif; + font-size: 12pt; + margin: 50px 40px 20px 40px; + text-align: center; +} + +#container { + background-color: #fbfbfb; + border: 1px solid #AAA; + border-bottom: 1px solid #888; + border-radius: 3px; + box-shadow: 0 2px 2px #AAA; + color: #666; + margin: auto; + max-width: 540px; + min-height: 29px; + min-width: 200px; + padding: 20px 60px; + text-align: start; +} + +#container-inner { + background-color: #fbfbfb; + margin-top: 25px; + text-align: center; +} + +button { + -webkit-user-select: none; + background-image: -webkit-linear-gradient(#ededed, #ededed 38%, #dedede); + border: 1px solid rgba(0, 0, 0, 0.25); + border-radius: 2px; + box-shadow: 0 1px 0 rgba(0, 0, 0, 0.08), + inset 0 1px 2px rgba(255, 255, 255, 0.75); + margin-top: 10px; + min-height: 29px; + min-width: 65px; + padding: 8px 13px; + text-shadow: 0 1px 0 rgb(240, 240, 240); +} + diff --git a/chromium/chrome/browser/resources/chromeos/slow.html b/chromium/chrome/browser/resources/chromeos/slow.html new file mode 100644 index 00000000000..e4e3bc2e745 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/slow.html @@ -0,0 +1,29 @@ +<!DOCTYPE HTML> +<html i18n-values="dir:textdirection"> +<head> +<meta charset="utf-8"> +<meta name="viewport" content="width=device-width, initial-scale=1.0, + maximum-scale=1.0, user-scalable=no"> +<link rel="stylesheet" href="chrome://resources/css/widgets.css"> +<link rel="stylesheet" href="slow.css"> +<script src="chrome://resources/js/load_time_data.js"></script> +<script src="chrome://resources/js/cr.js"></script> +<script src="chrome://resources/js/cr/event_target.js"></script> +<script src="chrome://resources/js/util.js"></script> +<script src="chrome://slow/slow.js"></script> +<script src="chrome://slow/strings.js"></script> +</head> +<body i18n-values=".style.fontFamily:fontfamily;"> + <div id="container" class="container"> + <div i18n-content="slowDescription"></div> + <br> + <div i18n-values=".innerHTML:slowWarning"></div> + <div id="container-inner" width=100% class="container-inner"> + <button id="slow-disable" i18n-content="slowDisable" hidden></button> + <button id="slow-enable" i18n-content="slowEnable" hidden></button> + </div> + </div> +<script src="chrome://resources/js/i18n_template2.js"></script> +<script src="chrome://resources/js/jstemplate_compiled.js"></script> +</body> +</html> diff --git a/chromium/chrome/browser/resources/chromeos/slow.js b/chromium/chrome/browser/resources/chromeos/slow.js new file mode 100644 index 00000000000..14a5e82cec5 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/slow.js @@ -0,0 +1,48 @@ +// Copyright 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +cr.define('options', function() { + function Slow() { + } + cr.addSingletonGetter(Slow); + + Slow.prototype = { + initialized_: false + }; + + Slow.initialize = function() { + $('slow-disable').addEventListener('click', function(event) { + Slow.disableTracing(); + }); + $('slow-enable').addEventListener('click', function(event) { + Slow.enableTracing(); + }); + this.initialized_ = true; + }; + + Slow.disableTracing = function() { + chrome.send('disableTracing'); + }; + + Slow.enableTracing = function() { + chrome.send('enableTracing'); + }; + + Slow.tracingPrefChanged = function(enabled) { + $('slow-disable').hidden = !enabled; + $('slow-enable').hidden = enabled; + }; + + // Export + return { + Slow: Slow + }; +}); + +function load() { + options.Slow.initialize(); + chrome.send('loadComplete'); +} + +document.addEventListener('DOMContentLoaded', load); diff --git a/chromium/chrome/browser/resources/chromeos/sounds/lock.wav b/chromium/chrome/browser/resources/chromeos/sounds/lock.wav Binary files differnew file mode 100644 index 00000000000..e9ee817dc69 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/sounds/lock.wav diff --git a/chromium/chrome/browser/resources/chromeos/sounds/shutdown.wav b/chromium/chrome/browser/resources/chromeos/sounds/shutdown.wav Binary files differnew file mode 100644 index 00000000000..08c3c5196b2 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/sounds/shutdown.wav diff --git a/chromium/chrome/browser/resources/chromeos/sounds/spoken_feedback_disabled.wav b/chromium/chrome/browser/resources/chromeos/sounds/spoken_feedback_disabled.wav Binary files differnew file mode 100644 index 00000000000..0255fe3a304 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/sounds/spoken_feedback_disabled.wav diff --git a/chromium/chrome/browser/resources/chromeos/sounds/spoken_feedback_enabled.wav b/chromium/chrome/browser/resources/chromeos/sounds/spoken_feedback_enabled.wav Binary files differnew file mode 100644 index 00000000000..45627fe5cdf --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/sounds/spoken_feedback_enabled.wav diff --git a/chromium/chrome/browser/resources/chromeos/sounds/startup.wav b/chromium/chrome/browser/resources/chromeos/sounds/startup.wav Binary files differnew file mode 100644 index 00000000000..135be0ce757 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/sounds/startup.wav diff --git a/chromium/chrome/browser/resources/chromeos/sounds/unlock.wav b/chromium/chrome/browser/resources/chromeos/sounds/unlock.wav Binary files differnew file mode 100644 index 00000000000..cd1b8413729 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/sounds/unlock.wav diff --git a/chromium/chrome/browser/resources/chromeos/sounds/volume_adjust.wav b/chromium/chrome/browser/resources/chromeos/sounds/volume_adjust.wav Binary files differnew file mode 100644 index 00000000000..3176f4cb20a --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/sounds/volume_adjust.wav diff --git a/chromium/chrome/browser/resources/chromeos/speech_synthesis/manifest.json b/chromium/chrome/browser/resources/chromeos/speech_synthesis/manifest.json new file mode 100644 index 00000000000..2ce29ef3fc9 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/speech_synthesis/manifest.json @@ -0,0 +1,65 @@ +{ + // NOTE: Keep two json files in this directory in sync. The only difference + // should be incognito:split in Guest mode version. + "name": "Chrome OS built-in text-to-speech extension", + "version": "0.0.2", + "description": "Text-to-speech (TTS) voice extension using Native Client technology.", + "manifest_version": 2, + "background": { + "scripts": [ + "voice_data_hmm_de-DE.js", + "voice_data_hmm_en-GB.js", + "voice_data_hmm_en-US.js", + "voice_data_hmm_es-ES.js", + "voice_data_hmm_fr-FR.js", + "voice_data_hmm_it-IT.js", + "tts_controller.js", + "tts_main.js" + ] + }, + "permissions": [ + "ttsEngine", + "unlimitedStorage" + ], + "key": "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDlKEJseIIbKFyX0BCWNYOWlPEUt1IxBvIoW1PI7DTmipbwyVr3s2EprewYdtr9hCO5Yzs5w/ai1Xnhet5PLAsMje6ZP0Kvq0tlVfaYF8oQHBPF+ifx31RBT7Cn+ZVKLq1fxrwzY063GVhW+CAr06Ar8YRFXtFoC4FHlUNDIoSb4wIDAQAB", + "tts_engine": { + "voices": [ + { + "voice_name": "Chrome OS French", + "lang": "fr-FR", + "gender": "female", + "event_types": [ "start", "word", "end", "error" ] + }, + { + "voice_name": "Chrome OS German", + "lang": "de-DE", + "gender": "female", + "event_types": [ "start", "word", "end", "error" ] + }, + { + "voice_name": "Chrome OS Italian", + "lang": "it-IT", + "gender": "female", + "event_types": [ "start", "word", "end", "error" ] + }, + { + "voice_name": "Chrome OS US English", + "lang": "en-US", + "gender": "female", + "event_types": [ "start", "word", "end", "error" ] + }, + { + "voice_name": "Chrome OS British English", + "lang": "en-GB", + "gender": "female", + "event_types": [ "start", "word", "end", "error" ] + }, + { + "voice_name": "Chrome OS Spanish", + "lang": "es-ES", + "gender": "female", + "event_types": [ "start", "word", "end", "error" ] + } + ] + } +} diff --git a/chromium/chrome/browser/resources/chromeos/speech_synthesis/manifest_guest.json b/chromium/chrome/browser/resources/chromeos/speech_synthesis/manifest_guest.json new file mode 100644 index 00000000000..0574a30fdac --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/speech_synthesis/manifest_guest.json @@ -0,0 +1,66 @@ +{ + // NOTE: Keep two json files in this directory in sync. The only difference + // should be incognito:split in Guest mode version. + "name": "Chrome OS built-in text-to-speech extension", + "version": "0.0.2", + "description": "Text-to-speech (TTS) voice extension using Native Client technology.", + "manifest_version": 2, + "incognito": "split", + "background": { + "scripts": [ + "voice_data_hmm_de-DE.js", + "voice_data_hmm_en-GB.js", + "voice_data_hmm_en-US.js", + "voice_data_hmm_es-ES.js", + "voice_data_hmm_fr-FR.js", + "voice_data_hmm_it-IT.js", + "tts_controller.js", + "tts_main.js" + ] + }, + "permissions": [ + "ttsEngine", + "unlimitedStorage" + ], + "key": "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDlKEJseIIbKFyX0BCWNYOWlPEUt1IxBvIoW1PI7DTmipbwyVr3s2EprewYdtr9hCO5Yzs5w/ai1Xnhet5PLAsMje6ZP0Kvq0tlVfaYF8oQHBPF+ifx31RBT7Cn+ZVKLq1fxrwzY063GVhW+CAr06Ar8YRFXtFoC4FHlUNDIoSb4wIDAQAB", + "tts_engine": { + "voices": [ + { + "voice_name": "Chrome OS French", + "lang": "fr-FR", + "gender": "female", + "event_types": [ "start", "word", "end", "error" ] + }, + { + "voice_name": "Chrome OS German", + "lang": "de-DE", + "gender": "female", + "event_types": [ "start", "word", "end", "error" ] + }, + { + "voice_name": "Chrome OS Italian", + "lang": "it-IT", + "gender": "female", + "event_types": [ "start", "word", "end", "error" ] + }, + { + "voice_name": "Chrome OS US English", + "lang": "en-US", + "gender": "female", + "event_types": [ "start", "word", "end", "error" ] + }, + { + "voice_name": "Chrome OS British English", + "lang": "en-GB", + "gender": "female", + "event_types": [ "start", "word", "end", "error" ] + }, + { + "voice_name": "Chrome OS Spanish", + "lang": "es-ES", + "gender": "female", + "event_types": [ "start", "word", "end", "error" ] + } + ] + } +} diff --git a/chromium/chrome/browser/resources/chromeos/user_images_grid.js b/chromium/chrome/browser/resources/chromeos/user_images_grid.js new file mode 100644 index 00000000000..a6ee27b1850 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/user_images_grid.js @@ -0,0 +1,752 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +cr.define('options', function() { + /** @const */ var ArrayDataModel = cr.ui.ArrayDataModel; + /** @const */ var Grid = cr.ui.Grid; + /** @const */ var GridItem = cr.ui.GridItem; + /** @const */ var GridSelectionController = cr.ui.GridSelectionController; + /** @const */ var ListSingleSelectionModel = cr.ui.ListSingleSelectionModel; + + /** + * Interval between consecutive camera presence checks in msec. + * @const + */ + var CAMERA_CHECK_INTERVAL_MS = 3000; + + /** + * Interval between consecutive camera liveness checks in msec. + * @const + */ + var CAMERA_LIVENESS_CHECK_MS = 3000; + + /** + * Number of frames recorded by takeVideo(). + * @const + */ + var RECORD_FRAMES = 48; + + /** + * FPS at which camera stream is recorded. + * @const + */ + var RECORD_FPS = 16; + + /** + * Dimensions for camera capture. + * @const + */ + var CAPTURE_SIZE = { + height: 480, + width: 480 + }; + + /** + * Path for internal URLs. + * @const + */ + var CHROME_THEME_PATH = 'chrome://theme'; + + /** + * Creates a new user images grid item. + * @param {{url: string, title: string=, decorateFn: function=, + * clickHandler: function=}} imageInfo User image URL, optional title, + * decorator callback and click handler. + * @constructor + * @extends {cr.ui.GridItem} + */ + function UserImagesGridItem(imageInfo) { + var el = new GridItem(imageInfo); + el.__proto__ = UserImagesGridItem.prototype; + return el; + } + + UserImagesGridItem.prototype = { + __proto__: GridItem.prototype, + + /** @override */ + decorate: function() { + GridItem.prototype.decorate.call(this); + var imageEl = cr.doc.createElement('img'); + // Force 1x scale for chrome://theme URLs. Grid elements are much smaller + // than actual images so there is no need in full scale on HDPI. + var url = this.dataItem.url; + if (url.slice(0, CHROME_THEME_PATH.length) == CHROME_THEME_PATH) + imageEl.src = this.dataItem.url + '@1x'; + else + imageEl.src = this.dataItem.url; + imageEl.title = this.dataItem.title || ''; + if (typeof this.dataItem.clickHandler == 'function') + imageEl.addEventListener('mousedown', this.dataItem.clickHandler); + // Remove any garbage added by GridItem and ListItem decorators. + this.textContent = ''; + this.appendChild(imageEl); + if (typeof this.dataItem.decorateFn == 'function') + this.dataItem.decorateFn(this); + this.setAttribute('role', 'option'); + this.oncontextmenu = function(e) { e.preventDefault(); }; + } + }; + + /** + * Creates a selection controller that wraps selection on grid ends + * and translates Enter presses into 'activate' events. + * @param {cr.ui.ListSelectionModel} selectionModel The selection model to + * interact with. + * @param {cr.ui.Grid} grid The grid to interact with. + * @constructor + * @extends {cr.ui.GridSelectionController} + */ + function UserImagesGridSelectionController(selectionModel, grid) { + GridSelectionController.call(this, selectionModel, grid); + } + + UserImagesGridSelectionController.prototype = { + __proto__: GridSelectionController.prototype, + + /** @override */ + getIndexBefore: function(index) { + var result = + GridSelectionController.prototype.getIndexBefore.call(this, index); + return result == -1 ? this.getLastIndex() : result; + }, + + /** @override */ + getIndexAfter: function(index) { + var result = + GridSelectionController.prototype.getIndexAfter.call(this, index); + return result == -1 ? this.getFirstIndex() : result; + }, + + /** @override */ + handleKeyDown: function(e) { + if (e.keyIdentifier == 'Enter') + cr.dispatchSimpleEvent(this.grid_, 'activate'); + else + GridSelectionController.prototype.handleKeyDown.call(this, e); + } + }; + + /** + * Creates a new user images grid element. + * @param {Object=} opt_propertyBag Optional properties. + * @constructor + * @extends {cr.ui.Grid} + */ + var UserImagesGrid = cr.ui.define('grid'); + + UserImagesGrid.prototype = { + __proto__: Grid.prototype, + + /** @override */ + createSelectionController: function(sm) { + return new UserImagesGridSelectionController(sm, this); + }, + + /** @override */ + decorate: function() { + Grid.prototype.decorate.call(this); + this.dataModel = new ArrayDataModel([]); + this.itemConstructor = UserImagesGridItem; + this.selectionModel = new ListSingleSelectionModel(); + this.inProgramSelection_ = false; + this.addEventListener('dblclick', this.handleDblClick_.bind(this)); + this.addEventListener('change', this.handleChange_.bind(this)); + this.setAttribute('role', 'listbox'); + this.autoExpands = true; + }, + + /** + * Handles double click on the image grid. + * @param {Event} e Double click Event. + * @private + */ + handleDblClick_: function(e) { + // If a child element is double-clicked and not the grid itself, handle + // this as 'Enter' keypress. + if (e.target != this) + cr.dispatchSimpleEvent(this, 'activate'); + }, + + /** + * Handles selection change. + * @param {Event} e Double click Event. + * @private + */ + handleChange_: function(e) { + if (this.selectedItem === null) + return; + + var oldSelectionType = this.selectionType; + + // Update current selection type. + this.selectionType = this.selectedItem.type; + + // Show grey silhouette with the same border as stock images. + if (/^chrome:\/\/theme\//.test(this.selectedItemUrl)) + this.previewElement.classList.add('default-image'); + + this.updatePreview_(); + + var e = new Event('select'); + e.oldSelectionType = oldSelectionType; + this.dispatchEvent(e); + }, + + /** + * Updates the preview image, if present. + * @private + */ + updatePreview_: function() { + var url = this.selectedItemUrl; + if (url && this.previewImage_) { + if (url.slice(0, CHROME_THEME_PATH.length) == CHROME_THEME_PATH) + this.previewImage_.src = url + '@' + window.devicePixelRatio + 'x'; + else + this.previewImage_.src = url; + } + }, + + /** + * Start camera presence check. + * @private + */ + checkCameraPresence_: function() { + if (this.cameraPresentCheckTimer_) { + window.clearTimeout(this.cameraPresentCheckTimer_); + this.cameraPresentCheckTimer_ = null; + } + if (!this.cameraVideo_) + return; + chrome.send('checkCameraPresence'); + }, + + /** + * Whether a camera is present or not. + * @type {boolean} + */ + get cameraPresent() { + return this.cameraPresent_; + }, + set cameraPresent(value) { + this.cameraPresent_ = value; + if (this.cameraLive) + this.cameraImage = null; + // Repeat the check after some time. + this.cameraPresentCheckTimer_ = window.setTimeout( + this.checkCameraPresence_.bind(this), + CAMERA_CHECK_INTERVAL_MS); + }, + + /** + * Whether camera is actually streaming video. May be |false| even when + * camera is present and shown but still initializing. + * @type {boolean} + */ + get cameraOnline() { + return this.previewElement.classList.contains('online'); + }, + set cameraOnline(value) { + this.previewElement.classList[value ? 'add' : 'remove']('online'); + if (value) { + this.cameraLiveCheckTimer_ = window.setInterval( + this.checkCameraLive_.bind(this), CAMERA_LIVENESS_CHECK_MS); + } else if (this.cameraLiveCheckTimer_) { + window.clearInterval(this.cameraLiveCheckTimer_); + this.cameraLiveCheckTimer_ = null; + } + }, + + /** + * Tries to starts camera stream capture. + * @param {function(): boolean} onAvailable Callback that is called if + * camera is available. If it returns |true|, capture is started + * immediately. + */ + startCamera: function(onAvailable, onAbsent) { + this.stopCamera(); + this.cameraStartInProgress_ = true; + navigator.webkitGetUserMedia( + {video: true}, + this.handleCameraAvailable_.bind(this, onAvailable), + this.handleCameraAbsent_.bind(this)); + }, + + /** + * Stops camera capture, if it's currently active. + */ + stopCamera: function() { + this.cameraOnline = false; + if (this.cameraVideo_) + this.cameraVideo_.src = ''; + if (this.cameraStream_) + this.cameraStream_.stop(); + // Cancel any pending getUserMedia() checks. + this.cameraStartInProgress_ = false; + }, + + /** + * Handles successful camera check. + * @param {function(): boolean} onAvailable Callback to call. If it returns + * |true|, capture is started immediately. + * @param {MediaStream} stream Stream object as returned by getUserMedia. + * @private + */ + handleCameraAvailable_: function(onAvailable, stream) { + if (this.cameraStartInProgress_ && onAvailable()) { + this.cameraVideo_.src = window.webkitURL.createObjectURL(stream); + this.cameraStream_ = stream; + } else { + stream.stop(); + } + this.cameraStartInProgress_ = false; + }, + + /** + * Handles camera check failure. + * @param {NavigatorUserMediaError=} err Error object. + * @private + */ + handleCameraAbsent_: function(err) { + this.cameraPresent = false; + this.cameraOnline = false; + this.cameraStartInProgress_ = false; + }, + + /** + * Handles successful camera capture start. + * @private + */ + handleVideoStarted_: function() { + this.cameraOnline = true; + this.handleVideoUpdate_(); + }, + + /** + * Handles camera stream update. Called regularly (at rate no greater then + * 4/sec) while camera stream is live. + * @private + */ + handleVideoUpdate_: function() { + this.lastFrameTime_ = new Date().getTime(); + }, + + /** + * Checks if camera is still live by comparing the timestamp of the last + * 'timeupdate' event with the current time. + * @private + */ + checkCameraLive_: function() { + if (new Date().getTime() - this.lastFrameTime_ > + CAMERA_LIVENESS_CHECK_MS) { + this.cameraPresent = false; + } + }, + + /** + * Type of the selected image (one of 'default', 'profile', 'camera'). + * Setting it will update class list of |previewElement|. + * @type {string} + */ + get selectionType() { + return this.selectionType_; + }, + set selectionType(value) { + this.selectionType_ = value; + var previewClassList = this.previewElement.classList; + previewClassList[value == 'default' ? 'add' : 'remove']('default-image'); + previewClassList[value == 'profile' ? 'add' : 'remove']('profile-image'); + previewClassList[value == 'camera' ? 'add' : 'remove']('camera'); + + var setFocusIfLost = function() { + // Set focus to the grid, if focus is not on UI. + if (!document.activeElement || + document.activeElement.tagName == 'BODY') { + $('user-image-grid').focus(); + } + } + // Timeout guarantees processing AFTER style changes display attribute. + setTimeout(setFocusIfLost, 0); + }, + + /** + * Current image captured from camera as data URL. Setting to null will + * return to the live camera stream. + * @type {string=} + */ + get cameraImage() { + return this.cameraImage_; + }, + set cameraImage(imageUrl) { + this.cameraLive = !imageUrl; + if (this.cameraPresent && !imageUrl) + imageUrl = UserImagesGrid.ButtonImages.TAKE_PHOTO; + if (imageUrl) { + this.cameraImage_ = this.cameraImage_ ? + this.updateItem(this.cameraImage_, imageUrl, this.cameraTitle_) : + this.addItem(imageUrl, this.cameraTitle_, undefined, 0); + this.cameraImage_.type = 'camera'; + } else { + this.removeItem(this.cameraImage_); + this.cameraImage_ = null; + } + }, + + /** + * Updates the titles for the camera element. + * @param {string} placeholderTitle Title when showing a placeholder. + * @param {string} capturedImageTitle Title when showing a captured photo. + */ + setCameraTitles: function(placeholderTitle, capturedImageTitle) { + this.placeholderTitle_ = placeholderTitle; + this.capturedImageTitle_ = capturedImageTitle; + this.cameraTitle_ = this.placeholderTitle_; + }, + + /** + * True when camera is in live mode (i.e. no still photo selected). + * @type {boolean} + */ + get cameraLive() { + return this.cameraLive_; + }, + set cameraLive(value) { + this.cameraLive_ = value; + this.previewElement.classList[value ? 'add' : 'remove']('live'); + }, + + /** + * Should only be queried from the 'change' event listener, true if the + * change event was triggered by a programmatical selection change. + * @type {boolean} + */ + get inProgramSelection() { + return this.inProgramSelection_; + }, + + /** + * URL of the image selected. + * @type {string?} + */ + get selectedItemUrl() { + var selectedItem = this.selectedItem; + return selectedItem ? selectedItem.url : null; + }, + set selectedItemUrl(url) { + for (var i = 0, el; el = this.dataModel.item(i); i++) { + if (el.url === url) + this.selectedItemIndex = i; + } + }, + + /** + * Set index to the image selected. + * @type {number} index The index of selected image. + */ + set selectedItemIndex(index) { + this.inProgramSelection_ = true; + this.selectionModel.selectedIndex = index; + this.inProgramSelection_ = false; + }, + + /** @override */ + get selectedItem() { + var index = this.selectionModel.selectedIndex; + return index != -1 ? this.dataModel.item(index) : null; + }, + set selectedItem(selectedItem) { + var index = this.indexOf(selectedItem); + this.inProgramSelection_ = true; + this.selectionModel.selectedIndex = index; + this.selectionModel.leadIndex = index; + this.inProgramSelection_ = false; + }, + + /** + * Element containing the preview image (the first IMG element) and the + * camera live stream (the first VIDEO element). + * @type {HTMLElement} + */ + get previewElement() { + // TODO(ivankr): temporary hack for non-HTML5 version. + return this.previewElement_ || this; + }, + set previewElement(value) { + this.previewElement_ = value; + this.previewImage_ = value.querySelector('img'); + this.cameraVideo_ = value.querySelector('video'); + this.cameraVideo_.addEventListener('canplay', + this.handleVideoStarted_.bind(this)); + this.cameraVideo_.addEventListener('timeupdate', + this.handleVideoUpdate_.bind(this)); + this.updatePreview_(); + // Initialize camera state and check for its presence. + this.cameraLive = true; + this.cameraPresent = false; + }, + + /** + * Whether the camera live stream and photo should be flipped horizontally. + * If setting this property results in photo update, 'photoupdated' event + * will be fired with 'dataURL' property containing the photo encoded as + * a data URL + * @type {boolean} + */ + get flipPhoto() { + return this.flipPhoto_ || false; + }, + set flipPhoto(value) { + if (this.flipPhoto_ == value) + return; + this.flipPhoto_ = value; + this.previewElement.classList.toggle('flip-x', value); + /* TODO(merkulova): remove when webkit crbug.com/126479 is fixed. */ + this.flipPhotoElement.classList.toggle('flip-trick', value); + if (!this.cameraLive) { + // Flip current still photo. + var e = new Event('photoupdated'); + e.dataURL = this.flipPhoto ? + this.flipFrame_(this.previewImage_) : this.previewImage_.src; + this.dispatchEvent(e); + } + }, + + /** + * Performs photo capture from the live camera stream. 'phototaken' event + * will be fired as soon as captured photo is available, with 'dataURL' + * property containing the photo encoded as a data URL. + * @return {boolean} Whether photo capture was successful. + */ + takePhoto: function() { + if (!this.cameraOnline) + return false; + var canvas = document.createElement('canvas'); + canvas.width = CAPTURE_SIZE.width; + canvas.height = CAPTURE_SIZE.height; + this.captureFrame_( + this.cameraVideo_, canvas.getContext('2d'), CAPTURE_SIZE); + // Preload image before displaying it. + var previewImg = new Image(); + previewImg.addEventListener('load', function(e) { + this.cameraTitle_ = this.capturedImageTitle_; + this.cameraImage = previewImg.src; + }.bind(this)); + previewImg.src = canvas.toDataURL('image/png'); + var e = new Event('phototaken'); + e.dataURL = this.flipPhoto ? this.flipFrame_(canvas) : previewImg.src; + this.dispatchEvent(e); + return true; + }, + + /** + * Performs video capture from the live camera stream. + * @param {function=} opt_callback Callback that receives taken video as + * data URL of a vertically stacked PNG sprite. + */ + takeVideo: function(opt_callback) { + var canvas = document.createElement('canvas'); + canvas.width = CAPTURE_SIZE.width; + canvas.height = CAPTURE_SIZE.height * RECORD_FRAMES; + var ctx = canvas.getContext('2d'); + // Force canvas initialization to prevent FPS lag on the first frame. + ctx.fillRect(0, 0, 1, 1); + var captureData = { + callback: opt_callback, + canvas: canvas, + ctx: ctx, + frameNo: 0, + lastTimestamp: new Date().getTime() + }; + captureData.timer = window.setInterval( + this.captureVideoFrame_.bind(this, captureData), 1000 / RECORD_FPS); + }, + + /** + * Discard current photo and return to the live camera stream. + */ + discardPhoto: function() { + this.cameraTitle_ = this.placeholderTitle_; + this.cameraImage = null; + }, + + /** + * Capture a single still frame from a <video> element, placing it at the + * current drawing origin of a canvas context. + * @param {HTMLVideoElement} video Video element to capture from. + * @param {CanvasRenderingContext2D} ctx Canvas context to draw onto. + * @param {{width: number, height: number}} destSize Capture size. + * @private + */ + captureFrame_: function(video, ctx, destSize) { + var width = video.videoWidth; + var height = video.videoHeight; + if (width < destSize.width || height < destSize.height) { + console.error('Video capture size too small: ' + + width + 'x' + height + '!'); + } + var src = {}; + if (width / destSize.width > height / destSize.height) { + // Full height, crop left/right. + src.height = height; + src.width = height * destSize.width / destSize.height; + } else { + // Full width, crop top/bottom. + src.width = width; + src.height = width * destSize.height / destSize.width; + } + src.x = (width - src.width) / 2; + src.y = (height - src.height) / 2; + ctx.drawImage(video, src.x, src.y, src.width, src.height, + 0, 0, destSize.width, destSize.height); + }, + + /** + * Flips frame horizontally. + * @param {HTMLImageElement|HTMLCanvasElement|HTMLVideoElement} source + * Frame to flip. + * @return {string} Flipped frame as data URL. + */ + flipFrame_: function(source) { + var canvas = document.createElement('canvas'); + canvas.width = CAPTURE_SIZE.width; + canvas.height = CAPTURE_SIZE.height; + var ctx = canvas.getContext('2d'); + ctx.translate(CAPTURE_SIZE.width, 0); + ctx.scale(-1.0, 1.0); + ctx.drawImage(source, 0, 0); + return canvas.toDataURL('image/png'); + }, + + /** + * Capture next frame of the video being recorded after a takeVideo() call. + * @param {Object} data Property bag with the recorder details. + * @private + */ + captureVideoFrame_: function(data) { + var lastTimestamp = new Date().getTime(); + var delayMs = lastTimestamp - data.lastTimestamp; + console.error('Delay: ' + delayMs + ' (' + (1000 / delayMs + ' FPS)')); + data.lastTimestamp = lastTimestamp; + + this.captureFrame_(this.cameraVideo_, data.ctx, CAPTURE_SIZE); + data.ctx.translate(0, CAPTURE_SIZE.height); + + if (++data.frameNo == RECORD_FRAMES) { + window.clearTimeout(data.timer); + if (data.callback && typeof data.callback == 'function') + data.callback(data.canvas.toDataURL('image/png')); + } + }, + + /** + * Adds new image to the user image grid. + * @param {string} src Image URL. + * @param {string=} opt_title Image tooltip. + * @param {function=} opt_clickHandler Image click handler. + * @param {number=} opt_position If given, inserts new image into + * that position (0-based) in image list. + * @param {function=} opt_decorateFn Function called with the list element + * as argument to do any final decoration. + * @return {!Object} Image data inserted into the data model. + */ + // TODO(ivankr): this function needs some argument list refactoring. + addItem: function(url, opt_title, opt_clickHandler, opt_position, + opt_decorateFn) { + var imageInfo = { + url: url, + title: opt_title, + clickHandler: opt_clickHandler, + decorateFn: opt_decorateFn + }; + this.inProgramSelection_ = true; + if (opt_position !== undefined) + this.dataModel.splice(opt_position, 0, imageInfo); + else + this.dataModel.push(imageInfo); + this.inProgramSelection_ = false; + return imageInfo; + }, + + /** + * Returns index of an image in grid. + * @param {Object} imageInfo Image data returned from addItem() call. + * @return {number} Image index (0-based) or -1 if image was not found. + */ + indexOf: function(imageInfo) { + return this.dataModel.indexOf(imageInfo); + }, + + /** + * Replaces an image in the grid. + * @param {Object} imageInfo Image data returned from addItem() call. + * @param {string} imageUrl New image URL. + * @param {string=} opt_title New image tooltip (if undefined, tooltip + * is left unchanged). + * @return {!Object} Image data of the added or updated image. + */ + updateItem: function(imageInfo, imageUrl, opt_title) { + var imageIndex = this.indexOf(imageInfo); + var wasSelected = this.selectionModel.selectedIndex == imageIndex; + this.removeItem(imageInfo); + var newInfo = this.addItem( + imageUrl, + opt_title === undefined ? imageInfo.title : opt_title, + imageInfo.clickHandler, + imageIndex, + imageInfo.decorateFn); + // Update image data with the reset of the keys from the old data. + for (k in imageInfo) { + if (!(k in newInfo)) + newInfo[k] = imageInfo[k]; + } + if (wasSelected) + this.selectedItem = newInfo; + return newInfo; + }, + + /** + * Removes previously added image from the grid. + * @param {Object} imageInfo Image data returned from the addItem() call. + */ + removeItem: function(imageInfo) { + var index = this.indexOf(imageInfo); + if (index != -1) { + var wasSelected = this.selectionModel.selectedIndex == index; + this.inProgramSelection_ = true; + this.dataModel.splice(index, 1); + if (wasSelected) { + // If item removed was selected, select the item next to it. + this.selectedItem = this.dataModel.item( + Math.min(this.dataModel.length - 1, index)); + } + this.inProgramSelection_ = false; + } + }, + + /** + * Forces re-display, size re-calculation and focuses grid. + */ + updateAndFocus: function() { + // Recalculate the measured item size. + this.measured_ = null; + this.columns = 0; + this.redraw(); + this.focus(); + } + }; + + /** + * URLs of special button images. + * @enum {string} + */ + UserImagesGrid.ButtonImages = { + TAKE_PHOTO: 'chrome://theme/IDR_BUTTON_USER_IMAGE_TAKE_PHOTO', + CHOOSE_FILE: 'chrome://theme/IDR_BUTTON_USER_IMAGE_CHOOSE_FILE', + PROFILE_PICTURE: 'chrome://theme/IDR_PROFILE_PICTURE_LOADING' + }; + + return { + UserImagesGrid: UserImagesGrid + }; +}); diff --git a/chromium/chrome/browser/resources/chromeos/wallpaper_manager/OWNERS b/chromium/chrome/browser/resources/chromeos/wallpaper_manager/OWNERS new file mode 100644 index 00000000000..e88b945697a --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/wallpaper_manager/OWNERS @@ -0,0 +1 @@ +bshe@chromium.org diff --git a/chromium/chrome/browser/resources/chromeos/wallpaper_manager/css/wallpaper_manager.css b/chromium/chrome/browser/resources/chromeos/wallpaper_manager/css/wallpaper_manager.css new file mode 100644 index 00000000000..9bb2399e89e --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/wallpaper_manager/css/wallpaper_manager.css @@ -0,0 +1,342 @@ +/* Copyright (c) 2013 The Chromium Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. */ + +html { + height: 100%; +} + +body { + -webkit-app-region: drag; + background-color: rgba(20, 20, 20, 0.93); + color: #999; + font-size: 80%; + height: 100%; + margin: 0; + padding: 0; +} + +/* Click events are not received in draggable area. Making all clickable areas + * not draggable to receive click events. + * TODO(bshe): Remove this when http://crbug.com/142275 fixed. + */ +.dialog-topbar #navstrip, +.dialog-topbar #window-close-button, +.image-picker, +.overlay-container .page, +#author-website, +#surprise-me { + -webkit-app-region: no-drag; +} + +.dialog-container { + -webkit-box-orient: vertical; + display: -webkit-box; + overflow: hidden; +} + +.dialog-topbar { + -webkit-box-align: center; + display: -webkit-box; + height: 54px; + overflow: hidden; + padding: 0 15px; + position: relative; +} + +.dialog-topbar .spacer { + -webkit-box-flex: 1; +} + +#categories-list { + -webkit-box-orient: horizontal; + display: -webkit-box; + height: 54px; + outline: none; + width: 100%; +} + +#categories-list > li { + -webkit-box-align: center; + -webkit-transition: border-top 130ms ease; + -webkit-user-select: none; + border-top: 4px solid transparent; + color: #777; + display: -webkit-box; + height: 50px; +} + +#categories-list > li:hover { + border-top-color: rgba(255, 255, 255, 0.4); + cursor: pointer; +} + +#categories-list > li[selected] { + color: rgb(70, 78, 90); + cursor: default; +} + +#categories-list > li > div { + line-height: 34px; + padding: 0 10px; +} + +#categories-list > li[selected] > div { + color: #eee; +} + +.close { + background-position: center; + background-repeat: no-repeat; + height: 14px; + padding: 10px; + position: absolute; + right: 0; + top: 0; + width: 14px; +} + +#window-close-button { + background-image: url('../images/ui/close-white.png'); +} + +#window-close-button:hover { + background-image: url('../images/ui/close-white-hover.png'); +} + +#bar { + -webkit-transition: left 130ms ease-in-out; + background-color: #eee; + height: 4px; + position: absolute; + top: 0; +} + +.dialog-main { + -webkit-box-align: stretch; + -webkit-box-flex: 1; + display: -webkit-box; +} + +#category-container { + -webkit-box-flex: 1; + -webkit-box-orient: vertical; + display: -webkit-box; +} + +.image-picker { + -webkit-padding-end: 5px; + -webkit-padding-start: 15px; + display: block; + /* Set font size to 0 to remove the extra vertical margin between two rows of + * thumbnails. + * TODO(bshe): Find the root cause of the margin. + */ + font-size: 0; + height: 287px; + outline: none; + overflow-y: auto; + padding-bottom: 15px; + padding-top: 5px; +} + +.image-picker .spacer { + display: block; +} + +.image-picker > * { + display: inline-block; + margin: 0; + overflow: hidden; + padding: 0; +} + +.image-picker [role=listitem] { + -webkit-margin-end: 1px; + height: 68px; + margin-bottom: 1px; + position: relative; + width: 108px; +} + +.image-picker [role=listitem]:hover { + outline: 3px solid #f1f1f1; + z-index: 1; +} + +.image-picker .check { + background-image: url('../images/ui/check.png'); + height: 32px; + left: 38px; + position: absolute; + top: 18px; + width: 32px; + z-index: 3; +} + +::-webkit-scrollbar { + width: 6px; +} + +::-webkit-scrollbar-thumb { + background: #aaa; +} + +::-webkit-scrollbar-thumb:hover { + background: #888; +} + +/* The width and height of img tag need to be set here. Otherwise, an incorrect + * image size may be used during layout. Some images may be misaligned as a + * result. See http://code.google.com/p/chromium/issues/detail?id=148480 for + * screen shot. + */ +.image-picker img { + height: 68px; + width: 108px; +} + +.image-picker[disabled], +.image-picker-offline img:not([offline]) { + -webkit-filter: grayscale(1); +} + +#wallpaper-attribute { + -webkit-box-orient: vertical; + display: -webkit-box; +} + +.bottom-bar { + -webkit-box-align: center; + -webkit-box-orient: horizontal; + -webkit-box-pack: end; + display: -webkit-box; + height: 40px; + padding: 11px 15px 8px 15px; +} + +.bottom-bar > .spacer { + -webkit-box-flex: 1; +} + +#online-wallpaper-attribute { + display: -webkit-box; +} + +#attribute-image { + -webkit-margin-end: 10px; + height: 34px; + width: 54px; +} + +#author-website { + color: #999; + overflow: hidden; + white-space: nowrap; + width: 240px; +} + +/* [hidden] does display:none, but its priority is too low. */ +[hidden], +body[custom] [visibleif]:not([visibleif~='custom']), +body:not([custom]) [visibleif~='custom'] { + display: none !important; +} + +.progress-bar { + background-color: rgba(255, 255, 255, 0.7); + height: 6px; + position: absolute; + top: 62px; + width: 100%; +} + +.progress-track { + -webkit-transition: width 1ms linear; + background-color: rgb(66, 129, 244); + height: 100%; + width: 0; +} + +.overlay-container { + -webkit-box-align: center; + -webkit-box-orient: vertical; + -webkit-box-pack: center; + background-color: rgba(25, 25, 25, 0.25); + bottom: 0; + display: -webkit-box; + left: 0; + overflow: auto; + position: fixed; + right: 0; + top: 0; + z-index: 4; +} + +.overlay-container .page { + -webkit-border-radius: 3px; + -webkit-box-orient: vertical; + background: rgb(255, 255, 255); + box-shadow: 0 4px 23px 5px rgba(0, 0, 0, 0.2), 0 2px 6px rgba(0, 0, 0, 0.15); + color: #333; + display: -webkit-box; + padding: 20px; + position: relative; + width: 302px; +} + +#error-container { + z-index: 5; +} + +.overlay-container .close { + background-image: url('../images/ui/close-overlay.png'); +} + +.overlay-container .close:hover { + background-image: url('../images/ui/close-overlay-hover.png'); +} + +/* Custom wallpaper thumbnail container. */ +#add-new img { + content: url('../images/ui/add-wallpaper-thumbnail.png'); +} + +#add-new:hover img { + content: url('../images/ui/add-wallpaper-thumbnail-hover.png'); +} + +#wallpaper-selection-container #content div { + margin: 20px 0 5px 0; +} + +#wallpaper-selection-container #warning span { + line-height: 17px; +} + +#wallpaper-selection-container select { + height: 30px; +} + +#wallpaper-selection-container input[type='file']::-webkit-file-upload-button { + height: 30px; +} + +#wallpaper-selection-container .remember-icon { + content: url('../images/ui/remember.png'); +} + +#surprise-me #checkbox { + background-image: url('../images/ui/checkbox_unchecked.png'); + display: inline-block; + height: 17px; + margin-right: 4px; + opacity: 0.7; + position: relative; + top: 4px; + width: 17px; +} + +#surprise-me #checkbox.checked { + background-image: url('../images/ui/checkbox_checked.png'); +} diff --git a/chromium/chrome/browser/resources/chromeos/wallpaper_manager/images/icon128.png b/chromium/chrome/browser/resources/chromeos/wallpaper_manager/images/icon128.png Binary files differnew file mode 100644 index 00000000000..dfba48ceb8b --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/wallpaper_manager/images/icon128.png diff --git a/chromium/chrome/browser/resources/chromeos/wallpaper_manager/images/ui/2x/add-wallpaper-thumbnail-hover.png b/chromium/chrome/browser/resources/chromeos/wallpaper_manager/images/ui/2x/add-wallpaper-thumbnail-hover.png Binary files differnew file mode 100644 index 00000000000..3cbf6aa6d9c --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/wallpaper_manager/images/ui/2x/add-wallpaper-thumbnail-hover.png diff --git a/chromium/chrome/browser/resources/chromeos/wallpaper_manager/images/ui/2x/add-wallpaper-thumbnail.png b/chromium/chrome/browser/resources/chromeos/wallpaper_manager/images/ui/2x/add-wallpaper-thumbnail.png Binary files differnew file mode 100644 index 00000000000..710a95977cb --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/wallpaper_manager/images/ui/2x/add-wallpaper-thumbnail.png diff --git a/chromium/chrome/browser/resources/chromeos/wallpaper_manager/images/ui/2x/check.png b/chromium/chrome/browser/resources/chromeos/wallpaper_manager/images/ui/2x/check.png Binary files differnew file mode 100644 index 00000000000..f11047e8226 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/wallpaper_manager/images/ui/2x/check.png diff --git a/chromium/chrome/browser/resources/chromeos/wallpaper_manager/images/ui/2x/close-overlay-hover.png b/chromium/chrome/browser/resources/chromeos/wallpaper_manager/images/ui/2x/close-overlay-hover.png Binary files differnew file mode 100644 index 00000000000..c49f5639a83 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/wallpaper_manager/images/ui/2x/close-overlay-hover.png diff --git a/chromium/chrome/browser/resources/chromeos/wallpaper_manager/images/ui/2x/close-overlay.png b/chromium/chrome/browser/resources/chromeos/wallpaper_manager/images/ui/2x/close-overlay.png Binary files differnew file mode 100644 index 00000000000..efb23e7136f --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/wallpaper_manager/images/ui/2x/close-overlay.png diff --git a/chromium/chrome/browser/resources/chromeos/wallpaper_manager/images/ui/2x/close-white-hover.png b/chromium/chrome/browser/resources/chromeos/wallpaper_manager/images/ui/2x/close-white-hover.png Binary files differnew file mode 100644 index 00000000000..548fdf488a1 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/wallpaper_manager/images/ui/2x/close-white-hover.png diff --git a/chromium/chrome/browser/resources/chromeos/wallpaper_manager/images/ui/2x/close-white.png b/chromium/chrome/browser/resources/chromeos/wallpaper_manager/images/ui/2x/close-white.png Binary files differnew file mode 100644 index 00000000000..3e87fa34738 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/wallpaper_manager/images/ui/2x/close-white.png diff --git a/chromium/chrome/browser/resources/chromeos/wallpaper_manager/images/ui/2x/close_bar.png b/chromium/chrome/browser/resources/chromeos/wallpaper_manager/images/ui/2x/close_bar.png Binary files differnew file mode 100644 index 00000000000..142adb8b647 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/wallpaper_manager/images/ui/2x/close_bar.png diff --git a/chromium/chrome/browser/resources/chromeos/wallpaper_manager/images/ui/add-wallpaper-thumbnail-hover.png b/chromium/chrome/browser/resources/chromeos/wallpaper_manager/images/ui/add-wallpaper-thumbnail-hover.png Binary files differnew file mode 100644 index 00000000000..7cfb59d4c4f --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/wallpaper_manager/images/ui/add-wallpaper-thumbnail-hover.png diff --git a/chromium/chrome/browser/resources/chromeos/wallpaper_manager/images/ui/add-wallpaper-thumbnail.png b/chromium/chrome/browser/resources/chromeos/wallpaper_manager/images/ui/add-wallpaper-thumbnail.png Binary files differnew file mode 100644 index 00000000000..0c19c02c638 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/wallpaper_manager/images/ui/add-wallpaper-thumbnail.png diff --git a/chromium/chrome/browser/resources/chromeos/wallpaper_manager/images/ui/check.png b/chromium/chrome/browser/resources/chromeos/wallpaper_manager/images/ui/check.png Binary files differnew file mode 100644 index 00000000000..d0bb12d2f28 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/wallpaper_manager/images/ui/check.png diff --git a/chromium/chrome/browser/resources/chromeos/wallpaper_manager/images/ui/checkbox_checked.png b/chromium/chrome/browser/resources/chromeos/wallpaper_manager/images/ui/checkbox_checked.png Binary files differnew file mode 100644 index 00000000000..238ce2f34bd --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/wallpaper_manager/images/ui/checkbox_checked.png diff --git a/chromium/chrome/browser/resources/chromeos/wallpaper_manager/images/ui/checkbox_unchecked.png b/chromium/chrome/browser/resources/chromeos/wallpaper_manager/images/ui/checkbox_unchecked.png Binary files differnew file mode 100644 index 00000000000..c92eaaa2d91 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/wallpaper_manager/images/ui/checkbox_unchecked.png diff --git a/chromium/chrome/browser/resources/chromeos/wallpaper_manager/images/ui/close-overlay-hover.png b/chromium/chrome/browser/resources/chromeos/wallpaper_manager/images/ui/close-overlay-hover.png Binary files differnew file mode 100644 index 00000000000..c3ce1dc3a55 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/wallpaper_manager/images/ui/close-overlay-hover.png diff --git a/chromium/chrome/browser/resources/chromeos/wallpaper_manager/images/ui/close-overlay.png b/chromium/chrome/browser/resources/chromeos/wallpaper_manager/images/ui/close-overlay.png Binary files differnew file mode 100644 index 00000000000..02e1f91ee0b --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/wallpaper_manager/images/ui/close-overlay.png diff --git a/chromium/chrome/browser/resources/chromeos/wallpaper_manager/images/ui/close-white-hover.png b/chromium/chrome/browser/resources/chromeos/wallpaper_manager/images/ui/close-white-hover.png Binary files differnew file mode 100644 index 00000000000..e90252b6fe1 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/wallpaper_manager/images/ui/close-white-hover.png diff --git a/chromium/chrome/browser/resources/chromeos/wallpaper_manager/images/ui/close-white.png b/chromium/chrome/browser/resources/chromeos/wallpaper_manager/images/ui/close-white.png Binary files differnew file mode 100644 index 00000000000..4ac41b2d8b5 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/wallpaper_manager/images/ui/close-white.png diff --git a/chromium/chrome/browser/resources/chromeos/wallpaper_manager/images/ui/close_bar.png b/chromium/chrome/browser/resources/chromeos/wallpaper_manager/images/ui/close_bar.png Binary files differnew file mode 100644 index 00000000000..e70e5b6a991 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/wallpaper_manager/images/ui/close_bar.png diff --git a/chromium/chrome/browser/resources/chromeos/wallpaper_manager/images/ui/remember.png b/chromium/chrome/browser/resources/chromeos/wallpaper_manager/images/ui/remember.png Binary files differnew file mode 100644 index 00000000000..130b6d4f2b6 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/wallpaper_manager/images/ui/remember.png diff --git a/chromium/chrome/browser/resources/chromeos/wallpaper_manager/js/constants.js b/chromium/chrome/browser/resources/chromeos/wallpaper_manager/js/constants.js new file mode 100644 index 00000000000..cddb7c44dab --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/wallpaper_manager/js/constants.js @@ -0,0 +1,74 @@ +// Copyright (c) 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + + +/** @const */ var Constants = { + /** + * Key to access wallpaper rss in chrome.local.storage. + */ + AccessRssKey: 'wallpaper-picker-surprise-rss-key', + + /** + * Key to access wallpaper manifest in chrome.storage.local. + */ + AccessManifestKey: 'wallpaper-picker-manifest-key', + + /** + * Key to access user wallpaper info in chrome.storage.local. + */ + AccessLocalWallpaperInfoKey: 'wallpaper-local-info-key', + + /** + * Key to access user wallpaper info in chrome.storage.sync. + */ + AccessSyncWallpaperInfoKey: 'wallpaper-sync-info-key', + + /** + * Key to access last changed date of a surprise wallpaper. + */ + AccessLastSurpriseWallpaperChangedDate: 'wallpaper-last-changed-date-key', + + /** + * Key to access if surprise me feature is enabled or not in + * chrome.local.storage. + */ + AccessSurpriseMeEnabledKey: 'surprise-me-enabled-key', + + /** + * Suffix to append to baseURL if requesting high resoultion wallpaper. + */ + HighResolutionSuffix: '_high_resolution.jpg', + + /** + * URL to get latest wallpaper RSS feed. + */ + WallpaperRssURL: 'https://commondatastorage.googleapis.com/' + + 'chromeos-wallpaper-public/wallpaper.rss', + + /** + * cros-wallpaper namespace URI. + */ + WallpaperNameSpaceURI: 'http://commondatastorage.googleapis.com/' + + 'chromeos-wallpaper-public/cros-wallpaper-uri', + + /** + * Wallpaper sources enum. + */ + WallpaperSourceEnum: { + Online: 'ONLINE', + OEM: 'OEM', + Custom: 'CUSTOM', + AddNew: 'ADDNEW' + }, + + /** + * Local storage. + */ + WallpaperLocalStorage: chrome.storage.local, + + /** + * Sync storage. + */ + WallpaperSyncStorage: chrome.storage.sync +}; diff --git a/chromium/chrome/browser/resources/chromeos/wallpaper_manager/js/event_page.js b/chromium/chrome/browser/resources/chromeos/wallpaper_manager/js/event_page.js new file mode 100644 index 00000000000..0830878b88d --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/wallpaper_manager/js/event_page.js @@ -0,0 +1,279 @@ +// Copyright (c) 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +var WALLPAPER_PICKER_WIDTH = 574; +var WALLPAPER_PICKER_HEIGHT = 420; + +var wallpaperPickerWindow; + +var surpriseWallpaper = null; + +function SurpriseWallpaper() { +} + +/** + * Gets SurpriseWallpaper instance. In case it hasn't been initialized, a new + * instance is created. + * @return {SurpriseWallpaper} A SurpriseWallpaper instance. + */ +SurpriseWallpaper.getInstance = function() { + if (!surpriseWallpaper) + surpriseWallpaper = new SurpriseWallpaper(); + return surpriseWallpaper; +}; + +/** + * Tries to change wallpaper to a new one in the background. May fail due to a + * network issue. + */ +SurpriseWallpaper.prototype.tryChangeWallpaper = function() { + var self = this; + var onFailure = function() { + self.retryLater_(); + self.fallbackToLocalRss_(); + }; + // Try to fetch newest rss as document from server first. If any error occurs, + // proceed with local copy of rss. + WallpaperUtil.fetchURL(Constants.WallpaperRssURL, 'document', function(xhr) { + WallpaperUtil.saveToStorage(Constants.AccessRssKey, + new XMLSerializer().serializeToString(xhr.responseXML), false); + self.updateSurpriseWallpaper(xhr.responseXML); + }, onFailure); +}; + +/** + * Retries changing the wallpaper 1 hour later. This is called when fetching the + * rss or wallpaper from server fails. + * @private + */ +SurpriseWallpaper.prototype.retryLater_ = function() { + chrome.alarms.create('RetryAlarm', {delayInMinutes: 60}); +}; + +/** + * Fetches the cached rss feed from local storage in the event of being unable + * to download the online feed. + * @private + */ +SurpriseWallpaper.prototype.fallbackToLocalRss_ = function() { + var self = this; + Constants.WallpaperLocalStorage.get(Constants.AccessRssKey, function(items) { + var rssString = items[Constants.AccessRssKey]; + if (rssString) { + self.updateSurpriseWallpaper(new DOMParser().parseFromString(rssString, + 'text/xml')); + } else { + self.updateSurpriseWallpaper(); + } + }); +}; + +/** + * Starts to change wallpaper. Called after rss is fetched. + * @param {Document=} opt_rss The fetched rss document. If opt_rss is null, uses + * a random wallpaper. + */ +SurpriseWallpaper.prototype.updateSurpriseWallpaper = function(opt_rss) { + if (opt_rss) { + var items = opt_rss.querySelectorAll('item'); + var date = new Date(new Date().toDateString()).getTime(); + for (var i = 0; i < items.length; i++) { + item = items[i]; + var disableDate = new Date(item.getElementsByTagNameNS( + Constants.WallpaperNameSpaceURI, 'disableDate')[0].textContent). + getTime(); + var enableDate = new Date(item.getElementsByTagNameNS( + Constants.WallpaperNameSpaceURI, 'enableDate')[0].textContent). + getTime(); + var regionsString = item.getElementsByTagNameNS( + Constants.WallpaperNameSpaceURI, 'regions')[0].textContent; + var regions = regionsString.split(', '); + if (enableDate <= date && disableDate > date && + regions.indexOf(navigator.language) != -1) { + var self = this; + this.setWallpaperFromRssItem_(item, + function() {}, + function() { + self.retryLater_(); + self.updateRandomWallpaper_(); + }); + return; + } + } + } + // No surprise wallpaper for today at current locale or fetching rss feed + // fails. Fallback to use a random one from wallpaper server. + this.updateRandomWallpaper_(); +}; + +/** + * Sets a new random wallpaper if one has not already been set today. + * @private + */ +SurpriseWallpaper.prototype.updateRandomWallpaper_ = function() { + var self = this; + Constants.WallpaperLocalStorage.get( + Constants.AccessLastSurpriseWallpaperChangedDate, function(items) { + var dateString = new Date().toDateString(); + // At most one random wallpaper per day. + if (items[Constants.AccessLastSurpriseWallpaperChangedDate] != dateString) { + self.setRandomWallpaper_(dateString); + } + }); +}; + +/** + * Sets wallpaper to one of the wallpapers displayed in wallpaper picker. If + * the wallpaper download fails, retry one hour later. Wallpapers that are + * disabled for surprise me are excluded. + * @param {string} dateString String representation of current local date. + * @private + */ +SurpriseWallpaper.prototype.setRandomWallpaper_ = function(dateString) { + var self = this; + Constants.WallpaperLocalStorage.get(Constants.AccessManifestKey, + function(items) { + var manifest = items[Constants.AccessManifestKey]; + if (manifest && manifest.wallpaper_list) { + var filtered = manifest.wallpaper_list.filter(function(element) { + // Older version manifest do not have available_for_surprise_me field. + // In this case, no wallpaper should be filtered out. + return element.available_for_surprise_me || + element.available_for_surprise_me == undefined; + }); + var index = Math.floor(Math.random() * filtered.length); + var wallpaper = filtered[index]; + var wallpaperURL = wallpaper.base_url + Constants.HighResolutionSuffix; + var onSuccess = function() { + WallpaperUtil.saveToStorage( + Constants.AccessLastSurpriseWallpaperChangedDate, + dateString, + false); + } + WallpaperUtil.setOnlineWallpaper(wallpaperURL, wallpaper.default_layout, + onSuccess, self.retryLater_.bind(self)); + } + }); +}; + +/** + * Sets wallpaper to the wallpaper specified by item from rss. If downloading + * the wallpaper fails, retry one hour later. + * @param {Element} item The wallpaper rss item element. + * @param {function} onSuccess Success callback. + * @param {function} onFailure Failure callback. + * @private + */ +SurpriseWallpaper.prototype.setWallpaperFromRssItem_ = function(item, + onSuccess, + onFailure) { + var url = item.querySelector('link').textContent; + var layout = item.getElementsByTagNameNS( + Constants.WallpaperNameSpaceURI, 'layout')[0].textContent; + var self = this; + WallpaperUtil.fetchURL(url, 'arraybuffer', function(xhr) { + if (xhr.response != null) { + chrome.wallpaperPrivate.setCustomWallpaper(xhr.response, layout, false, + 'surprise_wallpaper', + onSuccess); + } else { + onFailure(); + } + }, onFailure); +}; + +/** + * Disables the wallpaper surprise me feature. Clear all alarms and states. + */ +SurpriseWallpaper.prototype.disable = function() { + chrome.alarms.clearAll(); + // Makes last changed date invalid. + WallpaperUtil.saveToStorage(Constants.AccessLastSurpriseWallpaperChangedDate, + '', false); +}; + +/** + * Changes current wallpaper and sets up an alarm to schedule next change around + * midnight. + */ +SurpriseWallpaper.prototype.next = function() { + var nextUpdate = this.nextUpdateTime(new Date()); + chrome.alarms.create({when: nextUpdate}); + this.tryChangeWallpaper(); +}; + +/** + * Calculates when the next wallpaper change should be triggered. + * @param {Date} now Current time. + * @return {number} The time when next wallpaper change should happen. + */ +SurpriseWallpaper.prototype.nextUpdateTime = function(now) { + var nextUpdate = new Date(now.setDate(now.getDate() + 1)).toDateString(); + return new Date(nextUpdate).getTime(); +}; + +chrome.app.runtime.onLaunched.addListener(function() { + if (wallpaperPickerWindow && !wallpaperPickerWindow.contentWindow.closed) { + wallpaperPickerWindow.focus(); + chrome.wallpaperPrivate.minimizeInactiveWindows(); + return; + } + + chrome.app.window.create('main.html', { + frame: 'none', + width: WALLPAPER_PICKER_WIDTH, + height: WALLPAPER_PICKER_HEIGHT, + minWidth: WALLPAPER_PICKER_WIDTH, + maxWidth: WALLPAPER_PICKER_WIDTH, + minHeight: WALLPAPER_PICKER_HEIGHT, + maxHeight: WALLPAPER_PICKER_HEIGHT, + transparentBackground: true + }, function(w) { + wallpaperPickerWindow = w; + chrome.wallpaperPrivate.minimizeInactiveWindows(); + w.onClosed.addListener(function() { + chrome.wallpaperPrivate.restoreMinimizedWindows(); + }); + }); +}); + +chrome.storage.onChanged.addListener(function(changes, namespace) { + if (changes[Constants.AccessSurpriseMeEnabledKey]) { + if (changes[Constants.AccessSurpriseMeEnabledKey].newValue) { + SurpriseWallpaper.getInstance().next(); + } else { + SurpriseWallpaper.getInstance().disable(); + } + } + + if (changes[Constants.AccessSyncWallpaperInfoKey]) { + var newValue = changes[Constants.AccessSyncWallpaperInfoKey].newValue; + Constants.WallpaperLocalStorage.get(Constants.AccessLocalWallpaperInfoKey, + function(items) { + // Normally, the wallpaper info saved in local storage and sync storage + // are the same. If the synced value changed by sync service, they may + // different. In that case, change wallpaper to the one saved in sync + // storage and update the local value. + var localValue = items[Constants.AccessLocalWallpaperInfoKey]; + if (localValue == undefined || + localValue.url != newValue.url || + localValue.layout != newValue.layout || + localValue.source != newValue.source) { + if (newValue.source == Constants.WallpaperSourceEnum.Online) { + // TODO(bshe): Consider schedule an alarm to set online wallpaper + // later when failed. Note that we need to cancel the retry if user + // set another wallpaper before retry alarm invoked. + WallpaperUtil.setOnlineWallpaper(newValue.url, newValue.layout, + function() {}, function() {}); + } + WallpaperUtil.saveToStorage(Constants.AccessLocalWallpaperInfoKey, + newValue, false); + } + }); + } +}); + +chrome.alarms.onAlarm.addListener(function() { + SurpriseWallpaper.getInstance().next(); +}); diff --git a/chromium/chrome/browser/resources/chromeos/wallpaper_manager/js/main.js b/chromium/chrome/browser/resources/chromeos/wallpaper_manager/js/main.js new file mode 100644 index 00000000000..adf044a8845 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/wallpaper_manager/js/main.js @@ -0,0 +1,16 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** + * Global wallpaperManager reference useful for poking at from the console. +*/ +var wallpaperManager; + +function init() { + WallpaperManager.initStrings(function() { + wallpaperManager = new WallpaperManager(document.body); + }); +} + +document.addEventListener('DOMContentLoaded', init); diff --git a/chromium/chrome/browser/resources/chromeos/wallpaper_manager/js/main_scripts.js b/chromium/chrome/browser/resources/chromeos/wallpaper_manager/js/main_scripts.js new file mode 100644 index 00000000000..2288af1f589 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/wallpaper_manager/js/main_scripts.js @@ -0,0 +1,32 @@ +// Copyright (c) 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +//<include src="../../../../../../ui/webui/resources/js/cr.js"/> +//<include src="../../../../../../ui/webui/resources/js/event_tracker.js"/> +//<include src="../../../../../../ui/webui/resources/js/load_time_data.js"/> +//<include src="../../../../../../ui/webui/resources/js/i18n_template_no_process.js"/> +//<include src="../../../../../../ui/webui/resources/js/util.js"/> +//<include src="../../../../../../ui/webui/resources/js/cr/ui.js"/> +//<include src="../../../../../../ui/webui/resources/js/cr/event_target.js"/> +//<include src="../../../../../../ui/webui/resources/js/cr/ui/touch_handler.js"/> +//<include src="../../../../../../ui/webui/resources/js/cr/ui/array_data_model.js"/> +//<include src="../../../../../../ui/webui/resources/js/cr/ui/list_item.js"/> +//<include src="../../../../../../ui/webui/resources/js/cr/ui/list_selection_model.js"/> +//<include src="../../../../../../ui/webui/resources/js/cr/ui/list_single_selection_model.js"/> +//<include src="../../../../../../ui/webui/resources/js/cr/ui/list_selection_controller.js"/> +//<include src="../../../../../../ui/webui/resources/js/cr/ui/list.js"/> +//<include src="../../../../../../ui/webui/resources/js/cr/ui/grid.js"/> +//<include src="../../../../../../ui/webui/resources/js/cr/ui/command.js"/> +//<include src="../../../../../../ui/webui/resources/js/cr/ui/position_util.js"/> +//<include src="../../../../../../ui/webui/resources/js/cr/ui/menu_item.js"/> +//<include src="../../../../../../ui/webui/resources/js/cr/ui/menu.js"/> +//<include src="../../../../../../ui/webui/resources/js/cr/ui/menu_button.js"/> +//<include src="../../../../../../ui/webui/resources/js/cr/ui/context_menu_handler.js"/> +//<include src="constants.js"/> +//<include src="util.js"/> +//<include src="progress_manager.js"/> +//<include src="wallpaper_directories.js"/> +//<include src="wallpaper_images_grid.js"/> +//<include src="wallpaper_manager.js"/> +//<include src="main.js"/> diff --git a/chromium/chrome/browser/resources/chromeos/wallpaper_manager/js/progress_manager.js b/chromium/chrome/browser/resources/chromeos/wallpaper_manager/js/progress_manager.js new file mode 100644 index 00000000000..7e472aca409 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/wallpaper_manager/js/progress_manager.js @@ -0,0 +1,116 @@ +// Copyright (c) 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** + * Monitor the downloading progress of a XMLHttpRequest |xhr_| and shows the + * progress on |progressBar_|. + * @constructor + */ +function ProgressManager() { + this.xhr_ = null; + this.progressBar_ = document.querySelector('.progress-bar'); + this.selectedGridItem_ = null; +} + +/** + * Sets the XMLHttpRequest |xhr| to monitor, and the wallpaper thumbnail grid + * item |selectedGridItem| to show a progress bar for. Cancels previous xhr and + * hides/removes previous progress bar if any. + * Note: this must be called before xhr.send() function. Otherwise, we wont get + * loadstart event. + * @param {XMLHttpRequest} xhr The XMLHttpRequest. + * @param {WallpaperThumbnailsGridItem} selectedGridItem The wallpaper thumbnail + * grid item. It extends from cr.ui.ListItem. + */ +ProgressManager.prototype.reset = function(xhr, selectedGridItem) { + if (this.xhr_) + this.removeEventListeners_(); + this.hideProgressBar(this.selectedGridItem_); + this.xhr_ = xhr; + this.selectedGridItem_ = selectedGridItem; + this.xhrListeners_ = { + 'loadstart': this.onDownloadStart_.bind(this), + 'progress': this.onDownloadProgress_.bind(this), + 'abort': this.onDownloadErrorOrAbort_.bind(this), + 'error': this.onDownloadErrorOrAbort_.bind(this), + 'load': this.onDownloadComplete_.bind(this) + }; + for (var eventType in this.xhrListeners_) + this.xhr_.addEventListener(eventType, this.xhrListeners_[eventType]); +}; + +/** + * Removes all event listeners progress manager currently registered. + * @private + */ +ProgressManager.prototype.removeEventListeners_ = function() { + for (var eventType in this.xhrListeners_) + this.xhr_.removeEventListener(eventType, this.xhrListeners_[eventType]); +}; + +/** + * Removes the progress bar in |selectedGridItem| if any. May be called + * asynchronously. + * @param {WallpaperThumbnailsGridItem} selectedGridItem The wallpaper thumbnail + grid item. It extends from cr.ui.ListItem. + */ +ProgressManager.prototype.hideProgressBar = function(selectedGridItem) { + if (selectedGridItem && selectedGridItem.querySelector('.progress-bar')) { + this.progressBar_.hidden = true; + selectedGridItem.removeChild(this.progressBar_); + } +}; + +/** + * Calculates and updates the width of progress track. + * @private + * @param {float} percentComplete The percent of loaded content. + */ +ProgressManager.prototype.setProgress_ = function(percentComplete) { + this.progressBar_.querySelector('.progress-track').style.width = + (percentComplete * 100) + '%'; +}; + +/** + * Shows a 0% progress bar to indicate downloading starts. + * @private + * @param {Event} e A loadstart ProgressEvent from XMLHttpRequest. + */ +ProgressManager.prototype.onDownloadStart_ = function(e) { + this.setProgress_(0); + this.selectedGridItem_.appendChild(this.progressBar_); + this.progressBar_.hidden = false; +}; + +/** + * Hides progress bar when progression is terminated. + * @private + * @param {Event} e An error/abort ProgressEvent from XMLHttpRequest. + */ +ProgressManager.prototype.onDownloadErrorOrAbort_ = function(e) { + this.removeEventListeners_(); + this.xhr_ = null; + this.hideProgressBar(this.selectedGridItem_); +}; + +/** + * Download completed successfully. Shows a 100% progress bar and clears |xhr_|. + * @private + * @param {Event} e A load ProgressEvent from XMLHttpRequest. + */ +ProgressManager.prototype.onDownloadComplete_ = function(e) { + this.setProgress_(1); + this.removeEventListeners_(); + this.xhr_ = null; +}; + +/** + * Calculates downloading percentage and shows downloading progress. + * @private + * @param {Event} e A progress ProgressEvent from XMLHttpRequest. + */ +ProgressManager.prototype.onDownloadProgress_ = function(e) { + if (e.lengthComputable) + this.setProgress_(e.loaded / e.total); +}; diff --git a/chromium/chrome/browser/resources/chromeos/wallpaper_manager/js/util.js b/chromium/chrome/browser/resources/chromeos/wallpaper_manager/js/util.js new file mode 100644 index 00000000000..397f1805e4a --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/wallpaper_manager/js/util.js @@ -0,0 +1,106 @@ +// Copyright (c) 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +var WallpaperUtil = {}; + +/** + * Saves value to local storage that associates with key. + * @param {string} key The key that associates with value. + * @param {string} value The value to save to local storage. + * @param {boolen} sync True if the value is saved to sync storage. + * @param {function=} opt_callback The callback on success, or on failure. + */ +WallpaperUtil.saveToStorage = function(key, value, sync, opt_callback) { + var items = {}; + items[key] = value; + if (sync) + Constants.WallpaperSyncStorage.set(items, opt_callback); + else + Constants.WallpaperLocalStorage.set(items, opt_callback); +}; + +/** + * Saves user's wallpaper infomation to local and sync storage. Note that local + * value should be saved first. + * @param {string} url The url address of wallpaper. For custom wallpaper, it is + * the file name. + * @param {string} layout The wallpaper layout. + * @param {string} source The wallpaper source. + */ +WallpaperUtil.saveWallpaperInfo = function(url, layout, source) { + var wallpaperInfo = { + url: url, + layout: layout, + source: source + }; + WallpaperUtil.saveToStorage(Constants.AccessLocalWallpaperInfoKey, + wallpaperInfo, false, function() { + WallpaperUtil.saveToStorage(Constants.AccessSyncWallpaperInfoKey, + wallpaperInfo, true); + }); +}; + +/** + * Downloads resources from url. Calls onSuccess and opt_onFailure accordingly. + * @param {string} url The url address where we should fetch resources. + * @param {string} type The response type of XMLHttprequest. + * @param {function} onSuccess The success callback. It must be called with + * current XMLHttprequest object. + * @param {function} onFailure The failure callback. + * @param {XMLHttpRequest=} opt_xhr The XMLHttpRequest object. + */ +WallpaperUtil.fetchURL = function(url, type, onSuccess, onFailure, opt_xhr) { + var xhr; + if (opt_xhr) + xhr = opt_xhr; + else + xhr = new XMLHttpRequest(); + + try { + // Do not use loadend here to handle both success and failure case. It gets + // complicated with abortion. Unexpected error message may show up. See + // http://crbug.com/242581. + xhr.addEventListener('load', function(e) { + if (this.status == 200) { + onSuccess(this); + } else { + onFailure(); + } + }); + xhr.addEventListener('error', onFailure); + xhr.open('GET', url, true); + xhr.responseType = type; + xhr.send(null); + } catch (e) { + onFailure(); + } +}; + +/** + * Sets wallpaper to online wallpaper specified by url and layout + * @param {string} url The url address where we should fetch resources. + * @param {string} layout The layout of online wallpaper. + * @param {function} onSuccess The success callback. + * @param {function} onFailure The failure callback. + */ +WallpaperUtil.setOnlineWallpaper = function(url, layout, onSuccess, onFailure) { + var self = this; + chrome.wallpaperPrivate.setWallpaperIfExists(url, layout, function(exists) { + if (exists) { + onSuccess(); + return; + } + + self.fetchURL(url, 'arraybuffer', function(xhr) { + if (xhr.response != null) { + chrome.wallpaperPrivate.setWallpaper(xhr.response, layout, url, + onSuccess); + self.saveWallpaperInfo(url, layout, + Constants.WallpaperSourceEnum.Online); + } else { + onFailure(); + } + }, onFailure); + }); +}; diff --git a/chromium/chrome/browser/resources/chromeos/wallpaper_manager/js/wallpaper_directories.js b/chromium/chrome/browser/resources/chromeos/wallpaper_manager/js/wallpaper_directories.js new file mode 100644 index 00000000000..ff3de99a133 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/wallpaper_manager/js/wallpaper_directories.js @@ -0,0 +1,93 @@ +// Copyright (c) 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** + * Wallpaper file system quota. + */ +/** @const */ var WallpaperQuota = 1024 * 1024 * 100; + +/** + * Wallpaper directories enum. + */ +/** @const */ var WallpaperDirNameEnum = { + ORIGINAL: 'original', + THUMBNAIL: 'thumbnail' + }; + +var wallpaperDirectories = null; + +/** + * Manages custom wallpaper related directories in wallpaper's sandboxed + * FileSystem. + * @constructor + */ +function WallpaperDirectories() { + this.wallpaperDirs_ = {}; + this.wallpaperDirs_[WallpaperDirNameEnum.ORIGINAL] = null; + this.wallpaperDirs_[WallpaperDirNameEnum.THUMBNAIL] = null; +} + +/** + * Gets WallpaperDirectories instance. In case is hasn't been initialized, a new + * instance is created. + * @return {WallpaperDirectories} A WallpaperDirectories instance. + */ +WallpaperDirectories.getInstance = function() { + if (wallpaperDirectories === null) + wallpaperDirectories = new WallpaperDirectories(); + return wallpaperDirectories; +}; + +WallpaperDirectories.prototype = { + /** + * Returns all custom wallpaper related directory entries. + */ + get wallpaperDirs() { + return this.wallpaperDirs_; + }, + + /** + * If dirName is not requested, gets the directory entry of dirName and cache + * the result. Calls success callback if success. + * @param {string} dirName The directory name of requested directory entry. + * @param {function(DirectoryEntry):void} success Call success with requested + * DirectoryEntry. + * @param {function(e):void} failure Call failure when failed to get the + * requested directory. + */ + requestDir: function(dirName, success, failure) { + if (dirName != WallpaperDirNameEnum.ORIGINAL && + dirName != WallpaperDirNameEnum.THUMBNAIL) { + console.error('Error: Unknow directory name.'); + var e = new Error(); + e.code = FileError.NOT_FOUND_ERR; + failure(e); + return; + } + var self = this; + window.webkitRequestFileSystem(window.PERSISTENT, WallpaperQuota, + function(fs) { + fs.root.getDirectory(dirName, {create: true}, function(dirEntry) { + self.wallpaperDirs_[dirName] = dirEntry; + success(dirEntry); + }, failure); + }, failure); + }, + + /** + * Gets DirectoryEntry associated with dirName from cache. If not in cache try + * to request it from FileSystem. + * @param {string} dirName The directory name of requested directory entry. + * @param {function(DirectoryEntry):void} success Call success with requested + * DirectoryEntry. + * @param {function(e):void} failure Call failure when failed to get the + * requested directory. + */ + getDirectory: function(dirName, success, failure) { + if (this.wallpaperDirs[dirName]) + success(this.wallpaperDirs[dirName]); + else + this.requestDir(dirName, success, failure); + } +}; diff --git a/chromium/chrome/browser/resources/chromeos/wallpaper_manager/js/wallpaper_images_grid.js b/chromium/chrome/browser/resources/chromeos/wallpaper_manager/js/wallpaper_images_grid.js new file mode 100644 index 00000000000..b2b2a9c37c8 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/wallpaper_manager/js/wallpaper_images_grid.js @@ -0,0 +1,288 @@ +// Copyright (c) 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +cr.define('wallpapers', function() { + /** @const */ var ArrayDataModel = cr.ui.ArrayDataModel; + /** @const */ var Grid = cr.ui.Grid; + /** @const */ var GridItem = cr.ui.GridItem; + /** @const */ var GridSelectionController = cr.ui.GridSelectionController; + /** @const */ var ListSingleSelectionModel = cr.ui.ListSingleSelectionModel; + /** @const */ var ThumbnailSuffix = '_thumbnail.png'; + + /** + * Creates a new wallpaper thumbnails grid item. + * @param {{baseURL: string, layout: string, source: string, + * availableOffline: boolean, opt_dynamicURL: string, + * opt_author: string, opt_authorWebsite: string}} + * wallpaperInfo Wallpaper data item in WallpaperThumbnailsGrid's data + * model. + * @constructor + * @extends {cr.ui.GridItem} + */ + function WallpaperThumbnailsGridItem(wallpaperInfo) { + var el = new GridItem(wallpaperInfo); + el.__proto__ = WallpaperThumbnailsGridItem.prototype; + return el; + } + + WallpaperThumbnailsGridItem.prototype = { + __proto__: GridItem.prototype, + + /** @override */ + decorate: function() { + GridItem.prototype.decorate.call(this); + // Removes garbage created by GridItem. + this.innerText = ''; + var imageEl = cr.doc.createElement('img'); + imageEl.classList.add('thumbnail'); + cr.defineProperty(imageEl, 'offline', cr.PropertyKind.BOOL_ATTR); + imageEl.offline = this.dataItem.availableOffline; + this.appendChild(imageEl); + var self = this; + + switch (this.dataItem.source) { + case Constants.WallpaperSourceEnum.AddNew: + this.id = 'add-new'; + this.addEventListener('click', function(e) { + $('wallpaper-selection-container').hidden = false; + }); + break; + case Constants.WallpaperSourceEnum.Custom: + var errorHandler = function(e) { + console.error('Can not access file system.'); + }; + var wallpaperDirectories = WallpaperDirectories.getInstance(); + var getThumbnail = function(fileName) { + var setURL = function(fileEntry) { + imageEl.src = fileEntry.toURL(); + }; + var fallback = function() { + wallpaperDirectories.getDirectory(WallpaperDirNameEnum.ORIGINAL, + function(dirEntry) { + dirEntry.getFile(fileName, {create: false}, setURL, + errorHandler); + }, errorHandler); + }; + var success = function(dirEntry) { + dirEntry.getFile(fileName, {create: false}, setURL, fallback); + }; + wallpaperDirectories.getDirectory(WallpaperDirNameEnum.THUMBNAIL, + success, + errorHandler); + } + getThumbnail(self.dataItem.baseURL); + break; + case Constants.WallpaperSourceEnum.OEM: + case Constants.WallpaperSourceEnum.Online: + chrome.wallpaperPrivate.getThumbnail(this.dataItem.baseURL, + this.dataItem.source, + function(data) { + if (data) { + var blob = new Blob([new Int8Array(data)], + {'type': 'image\/png'}); + imageEl.src = window.URL.createObjectURL(blob); + imageEl.addEventListener('load', function(e) { + window.URL.revokeObjectURL(this.src); + }); + } else if (self.dataItem.source == + Constants.WallpaperSourceEnum.Online) { + var xhr = new XMLHttpRequest(); + xhr.open('GET', self.dataItem.baseURL + ThumbnailSuffix, true); + xhr.responseType = 'arraybuffer'; + xhr.send(null); + xhr.addEventListener('load', function(e) { + if (xhr.status === 200) { + chrome.wallpaperPrivate.saveThumbnail(self.dataItem.baseURL, + xhr.response); + var blob = new Blob([new Int8Array(xhr.response)], + {'type' : 'image\/png'}); + imageEl.src = window.URL.createObjectURL(blob); + // TODO(bshe): We currently use empty div to reserve space for + // thumbnail. Use a placeholder like "loading" image may + // better. + imageEl.addEventListener('load', function(e) { + window.URL.revokeObjectURL(this.src); + }); + } + }); + } + }); + break; + default: + console.error('Unsupported image source.'); + } + }, + }; + + /** + * Creates a selection controller that wraps selection on grid ends + * and translates Enter presses into 'activate' events. + * @param {cr.ui.ListSelectionModel} selectionModel The selection model to + * interact with. + * @param {cr.ui.Grid} grid The grid to interact with. + * @constructor + * @extends {cr.ui.GridSelectionController} + */ + function WallpaperThumbnailsGridSelectionController(selectionModel, grid) { + GridSelectionController.call(this, selectionModel, grid); + } + + WallpaperThumbnailsGridSelectionController.prototype = { + __proto__: GridSelectionController.prototype, + + /** @override */ + getIndexBefore: function(index) { + var result = + GridSelectionController.prototype.getIndexBefore.call(this, index); + return result == -1 ? this.getLastIndex() : result; + }, + + /** @override */ + getIndexAfter: function(index) { + var result = + GridSelectionController.prototype.getIndexAfter.call(this, index); + return result == -1 ? this.getFirstIndex() : result; + }, + + /** @override */ + handleKeyDown: function(e) { + if (e.keyIdentifier == 'Enter') + cr.dispatchSimpleEvent(this.grid_, 'activate'); + else + GridSelectionController.prototype.handleKeyDown.call(this, e); + }, + }; + + /** + * Creates a new user images grid element. + * @param {Object=} opt_propertyBag Optional properties. + * @constructor + * @extends {cr.ui.Grid} + */ + var WallpaperThumbnailsGrid = cr.ui.define('grid'); + + WallpaperThumbnailsGrid.prototype = { + __proto__: Grid.prototype, + + /** + * The checkbox element. + */ + checkmark_: undefined, + + /** + * The item in data model which should have a checkmark. + * @type {{baseURL: string, dynamicURL: string, layout: string, + * author: string, authorWebsite: string, + * availableOffline: boolean}} + * wallpaperInfo The information of the wallpaper to be set active. + */ + activeItem_: undefined, + set activeItem(activeItem) { + if (this.activeItem_ != activeItem) { + this.activeItem_ = activeItem; + this.updateActiveThumb_(); + } + }, + + /** @override */ + createSelectionController: function(sm) { + return new WallpaperThumbnailsGridSelectionController(sm, this); + }, + + /** @override */ + decorate: function() { + Grid.prototype.decorate.call(this); + // checkmark_ needs to be initialized before set data model. Otherwise, we + // may try to access checkmark before initialization in + // updateActiveThumb_(). + this.checkmark_ = cr.doc.createElement('div'); + this.checkmark_.classList.add('check'); + this.dataModel = new ArrayDataModel([]); + this.itemConstructor = WallpaperThumbnailsGridItem; + this.selectionModel = new ListSingleSelectionModel(); + this.inProgramSelection_ = false; + }, + + /** + * Should only be queried from the 'change' event listener, true if the + * change event was triggered by a programmatical selection change. + * @type {boolean} + */ + get inProgramSelection() { + return this.inProgramSelection_; + }, + + /** + * Set index to the image selected. + * @type {number} index The index of selected image. + */ + set selectedItemIndex(index) { + this.inProgramSelection_ = true; + this.selectionModel.selectedIndex = index; + this.inProgramSelection_ = false; + }, + + /** + * The selected item. + * @type {!Object} Wallpaper information inserted into the data model. + */ + get selectedItem() { + var index = this.selectionModel.selectedIndex; + return index != -1 ? this.dataModel.item(index) : null; + }, + set selectedItem(selectedItem) { + var index = this.dataModel.indexOf(selectedItem); + this.inProgramSelection_ = true; + this.selectionModel.leadIndex = index; + this.selectionModel.selectedIndex = index; + this.inProgramSelection_ = false; + }, + + /** + * Forces re-display, size re-calculation and focuses grid. + */ + updateAndFocus: function() { + // Recalculate the measured item size. + this.measured_ = null; + this.columns = 0; + this.redraw(); + this.focus(); + }, + + /** + * Shows a checkmark on the active thumbnail and clears previous active one + * if any. Note if wallpaper was not set successfully, checkmark should not + * show on that thumbnail. + */ + updateActiveThumb_: function() { + var selectedGridItem = this.getListItem(this.activeItem_); + if (this.checkmark_.parentNode && + this.checkmark_.parentNode == selectedGridItem) { + return; + } + + // Clears previous checkmark. + if (this.checkmark_.parentNode) + this.checkmark_.parentNode.removeChild(this.checkmark_); + + if (!selectedGridItem) + return; + selectedGridItem.appendChild(this.checkmark_); + }, + + /** + * Redraws the viewport. + */ + redraw: function() { + Grid.prototype.redraw.call(this); + // The active thumbnail maybe deleted in the above redraw(). Sets it again + // to make sure checkmark shows correctly. + this.updateActiveThumb_(); + } + }; + + return { + WallpaperThumbnailsGrid: WallpaperThumbnailsGrid + }; +}); diff --git a/chromium/chrome/browser/resources/chromeos/wallpaper_manager/js/wallpaper_manager.js b/chromium/chrome/browser/resources/chromeos/wallpaper_manager/js/wallpaper_manager.js new file mode 100644 index 00000000000..ca52a508185 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/wallpaper_manager/js/wallpaper_manager.js @@ -0,0 +1,1044 @@ +// Copyright (c) 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** + * WallpaperManager constructor. + * + * WallpaperManager objects encapsulate the functionality of the wallpaper + * manager extension. + * + * @constructor + * @param {HTMLElement} dialogDom The DOM node containing the prototypical + * extension UI. + */ + +function WallpaperManager(dialogDom) { + this.dialogDom_ = dialogDom; + this.document_ = dialogDom.ownerDocument; + this.enableOnlineWallpaper_ = loadTimeData.valueExists('manifestBaseURL'); + this.selectedCategory = null; + this.selectedItem_ = null; + this.progressManager_ = new ProgressManager(); + this.customWallpaperData_ = null; + this.currentWallpaper_ = null; + this.wallpaperRequest_ = null; + this.wallpaperDirs_ = WallpaperDirectories.getInstance(); + this.preManifestDomInit_(); + this.fetchManifest_(); +} + +// Anonymous 'namespace'. +// TODO(bshe): Get rid of anonymous namespace. +(function() { + + /** + * URL of the learn more page for wallpaper picker. + */ + /** @const */ var LearnMoreURL = + 'https://support.google.com/chromeos/?p=wallpaper_fileerror&hl=' + + navigator.language; + + /** + * Index of the All category. It is the first category in wallpaper picker. + */ + /** @const */ var AllCategoryIndex = 0; + + /** + * Index offset of categories parsed from manifest. The All category is added + * before them. So the offset is 1. + */ + /** @const */ var OnlineCategoriesOffset = 1; + + /** + * Returns a translated string. + * + * Wrapper function to make dealing with translated strings more concise. + * Equivilant to localStrings.getString(id). + * + * @param {string} id The id of the string to return. + * @return {string} The translated string. + */ + function str(id) { + return loadTimeData.getString(id); + } + + /** + * Retruns the current selected layout. + * @return {string} The selected layout. + */ + function getSelectedLayout() { + var setWallpaperLayout = $('set-wallpaper-layout'); + return setWallpaperLayout.options[setWallpaperLayout.selectedIndex].value; + } + + /** + * Loads translated strings. + */ + WallpaperManager.initStrings = function(callback) { + chrome.wallpaperPrivate.getStrings(function(strings) { + loadTimeData.data = strings; + if (callback) + callback(); + }); + }; + + /** + * Requests wallpaper manifest file from server. + */ + WallpaperManager.prototype.fetchManifest_ = function() { + var locale = navigator.language; + if (!this.enableOnlineWallpaper_) { + this.postManifestDomInit_(); + return; + } + + var urls = [ + str('manifestBaseURL') + locale + '.json', + // Fallback url. Use 'en' locale by default. + str('manifestBaseURL') + 'en.json']; + + var asyncFetchManifestFromUrls = function(urls, func, successCallback, + failureCallback) { + var index = 0; + var loop = { + next: function() { + if (index < urls.length) { + func(loop, urls[index]); + index++; + } else { + failureCallback(); + } + }, + + success: function(response) { + successCallback(response); + }, + + failure: function() { + failureCallback(); + } + }; + loop.next(); + }; + + var fetchManifestAsync = function(loop, url) { + var xhr = new XMLHttpRequest(); + try { + xhr.addEventListener('loadend', function(e) { + if (this.status == 200 && this.responseText != null) { + try { + var manifest = JSON.parse(this.responseText); + loop.success(manifest); + } catch (e) { + loop.failure(); + } + } else { + loop.next(); + } + }); + xhr.open('GET', url, true); + xhr.send(null); + } catch (e) { + loop.failure(); + } + }; + + if (navigator.onLine) { + asyncFetchManifestFromUrls(urls, fetchManifestAsync, + this.onLoadManifestSuccess_.bind(this), + this.onLoadManifestFailed_.bind(this)); + } else { + // If device is offline, fetches manifest from local storage. + // TODO(bshe): Always loading the offline manifest first and replacing + // with the online one when available. + this.onLoadManifestFailed_(); + } + }; + + /** + * Shows error message in a centered dialog. + * @private + * @param {string} errroMessage The string to show in the error dialog. + */ + WallpaperManager.prototype.showError_ = function(errorMessage) { + document.querySelector('.error-message').textContent = errorMessage; + $('error-container').hidden = false; + }; + + /** + * Sets manifest loaded from server. Called after manifest is successfully + * loaded. + * @param {object} manifest The parsed manifest file. + */ + WallpaperManager.prototype.onLoadManifestSuccess_ = function(manifest) { + this.manifest_ = manifest; + WallpaperUtil.saveToStorage(Constants.AccessManifestKey, manifest, false); + this.postManifestDomInit_(); + }; + + // Sets manifest to previously saved object if any and shows connection error. + // Called after manifest failed to load. + WallpaperManager.prototype.onLoadManifestFailed_ = function() { + var accessManifestKey = Constants.AccessManifestKey; + var self = this; + Constants.WallpaperLocalStorage.get(accessManifestKey, function(items) { + self.manifest_ = items[accessManifestKey] ? items[accessManifestKey] : {}; + self.showError_(str('connectionFailed')); + self.postManifestDomInit_(); + $('wallpaper-grid').classList.add('image-picker-offline'); + }); + }; + + /** + * Toggle surprise me feature of wallpaper picker. It fires an storage + * onChanged event. Event handler for that event is in event_page.js. + * @private + */ + WallpaperManager.prototype.toggleSurpriseMe_ = function() { + var checkbox = $('surprise-me').querySelector('#checkbox'); + var shouldEnable = !checkbox.classList.contains('checked'); + WallpaperUtil.saveToStorage(Constants.AccessSurpriseMeEnabledKey, + shouldEnable, false, function() { + if (chrome.runtime.lastError == null) { + if (shouldEnable) { + checkbox.classList.add('checked'); + } else { + checkbox.classList.remove('checked'); + } + $('categories-list').disabled = shouldEnable; + $('wallpaper-grid').disabled = shouldEnable; + } else { + // TODO(bshe): show error message to user. + console.error('Failed to save surprise me option to chrome storage.'); + } + }); + }; + + /** + * One-time initialization of various DOM nodes. Fetching manifest may take a + * long time due to slow connection. Dom nodes that do not depend on manifest + * should be initialized here to unblock from manifest fetching. + */ + WallpaperManager.prototype.preManifestDomInit_ = function() { + $('window-close-button').addEventListener('click', function() { + window.close(); + }); + this.document_.defaultView.addEventListener( + 'resize', this.onResize_.bind(this)); + this.document_.defaultView.addEventListener( + 'keydown', this.onKeyDown_.bind(this)); + $('learn-more').href = LearnMoreURL; + $('close-error').addEventListener('click', function() { + $('error-container').hidden = true; + }); + $('close-wallpaper-selection').addEventListener('click', function() { + $('wallpaper-selection-container').hidden = true; + $('set-wallpaper-layout').disabled = true; + }); + }; + + /** + * One-time initialization of various DOM nodes. Dom nodes that do depend on + * manifest should be initialized here. + */ + WallpaperManager.prototype.postManifestDomInit_ = function() { + i18nTemplate.process(this.document_, loadTimeData); + this.initCategoriesList_(); + this.initThumbnailsGrid_(); + this.presetCategory_(); + + $('file-selector').addEventListener( + 'change', this.onFileSelectorChanged_.bind(this)); + $('set-wallpaper-layout').addEventListener( + 'change', this.onWallpaperLayoutChanged_.bind(this)); + + if (this.enableOnlineWallpaper_) { + var self = this; + $('surprise-me').hidden = false; + $('surprise-me').addEventListener('click', + this.toggleSurpriseMe_.bind(this)); + Constants.WallpaperLocalStorage.get(Constants.AccessSurpriseMeEnabledKey, + function(items) { + if (items[Constants.AccessSurpriseMeEnabledKey]) { + $('surprise-me').querySelector('#checkbox').classList.add('checked'); + $('categories-list').disabled = true; + $('wallpaper-grid').disabled = true; + } + }); + + window.addEventListener('offline', function() { + chrome.wallpaperPrivate.getOfflineWallpaperList(function(lists) { + if (!self.downloadedListMap_) + self.downloadedListMap_ = {}; + for (var i = 0; i < lists.length; i++) { + self.downloadedListMap_[lists[i]] = true; + } + var thumbnails = self.document_.querySelectorAll('.thumbnail'); + for (var i = 0; i < thumbnails.length; i++) { + var thumbnail = thumbnails[i]; + var url = self.wallpaperGrid_.dataModel.item(i).baseURL; + var fileName = url.substring(url.lastIndexOf('/') + 1) + + Constants.HighResolutionSuffix; + if (self.downloadedListMap_ && + self.downloadedListMap_.hasOwnProperty(encodeURI(fileName))) { + thumbnail.offline = true; + } + } + }); + $('wallpaper-grid').classList.add('image-picker-offline'); + }); + window.addEventListener('online', function() { + self.downloadedListMap_ = null; + $('wallpaper-grid').classList.remove('image-picker-offline'); + }); + } + + this.onResize_(); + this.initContextMenuAndCommand_(); + }; + + /** + * One-time initialization of context menu and command. + */ + WallpaperManager.prototype.initContextMenuAndCommand_ = function() { + this.wallpaperContextMenu_ = $('wallpaper-context-menu'); + cr.ui.Menu.decorate(this.wallpaperContextMenu_); + cr.ui.contextMenuHandler.setContextMenu(this.wallpaperGrid_, + this.wallpaperContextMenu_); + var commands = this.dialogDom_.querySelectorAll('command'); + for (var i = 0; i < commands.length; i++) + cr.ui.Command.decorate(commands[i]); + + var doc = this.document_; + doc.addEventListener('command', this.onCommand_.bind(this)); + doc.addEventListener('canExecute', this.onCommandCanExecute_.bind(this)); + }; + + /** + * Handles a command being executed. + * @param {Event} event A command event. + */ + WallpaperManager.prototype.onCommand_ = function(event) { + if (event.command.id == 'delete') { + var wallpaperGrid = this.wallpaperGrid_; + var selectedIndex = wallpaperGrid.selectionModel.selectedIndex; + var item = wallpaperGrid.dataModel.item(selectedIndex); + if (!item || item.source != Constants.WallpaperSourceEnum.Custom) + return; + this.removeCustomWallpaper(item.baseURL); + wallpaperGrid.dataModel.splice(selectedIndex, 1); + // Calculate the number of remaining custom wallpapers. The add new button + // in data model needs to be excluded. + var customWallpaperCount = wallpaperGrid.dataModel.length - 1; + if (customWallpaperCount == 0) { + // Active custom wallpaper is also copied in chronos data dir. It needs + // to be deleted. + chrome.wallpaperPrivate.resetWallpaper(); + } else { + selectedIndex = Math.min(selectedIndex, customWallpaperCount - 1); + wallpaperGrid.selectionModel.selectedIndex = selectedIndex; + } + event.cancelBubble = true; + } + }; + + /** + * Decides if a command can be executed on current target. + * @param {Event} event A command event. + */ + WallpaperManager.prototype.onCommandCanExecute_ = function(event) { + switch (event.command.id) { + case 'delete': + var wallpaperGrid = this.wallpaperGrid_; + var selectedIndex = wallpaperGrid.selectionModel.selectedIndex; + var item = wallpaperGrid.dataModel.item(selectedIndex); + if (selectedIndex != this.wallpaperGrid_.dataModel.length - 1 && + item && item.source == Constants.WallpaperSourceEnum.Custom) { + event.canExecute = true; + break; + } + default: + event.canExecute = false; + } + }; + + /** + * Preset to the category which contains current wallpaper. + */ + WallpaperManager.prototype.presetCategory_ = function() { + this.currentWallpaper_ = str('currentWallpaper'); + // The currentWallpaper_ is either a url contains HightResolutionSuffix or a + // custom wallpaper file name converted from an integer value represent + // time (e.g., 13006377367586070). + if (!this.enableOnlineWallpaper_ || (this.currentWallpaper_ && + this.currentWallpaper_.indexOf(Constants.HighResolutionSuffix) == -1)) { + // Custom is the last one in the categories list. + this.categoriesList_.selectionModel.selectedIndex = + this.categoriesList_.dataModel.length - 1; + return; + } + var self = this; + var presetCategoryInner_ = function() { + // Selects the first category in the categories list of current + // wallpaper as the default selected category when showing wallpaper + // picker UI. + var presetCategory = AllCategoryIndex; + if (self.currentWallpaper_) { + for (var key in self.manifest_.wallpaper_list) { + var url = self.manifest_.wallpaper_list[key].base_url + + Constants.HighResolutionSuffix; + if (url.indexOf(self.currentWallpaper_) != -1 && + self.manifest_.wallpaper_list[key].categories.length > 0) { + presetCategory = self.manifest_.wallpaper_list[key].categories[0] + + OnlineCategoriesOffset; + break; + } + } + } + self.categoriesList_.selectionModel.selectedIndex = presetCategory; + }; + if (navigator.onLine) { + presetCategoryInner_(); + } else { + // If device is offline, gets the available offline wallpaper list first. + // Wallpapers which are not in the list will display a grayscaled + // thumbnail. + chrome.wallpaperPrivate.getOfflineWallpaperList(function(lists) { + if (!self.downloadedListMap_) + self.downloadedListMap_ = {}; + for (var i = 0; i < lists.length; i++) + self.downloadedListMap_[lists[i]] = true; + presetCategoryInner_(); + }); + } + }; + + /** + * Constructs the thumbnails grid. + */ + WallpaperManager.prototype.initThumbnailsGrid_ = function() { + this.wallpaperGrid_ = $('wallpaper-grid'); + wallpapers.WallpaperThumbnailsGrid.decorate(this.wallpaperGrid_); + this.wallpaperGrid_.autoExpands = true; + + this.wallpaperGrid_.addEventListener('change', this.onChange_.bind(this)); + this.wallpaperGrid_.addEventListener('dblclick', this.onClose_.bind(this)); + }; + + /** + * Handles change event dispatched by wallpaper grid. + */ + WallpaperManager.prototype.onChange_ = function() { + // splice may dispatch a change event because the position of selected + // element changing. But the actual selected element may not change after + // splice. Check if the new selected element equals to the previous selected + // element before continuing. Otherwise, wallpaper may reset to previous one + // as described in http://crbug.com/229036. + if (this.selectedItem_ == this.wallpaperGrid_.selectedItem) + return; + this.selectedItem_ = this.wallpaperGrid_.selectedItem; + this.onSelectedItemChanged_(); + }; + + /** + * Closes window if no pending wallpaper request. + */ + WallpaperManager.prototype.onClose_ = function() { + if (this.wallpaperRequest_) { + this.wallpaperRequest_.addEventListener('loadend', function() { + // Close window on wallpaper loading finished. + window.close(); + }); + } else { + window.close(); + } + }; + + /** + * Sets wallpaper to the corresponding wallpaper of selected thumbnail. + * @param {{baseURL: string, layout: string, source: string, + * availableOffline: boolean, opt_dynamicURL: string, + * opt_author: string, opt_authorWebsite: string}} + * selectedItem the selected item in WallpaperThumbnailsGrid's data + * model. + */ + WallpaperManager.prototype.setSelectedWallpaper_ = function(selectedItem) { + var self = this; + switch (selectedItem.source) { + case Constants.WallpaperSourceEnum.Custom: + var errorHandler = this.onFileSystemError_.bind(this); + var setActive = function() { + self.wallpaperGrid_.activeItem = selectedItem; + self.currentWallpaper_ = selectedItem.baseURL; + }; + var success = function(dirEntry) { + dirEntry.getFile(selectedItem.baseURL, {create: false}, + function(fileEntry) { + fileEntry.file(function(file) { + var reader = new FileReader(); + reader.readAsArrayBuffer(file); + reader.addEventListener('error', errorHandler); + reader.addEventListener('load', function(e) { + self.setCustomWallpaper(e.target.result, + selectedItem.layout, + false, selectedItem.baseURL, + setActive, errorHandler); + }); + }, errorHandler); + }, errorHandler); + } + this.wallpaperDirs_.getDirectory(WallpaperDirNameEnum.ORIGINAL, + success, errorHandler); + break; + case Constants.WallpaperSourceEnum.OEM: + // Resets back to default wallpaper. + chrome.wallpaperPrivate.resetWallpaper(); + this.currentWallpaper_ = selectedItem.baseURL; + this.wallpaperGrid_.activeItem = selectedItem; + WallpaperUtil.saveWallpaperInfo(wallpaperURL, selectedItem.layout, + selectedItem.source); + break; + case Constants.WallpaperSourceEnum.Online: + var wallpaperURL = selectedItem.baseURL + + Constants.HighResolutionSuffix; + var selectedGridItem = this.wallpaperGrid_.getListItem(selectedItem); + + chrome.wallpaperPrivate.setWallpaperIfExists(wallpaperURL, + selectedItem.layout, + function(exists) { + if (exists) { + self.currentWallpaper_ = wallpaperURL; + self.wallpaperGrid_.activeItem = selectedItem; + WallpaperUtil.saveWallpaperInfo(wallpaperURL, selectedItem.layout, + selectedItem.source); + return; + } + + // Falls back to request wallpaper from server. + if (self.wallpaperRequest_) + self.wallpaperRequest_.abort(); + + self.wallpaperRequest_ = new XMLHttpRequest(); + self.progressManager_.reset(self.wallpaperRequest_, selectedGridItem); + + var onSuccess = function(xhr) { + var image = xhr.response; + chrome.wallpaperPrivate.setWallpaper(image, selectedItem.layout, + wallpaperURL, + self.onFinished_.bind(self, selectedGridItem, selectedItem)); + self.currentWallpaper_ = wallpaperURL; + WallpaperUtil.saveWallpaperInfo(wallpaperURL, selectedItem.layout, + selectedItem.source); + self.wallpaperRequest_ = null; + }; + var onFailure = function() { + self.progressManager_.hideProgressBar(selectedGridItem); + self.showError_(str('downloadFailed')); + self.wallpaperRequest_ = null; + }; + WallpaperUtil.fetchURL(wallpaperURL, 'arraybuffer', onSuccess, + onFailure, self.wallpaperRequest_); + }); + break; + default: + console.error('Unsupported wallpaper source.'); + } + }; + + /* + * Removes the oldest custom wallpaper. If the oldest one is set as current + * wallpaper, removes the second oldest one to free some space. This should + * only be called when exceeding wallpaper quota. + */ + WallpaperManager.prototype.removeOldestWallpaper_ = function() { + // Custom wallpapers should already sorted when put to the data model. The + // last element is the add new button, need to exclude it as well. + var oldestIndex = this.wallpaperGrid_.dataModel.length - 2; + var item = this.wallpaperGrid_.dataModel.item(oldestIndex); + if (!item || item.source != Constants.WallpaperSourceEnum.Custom) + return; + if (item.baseURL == this.currentWallpaper_) + item = this.wallpaperGrid_.dataModel.item(--oldestIndex); + if (item) { + this.removeCustomWallpaper(item.baseURL); + this.wallpaperGrid_.dataModel.splice(oldestIndex, 1); + } + }; + + /* + * Shows an error message to user and log the failed reason in console. + */ + WallpaperManager.prototype.onFileSystemError_ = function(e) { + var msg = ''; + switch (e.code) { + case FileError.QUOTA_EXCEEDED_ERR: + msg = 'QUOTA_EXCEEDED_ERR'; + // Instead of simply remove oldest wallpaper, we should consider a + // better way to handle this situation. See crbug.com/180890. + this.removeOldestWallpaper_(); + break; + case FileError.NOT_FOUND_ERR: + msg = 'NOT_FOUND_ERR'; + break; + case FileError.SECURITY_ERR: + msg = 'SECURITY_ERR'; + break; + case FileError.INVALID_MODIFICATION_ERR: + msg = 'INVALID_MODIFICATION_ERR'; + break; + case FileError.INVALID_STATE_ERR: + msg = 'INVALID_STATE_ERR'; + break; + default: + msg = 'Unknown Error'; + break; + } + console.error('Error: ' + msg); + this.showError_(str('accessFileFailure')); + }; + + /** + * Handles changing of selectedItem in wallpaper manager. + */ + WallpaperManager.prototype.onSelectedItemChanged_ = function() { + this.setWallpaperAttribution_(this.selectedItem_); + + if (!this.selectedItem_ || this.selectedItem_.source == 'ADDNEW') + return; + + if (this.selectedItem_.baseURL && !this.wallpaperGrid_.inProgramSelection) { + if (this.selectedItem_.source == Constants.WallpaperSourceEnum.Custom) { + var items = {}; + var key = this.selectedItem_.baseURL; + var self = this; + Constants.WallpaperLocalStorage.get(key, function(items) { + self.selectedItem_.layout = + items[key] ? items[key] : 'CENTER_CROPPED'; + self.setSelectedWallpaper_(self.selectedItem_); + }); + } else { + this.setSelectedWallpaper_(this.selectedItem_); + } + } + }; + + /** + * Set attributions of wallpaper with given URL. If URL is not valid, clear + * the attributions. + * @param {{baseURL: string, dynamicURL: string, layout: string, + * author: string, authorWebsite: string, availableOffline: boolean}} + * selectedItem selected wallpaper item in grid. + * @private + */ + WallpaperManager.prototype.setWallpaperAttribution_ = function(selectedItem) { + // Only online wallpapers have author and website attributes. All other type + // of wallpapers should not show attributions. + if (selectedItem && + selectedItem.source == Constants.WallpaperSourceEnum.Online) { + $('author-name').textContent = selectedItem.author; + $('author-website').textContent = $('author-website').href = + selectedItem.authorWebsite; + chrome.wallpaperPrivate.getThumbnail(selectedItem.baseURL, + selectedItem.source, + function(data) { + var img = $('attribute-image'); + if (data) { + var blob = new Blob([new Int8Array(data)], {'type' : 'image\/png'}); + img.src = window.URL.createObjectURL(blob); + img.addEventListener('load', function(e) { + window.URL.revokeObjectURL(this.src); + }); + } else { + img.src = ''; + } + }); + $('wallpaper-attribute').hidden = false; + $('attribute-image').hidden = false; + return; + } + $('wallpaper-attribute').hidden = true; + $('attribute-image').hidden = true; + $('author-name').textContent = ''; + $('author-website').textContent = $('author-website').href = ''; + $('attribute-image').src = ''; + }; + + /** + * Resize thumbnails grid and categories list to fit the new window size. + */ + WallpaperManager.prototype.onResize_ = function() { + this.wallpaperGrid_.redraw(); + this.categoriesList_.redraw(); + }; + + /** + * Close the last opened overlay on pressing the Escape key. + * @param {Event} event A keydown event. + */ + WallpaperManager.prototype.onKeyDown_ = function(event) { + if (event.keyCode == 27) { + // The last opened overlay coincides with the first match of querySelector + // because the Error Container is declared in the DOM before the Wallpaper + // Selection Container. + // TODO(bshe): Make the overlay selection not dependent on the DOM. + var closeButtonSelector = '.overlay-container:not([hidden]) .close'; + var closeButton = this.document_.querySelector(closeButtonSelector); + if (closeButton) { + closeButton.click(); + event.preventDefault(); + } + } + }; + + /** + * Constructs the categories list. + */ + WallpaperManager.prototype.initCategoriesList_ = function() { + this.categoriesList_ = $('categories-list'); + cr.ui.List.decorate(this.categoriesList_); + // cr.ui.list calculates items in view port based on client height and item + // height. However, categories list is displayed horizontally. So we should + // not calculate visible items here. Sets autoExpands to true to show every + // item in the list. + // TODO(bshe): Use ul to replace cr.ui.list for category list. + this.categoriesList_.autoExpands = true; + + var self = this; + this.categoriesList_.itemConstructor = function(entry) { + return self.renderCategory_(entry); + }; + + this.categoriesList_.selectionModel = new cr.ui.ListSingleSelectionModel(); + this.categoriesList_.selectionModel.addEventListener( + 'change', this.onCategoriesChange_.bind(this)); + + var categoriesDataModel = new cr.ui.ArrayDataModel([]); + if (this.enableOnlineWallpaper_) { + // Adds all category as first category. + categoriesDataModel.push(str('allCategoryLabel')); + for (var key in this.manifest_.categories) { + categoriesDataModel.push(this.manifest_.categories[key]); + } + } + // Adds custom category as last category. + categoriesDataModel.push(str('customCategoryLabel')); + this.categoriesList_.dataModel = categoriesDataModel; + }; + + /** + * Constructs the element in categories list. + * @param {string} entry Text content of a category. + */ + WallpaperManager.prototype.renderCategory_ = function(entry) { + var li = this.document_.createElement('li'); + cr.defineProperty(li, 'custom', cr.PropertyKind.BOOL_ATTR); + li.custom = (entry == str('customCategoryLabel')); + cr.defineProperty(li, 'lead', cr.PropertyKind.BOOL_ATTR); + cr.defineProperty(li, 'selected', cr.PropertyKind.BOOL_ATTR); + var div = this.document_.createElement('div'); + div.textContent = entry; + li.appendChild(div); + return li; + }; + + /** + * Handles the custom wallpaper which user selected from file manager. Called + * when users select a file. + */ + WallpaperManager.prototype.onFileSelectorChanged_ = function() { + var files = $('file-selector').files; + if (files.length != 1) + console.error('More than one files are selected or no file selected'); + if (!files[0].type.match('image/jpeg') && + !files[0].type.match('image/png')) { + this.showError_(str('invalidWallpaper')); + return; + } + var layout = getSelectedLayout(); + var self = this; + var errorHandler = this.onFileSystemError_.bind(this); + var setSelectedFile = function(file, layout, fileName) { + var saveThumbnail = function(thumbnail) { + var success = function(dirEntry) { + dirEntry.getFile(fileName, {create: true}, function(fileEntry) { + fileEntry.createWriter(function(fileWriter) { + fileWriter.onwriteend = function(e) { + $('set-wallpaper-layout').disabled = false; + var wallpaperInfo = { + baseURL: fileName, + layout: layout, + source: Constants.WallpaperSourceEnum.Custom, + availableOffline: true + }; + self.wallpaperGrid_.dataModel.splice(0, 0, wallpaperInfo); + self.wallpaperGrid_.selectedItem = wallpaperInfo; + self.wallpaperGrid_.activeItem = wallpaperInfo; + self.currentWallpaper_ = fileName; + WallpaperUtil.saveToStorage(self.currentWallpaper_, layout, + false); + }; + + fileWriter.onerror = errorHandler; + + var blob = new Blob([new Int8Array(thumbnail)], + {'type' : 'image\/jpeg'}); + fileWriter.write(blob); + }, errorHandler); + }, errorHandler); + }; + self.wallpaperDirs_.getDirectory(WallpaperDirNameEnum.THUMBNAIL, + success, errorHandler); + }; + + var success = function(dirEntry) { + dirEntry.getFile(fileName, {create: true}, function(fileEntry) { + fileEntry.createWriter(function(fileWriter) { + fileWriter.addEventListener('writeend', function(e) { + var reader = new FileReader(); + reader.readAsArrayBuffer(file); + reader.addEventListener('error', errorHandler); + reader.addEventListener('load', function(e) { + self.setCustomWallpaper(e.target.result, layout, true, fileName, + saveThumbnail, function() { + self.removeCustomWallpaper(fileName); + errorHandler(); + }); + }); + }); + + fileWriter.addEventListener('error', errorHandler); + fileWriter.write(file); + }, errorHandler); + }, errorHandler); + }; + self.wallpaperDirs_.getDirectory(WallpaperDirNameEnum.ORIGINAL, success, + errorHandler); + }; + setSelectedFile(files[0], layout, new Date().getTime().toString()); + }; + + /** + * Removes wallpaper and thumbnail with fileName from FileSystem. + * @param {string} fileName The file name of wallpaper and thumbnail to be + * removed. + */ + WallpaperManager.prototype.removeCustomWallpaper = function(fileName) { + var errorHandler = this.onFileSystemError_.bind(this); + var self = this; + var removeFile = function(fileName) { + var success = function(dirEntry) { + dirEntry.getFile(fileName, {create: false}, function(fileEntry) { + fileEntry.remove(function() { + }, errorHandler); + }, errorHandler); + } + + // Removes copy of original. + self.wallpaperDirs_.getDirectory(WallpaperDirNameEnum.ORIGINAL, success, + errorHandler); + + // Removes generated thumbnail. + self.wallpaperDirs_.getDirectory(WallpaperDirNameEnum.THUMBNAIL, success, + errorHandler); + }; + removeFile(fileName); + }; + + /** + * Sets current wallpaper and generate thumbnail if generateThumbnail is true. + * @param {ArrayBuffer} wallpaper The binary representation of wallpaper. + * @param {string} layout The user selected wallpaper layout. + * @param {boolean} generateThumbnail True if need to generate thumbnail. + * @param {string} fileName The unique file name of wallpaper. + * @param {function(thumbnail):void} success Success callback. If + * generateThumbnail is true, the callback parameter should have the + * generated thumbnail. + * @param {function(e):void} failure Failure callback. Called when there is an + * error from FileSystem. + */ + WallpaperManager.prototype.setCustomWallpaper = function(wallpaper, + layout, + generateThumbnail, + fileName, + success, + failure) { + var self = this; + var onFinished = function(opt_thumbnail) { + if (chrome.runtime.lastError != undefined) { + self.showError_(chrome.runtime.lastError.message); + $('set-wallpaper-layout').disabled = true; + failure(); + } else { + success(opt_thumbnail); + // Custom wallpapers are not synced yet. If login on a different + // computer after set a custom wallpaper, wallpaper wont change by sync. + WallpaperUtil.saveWallpaperInfo(fileName, layout, + Constants.WallpaperSourceEnum.Custom); + } + }; + + chrome.wallpaperPrivate.setCustomWallpaper(wallpaper, layout, + generateThumbnail, + fileName, onFinished); + }; + + /** + * Sets wallpaper finished. Displays error message if any. + * @param {WallpaperThumbnailsGridItem=} opt_selectedGridItem The wallpaper + * thumbnail grid item. It extends from cr.ui.ListItem. + * @param {{baseURL: string, layout: string, source: string, + * availableOffline: boolean, opt_dynamicURL: string, + * opt_author: string, opt_authorWebsite: string}=} + * opt_selectedItem the selected item in WallpaperThumbnailsGrid's data + * model. + */ + WallpaperManager.prototype.onFinished_ = function(opt_selectedGridItem, + opt_selectedItem) { + if (opt_selectedGridItem) + this.progressManager_.hideProgressBar(opt_selectedGridItem); + + if (chrome.runtime.lastError != undefined) { + this.showError_(chrome.runtime.lastError.message); + } else if (opt_selectedItem) { + this.wallpaperGrid_.activeItem = opt_selectedItem; + } + }; + + /** + * Handles the layout setting change of custom wallpaper. + */ + WallpaperManager.prototype.onWallpaperLayoutChanged_ = function() { + var layout = getSelectedLayout(); + var self = this; + chrome.wallpaperPrivate.setCustomWallpaperLayout(layout, function() { + if (chrome.runtime.lastError != undefined) { + self.showError_(chrome.runtime.lastError.message); + self.removeCustomWallpaper(fileName); + $('set-wallpaper-layout').disabled = true; + } else { + WallpaperUtil.saveToStorage(self.currentWallpaper_, layout, false); + } + }); + }; + + /** + * Handles user clicking on a different category. + */ + WallpaperManager.prototype.onCategoriesChange_ = function() { + var categoriesList = this.categoriesList_; + var selectedIndex = categoriesList.selectionModel.selectedIndex; + if (selectedIndex == -1) + return; + var selectedListItem = categoriesList.getListItemByIndex(selectedIndex); + var bar = $('bar'); + bar.style.left = selectedListItem.offsetLeft + 'px'; + bar.style.width = selectedListItem.offsetWidth + 'px'; + + var wallpapersDataModel = new cr.ui.ArrayDataModel([]); + var selectedItem; + if (selectedListItem.custom) { + this.document_.body.setAttribute('custom', ''); + var errorHandler = this.onFileSystemError_.bind(this); + var toArray = function(list) { + return Array.prototype.slice.call(list || [], 0); + } + + var self = this; + var processResults = function(entries) { + for (var i = 0; i < entries.length; i++) { + var entry = entries[i]; + var wallpaperInfo = { + baseURL: entry.name, + // The layout will be replaced by the actual value saved in + // local storage when requested later. Layout is not important + // for constructing thumbnails grid, we use CENTER_CROPPED here + // to speed up the process of constructing. So we do not need to + // wait for fetching correct layout. + layout: 'CENTER_CROPPED', + source: Constants.WallpaperSourceEnum.Custom, + availableOffline: true + }; + wallpapersDataModel.push(wallpaperInfo); + } + if (loadTimeData.getBoolean('isOEMDefaultWallpaper')) { + var oemDefaultWallpaperElement = { + baseURL: 'OemDefaultWallpaper', + layout: 'CENTER_CROPPED', + source: Constants.WallpaperSourceEnum.OEM, + availableOffline: true + }; + wallpapersDataModel.push(oemDefaultWallpaperElement); + } + for (var i = 0; i < wallpapersDataModel.length; i++) { + if (self.currentWallpaper_ == wallpapersDataModel.item(i).baseURL) + selectedItem = wallpapersDataModel.item(i); + } + var lastElement = { + baseURL: '', + layout: '', + source: Constants.WallpaperSourceEnum.AddNew, + availableOffline: true + }; + wallpapersDataModel.push(lastElement); + self.wallpaperGrid_.dataModel = wallpapersDataModel; + self.wallpaperGrid_.selectedItem = selectedItem; + self.wallpaperGrid_.activeItem = selectedItem; + } + + var success = function(dirEntry) { + var dirReader = dirEntry.createReader(); + var entries = []; + // All of a directory's entries are not guaranteed to return in a single + // call. + var readEntries = function() { + dirReader.readEntries(function(results) { + if (!results.length) { + processResults(entries.sort()); + } else { + entries = entries.concat(toArray(results)); + readEntries(); + } + }, errorHandler); + }; + readEntries(); // Start reading dirs. + } + this.wallpaperDirs_.getDirectory(WallpaperDirNameEnum.ORIGINAL, + success, errorHandler); + } else { + this.document_.body.removeAttribute('custom'); + for (var key in this.manifest_.wallpaper_list) { + if (selectedIndex == AllCategoryIndex || + this.manifest_.wallpaper_list[key].categories.indexOf( + selectedIndex - OnlineCategoriesOffset) != -1) { + var wallpaperInfo = { + baseURL: this.manifest_.wallpaper_list[key].base_url, + layout: this.manifest_.wallpaper_list[key].default_layout, + source: Constants.WallpaperSourceEnum.Online, + availableOffline: false, + author: this.manifest_.wallpaper_list[key].author, + authorWebsite: this.manifest_.wallpaper_list[key].author_website, + dynamicURL: this.manifest_.wallpaper_list[key].dynamic_url + }; + var startIndex = wallpaperInfo.baseURL.lastIndexOf('/') + 1; + var fileName = wallpaperInfo.baseURL.substring(startIndex) + + Constants.HighResolutionSuffix; + if (this.downloadedListMap_ && + this.downloadedListMap_.hasOwnProperty(encodeURI(fileName))) { + wallpaperInfo.availableOffline = true; + } + wallpapersDataModel.push(wallpaperInfo); + var url = this.manifest_.wallpaper_list[key].base_url + + Constants.HighResolutionSuffix; + if (url == this.currentWallpaper_) { + selectedItem = wallpaperInfo; + } + } + } + this.wallpaperGrid_.dataModel = wallpapersDataModel; + this.wallpaperGrid_.selectedItem = selectedItem; + this.wallpaperGrid_.activeItem = selectedItem; + } + }; + +})(); diff --git a/chromium/chrome/browser/resources/chromeos/wallpaper_manager/main.html b/chromium/chrome/browser/resources/chromeos/wallpaper_manager/main.html new file mode 100644 index 00000000000..27b799e12d0 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/wallpaper_manager/main.html @@ -0,0 +1,128 @@ +<!DOCTYPE HTML> +<!-- +------ +Copyright (c) 2013 The Chromium Authors. All rights reserved. +Use of this source code is governed by a BSD-style license that can be +found in the LICENSE file. +--> +<html i18n-values="dir:textdirection;"> +<head> + <meta charset="utf-8"> + <title>Wallpaper Picker</title> + <link rel="stylesheet" href="../../../../../ui/webui/resources/css/widgets.css"> + <link rel="stylesheet" href="../../../../../ui/webui/resources/css/menu.css"></link> + + <link rel="stylesheet" href="css/wallpaper_manager.css"> + <script src="js/main_scripts.js"></script> + <if expr="0"> + <!-- This file has not been flattened, load individual scripts. + Keep the list in sync with js/main_scripts.js. --> + <script src="../../../../../ui/webui/resources/js/cr.js"></script> + <script src="../../../../../ui/webui/resources/js/event_tracker.js"></script> + <script src="../../../../../ui/webui/resources/js/load_time_data.js"></script> + <script src="../../../../../ui/webui/resources/js/i18n_template_no_process.js"></script> + <script src="../../../../../ui/webui/resources/js/util.js"></script> + <script src="../../../../../ui/webui/resources/js/cr/ui.js"></script> + <script src="../../../../../ui/webui/resources/js/cr/event_target.js"></script> + <script src="../../../../../ui/webui/resources/js/cr/ui/touch_handler.js"></script> + <script src="../../../../../ui/webui/resources/js/cr/ui/array_data_model.js"></script> + <script src="../../../../../ui/webui/resources/js/cr/ui/list_item.js"></script> + <script src="../../../../../ui/webui/resources/js/cr/ui/list_selection_model.js"></script> + <script src="../../../../../ui/webui/resources/js/cr/ui/list_single_selection_model.js"></script> + <script src="../../../../../ui/webui/resources/js/cr/ui/list_selection_controller.js"></script> + <script src="../../../../../ui/webui/resources/js/cr/ui/list.js"></script> + <script src="../../../../../ui/webui/resources/js/cr/ui/grid.js"></script> + <script src="../../../../../ui/webui/resources/js/cr/ui/command.js"></script> + <script src="../../../../../ui/webui/resources/js/cr/ui/position_util.js"></script> + <script src="../../../../../ui/webui/resources/js/cr/ui/menu_item.js"></script> + <script src="../../../../../ui/webui/resources/js/cr/ui/menu.js"></script> + <script src="../../../../../ui/webui/resources/js/cr/ui/menu_button.js"></script> + <script src="../../../../../ui/webui/resources/js/cr/ui/context_menu_handler.js"></script> + + <script src="js/constants.js"></script> + <script src="js/util.js"></script> + <script src="js/progress_manager.js"></script> + <script src="js/wallpaper_directories.js"></script> + <script src="js/wallpaper_images_grid.js"></script> + <script src="js/wallpaper_manager.js"></script> + <script src="js/main.js"></script> + </if> +</head> +<body i18n-values=".style.fontFamily:webFontFamily; + .style.fontSize:webFontSize"> + <commands> + <command id="delete" i18n-values="label:deleteCommandLabel" + shortcut="U+007F"></command> + </commands> + + <menu id="wallpaper-context-menu" class="chrome-menu" visibleif="custom"> + <menuitem command="#delete"></menuitem> + </menu> + + <div id="error-container" class="overlay-container" hidden> + <div class="page"> + <div id="close-error" class="close"></div> + <span class="error-message"></span> + <a id="learn-more" i18n-content="learnMore" target="_blank"></a> + </div> + </div> + <div id="wallpaper-selection-container" class="overlay-container" hidden> + <div class="page"> + <div id="close-wallpaper-selection" class="close"></div> + <div id="content"> + <input id="file-selector" type="file" size="80" + accept="image/jpeg, image/png"> + <div i18n-content="positionLabel"></div> + <select id="set-wallpaper-layout" disabled> + <option value="CENTER" i18n-content="centerLayout"></option> + <option selected="selected" value="CENTER_CROPPED" + i18n-content="centerCroppedLayout"></option> + <option value="STRETCH" i18n-content="stretchLayout"></option> + </select> + <div id="warning"> + <img class="remember-icon"> + <span i18n-content="customWallpaperWarning"></span> + </div> + </div> + </div> + </div> + <div class="dialog-container"> + <div class="dialog-topbar"> + <div id="navstrip"> + <list id="categories-list"></list> + <div id="bar"></div> + </div> + <div class="spacer"></div> + <div id="window-close-button" class="close"></div> + </div> + <div class="dialog-main"> + <div id="category-container"> + <grid id="wallpaper-grid" class="image-picker"></grid> + <div class="progress-bar" hidden> + <div class="progress-track"></div> + </div> + <div class="bottom-bar"> + <div id="online-wallpaper-attribute" visibleif="online"> + <img id="attribute-image" hidden> + <div id="wallpaper-attribute" hidden> + <div> + <label> + <span id="author-name"></span> + </label> + </div> + <div> + <a id="author-website" target="_blank"></a> + </div> + </div> + </div> + <div class="spacer"></div> + <div id="surprise-me" hidden> + <div id="checkbox"></div> + <span i18n-content="surpriseMeLabel"></span> + </div> + </div> + </div> + </div> + </div> +</body> +</html> diff --git a/chromium/chrome/browser/resources/chromeos/wallpaper_manager/manifest.json b/chromium/chrome/browser/resources/chromeos/wallpaper_manager/manifest.json new file mode 100644 index 00000000000..e750ea32aee --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/wallpaper_manager/manifest.json @@ -0,0 +1,32 @@ +{ + // chrome-extension://obklkkbkpaoaejdabbfldmcfplpdgolj/ + "key": "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC6czTauf4/ISarT2JOcjcanIq+kcL/2UOF56QqXNT6PFgEwBG1i9Tfw/dTE59qWdGuxWt4yQlChewOFaRP3nb9AygPFXO31pNXaCY9xyDsjE5RhVvVB0GJa3VHFITIROpBSJHXNOqZBm706A8SFCTauasdWPFSE6Y7sA13t1P0MwIDAQAB", + "name": "Wallpaper Picker", + // Updates version to 0.2 for v2 version wallpaper picker. Otherwise the event + // listener can not register appropriately. See crbug/157717. + "version": "0.2", + "manifest_version": 2, + "description": "An experimental wallpaper picker UI", + "icons": { + "128": "images/icon128.png" + }, + "permissions": [ + "alarms", + "storage", + "unlimitedStorage", + {"fileSystem": ["write"]}, + "wallpaperPrivate", + "https://commondatastorage.googleapis.com/", + "https://storage.googleapis.com/" + ], + "app": { + "background": { + "scripts": [ + "js/constants.js", + "js/util.js", + "js/event_page.js" + ] + } + }, + "display_in_launcher": false +} diff --git a/chromium/chrome/browser/resources/chromeos/wrench_menu.css b/chromium/chrome/browser/resources/chromeos/wrench_menu.css new file mode 100644 index 00000000000..de609653e3c --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/wrench_menu.css @@ -0,0 +1,50 @@ +/* Copyright (c) 2012 The Chromium Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +.fullscreen { + -webkit-margin-start: 4px; + background-image: -webkit-image-set( + url('../../../app/theme/default_100_percent/fullscreen_menu_button.png') 1x, + url('../../../app/theme/default_200_percent/fullscreen_menu_button.png') 2x); + background-position: center center; + background-repeat: no-repeat; + border: solid 1px rgba(0, 0, 0, 0.3); + border-radius: 3px; + height: 23px; + width: 23px; +} + +.edit-button { + min-width: 35px; + padding: 2px; + text-align: center; +} + +.left-button { + border: solid 1px rgba(0, 0, 0, 0.3); + border-bottom-left-radius: 3px; + border-top-left-radius: 3px; +} + +.right-button { + border: solid 1px rgba(0, 0, 0, 0.3); + border-bottom-right-radius: 3px; + border-top-right-radius: 3px; +} + +.center-button { + border-bottom: solid 1px rgba(0, 0, 0, 0.3); + border-top: solid 1px rgba(0, 0, 0, 0.3); +} + +.zoom-button { + text-align: center; + width: 15px; +} + +.zoom-percent { + min-width: 40px; + text-align: center; +} diff --git a/chromium/chrome/browser/resources/chromeos/wrench_menu.js b/chromium/chrome/browser/resources/chromeos/wrench_menu.js new file mode 100644 index 00000000000..85662705999 --- /dev/null +++ b/chromium/chrome/browser/resources/chromeos/wrench_menu.js @@ -0,0 +1,311 @@ +// Copyright (c) 2010 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** + * ButtonCommand class for small buttons on menu items. + */ +var ButtonCommand = cr.ui.define('div'); + +ButtonCommand.prototype = { + __proto__: HTMLDivElement.prototype, + + /** + * Decorate Button item. + */ + decorate: function() { + }, + + /** + * Changes the selection state of the menu item. + * @param {boolean} selected True to set the selection, or false otherwise. + */ + set selected(selected) { + if (selected) { + this.classList.add('selected'); + this.menu_.selectedItem = this; + } else { + this.classList.remove('selected'); + } + }, + + /** + * Activate the menu item. + */ + activate: function() { + sendActivate(this.menu_.getMenuItemIndexOf(this), + 'close_and_activate'); + }, +}; + +/** + * EditCommand implements Copy and Paste command. + */ +var EditCommand = cr.ui.define('div'); + +EditCommand.prototype = { + __proto__: ButtonCommand.prototype, + + /** + * Initialize the menu item. + * @override + */ + init: function(menu, attrs, model) { + this.menu_ = menu; + this.attrs = attrs; + if (this.attrs.font) { + this.style.font = attrs.font; + } + menu.addHandlers(this, this); + if (attrs.command_id == menu.config_.IDC_COPY) { + menu.addLabelTo(this, menu.config_.IDS_COPY, this, + false /* no mnemonic */); + } else { + menu.addLabelTo(this, menu.config_.IDS_PASTE, this, + false /* no mnemonic */); + } + }, +}; + +/** + * EditMenuItem which has Copy and Paste commands inside. + */ +var EditMenuItem = cr.ui.define('div'); + +EditMenuItem.prototype = { + __proto__: MenuItem.prototype, + + /** + * Initialize + */ + decorate: function() { + this.className = 'menu-item'; + this.label_ = document.createElement('div'); + this.label_.className = 'menu-label'; + this.cut_ = document.createElement('div'); + this.cut_.className = 'edit-button left-button'; + this.copy_ = new EditCommand(); + this.copy_.className = 'edit-button center-button'; + this.paste_ = new EditCommand(); + this.paste_.className = 'edit-button right-button'; + + this.appendChild(this.label_); + this.appendChild(this.cut_); + this.appendChild(this.copy_); + this.appendChild(this.paste_); + }, + + /** + * Activates the command. + * @override + */ + activate: function() { + sendActivate(this.menu_.getMenuItemIndexOf(this), + 'close_and_activate'); + }, + + /** + * @override + */ + set selected(selected) { + if (selected) { + this.cut_.classList.add('selected'); + this.menu_.selectedItem = this; + } else { + this.cut_.classList.remove('selected'); + } + }, + + /** + * Initialize the edit items with configuration info. + * @override + */ + initMenuItem_: function() { + this.label_.textContent = + this.menu_.config_.IDS_EDIT2; + if (this.attrs.font) { + this.label_.style.font = this.attrs.font; + this.cut_.style.font = this.attrs.font; + } + this.menu_.addLabelTo( + this, this.menu_.config_.IDS_CUT, this.cut_, + false /* no mnemonic */); + this.menu_.addHandlers(this, this.cut_); + }, +}; + +/** + * ZoomCommand class implements Zoom plus and fullscreen. + */ +var ZoomCommand = cr.ui.define('div'); + +ZoomCommand.prototype = { + __proto__: ButtonCommand.prototype, + + /** + * Initialize the menu item. + * @override + */ + init: function(menu, attrs, model) { + this.menu_ = menu; + this.attrs = attrs; + menu.addHandlers(this, this); + if (attrs.command_id == menu.config_.IDC_ZOOM_PLUS) { + this.textContent = '+'; + } + if (this.attrs.font) { + this.style.font = attrs.font; + } + }, + + /** + * Activate zoom plus and full screen commands. + * @override + */ + activate: function() { + sendActivate(this.menu_.getMenuItemIndexOf(this), + this.attrs.command_id == this.menu_.config_.IDC_ZOOM_PLUS ? + 'activate_no_close' : 'close_and_activate'); + }, +}; + +/** + * ZoomMenuItem which has plus and fullscreen buttons inside. + */ +var ZoomMenuItem = cr.ui.define('div'); + +ZoomMenuItem.prototype = { + __proto__: MenuItem.prototype, + + /** + * Decorate Zoom button item. + */ + decorate: function() { + this.className = 'menu-item'; + + this.label_ = document.createElement('div'); + this.label_.className = 'menu-label'; + this.minus_ = document.createElement('div'); + this.minus_.className = 'zoom-button left-button'; + this.minus_.textContent = '-'; + this.plus_ = new ZoomCommand(); + this.plus_.className = 'zoom-button right-button'; + this.percent_ = document.createElement('div'); + this.percent_.className = 'zoom-percent center-button'; + this.fullscreen_ = new ZoomCommand(); + this.fullscreen_.className = 'fullscreen'; + + this.appendChild(this.label_); + this.appendChild(this.minus_); + this.appendChild(this.percent_); + this.appendChild(this.plus_); + this.appendChild(this.fullscreen_); + }, + + /** + * Activates the cut command. + * @override + */ + activate: function() { + sendActivate(this.menu_.getMenuItemIndexOf(this), + 'activate_no_close'); + }, + + /** + * Updates zoom controls. + * @params {JSON} params JSON object to configure zoom controls. + */ + updateZoomControls: function(params) { + this.attrs.enabled = params.plus; + if (params.plus) { + this.plus_.classList.remove('disabled'); + } else { + this.plus_.classList.add('disabled'); + } + this.attrs.enabled = params.minus; + if (params.minus) { + this.classList.remove('disabled'); + } else { + this.classList.add('disabled'); + } + this.percent_.textContent = params.percent; + }, + + /** + * @override + */ + set selected(selected) { + if (selected) { + this.minus_.classList.add('selected'); + this.menu_.selectedItem = this; + } else { + this.minus_.classList.remove('selected'); + } + }, + + /** + * Initializes the zoom menu item with configuration info. + * @override + */ + initMenuItem_: function() { + this.label_.textContent = + this.menu_.config_.IDS_ZOOM_MENU2; + this.menu_.addHandlers(this, this.minus_); + + if (this.attrs.font) { + this.label_.style.font = this.attrs.font; + this.minus_.style.font = this.attrs.font; + this.percent_.style.font = this.attrs.font; + } + }, +}; + +/** + * WrenchMenu + */ +var WrenchMenu = cr.ui.define('div'); + +WrenchMenu.prototype = { + __proto__: Menu.prototype, + + /** + * Decorate Zoom button item. + */ + decorate: function() { + Menu.prototype.decorate.call(this); + this.edit_ = new EditMenuItem(); + this.zoom_ = new ZoomMenuItem(); + }, + + /** + * Create a MenuItem for given {@code attrs}. + * @override + */ + createMenuItem: function(attrs) { + switch(attrs.command_id) { + case this.config_.IDC_CUT: + return this.edit_; + case this.config_.IDC_COPY: + return this.edit_.copy_; + case this.config_.IDC_PASTE: + return this.edit_.paste_; + case this.config_.IDC_ZOOM_MINUS: + return this.zoom_; + case this.config_.IDC_ZOOM_PLUS: + return this.zoom_.plus_; + case this.config_.IDC_FULLSCREEN: + return this.zoom_.fullscreen_; + default: + return new MenuItem(); + } + }, + + updateZoomControls: function(params) { + this.zoom_.updateZoomControls(params); + }, +}; + +function updateZoomControls(params) { + var menu = document.getElementById('viewport'); + menu.updateZoomControls(params); +} |
