diff --git a/.licensed.yml b/.licensed.yml
index 5b784e9be..f0c02a90e 100644
--- a/.licensed.yml
+++ b/.licensed.yml
@@ -55,6 +55,7 @@ allowed:
# The following are based on: https://www.gnu.org/licenses/license-list.html#GPLCompatibleLicenses
- gpl-1.0-or-later
- gpl-1.0+ # Deprecated ID for `gpl-1.0-or-later`
+ - gpl-2.0
- gpl-2.0-or-later
- gpl-2.0+ # Deprecated ID for `gpl-2.0-or-later`
- gpl-3.0-only
diff --git a/.licenses/arduino-create-agent/go/github.com/arduino/arduino-cli/arduino/serialutils.dep.yml b/.licenses/arduino-create-agent/go/github.com/arduino/arduino-cli/arduino/serialutils.dep.yml
deleted file mode 100644
index 6f6369958..000000000
--- a/.licenses/arduino-create-agent/go/github.com/arduino/arduino-cli/arduino/serialutils.dep.yml
+++ /dev/null
@@ -1,720 +0,0 @@
----
-name: github.com/arduino/arduino-cli/arduino/serialutils
-version: v0.35.0
-type: go
-summary:
-homepage: https://pkg.go.dev/github.com/arduino/arduino-cli/arduino/serialutils
-license: gpl-3.0-only
-licenses:
-- sources: arduino-cli@v0.35.0/LICENSE.txt
- text: |2
- GNU GENERAL PUBLIC LICENSE
- Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc.
- 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.
-
-
- Copyright (C)
-
- 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 .
-
- 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:
-
- Copyright (C)
- 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
- .
-
- 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
- .
-- sources: arduino-cli@v0.35.0/license_header.tpl
- text: |
- This file is part of arduino-cli.
-
- Copyright{{ if .Year }} {{.Year}}{{ end }} {{.Holder}}
-
- This software is released under the GNU General Public License version 3,
- which covers the main part of arduino-cli.
- The terms of this license can be found at:
- https://www.gnu.org/licenses/gpl-3.0.en.html
-
- You can be released from the requirements of the above licenses by purchasing
- a commercial license. Buying such a license is mandatory if you want to
- modify or otherwise use the software for commercial activities involving the
- Arduino software without disclosing the source code of your own applications.
- To purchase a commercial license, send an email to license@arduino.cc.
-- sources: arduino-cli@v0.35.0/README.md
- text: |-
- Arduino CLI is licensed under the [GPL 3.0] license.
-
- You can be released from the requirements of the above license by purchasing a commercial license. Buying such a license
- is mandatory if you want to modify or otherwise use the software for commercial activities involving the Arduino
- software without disclosing the source code of your own applications. To purchase a commercial license, send an email to
- license@arduino.cc
-
- [install]: https://arduino.github.io/arduino-cli/latest/installation
- [user documentation]: https://arduino.github.io/arduino-cli/latest/
- [getting started]: https://arduino.github.io/arduino-cli/latest/getting-started/
- [commands reference]: https://arduino.github.io/arduino-cli/latest/commands/arduino-cli
- [faq]: https://arduino.github.io/arduino-cli/latest/FAQ/
- [how to contribute]: https://arduino.github.io/arduino-cli/latest/CONTRIBUTING/
- [contributors]: https://github.com/arduino/arduino-cli/graphs/contributors
- [nightly builds]: https://arduino.github.io/arduino-cli/latest/installation/#nightly-builds
- [security policy]: https://github.com/arduino/arduino-cli/security/policy
- [gpl 3.0]: https://www.gnu.org/licenses/gpl-3.0.en.html
-notices: []
diff --git a/.licenses/arduino-create-agent/go/github.com/arduino/go-properties-orderedmap.dep.yml b/.licenses/arduino-create-agent/go/github.com/arduino/go-properties-orderedmap.dep.yml
new file mode 100644
index 000000000..d7e78f9e6
--- /dev/null
+++ b/.licenses/arduino-create-agent/go/github.com/arduino/go-properties-orderedmap.dep.yml
@@ -0,0 +1,350 @@
+---
+name: github.com/arduino/go-properties-orderedmap
+version: v1.8.0
+type: go
+summary: Package properties is a library for handling maps of hierarchical properties.
+homepage: https://pkg.go.dev/github.com/arduino/go-properties-orderedmap
+license: gpl-2.0
+licenses:
+- sources: LICENSE
+ text: |2
+ 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 Lesser 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.
+
+
+ Copyright (C)
+
+ 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.
+
+ , 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 Lesser General
+ Public License instead of this License.
+notices: []
diff --git a/.licenses/arduino-create-agent/go/github.com/arduino/go-serial-utils.dep.yml b/.licenses/arduino-create-agent/go/github.com/arduino/go-serial-utils.dep.yml
new file mode 100644
index 000000000..d80310c77
--- /dev/null
+++ b/.licenses/arduino-create-agent/go/github.com/arduino/go-serial-utils.dep.yml
@@ -0,0 +1,458 @@
+---
+name: github.com/arduino/go-serial-utils
+version: v0.1.2
+type: go
+summary:
+homepage: https://pkg.go.dev/github.com/arduino/go-serial-utils
+license: gpl-3.0
+licenses:
+- sources: LICENSE.txt
+ text: "This file includes licensing information for \n\nCopyright (c) 2024 ARDUINO
+ SA (www.arduino.cc)\n\nThe software is released under the GNU General Public License,
+ which covers the main body\nof the arduino-cli code. The terms of this license
+ can be found at:\nhttps://www.gnu.org/licenses/gpl-3.0.en.html\n\nYou can be released
+ from the requirements of the above licenses by purchasing\na commercial license.
+ Buying such a license is mandatory if you want to modify or\notherwise use the
+ software for commercial activities involving the Arduino\nsoftware without disclosing
+ the source code of your own applications. To purchase\na commercial license, send
+ an email to license@arduino.cc\n\n GNU GENERAL PUBLIC LICENSE\n
+ \ Version 3, 29 June 2007\n\n Copyright (C) 2007 Free Software
+ Foundation, Inc. \n Everyone is permitted to copy and distribute
+ verbatim copies\n of this license document, but changing it is not allowed.\n\n
+ \ Preamble\n\n The GNU General Public License is a
+ free, copyleft license for\nsoftware and other kinds of works.\n\n The licenses
+ for most software and other practical works are designed\nto take away your freedom
+ to share and change the works. By contrast,\nthe GNU General Public License is
+ intended to guarantee your freedom to\nshare and change all versions of a program--to
+ make sure it remains free\nsoftware for all its users. We, the Free Software
+ Foundation, use the\nGNU General Public License for most of our software; it applies
+ also to\nany other work released this way by its authors. You can apply it to\nyour
+ programs, too.\n\n When we speak of free software, we are referring to freedom,
+ not\nprice. Our General Public Licenses are designed to make sure that you\nhave
+ the freedom to distribute copies of free software (and charge for\nthem if you
+ wish), that you receive source code or can get it if you\nwant it, that you can
+ change the software or use pieces of it in new\nfree programs, and that you know
+ you can do these things.\n\n To protect your rights, we need to prevent others
+ from denying you\nthese rights or asking you to surrender the rights. Therefore,
+ you have\ncertain responsibilities if you distribute copies of the software, or
+ if\nyou modify it: responsibilities to respect the freedom of others.\n\n For
+ example, if you distribute copies of such a program, whether\ngratis or for a
+ fee, you must pass on to the recipients the same\nfreedoms that you received.
+ \ You must make sure that they, too, receive\nor can get the source code. And
+ you must show them these terms so they\nknow their rights.\n\n Developers that
+ use the GNU GPL protect your rights with two steps:\n(1) assert copyright on the
+ software, and (2) offer you this License\ngiving you legal permission to copy,
+ distribute and/or modify it.\n\n For the developers' and authors' protection,
+ the GPL clearly explains\nthat there is no warranty for this free software. For
+ both users' and\nauthors' sake, the GPL requires that modified versions be marked
+ as\nchanged, so that their problems will not be attributed erroneously to\nauthors
+ of previous versions.\n\n Some devices are designed to deny users access to install
+ or run\nmodified versions of the software inside them, although the manufacturer\ncan
+ do so. This is fundamentally incompatible with the aim of\nprotecting users'
+ freedom to change the software. The systematic\npattern of such abuse occurs
+ in the area of products for individuals to\nuse, which is precisely where it is
+ most unacceptable. Therefore, we\nhave designed this version of the GPL to prohibit
+ the practice for those\nproducts. If such problems arise substantially in other
+ domains, we\nstand ready to extend this provision to those domains in future versions\nof
+ the GPL, as needed to protect the freedom of users.\n\n Finally, every program
+ is threatened constantly by software patents.\nStates should not allow patents
+ to restrict development and use of\nsoftware on general-purpose computers, but
+ in those that do, we wish to\navoid the special danger that patents applied to
+ a free program could\nmake it effectively proprietary. To prevent this, the GPL
+ assures that\npatents cannot be used to render the program non-free.\n\n The
+ precise terms and conditions for copying, distribution and\nmodification follow.\n\n
+ \ TERMS AND CONDITIONS\n\n 0. Definitions.\n\n \"This License\"
+ refers to version 3 of the GNU General Public License.\n\n \"Copyright\" also
+ means copyright-like laws that apply to other kinds of\nworks, such as semiconductor
+ masks.\n\n \"The Program\" refers to any copyrightable work licensed under this\nLicense.
+ \ Each licensee is addressed as \"you\". \"Licensees\" and\n\"recipients\" may
+ be individuals or organizations.\n\n To \"modify\" a work means to copy from
+ or adapt all or part of the work\nin a fashion requiring copyright permission,
+ other than the making of an\nexact copy. The resulting work is called a \"modified
+ version\" of the\nearlier work or a work \"based on\" the earlier work.\n\n A
+ \"covered work\" means either the unmodified Program or a work based\non the Program.\n\n
+ \ To \"propagate\" a work means to do anything with it that, without\npermission,
+ would make you directly or secondarily liable for\ninfringement under applicable
+ copyright law, except executing it on a\ncomputer or modifying a private copy.
+ \ Propagation includes copying,\ndistribution (with or without modification),
+ making available to the\npublic, and in some countries other activities as well.\n\n
+ \ To \"convey\" a work means any kind of propagation that enables other\nparties
+ to make or receive copies. Mere interaction with a user through\na computer network,
+ with no transfer of a copy, is not conveying.\n\n An interactive user interface
+ displays \"Appropriate Legal Notices\"\nto the extent that it includes a convenient
+ and prominently visible\nfeature that (1) displays an appropriate copyright notice,
+ and (2)\ntells the user that there is no warranty for the work (except to the\nextent
+ that warranties are provided), that licensees may convey the\nwork under this
+ License, and how to view a copy of this License. If\nthe interface presents a
+ list of user commands or options, such as a\nmenu, a prominent item in the list
+ meets this criterion.\n\n 1. Source Code.\n\n The \"source code\" for a work
+ means the preferred form of the work\nfor making modifications to it. \"Object
+ code\" means any non-source\nform of a work.\n\n A \"Standard Interface\" means
+ an interface that either is an official\nstandard defined by a recognized standards
+ body, or, in the case of\ninterfaces specified for a particular programming language,
+ one that\nis widely used among developers working in that language.\n\n The \"System
+ Libraries\" of an executable work include anything, other\nthan the work as a
+ whole, that (a) is included in the normal form of\npackaging a Major Component,
+ but which is not part of that Major\nComponent, and (b) serves only to enable
+ use of the work with that\nMajor Component, or to implement a Standard Interface
+ for which an\nimplementation is available to the public in source code form. A\n\"Major
+ Component\", in this context, means a major essential component\n(kernel, window
+ system, and so on) of the specific operating system\n(if any) on which the executable
+ work runs, or a compiler used to\nproduce the work, or an object code interpreter
+ used to run it.\n\n The \"Corresponding Source\" for a work in object code form
+ means all\nthe source code needed to generate, install, and (for an executable\nwork)
+ run the object code and to modify the work, including scripts to\ncontrol those
+ activities. However, it does not include the work's\nSystem Libraries, or general-purpose
+ tools or generally available free\nprograms which are used unmodified in performing
+ those activities but\nwhich are not part of the work. For example, Corresponding
+ Source\nincludes interface definition files associated with source files for\nthe
+ work, and the source code for shared libraries and dynamically\nlinked subprograms
+ that the work is specifically designed to require,\nsuch as by intimate data communication
+ or control flow between those\nsubprograms and other parts of the work.\n\n The
+ Corresponding Source need not include anything that users\ncan regenerate automatically
+ from other parts of the Corresponding\nSource.\n\n The Corresponding Source for
+ a work in source code form is that\nsame work.\n\n 2. Basic Permissions.\n\n
+ \ All rights granted under this License are granted for the term of\ncopyright
+ on the Program, and are irrevocable provided the stated\nconditions are met. This
+ License explicitly affirms your unlimited\npermission to run the unmodified Program.
+ \ The output from running a\ncovered work is covered by this License only if the
+ output, given its\ncontent, constitutes a covered work. This License acknowledges
+ your\nrights of fair use or other equivalent, as provided by copyright law.\n\n
+ \ You may make, run and propagate covered works that you do not\nconvey, without
+ conditions so long as your license otherwise remains\nin force. You may convey
+ covered works to others for the sole purpose\nof having them make modifications
+ exclusively for you, or provide you\nwith facilities for running those works,
+ provided that you comply with\nthe terms of this License in conveying all material
+ for which you do\nnot control copyright. Those thus making or running the covered
+ works\nfor you must do so exclusively on your behalf, under your direction\nand
+ control, on terms that prohibit them from making any copies of\nyour copyrighted
+ material outside their relationship with you.\n\n Conveying under any other circumstances
+ is permitted solely under\nthe conditions stated below. Sublicensing is not allowed;
+ section 10\nmakes it unnecessary.\n\n 3. Protecting Users' Legal Rights From
+ Anti-Circumvention Law.\n\n No covered work shall be deemed part of an effective
+ technological\nmeasure under any applicable law fulfilling obligations under article\n11
+ of the WIPO copyright treaty adopted on 20 December 1996, or\nsimilar laws prohibiting
+ or restricting circumvention of such\nmeasures.\n\n When you convey a covered
+ work, you waive any legal power to forbid\ncircumvention of technological measures
+ to the extent such circumvention\nis effected by exercising rights under this
+ License with respect to\nthe covered work, and you disclaim any intention to limit
+ operation or\nmodification of the work as a means of enforcing, against the work's\nusers,
+ your or third parties' legal rights to forbid circumvention of\ntechnological
+ measures.\n\n 4. Conveying Verbatim Copies.\n\n You may convey verbatim copies
+ of the Program's source code as you\nreceive it, in any medium, provided that
+ you conspicuously and\nappropriately publish on each copy an appropriate copyright
+ notice;\nkeep intact all notices stating that this License and any\nnon-permissive
+ terms added in accord with section 7 apply to the code;\nkeep intact all notices
+ of the absence of any warranty; and give all\nrecipients a copy of this License
+ along with the Program.\n\n You may charge any price or no price for each copy
+ that you convey,\nand you may offer support or warranty protection for a fee.\n\n
+ \ 5. Conveying Modified Source Versions.\n\n You may convey a work based on the
+ Program, or the modifications to\nproduce it from the Program, in the form of
+ source code under the\nterms of section 4, provided that you also meet all of
+ these conditions:\n\n a) The work must carry prominent notices stating that
+ you modified\n it, and giving a relevant date.\n\n b) The work must carry
+ prominent notices stating that it is\n released under this License and any
+ conditions added under section\n 7. This requirement modifies the requirement
+ in section 4 to\n \"keep intact all notices\".\n\n c) You must license the
+ entire work, as a whole, under this\n License to anyone who comes into possession
+ of a copy. This\n License will therefore apply, along with any applicable
+ section 7\n additional terms, to the whole of the work, and all its parts,\n
+ \ regardless of how they are packaged. This License gives no\n permission
+ to license the work in any other way, but it does not\n invalidate such permission
+ if you have separately received it.\n\n d) If the work has interactive user
+ interfaces, each must display\n Appropriate Legal Notices; however, if the
+ Program has interactive\n interfaces that do not display Appropriate Legal
+ Notices, your\n work need not make them do so.\n\n A compilation of a covered
+ work with other separate and independent\nworks, which are not by their nature
+ extensions of the covered work,\nand which are not combined with it such as to
+ form a larger program,\nin or on a volume of a storage or distribution medium,
+ is called an\n\"aggregate\" if the compilation and its resulting copyright are
+ not\nused to limit the access or legal rights of the compilation's users\nbeyond
+ what the individual works permit. Inclusion of a covered work\nin an aggregate
+ does not cause this License to apply to the other\nparts of the aggregate.\n\n
+ \ 6. Conveying Non-Source Forms.\n\n You may convey a covered work in object
+ code form under the terms\nof sections 4 and 5, provided that you also convey
+ the\nmachine-readable Corresponding Source under the terms of this License,\nin
+ one of these ways:\n\n a) Convey the object code in, or embodied in, a physical
+ product\n (including a physical distribution medium), accompanied by the\n
+ \ Corresponding Source fixed on a durable physical medium\n customarily used
+ for software interchange.\n\n b) Convey the object code in, or embodied in,
+ a physical product\n (including a physical distribution medium), accompanied
+ by a\n written offer, valid for at least three years and valid for as\n long
+ as you offer spare parts or customer support for that product\n model, to give
+ anyone who possesses the object code either (1) a\n copy of the Corresponding
+ Source for all the software in the\n product that is covered by this License,
+ on a durable physical\n medium customarily used for software interchange, for
+ a price no\n more than your reasonable cost of physically performing this\n
+ \ conveying of source, or (2) access to copy the\n Corresponding Source from
+ a network server at no charge.\n\n c) Convey individual copies of the object
+ code with a copy of the\n written offer to provide the Corresponding Source.
+ \ This\n alternative is allowed only occasionally and noncommercially, and\n
+ \ only if you received the object code with such an offer, in accord\n with
+ subsection 6b.\n\n d) Convey the object code by offering access from a designated\n
+ \ place (gratis or for a charge), and offer equivalent access to the\n Corresponding
+ Source in the same way through the same place at no\n further charge. You
+ need not require recipients to copy the\n Corresponding Source along with the
+ object code. If the place to\n copy the object code is a network server, the
+ Corresponding Source\n may be on a different server (operated by you or a third
+ party)\n that supports equivalent copying facilities, provided you maintain\n
+ \ clear directions next to the object code saying where to find the\n Corresponding
+ Source. Regardless of what server hosts the\n Corresponding Source, you remain
+ obligated to ensure that it is\n available for as long as needed to satisfy
+ these requirements.\n\n e) Convey the object code using peer-to-peer transmission,
+ provided\n you inform other peers where the object code and Corresponding\n
+ \ Source of the work are being offered to the general public at no\n charge
+ under subsection 6d.\n\n A separable portion of the object code, whose source
+ code is excluded\nfrom the Corresponding Source as a System Library, need not
+ be\nincluded in conveying the object code work.\n\n A \"User Product\" is either
+ (1) a \"consumer product\", which means any\ntangible personal property which
+ is normally used for personal, family,\nor household purposes, or (2) anything
+ designed or sold for incorporation\ninto a dwelling. In determining whether a
+ product is a consumer product,\ndoubtful cases shall be resolved in favor of coverage.
+ \ For a particular\nproduct received by a particular user, \"normally used\" refers
+ to a\ntypical or common use of that class of product, regardless of the status\nof
+ the particular user or of the way in which the particular user\nactually uses,
+ or expects or is expected to use, the product. A product\nis a consumer product
+ regardless of whether the product has substantial\ncommercial, industrial or non-consumer
+ uses, unless such uses represent\nthe only significant mode of use of the product.\n\n
+ \ \"Installation Information\" for a User Product means any methods,\nprocedures,
+ authorization keys, or other information required to install\nand execute modified
+ versions of a covered work in that User Product from\na modified version of its
+ Corresponding Source. The information must\nsuffice to ensure that the continued
+ functioning of the modified object\ncode is in no case prevented or interfered
+ with solely because\nmodification has been made.\n\n If you convey an object
+ code work under this section in, or with, or\nspecifically for use in, a User
+ Product, and the conveying occurs as\npart of a transaction in which the right
+ of possession and use of the\nUser Product is transferred to the recipient in
+ perpetuity or for a\nfixed term (regardless of how the transaction is characterized),
+ the\nCorresponding Source conveyed under this section must be accompanied\nby
+ the Installation Information. But this requirement does not apply\nif neither
+ you nor any third party retains the ability to install\nmodified object code on
+ the User Product (for example, the work has\nbeen installed in ROM).\n\n The
+ requirement to provide Installation Information does not include a\nrequirement
+ to continue to provide support service, warranty, or updates\nfor a work that
+ has been modified or installed by the recipient, or for\nthe User Product in which
+ it has been modified or installed. Access to a\nnetwork may be denied when the
+ modification itself materially and\nadversely affects the operation of the network
+ or violates the rules and\nprotocols for communication across the network.\n\n
+ \ Corresponding Source conveyed, and Installation Information provided,\nin accord
+ with this section must be in a format that is publicly\ndocumented (and with an
+ implementation available to the public in\nsource code form), and must require
+ no special password or key for\nunpacking, reading or copying.\n\n 7. Additional
+ Terms.\n\n \"Additional permissions\" are terms that supplement the terms of
+ this\nLicense by making exceptions from one or more of its conditions.\nAdditional
+ permissions that are applicable to the entire Program shall\nbe treated as though
+ they were included in this License, to the extent\nthat they are valid under applicable
+ law. If additional permissions\napply only to part of the Program, that part
+ may be used separately\nunder those permissions, but the entire Program remains
+ governed by\nthis License without regard to the additional permissions.\n\n When
+ you convey a copy of a covered work, you may at your option\nremove any additional
+ permissions from that copy, or from any part of\nit. (Additional permissions
+ may be written to require their own\nremoval in certain cases when you modify
+ the work.) You may place\nadditional permissions on material, added by you to
+ a covered work,\nfor which you have or can give appropriate copyright permission.\n\n
+ \ Notwithstanding any other provision of this License, for material you\nadd to
+ a covered work, you may (if authorized by the copyright holders of\nthat material)
+ supplement the terms of this License with terms:\n\n a) Disclaiming warranty
+ or limiting liability differently from the\n terms of sections 15 and 16 of
+ this License; or\n\n b) Requiring preservation of specified reasonable legal
+ notices or\n author attributions in that material or in the Appropriate Legal\n
+ \ Notices displayed by works containing it; or\n\n c) Prohibiting misrepresentation
+ of the origin of that material, or\n requiring that modified versions of such
+ material be marked in\n reasonable ways as different from the original version;
+ or\n\n d) Limiting the use for publicity purposes of names of licensors or\n
+ \ authors of the material; or\n\n e) Declining to grant rights under trademark
+ law for use of some\n trade names, trademarks, or service marks; or\n\n f)
+ Requiring indemnification of licensors and authors of that\n material by anyone
+ who conveys the material (or modified versions of\n it) with contractual assumptions
+ of liability to the recipient, for\n any liability that these contractual assumptions
+ directly impose on\n those licensors and authors.\n\n All other non-permissive
+ additional terms are considered \"further\nrestrictions\" within the meaning of
+ section 10. If the Program as you\nreceived it, or any part of it, contains a
+ notice stating that it is\ngoverned by this License along with a term that is
+ a further\nrestriction, you may remove that term. If a license document contains\na
+ further restriction but permits relicensing or conveying under this\nLicense,
+ you may add to a covered work material governed by the terms\nof that license
+ document, provided that the further restriction does\nnot survive such relicensing
+ or conveying.\n\n If you add terms to a covered work in accord with this section,
+ you\nmust place, in the relevant source files, a statement of the\nadditional
+ terms that apply to those files, or a notice indicating\nwhere to find the applicable
+ terms.\n\n Additional terms, permissive or non-permissive, may be stated in the\nform
+ of a separately written license, or stated as exceptions;\nthe above requirements
+ apply either way.\n\n 8. Termination.\n\n You may not propagate or modify a
+ covered work except as expressly\nprovided under this License. Any attempt otherwise
+ to propagate or\nmodify it is void, and will automatically terminate your rights
+ under\nthis License (including any patent licenses granted under the third\nparagraph
+ of section 11).\n\n However, if you cease all violation of this License, then
+ your\nlicense from a particular copyright holder is reinstated (a)\nprovisionally,
+ unless and until the copyright holder explicitly and\nfinally terminates your
+ license, and (b) permanently, if the copyright\nholder fails to notify you of
+ the violation by some reasonable means\nprior to 60 days after the cessation.\n\n
+ \ Moreover, your license from a particular copyright holder is\nreinstated permanently
+ if the copyright holder notifies you of the\nviolation by some reasonable means,
+ this is the first time you have\nreceived notice of violation of this License
+ (for any work) from that\ncopyright holder, and you cure the violation prior to
+ 30 days after\nyour receipt of the notice.\n\n Termination of your rights under
+ this section does not terminate the\nlicenses of parties who have received copies
+ or rights from you under\nthis License. If your rights have been terminated and
+ not permanently\nreinstated, you do not qualify to receive new licenses for the
+ same\nmaterial under section 10.\n\n 9. Acceptance Not Required for Having Copies.\n\n
+ \ You are not required to accept this License in order to receive or\nrun a copy
+ of the Program. Ancillary propagation of a covered work\noccurring solely as
+ a consequence of using peer-to-peer transmission\nto receive a copy likewise does
+ not require acceptance. However,\nnothing other than this License grants you
+ permission to propagate or\nmodify any covered work. These actions infringe copyright
+ if you do\nnot accept this License. Therefore, by modifying or propagating a\ncovered
+ work, you indicate your acceptance of this License to do so.\n\n 10. Automatic
+ Licensing of Downstream Recipients.\n\n Each time you convey a covered work,
+ the recipient automatically\nreceives a license from the original licensors, to
+ run, modify and\npropagate that work, subject to this License. You are not responsible\nfor
+ enforcing compliance by third parties with this License.\n\n An \"entity transaction\"
+ is a transaction transferring control of an\norganization, or substantially all
+ assets of one, or subdividing an\norganization, or merging organizations. If
+ propagation of a covered\nwork results from an entity transaction, each party
+ to that\ntransaction who receives a copy of the work also receives whatever\nlicenses
+ to the work the party's predecessor in interest had or could\ngive under the previous
+ paragraph, plus a right to possession of the\nCorresponding Source of the work
+ from the predecessor in interest, if\nthe predecessor has it or can get it with
+ reasonable efforts.\n\n You may not impose any further restrictions on the exercise
+ of the\nrights granted or affirmed under this License. For example, you may\nnot
+ impose a license fee, royalty, or other charge for exercise of\nrights granted
+ under this License, and you may not initiate litigation\n(including a cross-claim
+ or counterclaim in a lawsuit) alleging that\nany patent claim is infringed by
+ making, using, selling, offering for\nsale, or importing the Program or any portion
+ of it.\n\n 11. Patents.\n\n A \"contributor\" is a copyright holder who authorizes
+ use under this\nLicense of the Program or a work on which the Program is based.
+ \ The\nwork thus licensed is called the contributor's \"contributor version\".\n\n
+ \ A contributor's \"essential patent claims\" are all patent claims\nowned or
+ controlled by the contributor, whether already acquired or\nhereafter acquired,
+ that would be infringed by some manner, permitted\nby this License, of making,
+ using, or selling its contributor version,\nbut do not include claims that would
+ be infringed only as a\nconsequence of further modification of the contributor
+ version. For\npurposes of this definition, \"control\" includes the right to
+ grant\npatent sublicenses in a manner consistent with the requirements of\nthis
+ License.\n\n Each contributor grants you a non-exclusive, worldwide, royalty-free\npatent
+ license under the contributor's essential patent claims, to\nmake, use, sell,
+ offer for sale, import and otherwise run, modify and\npropagate the contents of
+ its contributor version.\n\n In the following three paragraphs, a \"patent license\"
+ is any express\nagreement or commitment, however denominated, not to enforce a
+ patent\n(such as an express permission to practice a patent or covenant not to\nsue
+ for patent infringement). To \"grant\" such a patent license to a\nparty means
+ to make such an agreement or commitment not to enforce a\npatent against the party.\n\n
+ \ If you convey a covered work, knowingly relying on a patent license,\nand the
+ Corresponding Source of the work is not available for anyone\nto copy, free of
+ charge and under the terms of this License, through a\npublicly available network
+ server or other readily accessible means,\nthen you must either (1) cause the
+ Corresponding Source to be so\navailable, or (2) arrange to deprive yourself of
+ the benefit of the\npatent license for this particular work, or (3) arrange, in
+ a manner\nconsistent with the requirements of this License, to extend the patent\nlicense
+ to downstream recipients. \"Knowingly relying\" means you have\nactual knowledge
+ that, but for the patent license, your conveying the\ncovered work in a country,
+ or your recipient's use of the covered work\nin a country, would infringe one
+ or more identifiable patents in that\ncountry that you have reason to believe
+ are valid.\n\n If, pursuant to or in connection with a single transaction or\narrangement,
+ you convey, or propagate by procuring conveyance of, a\ncovered work, and grant
+ a patent license to some of the parties\nreceiving the covered work authorizing
+ them to use, propagate, modify\nor convey a specific copy of the covered work,
+ then the patent license\nyou grant is automatically extended to all recipients
+ of the covered\nwork and works based on it.\n\n A patent license is \"discriminatory\"
+ if it does not include within\nthe scope of its coverage, prohibits the exercise
+ of, or is\nconditioned on the non-exercise of one or more of the rights that are\nspecifically
+ granted under this License. You may not convey a covered\nwork if you are a party
+ to an arrangement with a third party that is\nin the business of distributing
+ software, under which you make payment\nto the third party based on the extent
+ of your activity of conveying\nthe work, and under which the third party grants,
+ to any of the\nparties who would receive the covered work from you, a discriminatory\npatent
+ license (a) in connection with copies of the covered work\nconveyed by you (or
+ copies made from those copies), or (b) primarily\nfor and in connection with specific
+ products or compilations that\ncontain the covered work, unless you entered into
+ that arrangement,\nor that patent license was granted, prior to 28 March 2007.\n\n
+ \ Nothing in this License shall be construed as excluding or limiting\nany implied
+ license or other defenses to infringement that may\notherwise be available to
+ you under applicable patent law.\n\n 12. No Surrender of Others' Freedom.\n\n
+ \ If conditions are imposed on you (whether by court order, agreement or\notherwise)
+ that contradict the conditions of this License, they do not\nexcuse you from the
+ conditions of this License. If you cannot convey a\ncovered work so as to satisfy
+ simultaneously your obligations under this\nLicense and any other pertinent obligations,
+ then as a consequence you may\nnot convey it at all. For example, if you agree
+ to terms that obligate you\nto collect a royalty for further conveying from those
+ to whom you convey\nthe Program, the only way you could satisfy both those terms
+ and this\nLicense would be to refrain entirely from conveying the Program.\n\n
+ \ 13. Use with the GNU Affero General Public License.\n\n Notwithstanding any
+ other provision of this License, you have\npermission to link or combine any covered
+ work with a work licensed\nunder version 3 of the GNU Affero General Public License
+ into a single\ncombined work, and to convey the resulting work. The terms of
+ this\nLicense will continue to apply to the part which is the covered work,\nbut
+ the special requirements of the GNU Affero General Public License,\nsection 13,
+ concerning interaction through a network will apply to the\ncombination as such.\n\n
+ \ 14. Revised Versions of this License.\n\n The Free Software Foundation may
+ publish revised and/or new versions of\nthe GNU General Public License from time
+ to time. Such new versions will\nbe similar in spirit to the present version,
+ but may differ in detail to\naddress new problems or concerns.\n\n Each version
+ is given a distinguishing version number. If the\nProgram specifies that a certain
+ numbered version of the GNU General\nPublic License \"or any later version\" applies
+ to it, you have the\noption of following the terms and conditions either of that
+ numbered\nversion or of any later version published by the Free Software\nFoundation.
+ \ If the Program does not specify a version number of the\nGNU General Public
+ License, you may choose any version ever published\nby the Free Software Foundation.\n\n
+ \ If the Program specifies that a proxy can decide which future\nversions of the
+ GNU General Public License can be used, that proxy's\npublic statement of acceptance
+ of a version permanently authorizes you\nto choose that version for the Program.\n\n
+ \ Later license versions may give you additional or different\npermissions. However,
+ no additional obligations are imposed on any\nauthor or copyright holder as a
+ result of your choosing to follow a\nlater version.\n\n 15. Disclaimer of Warranty.\n\n
+ \ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY\nAPPLICABLE
+ LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT\nHOLDERS AND/OR OTHER
+ PARTIES PROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY\nOF ANY KIND, EITHER EXPRESSED
+ OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,\nTHE IMPLIED WARRANTIES OF MERCHANTABILITY
+ AND FITNESS FOR A PARTICULAR\nPURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND
+ PERFORMANCE OF THE PROGRAM\nIS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE,
+ YOU ASSUME THE COST OF\nALL NECESSARY SERVICING, REPAIR OR CORRECTION.\n\n 16.
+ Limitation of Liability.\n\n IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR
+ AGREED TO IN WRITING\nWILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES
+ AND/OR CONVEYS\nTHE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+ INCLUDING ANY\nGENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT
+ OF THE\nUSE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS
+ OF\nDATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD\nPARTIES
+ OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),\nEVEN IF SUCH
+ HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF\nSUCH DAMAGES.\n\n
+ \ 17. Interpretation of Sections 15 and 16.\n\n If the disclaimer of warranty
+ and limitation of liability provided\nabove cannot be given local legal effect
+ according to their terms,\nreviewing courts shall apply local law that most closely
+ approximates\nan absolute waiver of all civil liability in connection with the\nProgram,
+ unless a warranty or assumption of liability accompanies a\ncopy of the Program
+ in return for a fee.\n\n END OF TERMS AND CONDITIONS\n\n How
+ to Apply These Terms to Your New Programs\n\n If you develop a new program, and
+ you want it to be of the greatest\npossible use to the public, the best way to
+ achieve this is to make it\nfree software which everyone can redistribute and
+ change under these terms.\n\n To do so, attach the following notices to the program.
+ \ It is safest\nto attach them to the start of each source file to most effectively\nstate
+ the exclusion of warranty; and each file should have at least\nthe \"copyright\"
+ line and a pointer to where the full notice is found.\n\n \n Copyright (C)
+ \ \n\n This program is free software: you can redistribute
+ it and/or modify\n it under the terms of the GNU General Public License as
+ published by\n the Free Software Foundation, either version 3 of the License,
+ or\n (at your option) any later version.\n\n This program is distributed
+ in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even
+ the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ \ See the\n GNU General Public License for more details.\n\n You should
+ have received a copy of the GNU General Public License\n along with this program.
+ \ If not, see .\n\nAlso add information on how
+ to contact you by electronic and paper mail.\n\n If the program does terminal
+ interaction, make it output a short\nnotice like this when it starts in an interactive
+ mode:\n\n Copyright (C) \n This program
+ comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\n This is free
+ software, and you are welcome to redistribute it\n under certain conditions;
+ type `show c' for details.\n\nThe hypothetical commands `show w' and `show c'
+ should show the appropriate\nparts of the General Public License. Of course,
+ your program's commands\nmight be different; for a GUI interface, you would use
+ an \"about box\".\n\n You should also get your employer (if you work as a programmer)
+ or school,\nif any, to sign a \"copyright disclaimer\" for the program, if necessary.\nFor
+ more information on this, and how to apply and follow the GNU GPL, see\n.\n\n
+ \ The GNU General Public License does not permit incorporating your program\ninto
+ proprietary programs. If your program is a subroutine library, you\nmay consider
+ it more useful to permit linking proprietary applications with\nthe library. If
+ this is what you want to do, use the GNU Lesser General\nPublic License instead
+ of this License. But first, please read\n.\n"
+notices: []
diff --git a/.licenses/arduino-create-agent/go/github.com/arduino/arduino-cli/i18n.dep.yml b/.licenses/arduino-create-agent/go/github.com/arduino/pluggable-discovery-protocol-handler/v2.dep.yml
similarity index 96%
rename from .licenses/arduino-create-agent/go/github.com/arduino/arduino-cli/i18n.dep.yml
rename to .licenses/arduino-create-agent/go/github.com/arduino/pluggable-discovery-protocol-handler/v2.dep.yml
index 41a75b12e..2fdbca217 100644
--- a/.licenses/arduino-create-agent/go/github.com/arduino/arduino-cli/i18n.dep.yml
+++ b/.licenses/arduino-create-agent/go/github.com/arduino/pluggable-discovery-protocol-handler/v2.dep.yml
@@ -1,13 +1,28 @@
---
-name: github.com/arduino/arduino-cli/i18n
-version: v0.35.0
+name: github.com/arduino/pluggable-discovery-protocol-handler/v2
+version: v2.2.0
type: go
-summary:
-homepage: https://pkg.go.dev/github.com/arduino/arduino-cli/i18n
-license: gpl-3.0-only
+summary: Package discovery is a library for handling the Arduino Pluggable-Discovery
+ protocol (https://github.com/arduino/tooling-rfcs/blob/main/RFCs/0002-pluggable-discovery.md#pluggable-discovery-api-via-stdinstdout)
+homepage: https://pkg.go.dev/github.com/arduino/pluggable-discovery-protocol-handler/v2
+license: other
licenses:
-- sources: arduino-cli@v0.35.0/LICENSE.txt
- text: |2
+- sources: LICENSE.txt
+ text: |
+ This file includes licensing information for serial-discovery
+
+ Copyright (c) 2018 ARDUINO SA (www.arduino.cc)
+
+ The software is released under the GNU General Public License, which covers the main body
+ of the serial-discovery code. The terms of this license can be found at:
+ https://www.gnu.org/licenses/gpl-3.0.en.html
+
+ You can be released from the requirements of the above licenses by purchasing
+ a commercial license. Buying such a license is mandatory if you want to modify or
+ otherwise use the software for commercial activities involving the Arduino
+ software without disclosing the source code of your own applications. To purchase
+ a commercial license, send an email to license@arduino.cc
+
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
@@ -682,20 +697,13 @@ licenses:
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
.
-- sources: arduino-cli@v0.35.0/license_header.tpl
- text: |
- This file is part of arduino-cli.
+- sources: README.md
+ text: |-
+ Copyright (c) 2021 ARDUINO SA (www.arduino.cc)
- Copyright{{ if .Year }} {{.Year}}{{ end }} {{.Holder}}
-
- This software is released under the GNU General Public License version 3,
- which covers the main part of arduino-cli.
- The terms of this license can be found at:
+ The software is released under the GNU General Public License, which covers the main body
+ of the serial-discovery code. The terms of this license can be found at:
https://www.gnu.org/licenses/gpl-3.0.en.html
- You can be released from the requirements of the above licenses by purchasing
- a commercial license. Buying such a license is mandatory if you want to
- modify or otherwise use the software for commercial activities involving the
- Arduino software without disclosing the source code of your own applications.
- To purchase a commercial license, send an email to license@arduino.cc.
+ See [LICENSE.txt](https://github.com/arduino/pluggable-discovery-protocol-handler/blob/master/LICENSE.txt) for details.
notices: []
diff --git a/.licenses/arduino-create-agent/go/github.com/leonelquinteros/gotext.dep.yml b/.licenses/arduino-create-agent/go/github.com/leonelquinteros/gotext.dep.yml
deleted file mode 100644
index 9f13e6e9a..000000000
--- a/.licenses/arduino-create-agent/go/github.com/leonelquinteros/gotext.dep.yml
+++ /dev/null
@@ -1,34 +0,0 @@
----
-name: github.com/leonelquinteros/gotext
-version: v1.4.0
-type: go
-summary: Package gotext implements GNU gettext utilities.
-homepage: https://pkg.go.dev/github.com/leonelquinteros/gotext
-license: mit
-licenses:
-- sources: LICENSE
- text: |
- The MIT License (MIT)
-
- Copyright (c) 2016 Leonel Quinteros
-
- 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.
-- sources: README.md
- text: "[MIT license](LICENSE)"
-notices: []
diff --git a/.licenses/arduino-create-agent/go/github.com/leonelquinteros/gotext/plurals.dep.yml b/.licenses/arduino-create-agent/go/github.com/leonelquinteros/gotext/plurals.dep.yml
deleted file mode 100644
index e80ad4e09..000000000
--- a/.licenses/arduino-create-agent/go/github.com/leonelquinteros/gotext/plurals.dep.yml
+++ /dev/null
@@ -1,35 +0,0 @@
----
-name: github.com/leonelquinteros/gotext/plurals
-version: v1.4.0
-type: go
-summary: Package plurals is the pluralform compiler to get the correct translation
- id of the plural string
-homepage: https://pkg.go.dev/github.com/leonelquinteros/gotext/plurals
-license: mit
-licenses:
-- sources: gotext@v1.4.0/LICENSE
- text: |
- The MIT License (MIT)
-
- Copyright (c) 2016 Leonel Quinteros
-
- 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.
-- sources: gotext@v1.4.0/README.md
- text: "[MIT license](LICENSE)"
-notices: []
diff --git a/conn.go b/conn.go
index 90b24be84..02b13ba8d 100644
--- a/conn.go
+++ b/conn.go
@@ -161,7 +161,7 @@ func uploadHandler(c *gin.Context) {
go func() {
// Resolve commandline
- commandline, err := upload.PartiallyResolve(data.Board, filePath, tmpdir, data.Commandline, data.Extra, &Tools)
+ commandline, err := upload.PartiallyResolve(data.Board, filePath, tmpdir, data.Commandline, data.Extra, Tools)
if err != nil {
send(map[string]string{uploadStatusStr: "Error", "Msg": err.Error()})
return
diff --git a/go.mod b/go.mod
index a142c60fd..730f97a28 100644
--- a/go.mod
+++ b/go.mod
@@ -5,8 +5,9 @@ go 1.21
require (
fyne.io/systray v1.10.0
github.com/ProtonMail/go-crypto v1.1.0-alpha.0
- github.com/arduino/arduino-cli v0.35.0
github.com/arduino/go-paths-helper v1.12.0
+ github.com/arduino/go-serial-utils v0.1.2
+ github.com/arduino/pluggable-discovery-protocol-handler/v2 v2.2.0
github.com/blang/semver v3.5.1+incompatible
github.com/codeclysm/extract/v3 v3.1.1
github.com/gin-contrib/cors v1.5.0
@@ -28,6 +29,7 @@ require (
require (
github.com/AnatolyRugalev/goregen v0.1.0 // indirect
+ github.com/arduino/go-properties-orderedmap v1.8.0 // indirect
github.com/bytedance/sonic v1.10.1 // indirect
github.com/chenzhuoyu/base64x v0.0.0-20230717121745-296ad89f973d // indirect
github.com/chenzhuoyu/iasm v0.9.0 // indirect
@@ -56,13 +58,13 @@ require (
github.com/kr/binarydist v0.1.0 // indirect
github.com/kr/pretty v0.3.1 // indirect
github.com/leodido/go-urn v1.2.4 // indirect
- github.com/leonelquinteros/gotext v1.4.0 // indirect
github.com/manveru/faker v0.0.0-20171103152722-9fbc68a78c4d // indirect
github.com/mattn/go-isatty v0.0.20 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/pelletier/go-toml/v2 v2.1.0 // indirect
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
+ github.com/rogpeppe/go-internal v1.12.0 // indirect
github.com/sergi/go-diff v1.3.1 // indirect
github.com/smartystreets/goconvey v1.6.4 // indirect
github.com/tevino/abool v1.2.0 // indirect
@@ -76,5 +78,6 @@ require (
golang.org/x/text v0.14.0 // indirect
golang.org/x/tools v0.17.0 // indirect
google.golang.org/protobuf v1.32.0 // indirect
+ gopkg.in/ini.v1 v1.67.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
diff --git a/go.sum b/go.sum
index 9df4e0c7e..aaaeb6b14 100644
--- a/go.sum
+++ b/go.sum
@@ -4,10 +4,15 @@ github.com/AnatolyRugalev/goregen v0.1.0 h1:xrdXkLaskMnbxW0x4FWNj2yoednv0X2bcTBW
github.com/AnatolyRugalev/goregen v0.1.0/go.mod h1:sVlY1tjcirqLBRZnCcIq1+7/Lwmqz5g7IK8AStjOVzI=
github.com/ProtonMail/go-crypto v1.1.0-alpha.0 h1:nHGfwXmFvJrSR9xu8qL7BkO4DqTHXE9N5vPhgY2I+j0=
github.com/ProtonMail/go-crypto v1.1.0-alpha.0/go.mod h1:rA3QumHc/FZ8pAHreoekgiAbzpNsfQAosU5td4SnOrE=
-github.com/arduino/arduino-cli v0.35.0 h1:tkSpGun1hMgJPkvZJjofejWD+ivhCpvsl49H4n81iSc=
-github.com/arduino/arduino-cli v0.35.0/go.mod h1:9aoXZdVGQ9uwf2M1nCSB+T051KbldslMFiJaHVycVsg=
+github.com/arduino/go-paths-helper v1.0.1/go.mod h1:HpxtKph+g238EJHq4geEPv9p+gl3v5YYu35Yb+w31Ck=
github.com/arduino/go-paths-helper v1.12.0 h1:xizOQtI9iHdl19qXd1EmWg5i9W//2bOCOYwlNv8F61E=
github.com/arduino/go-paths-helper v1.12.0/go.mod h1:jcpW4wr0u69GlXhTYydsdsqAjLaYK5n7oWHfKqOG6LM=
+github.com/arduino/go-properties-orderedmap v1.8.0 h1:wEfa6hHdpezrVOh787OmClsf/Kd8qB+zE3P2Xbrn0CQ=
+github.com/arduino/go-properties-orderedmap v1.8.0/go.mod h1:DKjD2VXY/NZmlingh4lSFMEYCVubfeArCsGPGDwb2yk=
+github.com/arduino/go-serial-utils v0.1.2 h1:MRFwME4w/uaVkJ1R+wzz4KSbI9cF9IDVrYorazvjpTk=
+github.com/arduino/go-serial-utils v0.1.2/go.mod h1:kzIsNPgz8DFAd1sAFKve4ubxrdGcwQ4XzvRLlztsgnE=
+github.com/arduino/pluggable-discovery-protocol-handler/v2 v2.2.0 h1:v7og6LpskewFabmaShKVzWXl5MXbmsxaRP3yo4dJta8=
+github.com/arduino/pluggable-discovery-protocol-handler/v2 v2.2.0/go.mod h1:1dgblsmK2iBx3L5iNTyRIokeaxbTLUrYiUbHBK6yC3Y=
github.com/blang/semver v3.5.1+incompatible h1:cQNTCjp13qL8KC3Nbxr/y2Bqb63oX6wdnnjpJbkM4JQ=
github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk=
github.com/bytedance/sonic v1.5.0/go.mod h1:ED5hyg4y6t3/9Ku1R6dU/4KyJ48DZ4jPhfY1O2AihPM=
@@ -97,8 +102,6 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/leodido/go-urn v1.2.4 h1:XlAE/cm/ms7TE/VMVoduSpNBoyc2dOxHs5MZSwAN63Q=
github.com/leodido/go-urn v1.2.4/go.mod h1:7ZrI8mTSeBSHl/UaRyKQW1qZeMgak41ANeCNaVckg+4=
-github.com/leonelquinteros/gotext v1.4.0 h1:2NHPCto5IoMXbrT0bldPrxj0qM5asOCwtb1aUQZ1tys=
-github.com/leonelquinteros/gotext v1.4.0/go.mod h1:yZGXREmoGTtBvZHNcc+Yfug49G/2spuF/i/Qlsvz1Us=
github.com/manveru/faker v0.0.0-20171103152722-9fbc68a78c4d h1:Zj+PHjnhRYWBK6RqCDBcAhLXoi3TzC27Zad/Vn+gnVQ=
github.com/manveru/faker v0.0.0-20171103152722-9fbc68a78c4d/go.mod h1:WZy8Q5coAB1zhY9AOBJP0O6J4BuDfbupUDavKY+I3+s=
github.com/manveru/gobdd v0.0.0-20131210092515-f1a17fdd710b h1:3E44bLeN8uKYdfQqVQycPnaVviZdBLbizFhU49mtbe4=
@@ -123,8 +126,8 @@ github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZN
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs=
-github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M=
-github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA=
+github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8=
+github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4=
github.com/sergi/go-diff v1.3.1 h1:xkr+Oxo4BOQKmkn/B9eMK0g5Kg/983T9DqqPHwYqD+8=
github.com/sergi/go-diff v1.3.1/go.mod h1:aMJSSKb2lpPvRNec0+w3fl7LP9IOFzdc9Pa4NFbPK1I=
github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ=
diff --git a/hub.go b/hub.go
index a4f966fbc..a162dd01a 100755
--- a/hub.go
+++ b/hub.go
@@ -177,7 +177,7 @@ func checkCmd(m []byte) {
// will catch send and sendnobuf and sendraw
go spWrite(s)
} else if strings.HasPrefix(sl, "list") {
- go spList()
+ go serialPorts.List()
} else if strings.HasPrefix(sl, "downloadtool") {
go func() {
args := strings.Split(s, " ")
diff --git a/main.go b/main.go
index 2a4df151f..65b8219ad 100755
--- a/main.go
+++ b/main.go
@@ -26,6 +26,7 @@ import (
"io"
"os"
"os/exec"
+ "regexp"
"runtime"
"runtime/debug"
"strconv"
@@ -69,24 +70,27 @@ var (
// iniflags
var (
- address = iniConf.String("address", "127.0.0.1", "The address where to listen. Defaults to localhost")
- appName = iniConf.String("appName", "", "")
- gcType = iniConf.String("gc", "std", "Type of garbage collection. std = Normal garbage collection allowing system to decide (this has been known to cause a stop the world in the middle of a CNC job which can cause lost responses from the CNC controller and thus stalled jobs. use max instead to solve.), off = let memory grow unbounded (you have to send in the gc command manually to garbage collect or you will run out of RAM eventually), max = Force garbage collection on each recv or send on a serial port (this minimizes stop the world events and thus lost serial responses, but increases CPU usage)")
- hostname = iniConf.String("hostname", "unknown-hostname", "Override the hostname we get from the OS")
- httpProxy = iniConf.String("httpProxy", "", "Proxy server for HTTP requests")
- httpsProxy = iniConf.String("httpsProxy", "", "Proxy server for HTTPS requests")
- indexURL = iniConf.String("indexURL", "https://downloads.arduino.cc/packages/package_index.json", "The address from where to download the index json containing the location of upload tools")
- iniConf = flag.NewFlagSet("ini", flag.ContinueOnError)
- logDump = iniConf.String("log", "off", "off = (default)")
- origins = iniConf.String("origins", "", "Allowed origin list for CORS")
- regExpFilter = iniConf.String("regex", "usb|acm|com", "Regular expression to filter serial port list")
- signatureKey = iniConf.String("signatureKey", globals.SignatureKey, "Pem-encoded public key to verify signed commandlines")
- updateURL = iniConf.String("updateUrl", "", "")
- verbose = iniConf.Bool("v", true, "show debug logging")
- crashreport = iniConf.Bool("crashreport", false, "enable crashreport logging")
- autostartMacOS = iniConf.Bool("autostartMacOS", true, "the Arduino Create Agent is able to start automatically after login on macOS (launchd agent)")
+ address = iniConf.String("address", "127.0.0.1", "The address where to listen. Defaults to localhost")
+ appName = iniConf.String("appName", "", "")
+ gcType = iniConf.String("gc", "std", "Type of garbage collection. std = Normal garbage collection allowing system to decide (this has been known to cause a stop the world in the middle of a CNC job which can cause lost responses from the CNC controller and thus stalled jobs. use max instead to solve.), off = let memory grow unbounded (you have to send in the gc command manually to garbage collect or you will run out of RAM eventually), max = Force garbage collection on each recv or send on a serial port (this minimizes stop the world events and thus lost serial responses, but increases CPU usage)")
+ hostname = iniConf.String("hostname", "unknown-hostname", "Override the hostname we get from the OS")
+ httpProxy = iniConf.String("httpProxy", "", "Proxy server for HTTP requests")
+ httpsProxy = iniConf.String("httpsProxy", "", "Proxy server for HTTPS requests")
+ indexURL = iniConf.String("indexURL", "https://downloads.arduino.cc/packages/package_index.json", "The address from where to download the index json containing the location of upload tools")
+ iniConf = flag.NewFlagSet("ini", flag.ContinueOnError)
+ logDump = iniConf.String("log", "off", "off = (default)")
+ origins = iniConf.String("origins", "", "Allowed origin list for CORS")
+ portsFilterRegexp = iniConf.String("regex", "usb|acm|com", "Regular expression to filter serial port list")
+ signatureKey = iniConf.String("signatureKey", globals.SignatureKey, "Pem-encoded public key to verify signed commandlines")
+ updateURL = iniConf.String("updateUrl", "", "")
+ verbose = iniConf.Bool("v", true, "show debug logging")
+ crashreport = iniConf.Bool("crashreport", false, "enable crashreport logging")
+ autostartMacOS = iniConf.Bool("autostartMacOS", true, "the Arduino Create Agent is able to start automatically after login on macOS (launchd agent)")
)
+// the ports filter provided by the user via the -regex flag, if any
+var portsFilter *regexp.Regexp
+
var homeTemplate = template.Must(template.New("home").Parse(homeTemplateHTML))
// If you navigate to this server's homepage, you'll get this HTML
@@ -97,7 +101,7 @@ var homeTemplateHTML string
// global clients
var (
- Tools tools.Tools
+ Tools *tools.Tools
Systray systray.Systray
Index *index.Resource
)
@@ -247,7 +251,7 @@ func loop() {
// Instantiate Index and Tools
Index = index.Init(*indexURL, config.GetDataDir())
- Tools = *tools.New(config.GetDataDir(), Index, logger)
+ Tools = tools.New(config.GetDataDir(), Index, logger)
// see if we are supposed to wait 5 seconds
if *isLaunchSelf {
@@ -302,19 +306,13 @@ func loop() {
}
// see if they provided a regex filter
- if len(*regExpFilter) > 0 {
- log.Printf("You specified a serial port regular expression filter: %v\n", *regExpFilter)
- }
-
- // list serial ports
- portList, _ := enumerateSerialPorts()
- log.Println("Your serial ports:")
- if len(portList) == 0 {
- log.Println("\tThere are no serial ports to list.")
- }
- for _, element := range portList {
- log.Printf("\t%v\n", element)
-
+ if len(*portsFilterRegexp) > 0 {
+ log.Printf("You specified a serial port regular expression filter: %v\n", *portsFilterRegexp)
+ if filter, err := regexp.Compile("(?i)" + *portsFilterRegexp); err != nil {
+ log.Panicf("Error compiling the regex filter: %v\n", err)
+ } else {
+ portsFilter = filter
+ }
}
if !*verbose {
@@ -344,6 +342,8 @@ func loop() {
}
}
+ // launch the discoveries for the running system
+ go serialPorts.Run()
// launch the hub routine which is the singleton for the websocket server
go h.run()
// launch our serial port routine
@@ -351,8 +351,6 @@ func loop() {
// launch our dummy data routine
//go d.run()
- go discoverLoop()
-
r := gin.New()
socketHandler := wsHandler().ServeHTTP
diff --git a/serial.go b/serial.go
index 86124faf3..393f77658 100755
--- a/serial.go
+++ b/serial.go
@@ -19,12 +19,14 @@ package main
import (
"encoding/json"
+ "slices"
"strconv"
"strings"
"sync"
"time"
- "github.com/arduino/arduino-create-agent/upload"
+ discovery "github.com/arduino/pluggable-discovery-protocol-handler/v2"
+ "github.com/sirupsen/logrus"
)
type writeRequest struct {
@@ -49,10 +51,10 @@ type serialhub struct {
mu sync.Mutex
}
-// SpPortList is the serial port list
-type SpPortList struct {
- Ports []SpPortItem
- Mu sync.Mutex `json:"-"`
+// SerialPortList is the serial port list
+type SerialPortList struct {
+ Ports []*SpPortItem
+ portsLock sync.Mutex
}
// SpPortItem is the serial port item
@@ -70,7 +72,7 @@ type SpPortItem struct {
}
// serialPorts contains the ports attached to the machine
-var serialPorts SpPortList
+var serialPorts SerialPortList
var sh = serialhub{
//write: make(chan *serport, chan []byte),
@@ -103,30 +105,39 @@ func (sh *serialhub) run() {
sh.mu.Unlock()
case wr := <-sh.write:
// if user sent in the commands as one text mode line
- write(wr)
+ switch wr.buffer {
+ case "send":
+ wr.p.sendBuffered <- wr.d
+ case "sendnobuf":
+ wr.p.sendNoBuf <- []byte(wr.d)
+ case "sendraw":
+ wr.p.sendRaw <- wr.d
+ }
+ // no default since we alredy verified in spWrite()
}
}
}
-func write(wr writeRequest) {
- switch wr.buffer {
- case "send":
- wr.p.sendBuffered <- wr.d
- case "sendnobuf":
- wr.p.sendNoBuf <- []byte(wr.d)
- case "sendraw":
- wr.p.sendRaw <- wr.d
+func (sh *serialhub) FindPortByName(portname string) (*serport, bool) {
+ sh.mu.Lock()
+ defer sh.mu.Unlock()
+
+ for port := range sh.ports {
+ if strings.EqualFold(port.portConf.Name, portname) {
+ // we found our port
+ //spHandlerClose(port)
+ return port, true
+ }
}
- // no default since we alredy verified in spWrite()
+ return nil, false
}
-// spList broadcasts a Json representation of the ports found
-func spList() {
- var ls []byte
- var err error
- serialPorts.Mu.Lock()
- ls, err = json.MarshalIndent(&serialPorts, "", "\t")
- serialPorts.Mu.Unlock()
+// List broadcasts a Json representation of the ports found
+func (sp *SerialPortList) List() {
+ sp.portsLock.Lock()
+ ls, err := json.MarshalIndent(sp, "", "\t")
+ sp.portsLock.Unlock()
+
if err != nil {
//log.Println(err)
h.broadcastSys <- []byte("Error creating json on port list " +
@@ -136,72 +147,118 @@ func spList() {
}
}
-// discoverLoop periodically update the list of ports found
-func discoverLoop() {
- serialPorts.Mu.Lock()
- serialPorts.Ports = make([]SpPortItem, 0)
- serialPorts.Mu.Unlock()
+// Run is the main loop for port discovery and management
+func (sp *SerialPortList) Run() {
+ for retries := 0; retries < 10; retries++ {
+ sp.runSerialDiscovery()
- go func() {
- for {
- if !upload.Busy {
- updateSerialPortList()
- }
- time.Sleep(2 * time.Second)
- }
- }()
+ logrus.Errorf("Serial discovery stopped working, restarting it in 10 seconds...")
+ time.Sleep(10 * time.Second)
+ }
+ logrus.Errorf("Failed restarting serial discovery. Giving up...")
}
-var serialEnumeratorLock sync.Mutex
-
-func updateSerialPortList() {
- if !serialEnumeratorLock.TryLock() {
- return
+func (sp *SerialPortList) runSerialDiscovery() {
+ // First ensure that all the discoveries are available
+ if err := Tools.Download("builtin", "serial-discovery", "latest", "keep"); err != nil {
+ logrus.Errorf("Error downloading serial-discovery: %s", err)
+ panic(err)
}
- defer serialEnumeratorLock.Unlock()
- ports, err := enumerateSerialPorts()
+ sd, err := Tools.GetLocation("serial-discovery")
if err != nil {
- // TODO: report error?
+ logrus.Errorf("Error downloading serial-discovery: %s", err)
+ panic(err)
+ }
+ d := discovery.NewClient("serial", sd+"/serial-discovery")
+ dLogger := logrus.WithField("discovery", "serial")
+ if *verbose {
+ d.SetLogger(dLogger)
+ }
+ d.SetUserAgent("arduino-create-agent/" + version)
+ if err := d.Run(); err != nil {
+ logrus.Errorf("Error running serial-discovery: %s", err)
+ panic(err)
+ }
+ defer d.Quit()
- // Empty port list if they can not be detected
- ports = []OsSerialPort{}
+ events, err := d.StartSync(10)
+ if err != nil {
+ logrus.Errorf("Error starting event watcher on serial-discovery: %s", err)
+ panic(err)
}
- list := spListDual(ports)
- serialPorts.Mu.Lock()
- serialPorts.Ports = list
- serialPorts.Mu.Unlock()
-}
-func spListDual(list []OsSerialPort) []SpPortItem {
- // we have a full clean list of ports now. iterate thru them
- // to append the open/close state, baud rates, etc to make
- // a super clean nice list to send back to browser
- spl := []SpPortItem{}
-
- for _, item := range list {
- port := SpPortItem{
- Name: item.Name,
- SerialNumber: item.ISerial,
- DeviceClass: item.DeviceClass,
- IsOpen: false,
- IsPrimary: false,
- Baud: 0,
- BufferAlgorithm: "",
- Ver: version,
- VendorID: item.IDVendor,
- ProductID: item.IDProduct,
+ logrus.Infof("Serial discovery started, watching for events")
+ for ev := range events {
+ logrus.WithField("event", ev).Debugf("Serial discovery event")
+ switch ev.Type {
+ case "add":
+ sp.add(ev.Port)
+ case "remove":
+ sp.remove(ev.Port)
}
+ }
+
+ sp.reset()
+ logrus.Errorf("Serial discovery stopped.")
+}
+
+func (sp *SerialPortList) reset() {
+ sp.portsLock.Lock()
+ defer sp.portsLock.Unlock()
+ sp.Ports = []*SpPortItem{}
+}
+
+func (sp *SerialPortList) add(addedPort *discovery.Port) {
+ if addedPort.Protocol != "serial" {
+ return
+ }
+ props := addedPort.Properties
+ if !props.ContainsKey("vid") {
+ return
+ }
+ vid, pid := props.Get("vid"), props.Get("pid")
+ if vid == "0x0000" || pid == "0x0000" {
+ return
+ }
+ if portsFilter != nil && !portsFilter.MatchString(addedPort.Address) {
+ logrus.Debugf("ignoring port not matching filter. port: %v\n", addedPort.Address)
+ return
+ }
- // figure out if port is open
- if myport, isFound := findPortByName(item.Name); isFound {
- // and update data with the open port parameters
- port.IsOpen = true
- port.Baud = myport.portConf.Baud
- port.BufferAlgorithm = myport.BufferType
+ sp.portsLock.Lock()
+ defer sp.portsLock.Unlock()
+
+ // If the port is already in the list, just update the metadata...
+ for _, oldPort := range sp.Ports {
+ if oldPort.Name == addedPort.Address {
+ oldPort.SerialNumber = props.Get("serialNumber")
+ oldPort.VendorID = vid
+ oldPort.ProductID = pid
+ return
}
- spl = append(spl, port)
}
- return spl
+ // ...otherwise, add it to the list
+ sp.Ports = append(sp.Ports, &SpPortItem{
+ Name: addedPort.Address,
+ SerialNumber: props.Get("serialNumber"),
+ VendorID: vid,
+ ProductID: pid,
+ Ver: version,
+ IsOpen: false,
+ IsPrimary: false,
+ Baud: 0,
+ BufferAlgorithm: "",
+ })
+}
+
+func (sp *SerialPortList) remove(removedPort *discovery.Port) {
+ sp.portsLock.Lock()
+ defer sp.portsLock.Unlock()
+
+ // Remove the port from the list
+ sp.Ports = slices.DeleteFunc(sp.Ports, func(oldPort *SpPortItem) bool {
+ return oldPort.Name == removedPort.Address
+ })
}
func spErr(err string) {
@@ -216,7 +273,7 @@ func spClose(portname string) {
// that should cause an unregister channel call back
// to myself
- myport, isFound := findPortByName(portname)
+ myport, isFound := sh.FindPortByName(portname)
if isFound {
// we found our port
@@ -244,7 +301,7 @@ func spWrite(arg string) {
//log.Println("The data is:" + args[2] + "---")
// see if we have this port open
- myport, isFound := findPortByName(portname)
+ myport, isFound := sh.FindPortByName(portname)
if !isFound {
// we couldn't find the port, so send err
diff --git a/seriallist.go b/seriallist.go
deleted file mode 100755
index fd1046185..000000000
--- a/seriallist.go
+++ /dev/null
@@ -1,94 +0,0 @@
-// Copyright 2022 Arduino SA
-//
-// This program is free software: you can redistribute it and/or modify
-// it under the terms of the GNU Affero 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 Affero General Public License for more details.
-//
-// You should have received a copy of the GNU Affero General Public License
-// along with this program. If not, see .
-
-// Supports Windows, Linux, Mac, and Raspberry Pi
-
-package main
-
-import (
- "fmt"
- "regexp"
- "strings"
-
- log "github.com/sirupsen/logrus"
- "go.bug.st/serial/enumerator"
-)
-
-// OsSerialPort is the Os serial port
-type OsSerialPort struct {
- Name string
- DeviceClass string
- Manufacturer string
- Product string
- IDProduct string
- IDVendor string
- ISerial string
-}
-
-// enumerateSerialPorts will return the OS serial port
-func enumerateSerialPorts() ([]OsSerialPort, error) {
- // will timeout in 2 seconds
- arrPorts := []OsSerialPort{}
- ports, err := enumerator.GetDetailedPortsList()
- if err != nil {
- return arrPorts, err
- }
-
- for _, element := range ports {
- if element.IsUSB {
- vid := element.VID
- pid := element.PID
- vidString := fmt.Sprintf("0x%s", vid)
- pidString := fmt.Sprintf("0x%s", pid)
- if vid != "0000" && pid != "0000" {
- arrPorts = append(arrPorts, OsSerialPort{Name: element.Name, IDVendor: vidString, IDProduct: pidString, ISerial: element.SerialNumber})
- }
- }
- }
-
- // see if we should filter the list
- if len(*regExpFilter) > 0 {
- // yes, user asked for a filter
- reFilter := regexp.MustCompile("(?i)" + *regExpFilter)
-
- newarrPorts := []OsSerialPort{}
- for _, element := range arrPorts {
- // if matches regex, include
- if reFilter.MatchString(element.Name) {
- newarrPorts = append(newarrPorts, element)
- } else {
- log.Debugf("serial port did not match. port: %v\n", element)
- }
-
- }
- arrPorts = newarrPorts
- }
-
- return arrPorts, err
-}
-
-func findPortByName(portname string) (*serport, bool) {
- portnamel := strings.ToLower(portname)
- sh.mu.Lock()
- defer sh.mu.Unlock()
- for port := range sh.ports {
- if strings.ToLower(port.portConf.Name) == portnamel {
- // we found our port
- //spHandlerClose(port)
- return port, true
- }
- }
- return nil, false
-}
diff --git a/serialport.go b/serialport.go
index 104311faf..09fd2cda1 100755
--- a/serialport.go
+++ b/serialport.go
@@ -232,8 +232,7 @@ func (p *serport) writerNoBuf() {
log.Println(msgstr)
h.broadcastSys <- []byte(msgstr)
p.portIo.Close()
- updateSerialPortList()
- spList()
+ serialPorts.List()
}
// this method runs as its own thread because it's instantiated
@@ -327,8 +326,7 @@ func spHandlerOpen(portname string, baud int, buftype string) {
sh.register <- p
defer func() { sh.unregister <- p }()
- updateSerialPortList()
- spList()
+ serialPorts.List()
// this is internally buffered thread to not send to serial port if blocked
go p.writerBuffered()
@@ -339,8 +337,7 @@ func spHandlerOpen(portname string, baud int, buftype string) {
p.reader(buftype)
- updateSerialPortList()
- spList()
+ serialPorts.List()
}
func spHandlerClose(p *serport) {
@@ -352,6 +349,5 @@ func spHandlerClose(p *serport) {
func spCloseReal(p *serport) {
p.bufferwatcher.Close()
p.portIo.Close()
- updateSerialPortList()
- spList()
+ serialPorts.List()
}
diff --git a/upload/upload.go b/upload/upload.go
index 6e899c817..613d72957 100644
--- a/upload/upload.go
+++ b/upload/upload.go
@@ -23,16 +23,13 @@ import (
"runtime"
"strings"
- "github.com/arduino/arduino-cli/arduino/serialutils"
"github.com/arduino/arduino-create-agent/utilities"
+ serialutils "github.com/arduino/go-serial-utils"
shellwords "github.com/mattn/go-shellwords"
"github.com/pkg/errors"
"go.bug.st/serial/enumerator"
)
-// Busy tells wether the programmer is doing something
-var Busy = false
-
// Extra contains some options used during the upload
type Extra struct {
Use1200bpsTouch bool `json:"use_1200bps_touch"`
@@ -49,7 +46,7 @@ func PartiallyResolve(board, file, platformPath, commandline string, extra Extra
commandline = strings.Replace(commandline, "{fqbn}", board, -1)
// search for runtime variables and replace with values from Locater
- var runtimeRe = regexp.MustCompile("\\{(.*?)\\}")
+ var runtimeRe = regexp.MustCompile(`\{(.*?)\}`)
runtimeVars := runtimeRe.FindAllString(commandline, -1)
for _, element := range runtimeVars {
@@ -82,9 +79,6 @@ func fixupPort(port, commandline string) string {
// Serial performs a serial upload
func Serial(port, commandline string, extra Extra, l Logger) error {
- Busy = true
- defer func() { Busy = false }()
-
// some boards needs to be resetted
if extra.Use1200bpsTouch {
var err error
@@ -120,7 +114,7 @@ func Kill() {
// sometimes) and an error (usually because the port listing failed)
func reset(port string, wait bool, l Logger) (string, error) {
info(l, "Restarting in bootloader mode")
- newPort, err := serialutils.Reset(port, wait, nil, false) // TODO use callbacks to print as the cli does
+ newPort, err := serialutils.Reset(port, wait, false, nil, nil) // TODO use callbacks to print reset progress
if err != nil {
info(l, err)
return "", err