f.lux End User License Agreement

   BY CLICKING ON THE “ACCEPT” OR “DOWNLOAD” BUTTON, “YOU” (MEANING YOU
   PERSONALLY AND NOT A COMPANY OR OTHER CORPORATE ENTITY) ARE CONSENTING TO
   BE BOUND BY AND ARE BECOMING A PARTY TO THIS LICENSE AGREEMENT
   (“AGREEMENT”). IF YOU DO NOT AGREE TO ALL OF THE TERMS OF THIS AGREEMENT,
   CLICK THE “CANCEL” BUTTON AND THE DOWNLOAD/INSTALLATION PROCESS WILL NOT
   CONTINUE. IF THESE TERMS ARE CONSIDERED AN OFFER, ACCEPTANCE IS EXPRESSLY
   LIMITED TO THESE TERMS.

   GRANT. Subject to your full compliance with all the terms of this
   Agreement, Flux Software LLC (“Company”) hereby grants you (and only you)
   a limited, personal, non-sublicensable, non-transferable, royalty-free,
   nonexclusive license to use internally the software that you are about to
   download or install (“Software”) only in accordance with the Company
   documentation that accompanies it. In addition to any compatible personal
   devices, you may download and install the Software on any compatible work
   device(s) provided that you (1) obtain all necessary permissions, consents
   and waivers from your employer to do so, (2) assume all risks and
   liabilities relating to the Software on such devices, and (3) require your
   employer to release Company from any and all liability to Company relating
   to the download, installation, or use of the Software.

   RESTRICTIONS. You may not (and agree not to, and not authorize or enable
   others to), directly or indirectly: (a) copy, distribute, redistribute,
   rent, lease, mirror, timeshare, operate a service bureau, or otherwise use
   for the benefit of a third party, the Software; (b) disassemble,
   decompile, attempt to discover the source code or structure, sequence and
   organization of, or otherwise reverse engineer, the Software (except to
   the extent applicable law prohibits restrictions on reverse engineering);
   (c) remove any proprietary notices from the Software; or (d) bundle the
   Software with any third party software, product or service. You understand
   that Company may modify or discontinue offering the Software at any time.
   For the avoidance of doubt, the foregoing restrictions apply to any
   company or corporate entity (or its affiliates or agents acting on its
   behalf) (each, an “Entity”) and no Entity shall download or install the
   Software for the purposes of mirroring or distributing it to its employees
   or otherwise.

   SUPPORT AND UPGRADES. This Agreement does not entitle you to any support,
   upgrades, patches, enhancements, or fixes for the Software (collectively,
   “Support”). The Software may automatically download and install updates
   from time to time on the device(s) that you have downloaded and installed
   the Software on. You agree to receive any such updates and any Support
   and/or updates for the Software that may be made available by Company
   shall become part of the Software and subject to this Agreement. The
   Company reserves the right in its sole discretion to cease the support of
   older versions of the Software.

   INDEMNITY. You shall indemnify and hold harmless Company from any claims,
   damages, liabilities, costs and fees (including reasonable attorney fees)
   arising from your use of the Software as well as from your failure to
   comply with any term of this Agreement.

   WARRANTY DISCLAIMER. YOU AGREE THAT YOU ARE USING THE SOFTWARE SOLELY AT
   YOUR OWN RISK. COMPANY PROVIDES THE SOFTWARE “AS IS” AND WITHOUT WARRANTY
   OF ANY KIND, AND COMPANY FOR ITSELF AND ITS PUBLISHERS AND LICENSORS
   HEREBY DISCLAIMS ALL EXPRESS OR IMPLIED WARRANTIES, INCLUDING WITHOUT
   LIMITATION WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
   PURPOSE, PERFORMANCE, ACCURACY, RELIABILITY, AND NON-INFRINGEMENT. YOU
   ACKNOWLEDGE THAT COMPANY EXPRESSLY DISCLAIMS USE OF THE SOFTWARE FOR ANY
   MEDICAL PURPOSE (INCLUDING, WITHOUT LIMITATION, THE DIAGNOSIS,
   EXAMINATION, OR TREATMENT OF ANY MEDICAL CONDITIONS). COMPANY DISCLAIMS
   ANY REPRESENTATIONS OR WARRANTIES REGARDING THE SOFTWARE MADE BY YOU OR
   ANY THIRD PARTY AND ANY SUCH REPRESENTATION OR WARRANTY IS NOT MADE ON
   COMPANY’S BEHALF. Company disclaims any and all liability to you, your
   employer, or any third party relating to the download, installation, or
   use of the Software in violation of the foregoing.

   LIMITATION OF LIABILITY. COMPANY SHALL NOT BE RESPONSIBLE OR LIABLE WITH
   RESPECT TO ANY SUBJECT MATTER OF THIS AGREEMENT UNDER ANY CONTRACT,
   NEGLIGENCE, STRICT LIABILITY OR OTHER THEORY (A) FOR LOSS OR INACCURACY OF
   DATA OR (EXCEPT FOR RETURN OF AMOUNTS, IF ANY, PAID TO COMPANY BY YOU
   HEREUNDER) COST OF PROCUREMENT OF SUBSTITUTE GOODS, SERVICES OR
   TECHNOLOGY, OR (B) FOR ANY INDIRECT, INCIDENTAL OR CONSEQUENTIAL DAMAGES
   INCLUDING, BUT NOT LIMITED TO LOSS OF REVENUES AND LOSS OF PROFITS.
   COMPANY SHALL NOT BE RESPONSIBLE FOR ANY MATTER BEYOND ITS REASONABLE
   CONTROL. THE FOREGOING LIMITATIONS SHALL APPLY EVEN IF COMPANY SHALL HAVE
   BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW
   THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THE
   ABOVE LIMITATION AND EXCLUSION MAY NOT APPLY TO YOU.

   TERMINATION. You may terminate this Agreement and the license granted
   herein at any time by destroying or removing from all computers, networks,
   and storage media all copies of the Software. Company may terminate this
   Agreement and the license granted herein immediately if you breach any
   provision of this Agreement or at any time for any or no reason. Upon
   receiving notice of termination from Company you will destroy or remove
   from all computers, networks, and storage media all copies of the
   Software. Sections 2 through 8 shall survive termination of this
   Agreement.

   MISCELLANEOUS. You shall comply with all applicable export laws,
   restrictions and regulations in connection with your use of the Software,
   and will not export or re-export the Software in violation thereof. As
   defined in FAR section 2.101, DFAR section 252.227-7014(a)(1) and DFAR
   section 252.227-7014(a)(5) or otherwise, all Software and accompanying
   documentation provided by Company are “commercial items,” “commercial
   computer software” and/or “commercial computer software documentation.”
   Consistent with DFAR section 227.7202 and FAR section 12.212, any use,
   modification, reproduction, release, performance, display, disclosure or
   distribution thereof by or for the U.S. Government shall be governed
   solely by these terms and shall be prohibited except to the extent
   expressly permitted by these terms. This Agreement is personal to you and
   you shall not assign or transfer the Agreement or the Software to any
   third party under any circumstances; Company may assign or transfer this
   Agreement without consent. This Agreement represents the complete
   agreement concerning this license between the parties and supersedes all
   prior agreements and representations between them. It may be amended only
   by a writing executed by both parties. If any provision of this Agreement
   is held to be unenforceable for any reason, such provision shall be
   reformed only to the extent necessary to make it enforceable. This
   Agreement shall be governed by and construed under New York law without
   regard to any conflicts of law provisions thereof.

   Email for further information: support@justgetflux.com
   Copyright f.lux Software LLC 2008-2018
