Plex Terms of Service

Revised July 10, 2015

Thank you for using Plex! By accessing, using, downloading, or visiting
any Plex “Service(s)”, which includes the Plex website, Plex software
and products described here, and any other products or materials
provided by Plex GmbH, a Swiss company, and its affiliates (together,
“Plex”), you agree to the terms (“Terms”) listed in this agreement
(“Agreement”). Plex reserves the right to amend these Terms at any time
and without notice. Any revisions to the Terms will be posted on the
Plex website. By continuing to access or use the Services, you accept
any changes or revisions to the Terms.

Plex Software

A. Plex grants you a personal, non-commercial, worldwide, royalty-free,
   revocable, non-transferable, non-sublicensable, and non-exclusive
   license to use the software provided to you by Plex as part of the
   Services (“Software”). This license is for the sole purpose of
   enabling you to use and enjoy the benefit of the Services in the
   manner permitted by these Terms.

B. The Software includes certain executable modules that Plex has
   licensed from third party providers (“Third Party Components”) that
   may be subject to different end user license terms as specified in
   the license agreement(s) provided with such Third Party Components.

C. Except as provided in the next section, you may not, or allow anyone
   else to, directly or indirectly to: (1) copy, modify, distribute,
   sell, or lease any part of the Software; (2) reverse engineer,
   disassemble, decompile, or otherwise attempt to discover the source
   code or structure, sequence, and/or organization of all or any part
   of the Software, unless laws prohibit those restrictions or you have
   our written permission; (3) rent, lease, or use the Software for
   timesharing or service bureau purposes; (4) develop any improvement,
   modification, or derivative works of the Software, or include any
   portion thereof in any other product, software, work, equipment, or
   item (except that you may customize and/or modify the Software only
   as set forth in the documentation or as authorized in any license
   agreement of Plex’s third party licensors and applicable to Third
   Party Components); or (5) allow the transfer, transmission, export,
   or re-export of the Software or any portion thereof or any technical
   data associated with any Software.

D. Plex grants you a personal, non-commercial, worldwide, royalty-free,
   revocable, non-transferable, non-sublicensable, and non-exclusive
   license to reproduce the Plex Media Server Software (PMS Software) in
   copies and distribute the copies to others, provided that: you may
   not charge a fee for the PMS Software, and you may not individually
   charge for installing it; you may copy, distribute and install the
   PMS Software only as others actually need the PMS Software, and not
   more than five (5) times per calendar day or more than twenty-five
   (25) times per calendar month; you may not offer the PMS Software to
   the public for downloading on or in connection with any commercial
   online site, whether or not a fee is charged for the PMS Software;
   you shall comply with all other terms and conditions set forth in
   this document; you agree that Plex may revoke or terminate the
   license granted to you under this paragraph at any time for any
   reason in its sole discretion. As an example, this section is
   intended to permit reasonable copying and distribution of the PMS
   Software in connection with services such as home theater or home
   media center installation in which you install the PMS Software on
   the computers of your customers as a convenience in connection with
   other services or products that you are providing to them, and/or in
   Arch Linux repositories and similar distributions.

E. You shall maintain and shall not remove nor obscure any
   proprietary notices on the Software, and shall reproduce such
   notices exactly on all permitted copies of the Software.

F. You may reverse engineer the Software solely (1) as permitted by
   applicable law, or (2) for the purpose of debugging modifications
   made by you to certain third party files in source code format that
   are licensed under the GNU Lesser General Public License (LGPL) or
   under the GNU General Public License version 2 (GPL2) and only
   provided that you have made, prior to any such reverse engineering
   permitted under this sentence, unsuccessful prior reasonable good
   faith efforts to debug such modifications using techniques other than
   the reverse engineering of the Software.

G. As between the parties and except as otherwise provided in any
   license agreement for Third Party Components, Plex shall own all
   title, ownership rights, and intellectual property rights in and to
   the Software, and any copies or derivative works thereof, except that
   by downloading the Software, you retain any title that you may own in
   and to the recording media on which the Software is recorded.

H. You understand that Plex or its licensors may modify or discontinue
   offering the Services at any time.

I. You shall not make, or assist others in making, any use of data
   adapters or similar technologies used by or with the Services that
   are designed to receive and use data from Plex, its third party data
   providers, and their affiliates and third parties, other than to
   receive and use such data in accordance with these Terms and your
   agreement with the third party data providers, and their affiliates
   and third parties, including without limitation any data passing
   through the Services or otherwise effectively made available by any
   Service through an API, a download, a database, or the like.

J. This Agreement does not entitle you to any support, upgrades,
   patches, enhancements, or fixes (collectively, “Support”) for the
   Services. Any such Support for the Services that may be made
   available by Plex, in its sole discretion, shall become part of the
   Services and will be subject to these Terms.

Data

Data provided by Plex or other third party data providers may be
delayed or unavailable as specified by Plex or such third party data
providers. Plex does not verify any data provided by Plex or other
third party data providers and disclaims any obligation to do so. Plex,
its third party data providers, and each of their affiliates and
business partners: (1) expressly disclaim the availability, accuracy,
adequacy, or completeness of any data or third party data provider, and
(2) shall not be liable for any errors, omissions, or other defects in,
unavailability of, delays or interruptions in such data or third party
data provider.

Acceptable Use

A. You may not, or allow anyone else to, use any of the Services to do
   the following:

      i. Infringe the intellectual property rights, proprietary rights,
         or rights of publicity or privacy of any third party;

     ii. Violate any law, statute, ordinance, or regulation, or perform
         any other action that would incur civil liability or constitute
         a crime;

    iii. Disseminate, transfer or store information or materials in any
         form or format that is harmful, threatening, abusive,
         harassing, tortuous, defamatory, vulgar, obscene, libelous, or
         otherwise objectionable, or that otherwise violate any law or
         right of any third party; or

     iv. Disseminate any software viruses or any other computer code,
         files, programs, or the like that may without limitation
         interrupt, destroy, or limit the functionality of any computer
         software or hardware or telecommunications equipment, violate
         the security of any computer network, or the like.

B. If the occurrence of any prohibited use comes to our attention, we
   reserve the right to disable any accounts associated with prohibited
   use or otherwise terminate your access to the Services.

Your Content

A. You continue to retain any ownership rights you have in content you
   make available via the Services, or otherwise use in conjunction with
   the Services. However, by using the Services with particular content,
   for example by using the Services to share particular content or
   access particular content, you grant to Plex (and to each of the
   third parties with whom we work to provide you with the Services) a
   worldwide license to reproduce, modify, create derivative works,
   transmit, publish, publicly perform, publicly display, distribute,
   and otherwise use the particular content and metadata associated with
   the content, such as images of you or images otherwise associated
   with your account. The rights you grant us in this license are only
   for the limited purpose of providing you with our Services. You may
   not use the Services in connection with any content for which you do
   not have the right to grant us this license.

B. The Services may include features that allow you to share your
   content with others. Please be careful when choosing to share content
   with other users; Plex is not responsible for how others use your
   content. Additionally, you hereby grant to any user with whom you
   share content a non-exclusive license to access the content through
   the Service, and to use, reproduce in copies, distribute, display and
   perform the shared content as permitted through the functionality of
   the Service and under this Agreement. You may not share any content
   with others via the Services if you do not have the right to grant
   this license to any user with whom you share the content.

C. You understand that Plex may delete any content that you post in or
   contribute to a message forum or similar service that Plex hosts, in
   its sole discretion, for any reason.

Content of Others

A. You acknowledge that all content that you access through use of the
   Software or other Services is accessed at your own risk, and you will
   be solely responsible for any damage or liability to any party
   resulting from such access.

B. You understand that by using the Services you may encounter content
   that you may find offensive, indecent, or objectionable. Plex does
   not inspect, screen, or otherwise control the content that is posted,
   shared or made available via the Services, and Plex does not
   guarantee the accuracy, integrity or quality of such content.

C. You acknowledge that unauthorized use of copyrighted content of
   others may subject you to civil and criminal penalties, including
   possible monetary damages, for copyright infringement.

Developers and Interfacing Software

A. “Interfacing Software” means any software that you obtain or provide
   and that accesses or calls any Software provided by Plex as part of
   the Services including, but not limited to, plug-ins for the
   Services, channel plug-ins, metadata agents, and client applications
   that communicate directly or indirectly with the Services.

B. By making, or assisting others in making, Interfacing Software, you
   agree to the following terms:

      i. You grant Plex and its affiliates worldwide a worldwide,
         non-exclusive, and royalty-free right and license to use
         (including testing, hosting and linking to), copy, publicly
         perform, publicly display, reproduce in copies for
         distribution, and distribute the copies of any Interfacing
         Software made by you or with your assistance.

     ii. You will include in the source code of the Interfacing
         Software a copyright notice of the form: Copyright © <year>
         <copyright holders>. You grant, and authorize Plex to grant on
         your behalf if necessary, a license, free of charge, to any
         person obtaining a copy of the Interfacing Software and
         associated documentation files from Plex, to deal in the
         Interfacing Software without restriction, including without
         limitation the rights to use, copy, modify, merge, publish,
         distribute, sublicense, and/or sell copies of the Interfacing
         Software, and to permit persons to whom the Interfacing
         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 Interfacing Software. THE INTERFACING 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 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 INTERFACING SOFTWARE.

    iii. You may notify us if you do not wish for Plex to use,
         distribute, copy, publicly perform, publicly display, reproduce
         in copies for distribution, or distribute copies of any
         Interfacing Software that was created by you. Plex will comply
         with such a request but Plex must be granted a transition
         period of thirty (30) days after receipt of the request to
         comply.

         A request to take down Interfacing Software must include (1) an
         identification of the Interfacing Software you wish to be
         removed; (2) your signature in either electronic or physical
         form; and (3) the following statements:

            i. “I swear under penalty of perjury that I am the owner of
               the Interfacing Software or I am authorized to act on
               behalf of the owner of the Interfacing Software.”

           ii. “I swear under penalty of perjury that the information
               in this notification is accurate.”

     iv. You shall protect the privacy and legal rights of Plex users.
         If the users provide, or the Interfacing Software accesses or
         uses, user names, passwords, or other login information or
         personal information, you must make the users aware that such
         information will be available to the Interfacing Software, and
         you must provide privacy notices and protection for those users
         in compliance with applicable law. Further, the Interfacing
         Software may use that information only for the limited purposes
         for which the user has given you permission to do so. If the
         Interfacing Software stores personally identifying information
         of users or information that a reasonable user would consider
         to be sensitive, then the Interfacing Software must do so
         securely and only for as long as it is needed. However, if the
         user has opted or entered into a separate agreement with you
         that allows you or the Interfacing Software to store or use
         personally identifying information of users or information that
         a reasonable user would consider to be sensitive, then the
         terms of that separate agreement will govern your use of such
         information. If the user provides the Interfacing Software with
         Plex account information, the Interfacing Software may only use
         that information to access the user’s Plex account when, and
         for the limited purposes for which, the user has given you
         permission to do so.

      v. Prohibited Uses. Plex prohibits performing certain actions
         using the Interfacing Software. You shall not make, or assist
         others in making, any Interfacing Software that:

            i. Knowingly violates a third party’s terms of service;

           ii. Violates any applicable laws or regulations;

          iii. Interferes with, disrupts, damages, harms, or accesses
               in an unauthorized manner the machines, hardware.
               devices, servers, networks, data, or other properties or
               services of any other party including, but not limited
               to, Plex users, Plex or any network operator;

           iv. Posts misleading information about an application’s purpose;

            v. Infringes on the intellectual property rights of others; or

           vi. Performs any other prohibited action listed under
               “Acceptable Use” above.

      vi. You will require your end users to comply with any applicable
          law and these Terms. You will not knowingly enable your end
          users to violate applicable law or these Terms.

     vii. You shall indemnify and hold harmless Plex and its officers,
          directors, employees, contractors, licensors, suppliers,
          distributors, contractors, agents, and third party
          contributors from any claims, damages, liabilities, costs and
          fees (including reasonable attorney fees) arising from any use
          of the Interfacing Software or from Plex’s distribution of the
          Interfacing Software.

    viii. Brand Features and Attribution

            i. “Brand Features” is defined as the trade names,
               trademarks, service marks, logos, domain names, and other
               distinctive brand features of a party. Except where
               expressly stated, these terms do not grant either party
               any right, title, or interest in or to the other party’s
               Brand Features. Any use by you of Plex’s Brand Features
               (including any goodwill associated therewith) will inure
               to the benefit of Plex. Plex Brand Features include the
               Plex Play Logo (“>” in stylized format) and the
               trademarks, trade names and designs as may be identified
               from time to time in the Plex Trademark Notice that is
               posted at https://www.plex.tv/about/privacy-legal/.

           ii. You must seek prior written approval from Plex to
               display Plex’s Brand Features, including for the purpose
               of promoting or advertising that your Interfacing
               Software is for use in conjunction with Plex Services.
               Plex, in its sole discretion and in a separate writing
               such as an e-mail from an authorized representative of
               Plex, may grant you a revocable, non-transferable,
               nonexclusive license, without right of sub-license, to
               display Plex’s Brand Features for the purpose of
               promoting or advertising that your Interfacing Software
               is for use in conjunction with Plex Services. You
               understand and agree that Plex has the sole discretion to
               determine whether your attribution(s) and use of Plex’s
               Brand Features are in accordance with the above
               requirements and guidelines and that Plex may revoke the
               license granted herein at any time, or may require you to
               modify your use of Plex’s Brand Features, for any reason
               in its sole discretion.

          iii. You will not make any statement that suggests a
               partnership with, sponsorship by, or endorsement by Plex,
               without Plex’s express prior written approval.

           iv. In the course of promoting, marketing, or demonstrating
               the Services, Plex may produce and distribute incidental
               depictions, including screenshots, video, or other
               content from your Interfacing Software, and may use your
               company or product name. You grant us all necessary
               rights for the above purposes.

Children

While Plex does distribute products that may be used by children, the
Services are not intended to be used by children, without involvement,
supervision, and approval of a parent or legal guardian. Therefore, if
an account owner sets parental controls or establishes sub-accounts
that the account owner intends to permit a child to use, the account
owner should not reveal the account password to the child. Plex and its
contributors may not provide controls that restrict the maturity level
of content available via Plex and an adult account owner has sole
responsibility for determining what maturity level is appropriate for
or accessible to any children whom the account owner permits to use the
Plex service or a sub-account.

NO WARRANTY

A. PLEX SERVICES ARE PROVIDED “AS IS”. PLEX MAKES NO WARRANTY OF ANY
   KIND, EXPRESS OR IMPLIED, AND PLEX EXPRESSLY DISCLAIMS ALL WARRANTIES
   WITH RESPECT TO THE PLEX SERVICES, INCLUDING WITHOUT LIMITATION, ANY
   IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
   PURPOSE AND NONINFRINGEMENT. FURTHER, PLEX DOES NOT WARRANT AGAINST
   ERRORS, OMISSIONS, RESULTS OF USE, OR THAT PLEX SERVICES ARE BUG FREE
   OR ERROR FREE OR THAT USE WILL BE UNINTERRUPTED. THIS DISCLAIMER OF
   WARRANTY CONSTITUTES AN ESSENTIAL PART OF THE AGREEMENT. ALL THE
   FOREGOING DISCLAIMERS ALSO APPLY IN FULL WITH RESPECT TO PLEX’S
   LICENSORS, SUPPLIERS, DISTRIBUTORS, CONTRACTORS, AGENTS, AND THIRD
   PARTY CONTRIBUTORS. SOME STATES DO NOT ALLOW THE EXCLUSION OF IMPLIED
   WARRANTIES, SO THE ABOVE LIMITATIONS MAY NOT APPLY TO YOU.

B. You agree that Plex and its officers, directors, employees, and
   contractors are not responsible for any fault, inaccuracy, error,
   omission, delay or any other failure of your equipment and/or
   services caused by Plex’s hardware, software, cabling, network
   services, or the like, or arising from Plex’s use of such equipment
   and/or services.

C. The above disclaimer of warranty applies to software developed by
   Plex and any software developed by a third party and provided by Plex
   including, but not limited to, Interfacing Software developed by any
   Plex user.

Limitation of Liability and Damages

A. UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, INCLUDING, BUT NOT
   LIMITED TO, TORT, CONTRACT, NEGLIGENCE, STRICT LIABILITY, OR
   OTHERWISE, SHALL PLEX BE LIABLE TO YOU OR ANY OTHER PERSON OR
   ENTITY: (I) FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL
   DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR
   LOST PROFITS, LOSS OF GOODWILL, WORK STOPPAGE, ACCURACY OF RESULTS,
   COMPUTER FAILURE OR MALFUNCTION, LOSS OF DATA, OR OTHER DAMAGES
   RESULTING FROM YOUR USE OF THE SOFTWARE; OR (II) FOR ANY MATTER
   BEYOND ITS REASONABLE CONTROL. PLEX’S AGGREGATE LIABILITY FOR DAMAGES
   OF ANY KIND WHATSOEVER ARISING OUT OF THIS AGREEMENT SHALL BE LIMITED
   TO THE LESSER OF THE TOTAL FEES PAID BY YOU TO PLEX (IF ANY) FOR THE
   PORTION OF THE SOFTWARE THAT GAVE RISE TO SUCH DAMAGES OR $100
   (U.S.), EXCEPT WHERE NOT PERMITTED BY APPLICABLE LAW, IN WHICH CASE
   PLEX’S LIABILITY SHALL BE LIMITED TO THE MINIMUM AMOUNT PERMITTED BY
   SUCH APPLICABLE LAW. ALL THE FOREGOING LIMITATIONS SHALL APPLY EVEN
   IF EITHER PARTY HAS BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES.
   ALL THE FOREGOING LIMITATIONS ALSO APPLY WITH RESPECT TO PLEX’S
   SUPPLIERS, LICENSORS, DISTRIBUTORS, CONTRACTORS, AGENTS, AND THIRD
   PARTY CONTRIBUTORS. 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.

B. The above limitations and exclusions apply to software developed by
   Plex and any software developed by a third party and provided by Plex
   including, but not limited to, Interfacing Software developed by Plex
   user.

Third-Party Materials

This website and other Services may provide links to websites,
software, or other materials provided by third parties. Plex does not
endorse and is not responsible or liable for the availability,
accuracy, safety, or intellectual property rights of or relating to
such content. Plex is not liable for any harm caused by any such
materials.

Malware

“Malware” means any known, discovered, envisioned, or invented, or any
yet to be known, discovered, envisioned, or invented: (i) virus, Trojan
horse, or any other harmful, harassing, or malicious software; or (ii)
method, use, or means by which any software, firmware, equipment,
device, communications medium, person, entity, or the like directly or
indirectly engages in or is used for: (a) any unauthorized access; (b)
any unauthorized communication; or (c) any cracks, hacks, exploits, or
other activity, method, use, or means, that may cause harassment, harm,
data loss, data theft, loss of communication, loss of privacy, or the
like. You acknowledge that the Internet, Internet service providers,
shared or dedicated telecommunication lines, wireless access points and
wireless networks, other forms of communication, online resources
including websites and cloud computing environments, or other means
that you use to connect to the Software may not be secure and may be
vulnerable to attack by third parties, and that it is possible to
receive Malware by using the Internet, dedicated lines, other forms of
communication, or other means. In order to protect the Software, you
shall regularly obtain, use, and update appropriate third party
software or other means to protect yourself from Malware and to detect
and remove Malware that may be downloaded using the Internet, dedicated
lines, other forms of communication, or other means. Plex does not
warrant that the Software will be free of Malware including, but not
limited to, Malware that is introduced by third parties, the Internet,
dedicated lines, other forms of communication, or other means.

Waiver and Indemnity

You agree that Plex and its licensors, distributors, contractors,
agents, and third party contributors shall have no liability whatsoever
for any use you make of the Services. You shall indemnify and hold
harmless Plex and its licensors, suppliers, distributors, contractors,
agents, and third party contributors from any claims, damages,
liabilities, costs and fees (including reasonable attorney fees)
arising from your use of the Plex Services as well as from your failure
to comply with any of the Terms, or any losses, damages, claims, costs,
and/or attorneys’ fees arising from any use of or reliance upon any
information received in connection with the Services that comprises or
is based upon data provided by Plex or any third party.

Termination of Services

Plex may at any time, with or without cause and with or without prior
notice, immediately terminate or suspend your Plex account or otherwise
terminate or suspend your access to all or a portion of the Services.
Cause for such termination may include: (a) violations of the Terms or
any other policies or guidelines that are referenced herein; (b) a
request by you to cancel or terminate your account; (c) a request
and/or order from law enforcement, a judicial body, or other government
agency; (d) where providing the Services to you is or may become
unlawful; (e) unexpected technical or security issues or problems; or
(f) your participation in fraudulent or illegal activities. Any such
termination or suspension shall be made by Plex in its sole discretion
and Plex will not be responsible to you or any third party for any
damages that may result or arise out of such termination or suspension
of your access to the Services.

Miscellaneous

A. This Agreement does not give you any rights not expressly and
   unambiguously granted herein.

B. No agency, partnership, joint venture, or employment is created as a
   result of this Agreement and you do not have any authority of any
   kind to bind Plex in any respect whatsoever.

C. If any provision of this Agreement is found to be unenforceable or
   invalid, that provision shall be limited or eliminated to the minimum
   extent necessary so that this Agreement shall otherwise remain in
   full force and effect and enforceable.

D. This Agreement is not assignable, transferable, or sublicensable by
   you except with Plex’s prior written consent. Plex may transfer,
   assign, or delegate this Agreement and its rights and obligations
   without consent.

E. Plex’s failure to enforce any right or provisions in this Agreement
   will not constitute a waiver of such or any other provision.

F. This Agreement shall be governed by and construed in accordance
   with the laws of the state of California, as if made within
   California between two residents thereof, and the parties submit to
   the exclusive jurisdiction of the Superior Court of Santa Clara
   County and the United States District Court for the Northern District
   of California. Notwithstanding the foregoing sentence, but without
   limiting Plex’s right to seek injunctive or other equitable relief in
   any court of competent jurisdiction, any disputes arising with
   respect to this Agreement shall be referred to an arbitrator
   affiliated with the Judicial Arbitration and Mediation Services, Inc.
   (“JAMS”). The arbitrator shall be selected by joint agreement of the
   parties. In the event the parties cannot agree on an arbitrator
   within thirty (30) days of the initiating party providing the other
   party with written notice that it plans to seek arbitration, the
   parties shall each select an arbitrator affiliated with JAMS, which
   arbitrators shall jointly select a third such arbitrator to resolve
   the dispute. The written decision of the arbitrator shall be final
   and binding on the parties. The arbitration proceeding shall be
   carried on and heard in Santa Clara County, California using the
   English language and pursuant to the rules of (and administered by)
   JAMS. In any action or proceeding to enforce rights under this
   Agreement, the prevailing party will be entitled to recover costs and
   reasonable attorneys’ fees from the other party. A separate written
   license agreement or order and signed by Plex and you or your
   company, employer, or principal may state other terms and conditions
   that apply to you, including terms relating to price, payment,
   delivery, confidential information, support services, and the like.
   You are solely responsible to review such terms or conditions with
   your company, employer or principal. In the event of any conflict in
   terms, the terms of the separate license agreement shall supersede
   the terms of this Agreement.

G. Both parties agree that this Agreement is the complete and exclusive
   statement of the mutual understanding of the parties and supersedes
   and cancels all previous written and oral agreements, communications,
   and other understandings relating to the subject matter of this
   Agreement.

Source: https://www.plex.tv/about/privacy-legal/plex-terms-of-service/
